ORACLE数据库常用恢复方法.docx
《ORACLE数据库常用恢复方法.docx》由会员分享,可在线阅读,更多相关《ORACLE数据库常用恢复方法.docx(117页珍藏版)》请在冰点文库上搜索。
ORACLE数据库常用恢复方法
ORACLE数据库备份和恢复手册
(草订版)
CINtelLunar
2002.10.21
目录
*热备过程5
*仅仅丢失一个普通用户数据文件的恢复A(联机恢复)8
准备工作8
shutdownabort关闭例程,模拟数据文件丢失10
Mount数据库10
使损坏的数据文件脱机10
打开数据库10
拷贝刚才热备的数据文件(USERS01.DBF)11
恢复损坏的数据文件11
使恢复完成的数据文件联机11
验证恢复的结果:
完全恢复11
说明:
12
*仅仅丢失一个普通用户数据文件的恢复B(脱机恢复)12
准备工作12
Shutdownimmediate,然后模拟数据文件丢失13
模拟数据文件丢失,然后用热备覆盖这个文件13
mount数据库13
使损坏的数据文件脱机14
恢复数据文件14
使恢复的数据文件联机16
打开数据库16
这时需要重新启动数据库,并完全恢复数据库17
重新启动数据库,17
用recoverdatabase再次恢复数据库17
重新使恢复的表空间联机18
验证恢复结果:
完全恢复18
说明:
18
*shutdownimmedate,恢复全部数据文件(不包括control和redo)19
复制全部热备的数据文件过来(完全恢复成功!
)19
mount数据库19
完全恢复数据库20
打开数据库20
验证恢复结果:
完全恢复21
说明:
21
*shutdownabort的情况,恢复全部数据文件(不包括control和redo)21
复制全部热备的数据文件过来(完全恢复成功!
)22
mount数据库22
完全恢复数据库22
打开数据库23
验证恢复结果:
完全恢复23
说明:
23
*shutdownimmediate,丢失全部控制文件(不包括数据文件和redo),A(完全恢复)24
用热备的控制文件恢复(把热备的控制文件拷贝回来)24
mount数据库24
完全恢复和untilcancelusingbackupcontrolfile都失败24
重建控制文件25
找到那个控制文件,然后编辑25
重建控制文件,并且恢复数据库(完全恢复成功!
)26
验证恢复结果:
完全恢复26
说明:
27
*shutdownabort的情况,恢复全部控制文件(不包括数据文件和redo)27
准备工作27
删除那个控制文件,把热备的控制文件拷贝过来29
mount数据库29
根据提示,重建口令文件29
用totrace;备份控制文件30
找到那个控制文件,然后编辑31
重建控制文件,并且恢复数据库(完全恢复成功!
)31
说明:
32
*shutdownimmediate的情况,丢失全部控制文件和数据文件(不包括redo),方法132
准备工作32
然后单独开启一个实例,再shutdownimmediate34
拷贝热备的所有控制文件和数据文件34
mount数据库34
根据提示,重建口令文件35
用totrace备份控制文件35
shutdownimmediate关闭数据库35
找到那个控制文件,然后编辑:
36
重建控制文件,并且恢复数据库36
关闭数据库37
重新mount,作完全恢复(recoverdatabase;)37
打开数据库39
验证恢复结果:
完全恢复40
说明:
40
*shutdownimmediate的情况,丢失全部控制文件和数据文件(不包括redo),方法241
准备工作41
把热备的控制文件和数据文件拷贝过来42
mount数据库42
根据提示,重建口令文件42
尝试恢复数据库(现在恢复是不可以的)43
试图打开数据库(现在打开是不可以的)43
重新mount数据库44
备份控制文件44
找到那个控制文件,并且编辑它44
重建控制文件,并自动完全恢复数据库45
验证恢复结果:
完全恢复46
说明:
46
*shutdownabort的情况,恢复全部控制文件和数据文件(不包括redo)47
准备工作47
单开一个session,用来shutdowabort48
拷贝所有的控制文件和数据文件(不包括redo)48
mount数据库,按照提示重建口令文件48
这时,试图完全恢复数据库是不成功的49
用totrace备份控制文件49
找到并且编辑控制文件49
重建控制文件50
shutdownimmediate,然后重新恢复数据库51
完全恢复数据库51
打开数据库53
说明:
54
*shutdownabort后,丢失全部文件(除了archivelog和init.ora)54
准备工作54
新开一个session,进行shutdownabort56
把热备的数据文件和控制文件拷贝过来56
mount数据库56
根据提示重建口令文件57
用totrace备份控制文件57
找到这个跟踪文件并编辑它57
重建控制文件(这种丢失的状态重建控制文件是错误的)58
Mount数据库59
用usingbackupcontrolfile进行恢复59
用OpenResetlog打开数据库62
验证恢复结果:
不完全恢复,redo里面的数据丢失了63
说明:
63
*丢失非系统非当前活动回滚段表空间中的一个数据文件64
首先是做一次热备(因为上次已经做了不完全恢复resetlogs)64
数据准备工作167
以上改动后需要作一次热备或者冷备,否则数据文件丢失后不能恢复(增加表空间,数据文件都要备份数据库)69
数据准备工作272
Shutdowabort,然后删除test01.dbf,模拟数据文件丢失72
删除test01.dbf,把备份的数据文件test01.dbf拷贝过来73
Mount数据库73
恢复数据文件(把最近的热备的文件拷贝过来)73
打开数据库73
验证恢复结果:
完全恢复74
*丢失系统表空间(SYSTEM)74
*丢失一个非当前的redologgroup74
*丢失一个当前的redologgroup74
*丢失一个非当前非唯一的redologmember75
*丢失一个非当前的唯一的redologmember75
*丢失一个当前的非唯一的redologmember75
*丢失一个当前的唯一的redologmember75
*丢失一个非唯一的控制文件75
*丢失当前回滚段75
*丢失某个非系统表空间的一个数据文件76
附录:
76
Forwindowx的数据库备份脚本76
备份脚本(aa.sql)76
生成的用于实际做备份的脚本(backup_ts.sql)78
备份过程的日志(backup.log)81
备份ops的脚本83
备份脚本(createbackup.sh)83
生成的用于实际做备份的脚本(dobackup.sql)85
用于调用这个生成的实际需要调用的脚本(dobackup.sh)89
备份过程的日志(backup.log)89
备份unix或者linux单台实例的数据库脚本91
备份脚本(createbackup.sh)91
生成的用于实际做备份的脚本(dobackup.sql)94
用于调用这个生成的实际需要调用的脚本(dobackup.sh)94
备份过程的日志(backup.log)94
*热备过程
E:
\>sqlplusinternal
SQL*Plus:
Release8.1.7.0.0-Productionon星期日10月2020:
36:
502002
(c)Copyright2000OracleCorporation.Allrightsreserved.
连接到:
Oracle8iEnterpriseEditionRelease8.1.7.0.0-Production
WiththePartitioningoption
JServerRelease8.1.7.0.0-Production
SQL>@e:
\backupdb\other\aa
TO_CHAR(SYSDATE,'''YY
---------------------
'2002-10-2008:
10:
51'
SQL>
SQL>@e:
\backupdb\other\backup_ts.sql
SQL>--settermoutoff;
SQL>setechooffheadofffeedbackoffpagesize0;
20-10月-02
BEGININGARCHIVELOGNUMBERIS:
数据库日志模式存档模式
自动存档启用
存档终点d:
\BACKUPDB\archive
最早的概要信息日志序列0
下一个存档日志序列1
当前日志序列1
BeginBackupTablespaceSYSTEM.'D:
\BACKUPDB\SYSTEM01.DBF'...
已复制1个文件。
SuccessedEndBackupThisFile.
BeginBackupTablespaceRBS.'D:
\BACKUPDB\RBS01.DBF'...
已复制1个文件。
SuccessedEndBackupThisFile.
BeginBackupTablespaceUSERS.'D:
\BACKUPDB\USERS01.DBF'...
已复制1个文件。
SuccessedEndBackupThisFile.
BeginBackupTablespaceTEMP.'D:
\BACKUPDB\TEMP01.DBF'...
已复制1个文件。
SuccessedEndBackupThisFile.
BeginBackupTablespaceTOOLS.'D:
\BACKUPDB\TOOLS01.DBF'...
已复制1个文件。
SuccessedEndBackupThisFile.
BeginBackupTablespaceINDX.'D:
\BACKUPDB\INDX01.DBF'...
已复制1个文件。
SuccessedEndBackupThisFile.
BeginBackupCONTROLFILE'D:
\BACKUPDB\CONTROL01.CTL'...
SuccessedEndBackupTheCONTROLFILE.
BeginBackupCONTROLFILEToTrace...
SuccessedEndBackupTheCONTROLFILE.
BeforeSwitchLog,TheCurrentLogis:
数据库日志模式存档模式
自动存档启用
存档终点d:
\BACKUPDB\archive
最早的概要信息日志序列0
下一个存档日志序列1
当前日志序列1
BeginBackupSwitchCurrentLog...
SuccessedEndSwitchLog.
AfterSwitchLog,TheEndingArchiveLogNumberIs:
数据库日志模式存档模式
自动存档启用
存档终点d:
\BACKUPDB\archive
最早的概要信息日志序列1
下一个存档日志序列2
当前日志序列2
20-10月-02
SQL>--settermouton;
SQL>
SQL>selectto_char(sysdate,'''yyyy-mm-ddhh:
mm:
ss''')fromdual;
'2002-10-2008:
10:
15'
已选择1行。
SQL>
*仅仅丢失一个普通用户数据文件的恢复A(联机恢复)
(例如,丢失D:
\BACKUPDB\USERS01.DBF)
准备工作
通过下面的工作,如果完全恢复,应该可以看到;insertintotest1values
(2);
SQL>connlunar/lunar
已连接。
SQL>select*fromtab;
TESTBACKUP3TABLE
已选择1行。
SQL>createtabletest1
2(anumber);
表已创建。
SQL>insertintotest1values
(1);
已创建1行。
SQL>altersystemswitchlogfile;
系统已更改。
SQL>commit;
提交完成。
SQL>altersystemswitchlogfile;
系统已更改。
SQL>insertintotest1values
(2);
已创建1行。
SQL>commit;
提交完成。
SQL>altersystemswitchlogfile;
系统已更改。
SQL>conninternal
已连接。
SQL>archiveloglist
数据库日志模式存档模式
自动存档启用
存档终点d:
\BACKUPDB\archive
最早的概要信息日志序列3
下一个存档日志序列5
当前日志序列5
SQL>
shutdownabort关闭例程,模拟数据文件丢失
SQL>shutdownabort
ORACLE例程已经关闭。
Mount数据库
SQL>startupmount
ORACLE例程已经启动。
TotalSystemGlobalArea25856028bytes
FixedSize75804bytes
VariableSize8925184bytes
DatabaseBuffers16777216bytes
RedoBuffers77824bytes
数据库装载完毕。
使损坏的数据文件脱机
SQL>alterdatabasedatafile'D:
\BACKUPDB\USERS01.DBF'offline;
数据库已更改。
打开数据库
SQL>alterdatabaseopen;
数据库已更改。
SQL>
拷贝刚才热备的数据文件(USERS01.DBF)
恢复损坏的数据文件
SQL>recoverdatafile'D:
\BACKUPDB\USERS01.DBF';
ORA-00279:
?
?
424116(?
10/20/200220:
42:
04?
?
)?
?
?
?
1?
?
?
?
ORA-00289:
?
?
:
D:
\BACKUPDB\ARCHIVE\BACKUPT001S00001.ARC
ORA-00280:
?
?
424116?
?
?
?
1?
?
?
?
#1?
?
?
指定日志:
{=suggested|filename|AUTO|CANCEL}
auto
ORA-00279:
?
?
424125(?
10/20/200220:
44:
14?
?
)?
?
?
?
1?
?
?
?
ORA-00289:
?
?
:
D:
\BACKUPDB\ARCHIVE\BACKUPT001S00002.ARC
ORA-00280:
?
?
424125?
?
?
?
1?
?
?
?
#2?
?
?
ORA-00278:
?
?
?
?
?
?
?
?
?
?
?
'D:
\BACKUPDB\ARCHIVE\BACKUPT001S00001.ARC'
ORA-00279:
?
?
424135(?
10/20/200221:
55:
35?
?
)?
?
?
?
1?
?
?
?
ORA-00289:
?
?
:
D:
\BACKUPDB\ARCHIVE\BACKUPT001S00003.ARC
ORA-00280:
?
?
424135?
?
?
?
1?
?
?
?
#3?
?
?
ORA-00278:
?
?
?
?
?
?
?
?
?
?
?
'D:
\BACKUPDB\ARCHIVE\BACKUPT001S00002.ARC'
已应用的日志。
完成介质恢复。
SQL>
使恢复完成的数据文件联机
SQL>alterdatabasedatafile'D:
\BACKUPDB\USERS01.DBF'online;
Databasealtered.
验证恢复的结果:
完全恢复
SQL>select*fromtab;
TNAMETABTYPECLUSTERID
-----------------------------------------------
TEST1TABLE
TESTBACKUP3TABLE
SQL>select*fromtest1;
A
----------
1
2
说明:
1.shutdownabort关闭例程,模拟数据文件丢失
2.Mount数据库
3.使损坏的数据文件脱机
4.打开数据库
5.拷贝刚才热备的数据文件(USERS01.DBF)
6.恢复损坏的数据文件
7.使恢复完成的数据文件联机
*仅仅丢失一个普通用户数据文件的恢复B(脱机恢复)
准备工作
按照下面的输入,如果全部恢复,应该可以看到insertintotest1values(13),因为insertintotest1values(14)没提交。
SQL>connlunar/lunar
Connected.
SQL>insertintotest1values(13);
1rowcreated.
SQL>commit;
Commitcomplete.
SQL>insertintotest1values(14);
1rowcreated.
Shutdownimmediate,然后模拟数据文件丢失
单开一个session,执行shutdownimmediate(保证insertintotest1values(14);没有被隐士提交)
MicrosoftWindows2000[Version5.00.2195]
(C)版权所有1985-2000MicrosoftCorp.
E:
\>sqlplusinternal
SQL*Plus:
Release8.1.7.0.0-Productionon星期一10月2102:
36:
072002
(c)Copyright2000OracleCorporation.Allrightsreserved.
连接到:
Oracle8iEnterpriseEditionRelease8.1.7.0.0-Production
WiththePartitioningoption
JServerRelease8.1.7.0.0-Production
SQL>shutdownimmediate
数据库已经关闭。
已经卸载数据库。
ORACLE例程已经关闭。
SQL>
模拟数据文件丢失,然后用热备覆盖这个文件
mount数据库
E:
\>sqlplusinternal
SQL*Plus:
Release8.1.7.0.0-ProductiononMonOct2102:
42:
472002
(c)Copyright2000OracleCorporation.Allrightsreserved.
Connectedtoanidleinstance.
SQL>shutdownimmediate
ORA-01034:
ORACLEnotavailable
ORA-27101:
sharedmemoryrealmdoesnotexist
SQL>startupmount
ORACLEinstancestarted.
TotalSystemGlobalArea25856028bytes
FixedSize75804bytes
VariableSize8925184bytes
DatabaseBuffers16777216bytes
RedoBuffers77824bytes
Databasemounted.
SQL>
使损坏的数据文件脱机
SQL>alterdatabasedatafile'D:
\BACKUPDB\USERS01.DBF'offline;
Databasealtered.
恢复数据文件
SQL>recoverdatafile'D:
\BACKUPDB\USERS01.DBF';
ORA-00279:
change424116generatedat10/20/200220:
42:
04neededforthread1
ORA-00289:
suggestion:
D:
\BACKUPDB\ARCHIVE\BACKUPT001S00001.ARC
ORA-00280:
change424116forthread1isinsequence#1
Specifylog:
{=suggested|filename|AUTO|CANCEL}
auto
ORA-00279:
change424125generatedat10/20/200220:
44:
14neededforthread1
ORA-00289:
suggestion:
D:
\BACKUPDB\ARCHIVE\BACKUPT001S00002.ARC
ORA-00280:
change424125forthread1isinsequence#2
ORA-00278:
logfile'D:
\BACKUPDB\ARCHIVE\BACKUPT001S00001.ARC'nolongerneeded
forthisrecovery
ORA-00279:
change424135generatedat10/20/200221:
55:
35neededforthread1
ORA-00289:
suggestion:
D:
\BACKUPDB\ARCHIVE\BACKUPT001S00003.ARC
ORA-00280:
change424135forthread1isinsequence#3
ORA-00278:
logfile'D:
\BACKUPDB\ARCHIVE\BACKUPT001S00002.ARC'nolongerneeded
forthisrecovery
ORA-00279:
change424139generatedat10/20/2002