Oracle冷備份練習

louloueva發表於2009-01-06

備份恢復的基礎知識從很早以前就開始慢慢了解
但實踐練習方面卻一直沒有進行
而且,對於備份恢復的相關知識,感覺並沒有其它方面瞭解的深入
可對於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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章