實驗九
資料庫恢復
實驗內容 第
1 節– 決定db2目前的日誌配置引數第2
節– 迴圈日誌條件下的資料庫恢復第3
節– 歸檔日誌條件下的資料庫恢復
注意:(1)實驗用到的資料在db2 lab data資料夾下的cf23中;(2)在實驗過程中,可以用嚮導來完成實驗,但請大家注意記錄嚮導操作相應的sql語句。
第1節- 決定db2目前的日誌配置引數
在前面的實驗中,我們建立了乙個新的資料庫musicdb,庫中包含五張表artists、albums、concerts、reorder和stock。表上設定了一定的完整性約束條件,並且表中已經匯入了資料。
1. 在本實驗開始之前,先在命令中心執行指令碼recovrst,將資料庫的配置引數設定成本實驗所需的值。記錄指令碼內容:
connect to musicdb;
update db cfg for musicdb using logretain no;
update db cfg for musicdb using dbheap 960 buffpage 160;
update db cfg for musicdb using logfilsiz 6;
update db cfg for musicdb using logprimary 3;
update db cfg for musicdb using logsecond 2;
terminate;
2. 在命令中心執行connect to musicdb; 啟用musicdb資料庫。
3. 檢視musicdb資料庫的「配置引數」
(1)記錄有多少個主日誌檔案(檢視logprimary引數)?當發出active database命令或者第乙個應用程式連線到資料庫時,db2分配這些日誌檔案,主日誌檔案的大小一共是多少kb?
有3個主日誌檔案
發出active database命令:每個日誌檔案的大小為logfilsiz+2 個4kb 頁,因此所有主日誌檔案將佔據3*(6+2)*4kb,即96kb 空間。
(2)記錄有多少個輔助日誌檔案(檢視logsecond引數)?輔助日誌檔案在事務未提交但主日誌檔案寫滿的時候根據需要一次分配乙個輔助日誌檔案。 2
個 輔助日誌檔案
4. 檢視當前系統所使用的日誌型別(迴圈日誌circular logging,還是歸檔日誌log retention logging)?,哪些引數可以提供日誌型別的相關資訊?
logretain
和userexit 可被用來設定系統採用何種日誌型別,本實驗中這兩個引數均被設為預設值否,因此系統採用迴圈日誌方式。如果logretain 被設為recovery 或者userexit 被設為yes,那麼系統將採用歸檔日誌方式。
5. 迴圈日誌支援哪些型別的資料庫恢復操作,崩潰恢復(crash recovery)、版本恢復(version recovery),還是前滾恢復(roll-forward recovery)?
迴圈日誌只能支援崩潰恢復和版本恢復,但還不能支援前滾恢復
6. 配置引數中的logpath指定日誌檔案的儲存路徑,檢視並記錄本實驗的日誌檔案儲存在**?
f:/db2/node0000/sql00001/sqlogdir
(資料庫的工作單元可能被意外地中斷,假如部分工作單元的所有變更完成和提交之前發生了電源故障,那麼系統就需要執行崩潰恢復再次回到一致狀態。命令restart database可以實現這個功能。如果autorestart被設定成開(預設方式),那麼崩潰發生後,應用程式首次連線到資料庫時將會自動啟動崩潰恢復機制。本實驗autorestart引數被設定為開。)
7. 在命令中心的「互動式」標籤頁,選擇「命令中心-選項」,確保「執行」中的「自動落實sql語句」未被選中。然後,執行下列語句:
connect to musicdb;
update stock set qty=qty+1;
如果沒有出現錯誤,繼續執行:
update stock set qty=qty-1;
這時系統會返回sql
0964c
記錄sql
0964c
給出的錯誤提示是什麼:
根據提示,要如何解決這個問題:
第2節- 迴圈日誌條件下的資料庫恢復
將命令中心的執行選擇為「自動落實sql語句」。
1. 備份musicdb資料庫: ¨
只能進行離線備份 ¨
離線備份要求獨佔資料庫,如果仍有其他程式連線到資料庫,則備份不成功,此時在命令中心分別執行以下命令:
terminate;
強制所有使用者與資料庫斷開連線。
記錄這次備份的時間戳:
2007-12-19 23:34:55¨
2. 在資料庫成功備份後,改變資料庫中的資料。
(1)執行:
select name, title from artists a, albums b where a.artno =77 and a.artno= b.artno;
記錄執行結果:
nametitle
(2)執行:
update artists set name='melanie and the mechanics' where artno=77; update albums set title ='unmaterial girl' where itemno=261;
再次執行:
select name, title from artists a, albums b where a.artno =77 and a.artno= b.artno;
記錄修改後的資料:
nametitle
3. 假設現在出現磁碟故障,使用剛剛對musicdb的備份來恢復資料庫。
再次執行上述查詢,則資料恢復到了更新前的狀態,但由於db2預設使用的是迴圈日誌,不支援前滾恢復,所以無法找回對資料庫所作的修改。
第3節- 歸檔日誌條件下的資料庫恢復
1. 採用歸檔日誌方式:
(1)修改musicdb的配置引數,將log_retain引數的值修改為recovery
(2)若該引數不能自動啟用,則重新啟動例項,以及資料庫。
可以通過嚮導,也可以通過命令修改配置引數:
update db cfg for musicdb using logretain recovery
記錄在重新啟動例項後,資料庫是否直接可以使用,出現了什麼錯誤:
不能執行連線或啟用資料庫
2. 在命令中心執行以下命令:
(1)查詢編號為77的artist的name,sql語句為:
select name, title from artists a, albums b where a.artno =77 and a.artno= b.artno;
執行結果為:
(2)將該藝術家的name修改為「melanie and the mechanics」,sql語句為:
update artists set name='melanie and the mechanics' where artno=77;;
3. 在控制中心檢視musicdb的配置引數,「loghead引數」記錄的就是目前使用的第乙個歸檔日誌檔名:
4. 如果現在發生的系統故障,使用歸檔日誌來恢復資料庫。
對資料庫進行復原,並記錄相應的sql語句:
restore database musicdb from "f:/restore" taken at 20071219233455 with 1 buffers buffer 1024 paralleli** 1 without prompting;
資料庫能否恢復到修改後的資料狀態? 不能
為了讓以後的實驗成功完成,重新設定系統環境:
(1)執行cf23下的clrec指令碼
(2)修改資料庫配置引數,將log_retain引數的值修改為no,使資料庫採用迴圈日誌方式。
DB2資料庫備份恢復
song 說 在你本機上有沒有乙個叫huaxing的資料庫?小饒 說 沒有小饒 說 是否要建立個例項?song 說 你想把它恢復到本機上,但是現在在wjs的機器上有個叫huaxing的資料庫,你可以在你的機器上訪問wjs上的huaxing資料庫,是這樣嗎?小饒 說 是的小饒 說 現在想做個測試,看備...
DB2資料庫備份恢復
db2資料庫恢復 一次意外的儲存故障,導致表空間損壞。然而最近一次成功的完全備份是在8天前,最近8天內只有歸檔日誌的備份。檢視表空間狀態 有兩個表空間無法回滾。tablespace id 7 name replicas type database managed space contents all...
備份恢復DB2資料庫步驟
備份 增量意味著,不需要每次備份乙個超大的資料庫.同時意味著你可以將資料庫恢復到崩潰前的狀態,而不是你最後一次備份時的狀態,最大可能的減少資料損失.更改logretain為recovery或者on,改改userexit為on 這樣db2的日誌將不會迴圈使用,而是不斷增多,這樣才有可能進行增量備份,並...