首页 > Linux操作系统 > Linux操作系统 > Oracle冷备份练习
备份恢复的基础知识从很早以前就开始慢慢了解
但实践练习方面却一直没有进行
而且,对于备份恢复的相关知识,感觉并没有其它方面了解的深入
可对于DBA来说,备份恢复也是相当主要的职责
光是Oracle的官方文档,和Backup and Recovery有关的至少四个
Basics,Reference,Quick Start Guide,Advanced User's Guide
所以,近期可能会更多的去练习一些有关备份恢复的东西
先从最基本的开始吧,冷备份
冷备份就说要让数据库暂停运行,利用系统命令拷贝数据库的所有相关文件
这个备份的难度相对简单(正常关闭数据库,拷贝,就这些)
把自己的test数据库所有控制文件,数据文件,参数文件,日志文件,密码文件
拷贝到另一个目录中,开始破坏试验
先删除所有test数据库相关文件
因为密码文件没有了,所以无法正常使用SqlPlus,提示
ORA-01031: insufficient privileges
将密码文件拷贝回去,就可进入sqlplus了,执行startup nomount
因为参数文件没有了,所以出现错误提示
ORA-01078: failure in processing system parameters
LRM-00109:
could not open parameter file
'/home/oracle/oracle/product/10.2.0/db_1/dbs/inittest.ora'
把备份的参数文件拷贝到相应目录,或在启动时指定参数文件
startup nomount [pfile=’路径’]
数据库顺利进入nomount模式
再转换到mount模式,alter database mount;
因为控制文件没有了,所以再次出错
ORA-00205: error in identifying control file, check alert log for more info
查看alert文件,得到如下错误提示
ORA-00202: control file: '/home/oracle/oracle/oradata/test/control01.ctl'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
再将控制文件拷贝回去,再次转换到mount模式,这次转换正常
此时可以执行少部分的SQL查询或SqlPlus命令,如
SELECT * FROM V$DATAFILE;
SHOW PARAMETER INSTANCE_NAME;
再将数据库转化到open状态,alter database open;
错误再次出现
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/home/oracle/oracle/oradata/test/system01.dbf'
查看相应跟踪文件
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
(省略其它数据文件报错信息)
将数据文件拷贝回原路径,再次转换到open
这次报错是因为redo log文件
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1: '/home/oracle/oracle/oradata/test/redo02.log'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
再拷回去,继续open,没想到这次出现了数据块损坏,需要媒体恢复
ORA-01172: recovery of thread 1 stuck at block 41 of file 2
ORA-01151: use media recovery to recover block, restore backup if needed
file 2是undo表空间数据文件
既然让recovery,那就执行吧,recover datafile 2;
提示恢复结束,再次open
晕,竟然出现600错误了
ORA-00600: internal error code, arguments: [kdxlin:psno out of range], [], [],
[], [], [], [], []
这个是Oracle的内部未知错误号,一般情况,解决起来比较麻烦……
另外,因为出现600错误,test数据库的sqlplus无法进行关闭数据库等操作
需要杀掉相应进程
ps -ef|grep $ORACLE_SID|grep -v grep|awk '{print $2}'|xargs -i kill -9 {}
回忆整个试验过程,自己是一步一步分次拷贝各个数据文件的
所以,中途有可能发生了数据库SCN等信息的变化
这样吧,一次性拷贝回所有文件
进入sqlplus后,直接startup
晕……还错?
ORA-01122: database file 6 failed verification check
ORA-01110: data file 6:
'/home/oracle/oracle/product/10.2.0/db_1/dbs/ts_test.dbf'
ORA-01207: file is more recent than control file - old control file
呃………………数据文件怎么出现在dbs目录了???
又回忆了了一下………………想到曾经用这个库建立过表空间创建的测试
当时也许没有指定表空间文件路径,Oracle建立到默认目录下了
再想想办法吧……
上网找了找,大致有以下步骤
alter database backup controlfile to trace; 重建控制文件
然后就可以根据重建的SQL语句在sqlplus中执行
简要列举一些步骤
STARTUP NOMOUNT;
CREATE CONTROLFILE REUSE DATABASE "TEST" NORESETLOGS ARCHIVELOG
...(省略若干子句)
RECOVER DATABASE;
ALTER SYSTEM ARCHIVE LOG ALL;
ALTER DATABASE OPEN;
ALTER TABLESPACE TEMP
ADD TEMPFILE '/home/oracle/oracle/oradata/test/temp01.dbf' REUSE;
整个走了下来,中途没有任何异常
随便select几个表,结果正常
从今天试验的整个过程中,既实践了计划的操作,还接触到一些计划外的东西
另外,自己还犯了一个错误,在进行试验之前,并没有相当谨慎的进行备份
特别是对于现有数据库文件的审查不够自己
没有通过v$datafile等视图记录必要的文件路径
所以,才丢了一个ts_test数据文件,这种情况今后一定要避免
今天的试验还只是很小的一部分
就当作是对备份恢复的一种初期熟悉好了 ^_^
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/556359/viewspace-528639/,如需转载,请注明出处,否则将追究法律责任。