导语:最近频频听到有用户(还不是”客户” )存储出问题后无法恢复,只有求助于DUL、AUL、ODU之类的工具。本来嘛,在全球经济低迷的当下,有些需求总是好的,总可以增加点GDP。但,作为一个DBA来说,心里总怕有点不甘吧。出问题的用户里,有通信行业(南方北方都有)、有银行、有公安(网上搜也能搜到几个吧)、有社保………不一而足。我们知道这些行业里的用户,应该是比小沈阳更加不差钱的吧。谁说不是呢,但对于报表库、查询库之类动辄几T、几十T的“不太重要”的系统来说,要让领导投更多的钱,其实也还似乎比较难的。这篇,就是在投钱不多的情况下,怎样做到基本的备份,且能做到发生故障时能恢复之目的。
前提:做好备份;恢复测试机配置比较低(如果配置够的话不用这么麻烦)
版本:Oracle9i、10g测试通过。
原理:将更多的数据skip掉。(听起来有点类似于oracle exadata server ,其实不是。exadata是filter,而这里是skip)
废话少说。
第零步:启动数据库实例
第一步:恢复控制文件:
RMAN> restore controlfile from ‘F:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORA11G\BACKUPSET\2008_10_23\O1_MF_NCSNF_TAG20081023T205321_4J0X8SY8_.BKP’;
Starting restore at 23-OCT-08
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=318 device type=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
output file name=F:\APP\ADMINISTRATOR\ORADATA\ORA11G\CONTROL01.CTL
output file name=F:\APP\ADMINISTRATOR\ORADATA\ORA11G\CONTROL02.CTL
output file name=F:\APP\ADMINISTRATOR\ORADATA\ORA11G\CONTROL03.CTL
Finished restore at 23-OCT-08
第二步:mount数据库
RMAN> alter database mount;
database mounted
released channel: ORA_DISK_1
重点在
第三步:restore 数据库
RMAN> restore database skip forever tablespace xml,ttt,boypoo,t_4k,ILMTBS,users;
Starting restore at 23-OCT-08
Starting implicit crosscheck backup at 23-OCT-08
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=317 device type=DISK
Crosschecked 22 objects
Finished implicit crosscheck backup at 23-OCT-08
Starting implicit crosscheck copy at 23-OCT-08
using channel ORA_DISK_1
Crosschecked 2 objects
Finished implicit crosscheck copy at 23-OCT-08
searching for all files in the recovery area
cataloging files…
cataloging done
….(skip more data)
第五步:recover database
RMAN> recover database skip forever tablespace xml,ttt,boypoo,t_4k,ILMTBS,users;
Starting recover at 23-OCT-08
using channel ORA_DISK_1
starting media recovery
… …
第六步:open 数据库
RMAN> alter database open resetlogs;
database opened
这个时候,我们所skip的表空间里有些什么对象我们还是可以看到的,只不过数据没有。
验证:
SQL> select owner,table_name from dba_tables where tablespace_name=’USERS’;
OWNER TABLE_NAME
—————————— ——————————
SCOTT MLOG$_DEPT
SCOTT MLOG$_EMP
SCOTT A
SCOTT DEPT
SCOTT EMP
SCOTT BONUS
SCOTT SALGRADE
..
OWNER TABLE_NAME
—————————— ——————————
HIS T
ORA T
ORA SYS_IMPORT_SCHEMA_01
SQL> select count(1) from his.t;
select count(1) from his.t
*
ERROR at line 1:
ORA-00376: file 4 cannot be read at this time
ORA-01110: data file 4: ‘F:\APP\ADMINISTRATOR\ORADATA\ORA11G\USERS01.DBF’
这篇blog的目的是是想给做好数据库恢复演练,但有没有与生产环境相当容量和性能的环境的情况下怎么去实现;这样做的目的,是想打开一个最小可能打开的库,也就是说,可以skip除了system、undo、temp之外的所有表空间。
了解了这个原理后,其实我们还可以将其推广开来,比如我们有客户,原来只有一个生产库了,现在上面跑着60多个应用,现在想将这些应用中核心的部分剥离到其他机器上,那我们同样的可以用这个skip tablespace方式,来进行这个剥离的动作,而且停机时间相当短(只是应用归档日志时间,30分钟以内即可完成剥离)。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29960155/viewspace-1369760/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29960155/viewspace-1369760/