程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle備份與恢復案例(By Piner)

Oracle備份與恢復案例(By Piner)

編輯:Oracle數據庫基礎
一. 理解什麼是數據庫恢復
   當我們使用一個數據庫時,總希望數據庫的內容是可靠的、正確的,但由於計算機系統的故障(硬件故障、軟件故障、網絡故障、進程故障和系統故障)影響數據庫系統的操作,影響數據庫中數據的正確性,甚至破壞數據庫,使數據庫中全部或部分數據丟失。因此當發生上述故障後,希望能重構這個完整的數據庫,該處理稱為數據庫恢復。恢復過程大致可以分為復原(Restore)與恢復(Recover)過程。 數據庫恢復可以分為以下兩類: 1.1實例故障的一致性恢復 當實例意外地(如掉電、後台進程故障等)或預料地(發出SHUTDOUM ABORT語句)中止時出現實例故障,此時需要實例恢復。實例恢復將數據庫恢復到故障之前的事務一致狀態。如果在在線後備發現實例故障,則需介質恢復。在其它情況Oracle在下次數據庫起動時(對新實例裝配和打開),自動地執行實例恢復。如果需要,從裝配狀態變為打開狀態,自動地激發實例恢復,由下列處理:   (1) 為了解恢復數據文件中沒有記錄的數據,進行向前滾。該數據記錄在在線日志, 包括對回滾段的內容恢復。   (2) 回滾未提交的事務,按步1重新生成回滾段所指定的操作。   (3) 釋放在故障時正在處理事務所持有的資源。   (4) 解決在故障時正經歷一階段提交的任何懸而未決的分布事務。
1.2介質故障或文件錯誤的不一致恢復 介質故障是當一個文件、一個文件的部分或磁盤不能讀或不能寫時出現的故障。文件錯誤一般指意外的錯誤導致文件被刪除或意外事故導致文件的不一致。這種狀態下的數據庫都是不一致的,需要DBA手工來進行數據庫的恢復,這種恢復有兩種形式,決定於數據庫運行的歸檔方式和備份方式。 (1) 完全介質恢復可恢復全部丟失的修改。一般情況下需要有數據庫的備份且數據庫運行在歸檔狀態下並且有可用歸檔日志時才可能。對於不同類型的錯誤,有不同類型的完全恢復可使用,其決定於毀壞文件和數據庫的可用性。 (2) 不完全介質恢復是在完全介質恢復不可能或不要求時進行的介質恢復。重構受損的數據庫,使其恢復介質故障前或用戶出錯之前的一個事務一致性狀態。不完全介質恢復有不同類型的使用,決定於需要不完全介質恢復的情況,有下列類型:基於撤消、基於時間和基於修改的不完全恢復。   基於撤消(CANCEL)恢復:在某種情況,不完全介質恢復必須被控制,DBA可撤消在指定點的操作。基於撤消的恢復地在一個或多個日志組(在線的或歸檔的)已被介質故障所破壞,不能用於恢復過程時使用,所以介質恢復必須控制,以致在使用最近的、未損的日志組於數據文件後中止恢復操作。   基於時間(TIME)和基於修改(SCN)的恢復:如果DBA希望恢復到過去的某個指定點,是一種理想的不完全介質恢復,一般發生在恢復到某個特定操作之前,恢復到如意外刪除某個數據表之前。 第二章. 數據庫恢復案例測試環境
2.1 數據庫環境 以下的所有案例都是通過測試經過,環境為:   OS:Windows 2000 Server   DB:Oracle 816   DBNAME:TEST 數據文件: SQL> select file#,status,enabled,name from v$datafile;     FILE# STATUS  ENABLED      NAME ----------------------------------------------------------------          1 SYSTEM  READ WRITE D:\Oracle\ORADATA\TEST\SYSTEM01.DBF          2 ONLINE  READ WRITE D:\Oracle\ORADATA\TEST\RBS01.DBF          3 ONLINE  READ WRITE D:\Oracle\ORADATA\TEST\USERS01.DBF          4 ONLINE  READ WRITE D:\Oracle\ORADATA\TEST\TEMP01.DBF          5 ONLINE  READ WRITE D:\Oracle\ORADATA\TEST\TOOLS01.DBF          6 ONLINE  READ WRITE D:\Oracle\ORADATA\TEST\INDX01.DBF 控制文件: SQL> select * from v$controlfile; STATUS  NAME ---------------------------------------------------------------------         D:\Oracle\ORADATA\TEST\CONTROL01.CTL         D:\Oracle\ORADATA\TEST\CONTROL02.CTL         D:\Oracle\ORADATA\TEST\CONTROL03.CTL
聯機日志: SQL> select * from v$logfile;     GROUP# STATUS      MEMBER ---------------------------------------------------------------------       1     STALE      D:\Oracle\ORADATA\TEST\REDO01.LOG       2               D:\Oracle\ORADATA\TEST\REDO02.LOG       3     STALE      D:\Oracle\ORADATA\TEST\REDO03.LOG 2.2 數據庫備份腳本 冷備份腳本: rem     script:coldbak.sql rem     creater:chenjiping rem     date:5.8.2003 rem     desc:offline full backup database --connect database connect internal/password; --shutdown database shutdown immediate; --Copy Data file !xcopy d:\Oracle\oradata\test\*.dbf d:\database/H/R; --Copy Control file !xcopy d:\Oracle\oradata\test\*.ctl d:\database/H/R; --Copy Log file !xcopy d:\Oracle\oradata\test\*.log d:\database/H/R; --startup database startup; 說明: 1、以上腳本在數據庫關閉狀態下備份數據庫所有的數據文件,聯機日志,控制文件(在一個目 錄下),如果成功備份,所有文件是一致的; 2、沒有備份參數文件,參數文件可以另外備份,沒有必要每次都備份,只需要在改變設置後備份一次; 3、如果以上命令沒有成功依次執行,那麼備份將是無效的,如連接數據庫不成功,那麼肯定關閉數據庫也不成功,那麼備份則無效; 4、冷備份建議下人工干預下執行。 數據庫OS熱全備份腳本 rem     script:hotbak.sql rem     creater:chenjiping rem     date:5.8.2003 rem     desc:backup all database datafile in archive --connect database connect internal/passWord; --archive alter system archive log current; --start alter tablespace system begin backup; !xcopy d:\Oracle\oradata\test\system01.dbf d:\databak/H/R; alter tablespace system end backup; alter tablespace rbs begin backup; !xcopy d:\Oracle\oradata\test\rbs01.dbf d:\databak/H/R; alter tablespace rbs end backup; alter tablespace users begin backup; !xcopy d:\Oracle\oradata\test\users01.dbf d:\databak/H/R; alter tablespace users end backup; alter tablespace tools begin backup; !xcopy d:\Oracle\oradata\test\tools01.dbf d:\databak/H/R; alter tablespace tools end backup; alter tablespace indx begin backup; !xcopy d:\Oracle\oradata\test\indx01.dbf d:\databak/H/R; alter tablespace indx end backup; --end --bak control file --binary alter database backup controlfile to 'd:\databak\controlbinbak.000'; --ascii alter database backup controlfile to trace; alter system archive log current; 說明: 1、熱備份必須在數據庫歸檔方式下才可以運行; 2、以上腳本可以在數據庫運行狀態下備份數據庫所有的數據文件(除了臨時數據文件),沒有必要備份聯機日志; 3、歸檔日志至少需要一次完整備份之後的所有日志; 4、如果以上命令沒有成功依次執行,那麼備份也是無效的,如連接數據庫不成功,那麼備份則無效。 RMAN備份只講敘有恢復目錄的情況,如果沒有恢復目錄,情形大致相似。以下是RMAN的熱備份全備份的腳本: #   script:bakup.rcv #   creater:chenjiping #   date:5.8.2003 #   desc:backup all database datafile in archive with rman # connect database connect rcvcat rman/rman@back; connect target internal/virpure; # start backup database run{ allocate channel c1 type disk; backup full tag 'dbfull' format 'd:\backup\full%u_%s_%p' database include current controlfile; sql 'alter system archive log current'; release channel c1; } # end 說明: 1、 數據庫必須運行在歸檔模式下; 2、 RMAN將自動備份數據文件,運行可靠; 3、 歸檔日志另外備份處理,但至少需要保存一次備份來的日志; 4、 沒有必要用RMAN做冷備份,效果不好。 以上舉例說明了數據庫的恢復案例的測試環境與部分備份測試腳本,其它的備份腳本可以根據以上腳本演變而來或在案例中加以說明。 數據庫的自動實例將不加以說明,這裡只舉例說明媒體錯誤或人為錯誤造成的恢復可能。 以上包括以下案例都是在Windows+Oracle816上測試驗證的,在不同的操作系統與不同的數據庫版本中略有差別。 第三章. 了解與恢復相關的信息 1、 理解報警日志文件 報警日志文件一般記載了數據庫的啟動/關閉信息,歸檔信息,備份信息,恢復信息,常見錯誤信息,部分數據庫修改記錄等。一般令名規則為<SID>Alrt.log或Alrt<SID>.log,如我的測試數據庫的報警日志文件的名稱為testalrt.log。 報警日志文件的路徑是根據初始化參數background_dump_dest來決定的,如在我的機器上,該參數值為 D:\Oracle\admin\test\bdump,那麼,你就可以在該路徑下找到該文件。 2、 後台進程跟蹤文件 後台進程跟蹤文件的路徑與報警日志文件的路徑一致,在某些情況下,你可以通過後台跟蹤文件的信息了解更多的需要恢復的信息。如在數據庫需要恢復的時候,報警日志文件中常有這樣的語句: Errors in file D:\Oracle\admin\test\bdump\testDBW0.TRC: ORA-01157: cannot identify/lock data file 1 - see DBWR trace file 通過提示的DBWR跟蹤文件,可以查詢到更詳細的信息。
3、 v$recover_file與v$recovery_log 這是兩個動態性能視圖,可以在mount下查看,通過這兩個視圖,你可以了解詳細的需要恢復的數據文件與需要使用到的歸檔日志。 第四章. 數據庫恢復案例
4.1非歸檔模式下的備份與恢復 備份方案:采用OS冷備份 1.  連接數據庫並創建測試表 SQL> connect internal/passWord as sysdba; Connected. SQL> create table test(a int); Table created SQL> insert into test values(1); 1 row inserted SQL> commit; Commit complete 2.  備份數據庫 SQL> @coldbak.sql 或在DOS下 svrmgrl @coldbak.sql 3.  再插入記錄 SQL> insert into test values(2); 1 row inserted SQL> commit; Commit complete SQL> select * from test;                          A -------------------                          1                          2 4.  關閉數據庫 SQL> shutdown immediate; Database closed. Database dismounted. Oracle instance shut down. 5.  毀壞一個或多個數據文件,如刪除user01.dbf C:\>del D:\Oracle\ORADATA\TEST\USERS01.DBF 模擬媒體毀壞。 6.  重新啟動數據庫,會發現如下錯誤 SQL> startup Oracle instance started. Total System Global Area  102020364 bytes Fixed Size                    70924 bytes Variable Size              85487616 bytes Database Buffers           16384000 bytes Redo Buffers                  77824 bytes Database mounted. ORA-01157: cannot identify/lock data file 3 - see DBWR trace file ORA-01110: data file 3: 'D:\Oracle\ORADATA\TEST\USERS01.DBF' 在報警文件中,會有更詳細的信息 Errors in file D:\Oracle\admin\test\bdump\testDBW0.TRC: ORA-01157: cannot identify/lock data file 3 - see DBWR trace file ORA-01110: data file 3: 'D:\Oracle\ORADATA\TEST\USERS01.DBF' ORA-27041: unable to open file OSD-04002: unable to open file O/S-Error: (OS 2) 系統找不到指定的文件。 7.  拷貝備份復原到原來位置(restore過程) C:\>xcopy d:\database\*.* d:\Oracle\oradata\test/H/R/S 8.  打開數據庫,檢查數據 SQL> alter database open; Database altered. SQL> select * from test;                          A ---------------------------------------                          1 這裡可以發現,數據庫恢復成功,但在備份之後與崩潰之前的數據丟失了。 說明: 1、非歸檔模式下的恢復方案可選性很小,一般情況下只能有一種恢復方式,就是數據庫的冷備
份的完全恢復,僅僅需要拷貝原來的備份就可以(restore),不需要recover; 2、這種情況下的恢復,可以完全恢復到備份的點上,但是可能是丟失數據的,在備份之後與崩潰之前的數據將全部丟失; 3、不管毀壞了多少數據文件或是聯機日志或是控制文件,都可以通過這個辦法恢復,因為這個恢復過程是Restore所有的冷備份文件,而這個備份點上的所有文件是一致的,與最新的數據庫沒有關系,就好比把數據庫又放到了一個以前的"點"上; 4、對於非歸檔模式下,最好的辦法就是采用OS的冷備份,建議不要用RMAN來作冷備份,效果不好,因為RMAN不備份聯機日志,restore不能根本解決問題; 5、如果沒有備份聯機日志,如RMAN的備份,就需要利用不完全恢復(until cancel)的方法來重新創建聯機日志文件。 4.2歸檔模式下丟失或損壞一個數據文件 4.2.1 OS備份方案 在歸檔方式下損壞或丟失一個數據文件,如果存在相應的備份與該備份以來的歸檔日志,恢復還是比較簡單的,可以作到盡量少的Down機時間,並能作到數據庫的完全恢復。 1、 連接數據庫,創建測試表並插入記錄 SQL> connect internal/passWord as sysdba; Connected. SQL> create table test(a int) tablespace users; Table created SQL> insert into test values(1); 1 row inserted SQL> commit; Commit complete 2、 備份數據庫 SQL> @hotbak.sql 或在DOS下 svrmgrl @hotbak.sql 3、 繼續在測試表中插入記錄 SQL> insert into test values(2); 1 row inserted SQL> commit; Commit complete SQL> select * from test;                          A     --------------------------------------                          1                          2 SQL> alter system switch logfile; System altered. SQL> alter system switch logfile; System altered. 4、 關閉數據庫,模擬丟失數據文件 SQL> shutdown immediate; Database closed. Database dismounted. Oracle instance shut down C:\>del D:\Oracle\ORADATA\TEST\USERS01.DBF 模擬媒體毀壞。 5、 啟動數據庫錯誤,脫機該數據文件: SQL> startup Oracle instance started. Total System Global Area  102020364 bytes Fixed Size                    70924 bytes Variable Size              85487616 bytes Database Buffers           16384000 bytes Redo Buffers                  77824 bytes Database mounted. ORA-01157: cannot identify/lock data file 3 - see DBWR trace file ORA-01110: data file 3: 'D:\Oracle\ORADATA\TEST\USERS01.DBF' 還可以查看報警文件(見上一個恢復案例)或動態視圖v$recover_file 如SQL> select * from v$recover_file;      FILE# ONLINE  ERROR                    CHANGE#     TIME ---------- ------- ------------------ ---------- -----------          3   ONLINE                        1013500    2003-05-07 脫機數據文件 SQL> alter database datafile 3 offline drop; Database altered. 6、 打開數據庫,拷貝備份回來(restore),恢復(recover)該數據文件,並聯機: SQL> alter database open; Database altered.
拷貝備份從備份處 copy d:\databak\ users01.dbf d:\Oracle\oradata\test;
恢復該數據文件 SQL> recover datafile 3; ORA-00279: change 1053698 generated at 05/07/2003 17:51:26 needed for thread 1 ORA-00289: suggestion :
D:\Oracle\ORADATA\TEST\ARCHIVE\TESTT001S00304.ARC ORA-00280: change 1053698 for thread 1 is in sequence #304 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} AUTO ORA-00279: change 1053701 generated at 05/07/2003 17:51:39 needed for thread 1 ORA-00289: suggestion : D:\Oracle\ORADATA\TEST\ARCHIVE\TESTT001S00305.ARC ORA-00280: change 1053701 for thread 1 is in sequence #305 ORA-00278: log file 'D:\Oracle\ORADATA\TEST\ARCHIVE\TESTT001S00304.ARC' no longer needed for this recovery Log applied. Media recovery complete. 恢復成功,聯機該數據文件 SQL> alter database datafile 3 online; Database altered. 7、 檢查數據庫的數據(完全恢復) SQL> select * from test;                          A --------------------------------                          1                          2 說明: 1、采用熱備份,需要運行在歸檔模式下,可以實現數據庫的完全恢復,也就是說,從備份後到數據庫崩潰時的數據都不會丟失; 2、可以采用全備份數據庫的方式備份,對於特殊情況,也可以只備份特定的數據文件,如只備份用戶表空間(一般情況下對於某些寫特別頻繁的數據文件,可以單獨加大備份頻率); 3、如果在恢復過程中,發現損壞的是多個數據文件,即可以采用一個一個數據文件的恢復方法(第5步中需要對數據文件一一脫機,第6步中需要對數據文件分別恢復),也可以采用整個數據庫的恢復方法; 4、如果是系統表空間的損壞,不能采用此方法。 4.2.2 RMAN備份方案 RMAN也可以進行聯機備份,而且備份與恢復方法將比OS備份更簡單可靠。 1、連接數據庫,創建測試表並插入記錄 SQL> connect internal/password as sysdba; Connected. SQL> create table test(a int) tablespace users; Table created SQL> insert into test values(1); 1 row inserted SQL> commit; Commit complete 2、 備份數據庫表空間users C:\>rman Recovery Manager: Release 8.1.6.0.0 - Production RMAN> connect rcvcat rman/rman@back RMAN-06008: connected to recovery catalog database RMAN> connect target internal/virpure RMAN-06005: connected to target database: TEST (DBID=1788174720) RMAN> run{ 2> allocate channel c1 type disk; 3> backup tag 'tsuser' format 'd:\backup\tsuser_%u_%s_%p' 4> tablespace users; 5> release channel c1; 6> } RMAN-03022: compiling command: allocate RMAN-03023: executing command: allocate RMAN-08030: allocated channel: c1 RMAN-08500: channel c1: sid=16 devtype=DISK RMAN-03022: compiling command: backup RMAN-03025: performing implicit partial resync of recovery catalog RMAN-03023: executing command: partial resync RMAN-08003: starting partial resync of recovery catalog RMAN-08005: partial resync complete RMAN-03023: executing command: backup RMAN-08008: channel c1: starting full datafile backupset RMAN-08502: set_count=5 set_stamp=494177612 creation_time=16-MAY-03 RMAN-08010: channel c1: specifying datafile(s) in backupset RMAN-08522: input datafile fno=00003 name=D:\Oracle\ORADATA\TEST\USER01.DBF RMAN-08013: channel c1: piece 1 created RMAN-08503: pIEce handle=D:\BACKUP\TSUSER_05EN93AC_5_1 comment=NONE RMAN-08525: backup set complete, elapsed time: 00:00:01 RMAN-03023: executing command: partial resync RMAN-08003: starting partial resync of recovery catalog RMAN-08005: partial resync complete RMAN-03022: compiling command: release RMAN-03023: executing command: release RMAN-08031: released channel: c1 RMAN> 3、 繼續在測試表中插入記錄 SQL> insert into test values(2); 1 row inserted SQL> commit; Commit complete SQL> select * from test;                          A ---------------------------------------                          1                          2 SQL> alter system switch logfile; System altered. SQL>r 1* alter system switch logfile; System altered. 4、 關閉數據庫,模擬丟失數據文件 SQL> shutdown immediate; Database closed. Database dismounted. Oracle instance shut down C:\>del D:\Oracle\ORADATA\TEST\USER01.DBF 5、 啟動數據庫,檢查錯誤 SQL> startup Oracle instance started. Total System Global Area  102020364 bytes Fixed Size                    70924 bytes Variable Size              85487616 bytes Database Buffers           16384000 bytes Redo Buffers                  77824 bytes Database mounted. ORA-01157: cannot identify/lock data file 3 - see DBWR trace file ORA-01110: data file 3: 'D:\Oracle\ORADATA\TEST\USER01.DBF' 6、 先打開數據庫 SQL> alter database datafile 3 offline drop; Database altered. SQL> alter database open; Database altered. 7、 恢復該表空間 恢復腳本可以是恢復單個數據文件 run{ allocate channel c1 type disk; restore datafile 3; recover datafile 3; sql 'alter database datafile 3 online'; release channel c1; } 也可以是,恢復表空間 run{ allocate channel c1 type disk; restore tablespace users; recover tablespace users; sql 'alter database datafile 3 online'; release channel c1; } 過程如下: C:\>rman Recovery Manager: Release 8.1.6.0.0 - Production RMAN> connect rcvcat rman/rman@back RMAN-06008: connected to recovery catalog database RMAN> connect target internal/virpure RMAN-06005: connected to target database: TEST (DBID=1788174720) RMAN> run{ 2> allocate channel c1 type disk; 3> restore datafile 3; 4> recover datafile 3; 5> sql 'alter database datafile 3 online'; 6> release channel c1; 7> } //輸出內容冗長,省略--編者 RMAN> 8、 檢查數據是否完整 SQL> alter database open; Database altered. SQL> select * from test;                          A ---------------------------------------                          1                          2 說明: 1、RMAN也可以實現單個表空間或數據文件的恢復,恢復過程可以在mount下或open方式下,如果在open方式下恢復,可以減少down機時間; 2、如果損壞的是一個數據文件,建議offline並在open方式下恢復; 3、這裡可以看到,RMAN進行數據文件與表空間恢復的時候,代碼都比較簡單,而且能保證備份與恢復的可靠性,所以建議采用RMAN的備份與恢復. 4.3丟失多個數據文件,實現整個數據庫的恢復. 4.3.1 OS備份方案 OS備份歸檔模式下損壞(丟失)多個數據文件,進行整個數據庫的恢復 1、 連接數據庫,創建測試表並插入記錄 SQL> connect internal/passWord as sysdba; Connected. SQL> create table test(a int); Table created SQL> insert into test values(1); 1 row inserted SQL> commit; Commit complete 2、 備份數據庫,備份除臨時數據文件後的所數據文件 SQL> @hotbak.sql 或在DOS下 svrmgrl @hotbak.sql 3、 繼續在測試表中插入記錄 SQL> insert into test values(2); 1 row inserted SQL> commit; Commit complete SQL> select * from test;                          A ---------------------------------------                          1                          2 SQL> alter system switch logfile; System altered. SQL> alter system switch logfile; System altered. 4、 關閉數據庫,模擬丟失數據文件 SQL> shutdown immediate; Database closed. Database dismounted. Oracle instance shut down C:\>del D:\Oracle\ORADATA\TEST\SYSTEM01.DBF C:\>del D:\Oracle\ORADATA\TEST\INDX01.DBF C:\>del D:\Oracle\ORADATA\TEST\TOOLS01.DBF C:\>del D:\Oracle\ORADATA\TEST\RBS01.DBF 模擬媒體毀壞(這裡刪除多個數據文件) 5、 啟動數據庫,檢查錯誤 SQL> STARTUP Oracle instance started. Total System Global Area  102020364 bytes Fixed Size                    70924 bytes Variable Size              85487616 bytes Database Buffers           16384000 bytes Redo Buffers                  77824 bytes Database mounted. ORA-01157: cannot identify/lock data file 1 - see DBWR trace file ORA-01110: data file 1: 'D:\Oracle\ORADATA\TEST\SYSTEM01.DBF' 詳細信息可以查看報警文件 ORA-1157 signalled during: ALTER DATABASE OPEN... Thu May 08 09:39:36 2003 Errors in file D:\Oracle\admin\test\bdump\testDBW0.TRC: ORA-01157: cannot identify/lock data file 1 - see DBWR trace file ORA-01110: data file 1: 'D:\Oracle\ORADATA\TEST\SYSTEM01.DBF' ORA-27041: unable to open file OSD-04002: unable to open file O/S-Error: (OS 2) 系統找不到指定的文件。 Thu May 08 09:39:36 2003 Errors in file D:\Oracle\admin\test\bdump\testDBW0.TRC: ORA-01157: cannot identify/lock data file 2 - see DBWR trace file ORA-01110: data file 2: 'D:\Oracle\ORADATA\TEST\RBS01.DBF' ORA-27041: unable to open file OSD-04002: unable to open file O/S-Error: (OS 2) 系統找不到指定的文件。 Thu May 08 09:39:36 2003 Errors in file D:\Oracle\admin\test\bdump\testDBW0.TRC: ORA-01157: cannot identify/lock data file 5 - see DBWR trace file ORA-01110: data file 5: 'D:\Oracle\ORADATA\TEST\TOOLS01.DBF' ORA-27041: unable to open file OSD-04002: unable to open file O/S-Error: (OS 2) 系統找不到指定的文件。 Thu May 08 09:39:36 2003 Errors in file D:\Oracle\admin\test\bdump\testDBW0.TRC: ORA-01157: cannot identify/lock data file 6 - see DBWR trace file ORA-01110: data file 6: 'D:\Oracle\ORADATA\TEST\INDX01.DBF' ORA-27041: unable to open file OSD-04002: unable to open file O/S-Error: (OS 2) 系統找不到指定的文件。 通過查詢v$recover_file可以看到 SQL> select * from v$recover_file;      FILE# ONLINE  ERROR                 CHANGE# TIME ---------- ------- ------------------ ---------- -----------          1 ONLINE  FILE NOT FOUND              0          2 ONLINE  FILE NOT FOUND              0          5 ONLINE  FILE NOT FOUND              0          6 ONLINE  FILE NOT FOUND              0 有四個數據文件需要恢復 6、 拷貝備份回到原地點(restore),開始恢復數據庫(recover) restore過程: C:\>copy D:\DATABAK\SYSTEM01.DBF D:\Oracle\ORADATA\TEST\ C:\>copy D:\DATABAK\TEST\INDX01.DBF D:\Oracle\ORADATA\TEST\ C:\>copy D:\DATABAK\TEST\TOOLS01.DBF D:\Oracle\ORADATA\TEST\ C:\>copy D:\DATABAK\TEST\RBS01.DBF.DBF D:\Oracle\ORADATA\TEST\ Recover過程: SQL> recover database; ORA-00279: change 1073849 generated at 05/08/2003 08:58:35 needed for thread 1 ORA-00289: suggestion : D:\Oracle\ORADATA\TEST\ARCHIVE\TESTT001S00311.ARC ORA-00280: change 1073849 for thread 1 is in sequence #311 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} auto ORA-00279: change 1073856 generated at 05/08/2003 09:03:27 needed for thread 1 ORA-00289: suggestion : D:\Oracle\ORADATA\TEST\ARCHIVE\TESTT001S00312.ARC ORA-00280: change 1073856 for thread 1 is in sequence #312 ORA-00278: log file 'D:\Oracle\ORADATA\TEST\ARCHIVE\TESTT001S00311.ARC' no longer needed for this recovery ORA-00279: change 1073858 generated at 05/08/2003 09:11:43 needed for thread 1 ORA-00289: suggestion : D:\Oracle\ORADATA\TEST\ARCHIVE\TESTT001S00313.ARC ORA-00280: change 1073858 for thread 1 is in sequence #313 ORA-00278: log file 'D:\Oracle\ORADATA\TEST\ARCHIVE\TESTT001S00312.ARC' no longer needed for this recovery ORA-00279: change 1073870 generated at 05/08/2003 09:11:46 needed for thread 1 ORA-00289: suggestion : D:\Oracle\ORADATA\TEST\ARCHIVE\TESTT001S00314.ARC ORA-00280: change 1073870 for thread 1 is in sequence #314 ORA-00278: log file 'D:\Oracle\ORADATA\TEST\ARCHIVE\TESTT001S00313.ARC' no longer needed for this recovery Log applIEd. Media recovery complete. 7、 打開數據庫,檢查數據庫的數據(完全恢復) SQL> alter database open; Database altered. SQL> select * from test;                          A ---------------------------------------                          1                          2 說明: 1、只要有備份與歸檔存在,就可以實現數據庫的完全恢復(不丟失數據); 2、適合於丟失大量數據文件,或包含系統數據文件在內的數據庫的恢復; 3、恢復過程在mount下進行,如果恢復成功,再打開數據庫,down機時間可能比較長一些。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved