我用DB2這些年(四)
2024-09-06 23:58:05
供稿:網(wǎng)友
續(xù):恢復數(shù)據(jù)庫
最近不斷地有人問我怎么在命令行下面恢復數(shù)據(jù)庫,我給每個人都進行了比較詳細的說明;后來感覺這樣的事情還是寫出來比較好一些,于是就有了想寫關(guān)于這個東西的念頭。我想還是從講故事開始把。。。。。。
那是一個冬天,很冷很冷的那種。當時做一個項目,采用ibm rs6000小型機作為數(shù)據(jù)庫的服務(wù)器,當時是第一次接觸這種機器,感覺什么東西都很新鮮。在擺弄了幾天之后我真正認識到學會使用cpl環(huán)境管理數(shù)據(jù)庫是多么的關(guān)鍵,因為我把系統(tǒng)玩得不正常了,db2cc在那上面啟動不起來了(后來經(jīng)過查驗是aix系統(tǒng)環(huán)境變量的問題)。當時我一下子就蒙到那里了,因為我剛做了備份后drop了數(shù)據(jù)庫準備重新恢復到另外一個地方的;后面開發(fā)還要用呢。這時候出問題可真是要命啊~~這個時候最需要的就是冷靜,我回想起當時備份使用的命令行環(huán)境,肯定可以用它來恢復數(shù)據(jù)庫的,但是怎么去重定向那些表空間呢?問題就在這里,原來都是用圖形界面來完成的根本就沒有考慮用命令行來做,弄得現(xiàn)在這么狼狽地。哎!早知如此,何必當初阿!
想想還是從信息中心找下把,不過運氣還不錯讓我給找到了。在command reference的restore database章節(jié)中有個例子是關(guān)于重定向表空間的,于是我照著做了,具體過程如下:
第一步:建立一個新的數(shù)據(jù)庫,在這里需要注意它的字符集,例如:
db2 create db test on /home/db2inst1 using codeset gbk territory zh_cn;
codeset gbk territory zh_cn就是指定中文字符集的命令字
第二步:將需要恢復的數(shù)據(jù)庫恢復到這個新建的數(shù)據(jù)庫中,在這個命令運行的時候會有一個提示信息,大概得意思就是說你要恢復的數(shù)據(jù)庫正試圖覆蓋一個數(shù)據(jù)庫,原來數(shù)據(jù)庫的數(shù)據(jù)將會被覆蓋,你可以不管它,選擇yes就行,因為那個數(shù)據(jù)庫就是你剛才新建的。
db2 restore db test1 from /home/db2inst1/dbback taken at 20040330073123 into test redirect without rolling forward;
在這個命令中需要指定待恢復數(shù)據(jù)庫的時間戳,redirect without rolling forward的意思是不要前滾。
第三步:重新定向表空間,我在這里使用的是文件型的表空間容器。
在這里需要注意的是你必須事先知道表空間容器的類型和大小。通過list tablespaces命令可以查看到數(shù)據(jù)庫表空間的數(shù)量、類型和id。然后通過命令list tablespace containers for tablespaceid(在前面命令中顯示的tablespaceid的值) show detail查看表空間容器的大小類型和位置,如下所示:
tablespace containers for tablespace 0
container id = 0
name = /home/smith/smith/node0000/
sql00001/sqlt0000.0
type = path
total pages = 895
useable pages = 895
accessible = yes
接下來決定需要重定向表空間容器的類型位置和大小。重定向的表空間容器的size是不能小于當前值。
db2 =〉set tablespace containers for 4 using (file '/home/db2inst1/ long' 51200);
db2 =〉set tablespace containers for 3 using (file '/home/db2inst1/temp' 51200);
db2 =〉set tablespace containers for 2 using (file '/home/db2inst1/user' 102400);
第四步:正式恢復數(shù)據(jù)庫,打完收工。
db2 => restore db test1 continue;
國內(nèi)最大的酷站演示中心!