oracle - oracle控制文件和undo数据库文件被删除了,有没有办法找回来?
问题描述
重新创建控制文件,这是代码
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG
MAXLOGFILES 5
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 226
LOGFILE
GROUP 1 '/home/oracle/app/oradata/orcl/redo01.log' SIZE 50M,
GROUP 2 '/home/oracle/app/oradata/orcl/redo02.log' SIZE 50M,
GROUP 3 '/home/oracle/app/oradata/orcl/redo03.log' SIZE 50M
DATAFILE
'/home/oracle/app/oradata/orcl/osc_zb.dbf',
......
CHARACTER SET ZHS16GBK;
然后打开数据库,结果如下:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/home/oracle/app/oradata/orcl/system01.dbf'
恢复数据文件 1:
ORA-00283: recovery session canceled due to errors
ORA-16433: The database must be opened in read/write mode.
然后,使用隐藏参数启动数据库。
undo_management='manual'
undo_tablespace='UNDOTBS01'
_allow_resetlogs_corruption=true
也不起作用:
SQL> startup pfile=/home/oracle/initoracle.ora
ORACLE instance started.
Total System Global Area 1586708480 bytes
Fixed Size 2253624 bytes
Variable Size 973081800 bytes
Database Buffers 603979776 bytes
Redo Buffers 7393280 bytes
Database mounted.
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/home/oracle/app/oradata/orcl/system01.dbf'
这样的循环
SQL> recover datafile 1
ORA-00283: recovery session canceled due to errors
ORA-16433: The database must be opened in read/write mode.
我不知道恢复数据库,大佬,帮帮我
解决方案
可以开始挂载状态吗?也许你可以试试下面的方法。首先,找到'CURRENT'重做组。
select group#,sequence#,status,first_time,next_change# from v$log;
并找到重做文件位置
select * from v$logfile;
然后,通过这个重做日志来恢复数据库
SQL> recover database until cancel using backup controlfile;
ORA-00279: change 4900911271334 generated at 03/06/2018 05:46:29 needed for
thread 1
ORA-00289: suggestion :
/home/wonders/app/wonders/flash_recovery_area/ORCL/archivelog/2018_03_12/o1_mf_1
_4252_%u_.arc
ORA-00280: change 4900911271334 for thread 1 is in sequence #4252
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/home/wonders/app/wonders/oradata/orcl/redo01.log
Log applied.
Media recovery complete.
最后,用'RESETLOGS'打开数据库</p>
推荐阅读
- php - Laravel 的 Artisan::call() 不适用于标志参数
- python - 我想从 .txt 文件中读取多行
- go - 如何使用 golang 运行 .msi 文件?
- node.js - 如何保护应用程序进行 REST 调用的凭据
- node.js - Azure WebSockets + NodeBB + Node.js 代理
- python - 将水平/垂直滑块转换为单个按钮
- php - 如何使用 Google_Service_Pubsub_Topics_Resource (PHP) 向 Google Pubsub 消息添加属性?
- hp-uft - SystemUtil.Run 不会执行文件
- database - 在编程或数据库中过滤表是否更快?
- android - 如何通过 httpurlconnection 发送图像