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