设为首页 加入收藏

TOP

Oracle 只读数据文件的备份与恢复(一)
2019-08-04 00:13:15 】 浏览:74
Tags:Oracle 只读 数据 文件 备份 恢复

11 只读数据文件的备份与恢复


只读数据文件是只读表空间的数据文件,数据块包括文件头在内部允许更改


SQL> alter tablespace yhqt read only;
SQL> alter tablespace yhqt read write;


11.1 只读数据文件损坏的后果


当一个表空间从读/写状态更改为只读状态时,其数据文件中的脏数据块必须有DBWn进程写到磁盘,完成一次不完整的完全检查点,该表空间内数据文件即称为只读数据文件。


其数据块及文件头信息包括检查点不在改变,每次打开数据库实例也不会检查只读文件的检查点SCN是否与其他数据文件的或在线日志的同步,但访问该数据文件内的对象报错


--实例运行时文件丢失


--实例运行时数据块损坏


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'


--实例启动时发现文件丢失


SQL> startup
Database mounted
ORA-01157: cannot identify/lock data file 10 - see DBWR  trace file
ORA-01110: data file 10: '/u01/app/oracle/oradata/orcl/yhqt01.dbf'


--实例启动时发现文件头损坏


SQL> startup
Database mounted
ORA-01122: database file 10 failed verification check
ORA-01110: data file 10: '/u01/app/oracle/oradata/orcl/yhqt01.dbf'
ORA-01210: data file header is media corrupt


在只读文件头损坏后,在发送检查点时所有进程不会管它,实例不会崩溃(system等关键数据文件损坏的后果),文件也不会自动下线(普通数据文件头损坏的后果),总体上只读文件正常,只是当执行需要访问头部的操作才在alert log中报错


SQL> select checkpoint_change# from v$datafile where file#=10;


告警日志报错


Corrupt block relative dba: 0x014000 (file 10,block 135)


Fractured block found during kcvxfh v10


此时内部的所有对象还是可以查询的(只要相应的数据块没有损坏),但是alter tablespace ... read write 和alter tablespace ... offline之后的online会报错ora-01120数据文件头损坏。


11.2 备份


RMAN> backup as backupset tablespace yhqt;


RMAN> backup as backupset datafile 10;


由于只读数据文件内没有个数据块能够修改,所以完全不用反复的备份。


只读数据文件的备份还可以使用cp命令


$ cp /u01/app/oracle/oradata/orcl/yhqt01.dbf /home/oracle/backup/yhqt01.bak


注意:当一个表空间从只读read only修改为read write后,应该立即备份其数据文件和控制文件,否则,将来若控制文件和数据文件损坏,在恢复流程中可能会出现ORA-01152:数据文件不够旧的错误。


11.3 恢复


其他类型的数据文件恢复包括:还原(restore)和恢复(recover),对于只读文件来说,重做日志不需要,在恢复的时候不需要recover操作


--mount状态下恢复步骤


--1 SQL> startup mount
--2 RMAN> restore datafile 10;
--3 SQL> alter database open;


--open下恢复步骤


--1 SQL> alter database datafile 10 offline;
--2 RMAN> restore datafile 10;
--3 SQL> alter database datafile 10 online;


11.3.1 恢复前的准备


可以在mount和open状态下恢复,参数文件和控制文件必须正常,关键数据文件也必须正常。


11.3.2 控制文件无损情况下的恢复


控制文件无损情况下的恢复指:只读数据文件损坏时控制文件没有损坏


场景1:只读数据文件yhqt01.dbf丢失,db无法正常启动,停留在mount,ORA-01157  cannot identify/lock data file 10 - see DBWR  trace file


只要使用RMAN执行restore(适合备份集)还原数据文件,然后open数据库


RMAN> restore datafile 10;
SQL> alter database open;


场景2:只读数据文件yhqt01.dbf在实例运行时丢失,导致其内数据无法访问


SQL> select * from yhqt.t1;
ORA-01116: error in opening database file 10
ORA-01110: data file 10 : /u01/app/oracle/oradata/orcl/yhqt01.dbf
ORA-27041: unable to open file
LINUX-X86-64 Error: 2: No such file or directory
--open
RMAN> run {
sql'alter database datafile 10 offline';
restore datafile 10;
sql'alter database datafile 10 online';
}


场景3:运行时只读数据文件yhq01.dbf内数据块损坏,导致数据无法访问,但是文件依然存在


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'
--open
RMAN> run {
sql'alter database datafile 10 offline';
restore datafile 10 force;
sql'alter database datafile 10 online';
}


使用镜像复制的恢复


RMAN> run {
sql'alter database datafile 10 offline';
switch datafile 10 to datafilecopy
'/u01/app/oracle/

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇MySQL事务select for update及数.. 下一篇如何在Debian 10(Buster)Linux..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目