2007年10月9日

10g備份跟還原相關(1/3)


1、rman


在10g之前的版本當在recovery後下了resetlogs完成還原後的db,之前備份的相關檔案都無法再度使用。如每天做全備份,當11號發生問題,又因為還原時不得不做"不完全還原",然後open database時就一定要用resetlogs來讓database起來,這時順利的讓db起來了。但這時忘了馬上做備份,假設當12號發生 datafile損壞。這時要做還原時,無法拿執行resetlogs點之前備份檔,再配合現在的archive log file進行還原。但在10g版中,這個問題已不在存在了,所以你可拿resetlogs點之前的備份再加上archive log file的份就可執行還原了。以上都是簡單的說明,實際上還要有很多因素要配合才能完成,所以重要的來說當做了resetlogs後,確認還原後的db是 ok的之後,就應該馬上做一次全備份,以免增加到時還原db的不確定因素。為了要達成這個需求,修改了log_archive_format預設值為 name_%t_%s_%r.dbf,而%r是代表了每次resetlogs的時間。

在view方面,在v$log_history、v$offline_range增加了二個欄位
  • resetlogs_change#:記錄當時執行resetlogs當時的system change number(SCN)值
  • resetlogs_time:記錄當時執行resetlogs當時的時間點
  • 這二個欄位的值除了做了resetlogs才會被覆寫

在10g之前執行alter database archivelog進入archivelog mode後,還要再手動執行log archive start這個動作才能進行archive log 的動作;在10g時只要執行alter database archivelog後,oracle的archive log file的動作就變成自動起動了。你可以查看v$database欄位log_mode是否為automatic,如是的話,那oracle就會自動做相對應的動作了


簡單說明執行resetlogs的影響,我們都知道oracle是拿scn值來確認現在的資料的完整性,而scn在每個地方都有不同的代表,如controlfile裡也有scn值,用於db open時檢查datafile是否需要做recovery;block也有scn值,代表了是否已被commit;redo logfile的scn值,記錄了每筆執行的sql。整個oracle還有非常多的地方都會看到scn這個名調,反正scn的功用就是確保資料的正確性。
所以當db被還原時,因為有些情況下,無法做到"完整"還原,這時就只能做"不完全"還原了,最明顯的地方就是當db開起來時,會去檢查每個 datafile的scn值要跟controlfile相同,如controlfile scn > datafile scn值,這種情況多半是db不正常的"關畢",這需要recovery database;如controlfile scn < datafile scn,這種情況多半是發生在現有的tablespace被刪除或datafile被刪除後,但因為特定的原因需要這些資料時,因為現有的 controlfile裡已沒有這些資料了,所以需要從舊的controlfile裡取得,所以我們做了controlfile的還原後,就會發生現有的 datafile scn值比現在用的controlfile scn大了。
由上列的說明,我們可得知db要開起controlfile跟datafile的scn值一定要相同才行,而我們做了"不完全"還原,這時 scn值一定是不相同的,但oracle沒有提供、也沒有辦法讓我們手動修改、設定scn值,但為了要讓db開起來了,所以oracle提供了open database  resetlogs這個方法,來告知oracle說,幫我們處理內部scn值的問題,而我們要損失的就是之前的備份的東西都無效了。因為之前備份檔裡都是記錄著resetlogs之前的scn值,而做了resetlogs之後現在db的scn值已跟之前都不同了;也可這樣子想,反正做了resetlogs 之後,db的身份號碼已被變動了,可當成是一個全新的db了。到時有適合的文章時再來說明較細節的地方了

指令方面
RMAN刪除數據庫
RMAN> drop database including backups;

自動信道故障恢復
如果在RMAN備份過程中使用了多個信道備份數據,則當一個信道發生故障的時候,作業可以繼續使用其它信道備份。任何出錯信息可以通過V$RMAN_OUTPUT報告出來。

增強的腳本功能
RMAN中的腳本功能得到了增強。文本腳本可以轉換成存儲的腳本(stored script),反之亦然,另外全局腳本功能允許連接到同一個catalog的數據庫共享腳本。

時間階段(duration)、調整(throttling)和部分備份選項
為了減少RMAN備份運行時對數據庫正在進行的事務處理的影響,在RMAN的BACKUP命令中有提供了新的選項,分別是:時間(duration)、調整(throttling)和部分備份(partial backup)選項。
1)BACKUP DURATION…
通過為備份操作指定一個最大的時間跨度,來減少備份操作的影響。例如:
RMAN>backup duration 1:00 tablespace users;
要求在1個小時內完成users表空間的備份。
2)BACKUP DURATION… PARTIAL…
使用PARTIAL選項可以抑制無法在規定時間內完成備份產生的錯誤,完成的操作都可以用於恢復,未完成的操作需要重新啟動
3)BACKUP DURATION… MINIMIZE LOAD…
自動調整備份速度來儘可能在DURATION指定的時間內完成備份
4)BACKUP DURATION… MINIMIZE TIME…
附記
http://download.oracle.com/docs/cd/B19306_01/backup.102/b14194/rcmsynta009.htm#i1010261

語法:DURATION hh:mm
[PARTIAL][MINIMIZE (TIME|LOAD)]

DURATION選項指定backup命令可以運行的最大時間(hh:mm),如果在指定的時間內Backup命令沒有完成,則Backup則會被中斷,
那些已經完成的備份的backupset仍然可以被用來進行恢復操作。

PARTIAL選項
通過指定PARTIAL選項,即使RMAN備份不能在指定的持續時間內完成,backup命令依然被認為是成功執行完成的,而不會報告錯誤。
如果備份命令是在RUN塊中的話,不指定PARTIAL選項則後續命令都不能被運行,會報告錯誤信息。

同時還可以指定MINIMIZE TIME,以允許RMAN自動調整備份速度,儘可能快的完成備份(這是默認行為),或者MINIMIZE LOAD減緩備份的速度以儘可能在DURATION指定的時間內完成備份,從而減輕備份操作對系統負載的影響。



實体備份模式
如果還沒有使用RMAN進行備份和恢復的環境,可以用ALTER DATABASE BEGIN BACKUP來進行聯機備份,而不向以前的版本那樣只能在表空間一級進行聯機備份。結束數據庫聯機備份使用ALTER DATABASE END BACKUP命令
附記
主要是往後相容較舊的方法,oracle是建意採用rman的方式來決解備份跟還原的方案。不過當datafile檔案很大時,可以混著二種方式來配合,在還原時要restore database(還原出datafile) 再來recover database(資料一致檢查、更新),多半來說在restore datafile是會花較多的時間,這時我們可在採用alter database begin backup的方法來備份datafile,到時在還原datafile時就可配合switch的指令馬上把原本restore database要花的時間縮短到幾秒之內。但有好處就有壤處,因為alter database beging backup是使用os來備份datafile的,所以無法享有rman備份時可跳過沒有使用到的空間,所以datafile有多大,備份出來的檔案就多大。在10g中有很多新的做法都是以空間換取時間,往後會再跟大家分享

使用SWITCH DATABASE TO COPY來快速恢復數據庫
新的RMAN命令SWITCH DATABASE TO COPY是最快的恢復數據庫的方法。但是這樣做會存在一個問題:數據文件和位於快速恢復區,也就是說數據文件有可能和備份文件衝突。因此要盡快將數據文件移走。

創建映像副本
在以往的RMAN中,COPY命令用於製作數據文件的影響副本。這條命令在Oracle 10g的RMAN已經被BACKUP AS COPY命令取代了,後者只需要一條命令就可以備份整個數據庫、多個表空間、數據文件、存檔日誌文件等。

BACKUP AS COPY DATABASE和BACKUP COPY OF DATABASE
BACKUP AS COPY DATABASE是直接創建數據庫的映像,而BACKUP COPY OF DATABASE是創建備份本身的副本,例如將以前某個整庫備份到磁帶機上,減小直接備份數據庫對系統的影響。

數據文件和控制文件的備份
數據文件的備份和表空間的備份類似。控制文件的備份可以通過下面的命令來將控制文件備份到快速恢復區:
RMAN>backup current controlfile;

壓縮備份
RMAN功能增強後可以進行備份集的二進制壓縮,這樣可以減小備份所佔的磁盤空間。在許多情況下,由於壓縮備份集而產生的額外負擔都可以從備份集寫入磁盤時減少了的I/O負擔方面得到匯報。要想使用壓縮功能,需要加入COMPRESSED關鍵字,例如:
RMAN> backup as compressed backupset tablespace users;
10g中使用compressed後可能壓縮很多的。我們也可以通過下面的命令讓壓縮備份成為默認選項:
RMAN> configure device type disk backup type to compressed backupset;
附記
之前測試末壓縮後的rman是20g,壓完後大約是6g,但時間大約多了快4倍


快速回溯任何邏輯錯誤
Oracle 10g 支持一系列功能,使得用戶和DBA在數據庫操作中出現多種類型的邏輯錯誤時都可以快速恢復,包括誤刪除某一行,無意刪除某個表,整個db也可以。

使用SQL配置快速回溯數據庫。快速數據存儲在快速恢復區。快速恢復區中需要保存的快速回溯日誌以分鍾計算,通過 DB_FLASHBACK_RETENTION_TARGET來設置。我們可以使用ALTER DATABASE 命令來啟動FLASHBACK。下面是設定FLASHBACK DATABASE的參數並啟動FLASHBACK DATABASE的SQL命令:
SQL> shutdown immediate;
SQL> startup mount exclusive
SQL> alter system set db_flashback_retention_target=60 scope=both;
SQL> alter database flashback on;
SQL> alter database open;
請注意,使用FLASHBACK DATABASE功能需要啟動歸檔模式。我們可以通過V$DATABASE的FLASHBACK_ON字段判斷系統是否處于歸檔模式。

Posted by my_work at 樂多Roodo! │09:02 │回應(0)引用(0)DB
樂多分類:網路/3C 共同主題:Oracle 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/4270903