我做了一个这样的实验:归档模式下进行手工热备并进行还原恢复,结果将数据文件还原后,却报出了如下错误:
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 1: ‘/opt/oracle/oradata/orcl/system01.dbf’
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: ‘/opt/oracle/oradata/orcl/system01.dbf’
因此开始了困难重重的排错历程
首先看一下我做了哪些事:
※ 开启归档模式
※ 向scott用户中的A表插入一条数据并提交,插入第二条数据未提交
※ alter database begin backup; 备份数据库
※ 将所有dbf文件,ctl文件备份到指定路径
※ alter database end backup; 结束数据库备份
※ 删除所有.df,模拟数据文件丢失
※ 还原数据文件
※ recover database;进行数据库恢复 –从这步开始报错
※ alter database open;开启数据库 –继续报错
startup mount
alter database archivelog
scott@ORCL>insert into A values ('20200103001');
1 row created.
scott@ORCL>
scott@ORCL>commit;
Commit complete.
scott@ORCL>
scott@ORCL>
scott@ORCL>insert into A values ('20200103002');
1 row created.
scott@ORCL>
scott@ORCL>select name from v$datafile;
NAME
/opt/oracle/oradata/orcl/system01.dbf
/opt/oracle/oradata/orcl/sysaux01.dbf
/opt/oracle/oradata/orcl/undotbs01.dbf
/opt/oracle/oradata/orcl/users01.dbf
/opt/oracle/oradata/orcl/example01.dbf
/opt/oracle/oradata/orcl/users011.dbf
6 rows selected.
scott@ORCL>col file_name format a50
scott@ORCL>select file_id,file_name,tablespace_name from dba_data_files;
FILE_ID FILE_NAME TABLESPACE_NAME
5 /opt/oracle/oradata/orcl/example01.dbf EXAMPLE
4 /opt/oracle/oradata/orcl/users01.dbf USERS
3 /opt/oracle/oradata/orcl/undotbs01.dbf UNDOTBS1
2 /opt/oracle/oradata/orcl/sysaux01.dbf SYSAUX
1 /opt/oracle/oradata/orcl/system01.dbf SYSTEM
6 /opt/oracle/oradata/orcl/users011.dbf USERS011
6 rows selected.
scott@ORCL>
scott@ORCL>
scott@ORCL>
scott@ORCL>
scott@ORCL>select name from v$controlfile;
NAME
/opt/oracle/oradata/orcl/control01.ctl
/opt/oracle/flash_recovery_area/orcl/control02.ctl
scott@ORCL>
sys@ORCL>alter database begin backup;
Database altered.
[root@db01 orclbk]
[root@db01 orcl]
[root@db01 orclbk]
sys@ORCL>select file
FILE
1 2431194
2 2431194
3 2431194
4 0
5 2431194
6 2431194
6 rows selected.
sys@ORCL>select * from v$backup;
FILE
1 ACTIVE 2431194 13-JAN-20
2 ACTIVE 2431194 13-JAN-20
3 ACTIVE 2431194 13-JAN-20
5 ACTIVE 2431194 13-JAN-20
6 ACTIVE 2431194 13-JAN-20
sys@ORCL>
sys@ORCL>
sys@ORCL>alter database end backup;
alter database end backup
*
ERROR at line 1:
ORA-01260: warning: END BACKUP succeeded but some files found not to be in backup mode
[root@db01 orclbk]
[root@db01 orcl]
[root@db01 orcl]
sys@ORCL>
sys@ORCL>shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@ORCL>
sys@ORCL>
sys@ORCL>startup
ORACLE instance started.
Total System Global Area 409194496 bytes
Fixed Size 2213856 bytes
Variable Size 310380576 bytes
Database Buffers 92274688 bytes
Redo Buffers 4325376 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/opt/oracle/oradata/orcl/system01.dbf'
[root@db01 orclbk]
sys@ORCL>select open_mode from v$database;
OPEN_MODE
MOUNTED
sys@ORCL>recover database;
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 1: '/opt/oracle/oradata/orcl/system01.dbf'
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/opt/oracle/oradata/orcl/system01.dbf'
sys@ORCL>alter database open;
alter database open
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/opt/oracle/oradata/orcl/system01.dbf'
sys@ORCL>
sys@ORCL>
sys@ORCL>recover database
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 1: '/opt/oracle/oradata/orcl/system01.dbf'
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/opt/oracle/oradata/orcl/system01.dbf'
sys@ORCL>recover database using backup controlfile;
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 1: '/opt/oracle/oradata/orcl/system01.dbf'
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/opt/oracle/oradata/orcl/system01.dbf'
排错
首先确认控制文件和数据文件scn不一致
sys@ORCL>select checkpoint_change
CHECKPOINT_CHANGE
2431562
2431562
2431562
2214476
2431562
2431562
6 rows selected.
sys@ORCL>select checkpoint_change
CHECKPOINT_CHANGE
0
0
0
0
0
0
6 rows selected.
查看trace文件和alert文件定位问题
上面第8步骤讲到的坑,仔细的人会注意到备份数据文件时linux文件目录拥有者及用户组由原来的oracle oinstall 变为root root了,这就意味着你还原后的文件权限变化了,这就是问什么看trace文件时会有permission denied的错误。
这里不用慌,更改 linux文件目录拥有者及用户组即可
chown -R oracle:oinstall test --大R代表递归更改,test下面的所有子目录都会更改,不加R参数,就只更改test目录拥有者和组
将所有文件改成 oracle oinstall
重建控制文件(这里是关键!)
idle>select status from v$instance
2 ;
STATUS
MOUNTED
idle>alter database backup controlfile to trace as '';
Database altered.
select d.value||b.bias||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc ' trace_file_name from ( select p.spid from sys.v$mystat m,sys.v$session s,sys.v $process p where m.statistic
TRACE_FILE_NAME
/opt/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_1719.trc
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 (
'/opt/oracle/oradata/orcl/redo01.log',
'/opt/oracle/disk2/redo10b.log'
) SIZE 50M BLOCKSIZE 512,
GROUP 2 (
'/opt/oracle/oradata/orcl/redo02.log',
'/opt/oracle/disk2/redo20b.log'
) SIZE 50M BLOCKSIZE 512,
GROUP 3 (
'/opt/oracle/oradata/orcl/redo03.log',
'/opt/oracle/disk2/redo30b.log'
) SIZE 50M BLOCKSIZE 512,
GROUP 4 (
'/opt/oracle/oradata/orcl/redo04.log',
'/opt/oracle/disk2/redo40b.log'
) SIZE 8M BLOCKSIZE 512
DATAFILE
'/opt/oracle/oradata/orcl/system01.dbf',
'/opt/oracle/oradata/orcl/sysaux01.dbf',
'/opt/oracle/oradata/orcl/undotbs01.dbf',
'/opt/oracle/oradata/orcl/users01.dbf',
'/opt/oracle/oradata/orcl/example01.dbf',
'/opt/oracle/oradata/orcl/users011.dbf'
CHARACTER SET WE8MSWIN1252
;
ALTER DATABASE DATAFILE '/opt/oracle/oradata/orcl/users01.dbf' OFFLINE DROP;
RECOVER DATABASE
ALTER SYSTEM ARCHIVE LOG ALL;
ALTER DATABASE OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE '/opt/oracle/oradata/orcl/temp01.dbf' REUSE;
ALTER TABLESPACE TEMP3 ADD TEMPFILE '/opt/oracle/oradata/orcl/temp03.dbf' REUSE;
ALTER TABLESPACE TEMP2 ADD TEMPFILE '/opt/oracle/oradata/orcl/temp02.dbf' REUSE;
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 (
'/opt/oracle/oradata/orcl/redo01.log',
'/opt/oracle/disk2/redo10b.log'
) SIZE 50M BLOCKSIZE 512,
GROUP 2 (
'/opt/oracle/oradata/orcl/redo02.log',
'/opt/oracle/disk2/redo20b.log'
) SIZE 50M BLOCKSIZE 512,
GROUP 3 (
'/opt/oracle/oradata/orcl/redo03.log',
'/opt/oracle/disk2/redo30b.log'
) SIZE 50M BLOCKSIZE 512,
GROUP 4 (
'/opt/oracle/oradata/orcl/redo04.log',
'/opt/oracle/disk2/redo40b.log'
) SIZE 8M BLOCKSIZE 512
DATAFILE
'/opt/oracle/oradata/orcl/system01.dbf',
'/opt/oracle/oradata/orcl/sysaux01.dbf',
'/opt/oracle/oradata/orcl/undotbs01.dbf',
'/opt/oracle/oradata/orcl/example01.dbf',
'/opt/oracle/oradata/orcl/users011.dbf'
CHARACTER SET WE8MSWIN1252
;
RECOVER DATABASE USING BACKUP CONTROLFILE
ALTER DATABASE OPEN RESETLOGS;
ALTER TABLESPACE TEMP ADD TEMPFILE '/opt/oracle/oradata/orcl/temp01.dbf' REUSE;
ALTER TABLESPACE TEMP3 ADD TEMPFILE '/opt/oracle/oradata/orcl/temp03.dbf' REUSE;
ALTER TABLESPACE TEMP2 ADD TEMPFILE '/opt/oracle/oradata/orcl/temp02.dbf' REUSE;
执行重建控制文件脚本
控制文件创建成功会提示Control file created.
recover database using bacup controlfile;
这里起初我选的AUTO,但是报错过不去,后来又选择filename,试了 如下redo文件,最终Log applied了
/opt/oracle/oradata/orcl/redo01.log --失败
/opt/oracle/oradata/orcl/redo03.log --失败
/opt/oracle/oradata/orcl/redo02.log --成功 Log applied
这里大家耐心挨个试一下
alter database open resetlogs;
到这里数据库终于正常打开,完结,撒花
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)