Oracle 普通数据文件备份与恢复

普通数据文件指:非system表空间、undo_tablespace表空间、临时表空间和只读表空间的数据文件。它们损坏导致用户数据不能访问,不会导致db自身异常、实例崩溃、数据库不恢复就无法启动的情况。

恢复这样的数据文件可以采用高可用策略,在数据库OPEN状态下进行

10.1 普通数据文件损坏的后果

普通数据文件损坏后,只是用户的业务数据不同程度上无法访问(查询与修改),报错

ORA-01578,执行命令的会话不会被中断,即使是数据文件头部损坏检查点发生时实例也不会崩溃

--1 实例启动时,若普通数据文件丢失、无法访问或头部损坏,startup命令只能启动到mount状态。

--2 实例运行时,若普通数据文件头损坏,在发生了检查点之后,由于检查点无法再该数据文件头部完成,此数据文件的状态在控制文件中会被自动设置为off,实例不会崩溃,alert log中有ORA-01171由于检查点失败导致文件下线的错误记录,访问该数据文件ORA-00376错误,实例不再试图访问该文件,此时实例也能重启成功。

--3 实例运行时,若普通数据文件非头部数据块损坏,将导致需要访问受损数据行的命令无法执行,数据文件不会自动下线。

场景1:在启动时发现普通数据文件test01.dbf不存在,数据块只能启动到mount状态

SQL> startup;
Database mounted.
ORA-01157:cannot identify/lock data file 5 -see DBWR trace file
ORA-01110:data file 5 : /u01/app/Oracle/oradata/orcl/test01.dbf

场景2:在启动时发现普通数据文件test01.dbf头部损坏,db只能启动到mount状态

SQL> startup force
Database mounted.
ORA-01122: database file 5 tailed verification check
ORA-01110: data file 5 :  /u01/app/oracle/oradata/orcl/test01.dbf
ORA-01210: data file header is media corrupt

若使用alter database datafile 5 offline,使test01数据文件下线,db还是可以打开的,打开后test01数据文件中的数据都无法访问

SQL> alter database datafile 5 offline;
SQL> alter database open;

--1 损坏的数据文件属于存放历史分区信息的表空间,在线业务不需要或者暂时不需要访问

--2 损坏的数据文件属于一个或几个特定应用的表空间,但是其它相对独立的应用所使用的其他表空间仍然健康,这样做可以使其他应用先提供服务,保证数据库的局部高可用性

场景3:在运行时普通数据文件头损坏,那么在发送检查点时数据文件会被强制下线,在alter log中

ORA-01171: datafile 5 going offline due to error advancing checkpoint
ORA-01122: database file 5 failed verification check
ORA-01110: data file 5 : /u01/app/oracle/oradata/orcl/test01.dbf
ORA-01210: data file header is media corrupt

导致文件内所有业务数据无法访问,比如查询test.t1

SQL> select * from test.t1;
ERROR at line 1:
ORA-00376: file 5 cannot be read at this time
ORA-01110: data file 5 : /u01/app/oracle/oradata/orcl/test01.dbf

若此时重启实例,db也能打开,但5号数据文件依然处于offline,需要手动恢复。

SQL> startup force;
SQL> select * from v$datafile where file#=5;
ERROR at line 1:
ORA-01135: file 5 accessed for DML/query is offline
ORA-01110: data file 5 : /u01/app/oracle/oradata/orcl/test01.dbf

场景4:如果表空间区管理方式是LOCAL,在运行时,数据文件都不区位图(biimap)管理块损坏

SQL> create table t2 (id number) tablespace test;
ORA-01658: unable to create INITIAL extent for segment in tablespace TEST

场景5:实例运行时,表、索引等段头损坏,导致需要读取、修改段头的操作失败

SQL> insert into test.t1(id,name) vales (2,’xxx’);
ORA-01578: ORACLE data block corrupted (file # 5,block # 202)
SYS@ orcl >conn yhqt/***
Connected.
YHQT@ orcl >select * from yhqtest_1;
select * from yhqtest_1
              *
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 10, block # 135)
ORA-01110: data file 10: '/u01/app/oracle/oradata/orcl/yhqt01.dbf'

场景6: 保存数据的数据块坏块(file # 10, block # 143)

YHQT@ orcl >select * from yhqtest_2;
select * from yhqtest_2
              *
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 10, block # 143)
ORA-01110: data file 10: '/u01/app/oracle/oradata/orcl/yhqt01.dbf'

--更多详细数据块块损坏见DSI系列的物理块损坏和逻辑块损坏

10.2 备份

RMAN> backup as compressed backupset tablespace test;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00558: error encountered while parsing input commands
RMAN-01009: syntax error: found "test": expecting one of: "double-quoted-string, identifier, single-quoted-string"
RMAN-01007: at line 1 column 43 file: standard input
RMAN>  backup as compressed backupset tablespace yhqt;
Starting backup at 18-JUL-19
using channel ORA_DISK_1
channel ORA_DISK_1: starting compressed full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00010 name=/u01/app/oracle/oradata/orcl/yhqt01.dbf
channel ORA_DISK_1: starting piece 1 at 18-JUL-19
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 07/18/2019 17:59:04
ORA-19566: exceeded limit of 0 corrupt blocks for file /u01/app/oracle/oradata/orcl/yhqt01.dbf

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/52d1c134f248dec48fe625fd509d38f6.html