1、搭建實驗環境
1.建立8張表scott.lxtb1-lxtb8
create table scott.lxtb8 tablespace lxtb as select * from scott.emp;
2.3DML操做
insert into scott.lxtb8 select * from scott.emp;
commit;
alter system archive log current;
insert into scott.lxtb8 select * from scott.emp;
commit;
insert into scott.lxtb8 select * from scott.emp;
select count(1) from scott.lxtb8;數據庫
3.冷備轉儲腳本
cp /u01/app/backdir/cold_bak/lxtb01.dbf /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/cold_bak/o1_mf_example_bv77pklo_.dbf /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/cold_bak/o1_mf_sysaux_bv77pkly_.dbf /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/cold_bak/o1_mf_system_bv77pklf_.dbf /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/cold_bak/o1_mf_undotbs1_bv77pkm9_.dbf /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/cold_bak/o1_mf_users_bv77pkmz_.dbf /u01/app/oracle/oradata/ipemsdb/datafile/緩存
cp /u01/app/backdir/cold_bak/o1_mf_bvk6hfdo_.ctl /u01/app/oracle/flash_recovery_area/ipemsdb/controlfile/
cp /u01/app/backdir/cold_bak/o1_mf_bvk6hd3p_.ctl /u01/app/oracle/oradata/ipemsdb/controlfile/session
4.熱備轉儲腳本
cp /u01/app/backdir/hot_bak/o1_mf_system_bwbn1ybd_.dbf /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/hot_bak/o1_mf_undotbs1_bwbn1ydc_.dbf /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/hot_bak/o1_mf_sysaux_bwbn1ybj_.dbf /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/hot_bak/o1_mf_users_bwbn1ysx_.dbf /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/hot_bak/o1_mf_example_bwbn1ybs_.dbf /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/hot_bak/lxtb01.dbf /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/hot_bak/oltp01.dbf /u01/app/oracle/oradata/ipemsdb/datafile/
cp /u01/app/backdir/hot_bak/nk_16k_01.dbf /u01/app/oracle/oradata/ipemsdb/datafile/
2、徹底恢復實驗
1.丟失全部數據文件和控制文件
備份控制文件-3DML-查控制文件,數據文件-斷電-刪控制文件,數據文件-啓庫-
重建控制文件(noresetlogs)-報錯-轉儲數據文件-再重建(noresetlogs)-啓mount-查-恢復數據庫-開庫
show parameter dump;
alter database backup controlfile to trace as '/u01/app/oracle/admin/ipemsdb/udump/controlfile_backup.trc';
cd /u01/app/oracle/admin/ipemsdb/udump
ls -lht *_ora*
select name from v$controlfile;
select name from v$datafile;
ORA-00205: error in identifying control file, check alert log for more infooracle
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-01565: error in identifying file '/u01/app/oracle/oradata/ipemsdb/datafile/o1_mf_system_bv77pklf_.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3app
若是開啓了OMF則須要註釋參數文件裏控制文件的名稱
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-01276: Cannot add file /u01/app/oracle/oradata/ipemsdb/controlfile/o1_mf_bv76kfh1_.ctl.
File has an Oracle Managed Files file name.
註釋後經過pfile建立spfile,從spfile啓動數據庫或從pfile啓動
startup nomount pfile= '/u01/app/oracle/product/10.2.0/db_1/dbs/initipemsdb.ora'ide
select FILE#,ERROR from v$recover_file;
recover database;
alter database open;ui
若是刪除時也刪除了臨時數據文件,須要補充建立臨時數據文件
alter tablespace temp add tempfile;
alter tablespace temp add tempfile '/u01/app/oracle/oradata/ipemsdb/datafile/o1_mf_temp_bwbnc07b_.tmp' reuse;
查詢數據庫啓動狀態
select OPEN_MODE from v$database;this
2.丟失全部數據文件(通常模式)
3DML-查datafile-斷電-刪全部數據文件-啓-查v$recover_file-轉儲(熱備數據)-查3SCN-恢復數據庫-auto-open
因系統開啓了OMF功能,因此重建控制文件後,參數文件記錄的控制文件和實際建立的控制文件不一致,
重建控制文件開庫後-建立pfile-查詢當前controlfile-正常關庫-修改pfile中控制文件配置-從pfile啓動-建立spfile-重啓
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/u01/app/oracle/oradata/ipemsdb/datafile/o1_mf_system_bv77pklf_.dbf'
會自動建立臨時數據文件spa
3.丟失一個數據文件(通常模式)
3DML-查datafile-斷電-刪一個dbf-啓-查-轉儲-恢復datafile[tablespace]-auto-open
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/u01/app/oracle/oradata/ipemsdb/datafile/lxtb01.dbf'
select file#,error from v$recover_file;
SQL> recover datafile 6;
ORA-00279: change 3288989 generated at 07/30/2015 01:58:40 needed for thread 1
ORA-00289: suggestion : /u01/arc_dir/1_8_886071850.dbf
ORA-00280: change 3288989 for thread 1 is in sequence #8
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: change 3289453 generated at 07/30/2015 02:02:54 needed for thread 1
ORA-00289: suggestion : /u01/arc_dir/1_9_886071850.dbf
ORA-00280: change 3289453 for thread 1 is in sequence #9
ORA-00278: log file '/u01/arc_dir/1_8_886071850.dbf' no longer needed for this recovery日誌
4.丟失一個數據文件(高可用模式)
3DML-查datafile-斷電-刪一個dbf-啓-查-數據文件脫機-開庫-轉儲-恢復datafile[tablespace]-auto-聯機
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/u01/app/oracle/oradata/ipemsdb/datafile/lxtb01.dbf'
alter database datafile '/u01/app/oracle/oradata/ipemsdb/datafile/lxtb01.dbf' offline;
SQL> recover tablespace lxtb;
ORA-00279: change 3288989 generated at 07/30/2015 01:58:40 needed for thread 1
ORA-00289: suggestion : /u01/arc_dir/1_8_886071850.dbf
ORA-00280: change 3288989 for thread 1 is in sequence #8
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
Log applied.
Media recovery complete.
alter database datafile 6 online;
5.不關庫下實驗丟失一個數據文件(高可用模式):
3DML-刪-清理緩存-退出再登錄-數據文件脫機-轉儲-恢復-聯機 --56由於readhate下推出會隱式提交
alter system flush buffer_cache; --也會隱式提交
ERROR at line 1:
ORA-01116: error in opening database file 6
ORA-01110: data file 6: '/u01/app/oracle/oradata/ipemsdb/datafile/lxtb01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
alter database datafile '/u01/app/oracle/oradata/ipemsdb/datafile/lxtb01.dbf' offline;
SQL> recover tablespace lxtb;
ORA-00279: change 3288989 generated at 07/30/2015 01:58:40 needed for thread 1
ORA-00289: suggestion : /u01/arc_dir/1_8_886071850.dbf
ORA-00280: change 3288989 for thread 1 is in sequence #8
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
Log applied.
Media recovery complete.
SQL> alter database datafile 6 online;
6.不可轉儲,沒有備份狀況下丟失部分數據文件,丟失的數據文件在控制文件改變以後
建立表空間-建立表-3DML-斷電-刪除dbf-啓-查-脫機-開庫-建立空白數據文件-恢復數據文件-聯機
create tablespace test datafile '/u01/app/oracle/oradata/ipemsdb/datafile/test01.dbf'
size 20M size 50M reuse autoextend on next 5m;;
create table scott.lxtb06 tablespace test as select * from scott.emp;
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/u01/app/oracle/oradata/ipemsdb/datafile/test01.dbf'
select file#,error from v$recover_file;
alter database datafile 7 offline;
alter database open;
alter database create datafile '/u01/app/oracle/oradata/ipemsdb/datafile/test01.dbf';
若是數據文件先與控制文件建立則無從新建立數據文件
ERROR at line 1:
ORA-01178: file 6 created before last CREATE CONTROLFILE, cannot recreate
ORA-01110: data file 6: '/u01/app/oracle/oradata/ipemsdb/datafile/lxtb01.dbf'
recover datafile 7;
alter database datafile 7 online;
7.數據文件恢復到新位置
3DML-斷電-刪一個數據文件-啓-脫機-開庫-轉儲新位置-更新位置-恢復-聯機
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/u01/app/oracle/oradata/ipemsdb/datafile/lxtb01.dbf'
alter database rename file '/u01/app/oracle/oradata/ipemsdb/datafile/lxtb01.dbf' to '/u01/app/oracle/oradata/ipemsdb/datafile/newdir/lxtb01.dbf';
切到非歸檔模式
shutdown immediate;
startup mount
alter database noarchivelog;
alter database open;
冷備
8.日誌組被未覆蓋
3DML-斷電-刪1個dbf-啓-查SCN-轉儲-恢復數據文件-開庫
alter system switch logfile;
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/u01/app/oracle/oradata/ipemsdb/datafile/lxtb01.dbf'
--壞塊
ORA-26040: Data block was loaded using the NOLOGGING option
9.日誌組有被覆蓋
3DML-屢次切日誌-斷電-刪1dbf-啓-查-轉儲1個-recover datafile-不行
-轉儲全部dbf-recover database utill cancel-cancel-open resetlogs(若是還不行)
-正常關-轉儲數據和控制文件-mount-查3SCN-recover database utill cancel-open resetlogs
包含了直接物理還原(拷貝回全部備份的文件)的過程。
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/u01/app/oracle/oradata/ipemsdb/datafile/lxtb01.dbf'
恢復單個數據文件
recover datafile 6;
ORA-00279: change 6905237 generated at 11/03/2015 13:09:55 needed for thread 1
ORA-00289: suggestion : /u01/duplex/1_1_894801153.dbf
ORA-00280: change 6905237 for thread 1 is in sequence #1
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: cannot open archived log '/u01/duplex/1_1_894801153.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
v$datafile 的checkpoint_change# 同步,v$datafile_header的checkpoint_change#爲備份時的狀態
若是隻轉儲單個數據文件,恢復數據庫時也會報錯
recover database until cancel;
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u01/app/oracle/oradata/ipemsdb/datafile/o1_mf_system_bwbn1ybd_.dbf'
3、設想的集中恢復狀況
非歸檔模式
1.沒開歸檔,備份了dbf,ctl,redo,存放這些文件的磁盤壞了,恢復
冷備dbf,ctl,redo,開庫,3DML,斷電,刪全部dbf,ctl,redo,開庫
ORA-00205: error in identifying control file, check alert log for more info
轉儲ctl文件,關庫再啓
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1:
'/u01/app/oracle/oradata/ipemsdb/datafile/o1_mf_system_bwbn1ybd_.dbf'
select open_mode from v$database;
select file#,error from v$recover_file;
轉儲dbf,redo文件,查詢3SCN徹底一致
select checkpoint_change# from v$database;
select checkpoint_change# from v$datafile;
select checkpoint_change# from v$datafile_header;
開庫
alter database open;
2.沒開歸檔,備份了dbf,ctl,redo,存放dbf,ctl文件的磁盤壞了,redo文件好着,恢復
冷備dbf,ctl,redo,開庫,3DML,斷電,刪全部dbf,ctl,開庫
ORA-00205: error in identifying control file, check alert log for more info
轉儲ctl文件,關庫再啓
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1:
'/u01/app/oracle/oradata/ipemsdb/datafile/o1_mf_system_bwbn1ybd_.dbf'
select open_mode from v$database;
select file#,error from v$recover_file;
查詢3SNC,轉儲全部dbf文件,再查詢3SN,open database
ERROR at line 1:
ORA-00314: log 3 of thread 1, expected sequence# 3 doesn't match 7
ORA-00312: online log 3 thread 1:
'/u01/app/oracle/oradata/ipemsdb/onlinelog/o1_mf_3_bw56dvct_.log'
resetlogs開庫也報錯
alter database open resetlogs
*
ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1:
'/u01/app/oracle/oradata/ipemsdb/datafile/o1_mf_system_bwbn1ybd_.dbf'
刪掉redo,轉儲redo
alter database open noresetlogs;
3.沒開歸檔,備份了dbf,ctl,redo,存放dbf,redo文件的磁盤壞了,恢復
冷備dbf,ctl,redo,開庫,3DML,斷電,刪全部dbf,redo,開庫
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1:
'/u01/app/oracle/oradata/ipemsdb/datafile/o1_mf_system_bwbn1ybd_.dbf'
查3SN,查v$recover_file,轉儲dbf,開庫
alter database open
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1:
'/u01/app/oracle/oradata/ipemsdb/datafile/o1_mf_system_bwbn1ybd_.dbf'
恢復數據庫
recover database until cancel;
ORA-00279: change 6910581 generated at 11/03/2015 16:33:01 needed for thread 1
ORA-00289: suggestion : /u01/duplex/1_3_894811869.dbf
ORA-00280: change 6910581 for thread 1 is in sequence #3
alter database open resetlogs
*
ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1:
'/u01/app/oracle/oradata/ipemsdb/datafile/o1_mf_system_bwbn1ybd_.dbf'
轉儲回redo文件,取消恢復,仍然報錯
關庫,轉儲控制文件和數據文件[日誌文件],取消恢復[直接開庫]
歸檔模式
4.歸檔模式下,冷備了ctl,dbf,redo,arc文件,dbf,ctl壞了恢復
冷備,3DML,斷電,刪dbf,ctl,啓,轉儲ctl,啓,查3SCN,轉儲dbf
ORA-00338: log 1 of thread 1 is more recent than control file
將控制文件生成trac文件,重建控制文件,將數據庫啓動到nomount狀態,重
建控制文件,介質恢復至最後一次提交
5.歸檔模式下,冷備了ctl,dbf,redo,arc文件,dbf,ctl,redo壞了恢復
冷備,3DML,斷電,刪dbf,ctl,啓
ORA-00205: error in identifying control file, check alert log for more info
shutdown abort,轉儲回ctl,啓動到mount,生成控制文件的trac文件
alter database backup controlfile to trace as '/u01/app/oracle/admin/ipemsdb/udump/controlfile_1203.trc';
利用腳本建立控制文件,控制文件裏要求的數據文件和日誌文件都要存在
recover database;
ORA-00283: recovery session canceled due to errors
ORA-00264: no recovery required
recover database using backup controlfile until cancel;
cancel
恢復到了最後一次提交
歸檔模式下,只要有歸檔日誌,當前聯機日誌,控制文件備份,就能夠恢復到最後一次提交,沒有當前日誌
時,可能會恢復到最後一次提交
手動備份轉儲腳本
cp /u01/app/oracle/oradata/ipemsdb/datafile/* /u01/app/backdir/manual/datafile/
cp /u01/app/oracle/oradata/ipemsdb/controlfile/* /u01/app/backdir/manual/ctlfile/
cp /u01/app/oracle/oradata/ipemsdb/onlinelog/* /u01/app/backdir/manual/logfile/
cp /u01/app/backdir/manual/datafile/* /u01/app/oracle/oradata/ipemsdb/datafile/ cp /u01/app/backdir/manual/ctlfile/* /u01/app/oracle/oradata/ipemsdb/controlfile/ cp /u01/app/backdir/manual/logfile/* /u01/app/oracle/oradata/ipemsdb/onlinelog/