Oracle恢复手册Word下载.docx
《Oracle恢复手册Word下载.docx》由会员分享,可在线阅读,更多相关《Oracle恢复手册Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
3、从备份中恢复最近数据文件和相关的归档日志文件
4、恢复数据库
alterdatabaserenamefiledatafile3todatafile3’;
alterdatabasedatafiledatafile3’online;
recoverdatafile3’;
alterdatabaseopen;
shutdowimmediate;
5、进行一次完全备份
损坏联机日志的恢复方法
损坏非当前联机日志
1、启动数据库,看到一些相关错误
2、查看V$log视图,查看该日志是否为当前联机日志
3、用CLEAR命令重建该日志文件
svrmgrl>
alterdatabaseclearlogfilegroup1;
如果是该日志组还没有归档,则需要用
alterdatabaseclearunarchivedlogfilegroup1;
4、打开数据库,重新备份数据库(alterdatabaseopen;
)
损坏当前联机日志
归档模式下当前日志的损坏有两种情况,
一、是数据库是正常关闭,日志文件中没有未决的事务需要实例恢复,当前
日志组的损坏就可以直接来重建
alterdatabaseclearunarchivedlogfilegroupn
二、是日志组中有活动的事务,数据库需要媒体恢复,日志组需要用来同步,
最好的办法就是通过不完全恢复,可以保证数据库的一致性,但是这种办法要求在归档方式下,并且有可用的备份。
1、打开数据库,会遇到一个类似的错误
2、查看V$log,发现是当前日志
3、发现clear不成功
4、拷贝有效的数据库的全备份,并不完全恢复数据库,可以采用获取最近的SCN的办法用untilscn恢复或用untilcnacel恢复(recoverdatabaseuntilcancel),先选择auto,尽量恢复可以利用的归档日志,然后重新(recoverdatabaseuntilcancel)这次输入cancel,完成不完全恢复,也就是说恢复两次。
如:
SQL>
SQL>
Cancel;
5、利用alterdatabaseopenresetlogs打开数据库
说明:
1、这种办法恢复的数据库是一致的不完全恢复,会丢失当前联机日志中的事务数据
2、这种方法适合于归档数据库并且有可用的数据库全备份。
3、恢复成功之后,记得再做一次数据库的全备份。
4、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。
5、控制文件丢失
1、损坏单个控制文件
损坏单个控制文件是比较容易恢复的,因为一般的数据库系统,控制文件都不止一个,而且所有的控制文件都互为镜相,只要拷贝一个好的控制文件替换坏的控制文件就可以了。
1)、控制文件损坏,最典型的就是启动数据库出错,不能mount数据库
startup
ORA-00205:
errorinidentifyingcontrolfile,checkalertlogformoreinfo
查看报警日志文件,有如下信息
alterdatabasemount
MonMay2611:
59:
522003
ORA-00202:
controlfile:
'
D:
\Oracle\oradata\chen\control01.ctl'
ORA-27041:
unabletoopenfile
OSD-04002:
O/S-Error:
(OS2)系统找不到指定的文件。
2)、停止数据库
shutdownimmediate
3)、拷贝一个好的控制文件替换坏的控制文件或修改init.ora中的控制文件参数,
取消这个坏的控制文件。
dd
if=/dev/disk/dsk5b
of=/dev/disk/dsk6bbs=100k
4)、重新启动数据库
2、损坏全部控制文件
损坏多个控制文件,或者人为的删除了所有的控制文件,通过控制文件的复制已经
不能解决问题,这个时候需要重新建立控制文件。
同时注意,alterdatabasebackupcontrolfiletotrace可以产生一个控制文件的文本备份。
1)
、启动数据库,出现错误,并不能启动到mount下
startup
errorinidentifyingcontrolfile,checkalertlogformoreinfo
查看报警日志文件,有如下信息
alterdatabasemount
53:
152003
unabletoopenfile
2)、关闭数据库
shutdownimmediate;
3)、在internal或sys下运行如下创建控制文件的脚本,注意完整列出联机日志或数据文件的路径,或修改由alterdatabasebackupcontrolfiletotrace备份控制文件时产生的脚本,去掉多余的注释即可。
STARTUPNOMOUNT
CREATECONTROLFILEREUSEDATABASE"
TEST"
NORESETLOGSNOARCHIVELOG
MAXLOGFILES32
MAXLOGMEMBERS2
MAXDATAFILES254
MAXINSTANCES1
MAXLOGHISTORY226
LOGFILE
GROUP1'
\ORACLE\ORADATA\TEST\REDO01.LOG'
SIZE1M,
GROUP2'
\ORACLE\ORADATA\TEST\REDO02.LOG'
GROUP3'
\ORACLE\ORADATA\TEST\REDO03.LOG'
SIZE1M
DATAFILE
'
\ORACLE\ORADATA\TEST\SYSTEM01.DBF'
\ORACLE\ORADATA\TEST\RBS01.DBF'
\ORACLE\ORADATA\TEST\USERS01.DBF'
\ORACLE\ORADATA\TEST\TEMP01.DBF'
\ORACLE\ORADATA\TEST\TOOLS01.DBF'
\ORACLE\ORADATA\TEST\INDX01.DBF'
CHARACTERSETZHS16GBK;
--Recoveryisrequiredifanyofthedatafilesarerestoredbackups,
--orifthelastshutdownwasnotnormalorimmediate.
RECOVERDATABASE
--ifthelastshutdownwasnotnormalorimmediate
--noarchive
--RECOVERDATABASEUNTILCANCELUSINGBACKUPCONTROLFILE
--archive
--RECOVERDATABASEUSINGBACKUPCONTROLFILEUNTILCANCEL
--Databasecannowbeopenednormally.
ALTERDATABASEOPEN;
--ifrecoverdatabaseuntilcancel
--ALTERDATABASEOPENRESETLOGS;
6、如果没有错误,数据库将启动到open状态下。
1、重建控制文件用于恢复全部数据文件的损坏,需要注意其书写的正确性,保证包含了所有的数据文件与联机日志
2、经常有这样一种情况,因为一个磁盘损坏,我们不能再恢复(store)数据文件到这个磁盘,因此在store到另外一个盘的时候,我们就必须重新创建控制文件,用于识别这个新的数据文件,这里也可以用这种方法用于恢复。
损坏回滚数据文件的恢复方法
如果你发现有回滚段的数据文件丢失或者损坏了,而此时的数据库是处于打开的状态下并且在运行,就千万不要关闭数据库了,因为在大多数的情况下打开的时候比关闭的时候好解决问题一些。
1、损坏数据文件,但数据库处于Open状态
一般也是存在有两种情况:
A、是offline丢失或损坏的数据文件,然后从一个备份中恢复,执行介质恢复以保持一致性。
但是这种情况要求数据库是归档方式下才可以采用的。
B、是offline那个存在丢失或损坏的数据文件所在的整个回滚段表空间,然后删除整个回滚段表空间并重建,但是你必须要杀掉那些在回滚段中已经激活的用户进程才可以offline的。
通常第一种情况就比较简单实现,但是更多的用户事务将会出错并且回滚。
A的具体步骤:
1、offline丢失或损坏的数据文件
ALTERDATABASEDATAFILE
<
full_path_file_name>
OFFLINE;
2、从一个有效的备份中恢复。
3、执行以下查询
SELECTV1.GROUP#,MEMBER,SEQUENCE#
FROMV$LOGV1,V$LOGFILEV2
WHEREV1.GROUP#=V2.GROUP#;
这个将列出你的所有redolog文件以及它们所代表的sequencenumbers。
4、恢复数据文件。
RECOVERDATAFILE'
5、确信你应用了所有的redolog文件,直至出现提示信息"
Mediarecovery
complete"
。
6、online那个数据文件。
ALTERDATABASEDATAFILE'
ONLINE;
B的具体步骤:
1、offline存在丢失或损坏的数据文件的回滚段表空间中的所有回滚段。
ALTERROLLBACKSEGMENT<
rollback_segment>
OFFLINE;
2、检测当然回滚段的状态。
SELECTSEGMENT_NAME,STATUSFROMDBA_ROLLBACK_SEGS
WHERETABLESPACE_NAME='
TABLESPACE_NAME>
;
3、删除所有offline的回滚段
DROPROLLBACKSEGMENT<
4、处理那些online状态的回滚段。
重新执行第二步的查询,如果你已经执行过offline操作的回滚段状态仍然是online,则说明这个回滚段内有活动的事务。
你要接着查询
SELECTSEGMENT_NAME,XACTSACTIVE_TX,V.STATUSFROMV$ROLLSTATV,
DBA_ROLLBACK_SEGSWHERETABLESPACE_NAME='
ANDSEGMENT_ID=USN;
如果没有返回结果,则证明存在丢失或损坏的数据文件的回滚段表空间中的所有回滚段都已经被offline了,然后重新执行第二步,第三步。
如果查询有结果返回,则状态应该是"
PENDINGOFFLINE"
.接着查看ACTIVE_TX列,如果值为0,则表明此回滚段中已经没有未处理的事务了,很快就会被offline的,然后等它offline后重新执行2,3步后跳至第六步。
如果值大于0,则继续到第五步。
5、强制那些包含活动事务的回滚段offline。
活动的事务应该被提交或者回滚,执行下面的查询看看哪些用户占用了回滚段:
SELECTS.SID,S.SERIAL#,S.USERNAME,R.NAME“ROLLBACK”
FROMV$SESSIONS,V$TRANSACTIONT,V$ROLLNAMER
WHERER.NAMEIN(‘<
PENDING_ROLLBACK_1>
’,…,‘<
PENDING_ROLLBACK_N>
’)
ANDS.TADDR=T.ADDRANDT.XIDUSN=R.USN;
最好能直接联系到那些user让他们自己去回滚或者提交事务,如果不能做到的话,那就只能强制性的杀掉进程了。
ALTERSYSTEMKILLSESSION‘<
SID>
<
SERIAL#>
’;
杀掉进程后再过一段时间后回滚段会自动清除那些事务,然后就可以回到第二步继续查询了。
6、删除回滚段。
DROPTABLESPACE<
tablespace_name>
INCLUDINGCONTENTS;
7、重建回滚段并online它们
createrollbacksegmentrollback_segment……
ALTERROLLBACKSEGMENTrollback_segmentONLINE;
1、数据库如果是open状态,就可以直接在open状态下解决问题,没有必要停下数据库,增加down机时间
2、不管上上面那种恢复方法都是正常性的恢复,不会引起数据的不一致或错误。
2、数据库关闭,但是数据文件中没有活动事务
这种情况下最简单的方法就是offlinedrop掉这个坏了的或者丢失的数据文件,然后以restricted模式打开数据库然后删除并且重建包含损坏文件的回滚段表空间。
具体步骤如下:
1、确定数据库是正常的关闭的。
方法是可以去查看alert文件,到最后看是否有如下信息:
"
alterdatabasedismount
Completed:
alterdatabasedismount"
如果有的话,就证明数据库是正常关闭的,否则就不能用这个方法去恢复。
2、修改init参数文件,移去ROLLBACK_SEGMENTS中包含的损坏数据文件的回滚段表空间的回滚段,如果你不能确定哪些回滚段是坏的,简单的方法是你可以注释掉整个ROLLBACK_SEGMENTS。
3、以restricted模式去mount数据库。
STARTUPRESTRICTMOUNT
4、offlinedrop掉那个坏的数据文件
ALTERDATABASEDATAFILE'
OFFLINEDROP;
5、打开数据库
ALTERDATABASEOPEN
如果你看到如下信息"
Statementprocessed"
,则跳到第7步,如果你看到ORA-604,ORA-376,andORA-1110的错误信息,继续第6步。
6、正常的关闭数据库,然后在init文件中注释掉ROLLBACK_SEGMENTS,并加入隐含参数
_corrupted_rollback_segments=(<
rollback1>
....,<
rollbackN>
),然后以restricted模式打开数据库
STARTUPRESTRICT
7、删除掉那个包含损坏文件的回滚段表空间。
8、重建回滚段表空间,记得创建后要把回滚段都online。
9、重新使数据库对所有用户可用。
ALTERSYSTEMDISABLERESTRICTEDSESSION;
10、然后正常关闭数据库,修改init文件,如果开始只是注释掉了ROLLBACK_SEGMENTS的,就去掉注释即可,如果加了隐含参数的,注释掉它,并在ROLLBACK_SEGMENTS加入所有的回滚段。
11、正常启动数据库。
Startup
1、这种方法的前提条件是数据库是正常关闭(不是abort)可用
2、这种方法是正常方法,不会引起数据错误
3、数据库关闭,数据文件中有活动事务,没有可用备份
一般造成这种原因的情况是采用了shutdownabort或其它原因异常关机(如断电)导致的。
4、数据库关闭,数据文件中有活动事务,从备份恢复
1、从一个有效的备份中恢复损坏的数据文件。
2、mount数据库。
SELECTFILE#,NAME,STATUSFROMV$DATAFILE;
如果发现要恢复的文件是offline状态的话,要先online它
4、执行以下查询
SELECTV1.GROUP#,MEMBER,SEQUENCE#,FIRST_CHANGE#
FROMV$LOGV1,V$LOGFILEV2
这个将列出redlog文件所代表的sequence和firstchangenumbers。
5、如果数据库是非归档情况下,执行以下查询:
SELECTFILE#,CHANGE#FROMV$RECOVER_FILE;
如果CHANGE#大于最小的redolog文件的FIRST_CHANGE#,则数据文件可以被恢复,记得在应用日志的时候要把所有redolog文件全部应用一遍。
如果CHANGE#小于最小的redolog文件的FIRST_CHANGE#,则数据文件就不可以被恢复了,这时候你要从一个有效的全备份中去恢复数据库了,如果没有全备份的话,那你就只能把数据库强制打开到一个不一致的状态去exp出数据,然后重新建库导入数据,因为这种方式的恢复oracle是不推荐用户自己做的,所以这里我就不详细说明了。
6、恢复数据文件
7、确信你应用了所有的redolog文件,直至出现提示信息"
Mediarecoverycomplete"
8、打开数据库。
1、这种方法要求在归档有备份的方式下进行,而且是建议方式
2、这种方法不会导致数据库的错误
回滚表空间数据文件误删除处理方法
1、首先改参数文件init.ora,使数据库能mount上来。
svrmgrl>
Shutdownabort
$vi$ORACLE_HOME/dbs/init<
sid>
.ora
rollback_segments=(system)
_corrupted_rollback_segments=(r01,r02,r03,r04)
Startupmount
2、对数据库实施恢复,再将它打开
从数据库的控制文件中将回滚段表空间rbs的数据文件rbs01.dbf离线并去掉;
alterdatabasedatafile‘##/##/rbs01.dbf’offlinedrop;
对数据库进行恢复
recoverdatabaseusingbackupcontrolfile;
此时屏幕上可能会出现:
ORA_00280Change####forthread#isinsequence#
specifylog:
[<
RET>
forsuggested|AUTO|from
logsource|cancel]
您可以根据sequence#号找到您需要的在线日志文件,并将日志文件输入(包括全路径),查找在线日志文件时可以使用svrmgrl>
select*fromv$log;
此时完成数据库恢复。
再将数据库打开。
alterdatabaseopenrese