1. 程式人生 > >linux下的DB2資料庫表結構和資料分開的備份,還原到windows下,環境如下

linux下的DB2資料庫表結構和資料分開的備份,還原到windows下,環境如下


生產伺服器A:作業系統:linux    記憶體:64G  這是生產機的環境,配置比較好。
測試伺服器B: 作業系統:windows  記憶體:6G 
windows編碼格式和內碼表對照表:https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx
linux下檢視記憶體插槽和每條記憶體大小命令;
dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range
        Size: 4096 MB
        Size: 4096 MB
以上就是兩個插槽,都插滿了,每條記憶體是4G。
系統支援最大記憶體命令:
dmidecode|grep -P 'Maximum\s+Capacity'
         Maximum Capacity: 4 GB
該系統只支援最大記憶體是4G
檢視主機板資訊命令:
dmidecode | grep -A16 "System Information$"
第一步:在生產伺服器上備份表結構和儲存過程以及表空間等,也就是處理資料,把資料庫拿過來。
1、連線好工具後切換使用者:  su –user  如果要輸入密碼,密碼為 ****
2、db2 connect to glpas user <資料庫登陸使用者> using <資料庫登入密碼> 
3、選擇一個路徑,用於指定匯出全庫資料的路徑, 命令:  cd /dbbak/jksj  如果沒有這個路徑 ,你可以用pwd 看下當前路徑是什麼。 
4、最後輸入 :  
5、換這個命令看下 db2look -D glpas -e -a -l -x -i  <資料庫登陸使用者> -w <資料庫登入密碼>  -o glpas.sql
6、 前面那些-e -a的引數使用db2look / ?檢視,或者網上看。
    注意(如果你是在windows系統下通過工具連線到linux系統下的話,那麼-o後的命名glpas.sql應該是小寫),不然會報錯db2look utility could not open file for output
7、 之後用export匯出資料,注意編碼格式,一般是預設的,linux的終端是utf-8,windows是GBK。
第二步:開始在測試伺服器上建立db2資料庫
1、通過在執行中輸入db2cw進入終端,db2 create database test_db;建立一個test_db的資料庫,一般需要一段時間,也是根據你的電腦配置來看的,別心急。
2、db2 connect to test_db;輸入你的密碼就ok了。
3、用notepad或其他工具開啟glpas.sql檔案,看下里面的緩衝池和表空間的大小,由於檔案時生產機備份出來的,所以緩衝池和表空間這些要根據你自己的機器配置
,別配置太大了導致出問題。
4、 在測試機器上檔案可能會出現中文亂碼,在伺服器上開啟該檔案,選擇編碼方式就轉換過來了,然後另存為就可以了,不一定要是.sql檔案,可以是txt或其他的,檔案裡面是sql語句就可以了。
第三步:匯入資料
connect to test_db user <你資料庫的使用者名稱>
load  from 'D:\dysj\2014-12-31_CBOD_CICIECIF.del' of del modified by  codepage=1386 
coldel0X1D delprioritychar messages d:\glpas\log.txt replace into CBOD_CICIECIF NONRECOVERABLE;
......
統一寫成這種格式儲存在一個load.txt檔案裡面,匯入一個1G的檔案大約需要15到20min,具體看你伺服器效能。
然後切換到相應的目錄下,windows進去在c盤。
c:\user\Administrator>
c:\user\Administrator>D:
D:> cd \script
D:\script>  
該目錄下存放load.txt和log.txt。
用db2 -stvf load.txt -l log.txt 執行批量指令碼。
-s表示出錯就終止執行load.txt裡面的指令碼,其它具體引數不贅述了。
執行完後可以在log.txt裡面檢視日誌。
如果都提示命令成功那幾本就到此結束了。
可能出現的問題:
一、表空間不足,提示tablespacename未分配新頁面,需要擴容,一開始最好建大些,後面再減小。
使用db2 list tablespaces show detail查看錶空間。在以syscat.為字首的系統表裡面可以檢視儲存過程,函式,表等資訊。
db2 "ALTER TABLESPACE TEST ADD (FILE '/home/db2inst1/test_tbsp2' 1000)";   在增加一個表空間容器,會造成資料重新平衡(rebalance),時間比較久,對系統影響較大
db2 "ALTER TABLESPACE TEST resize (all 1000)";   所有表空間容器大小都改為1000,影響系統性能
db2 "ALTER TABLESPACE TEST reduce (file '/database/tbs_data/cont0' 1000)";  縮減表空間容器大小
db2 "ALTER TABLESPACE TEST extend (file '/database/tbs_data/cont0' 1000)";  擴充套件表空間容器大小
在匯入資料有時會出現中斷的現象,sql0668n 不允許對錶test1進行操作,錯誤碼時“3”。
執行如下語句,d盤的full.txt要麼為空,要麼就不存在。
db2 load from d:\full.txt of del terminate into test1
db2 load query table test1 查看錶的狀態
二、資料格式不對的問題,調整格式。
......
另附在windows下部署web專案,一個專案對應一個tomcat。
D:\WebApp\testpas\WebRoot\WEB-INF\classes路徑下的applicationContext_resources.xml資料庫連線資訊。
D:\WebApp\glpas\apache-tomcat-6.0.20\conf\Catalina\localhost 的testpas.xml裡面的web專案路徑。
D:\WebApp\glpas\apache-tomcat-6.0.20\conf下的server.xml埠資訊。
--建立類似的表
create  table tablename1  as (select * from tablename2) definition only
--快速清空一張表
alter table tablename1 activate not logged initially with empty table'
一、獲取快照日誌
#1.檢視資料庫編目
db2 list db directory
#2.attach 到要分析的資料庫
db2 attach to pm1_9 user db2dev
#3.connect 到要分析的資料
db2 connect to pm1_9 user db2dev
#4.抓取快照
db2 get snapshot for all on pm1_9 > /tmp/snap.out
二、分析日誌
#1.Rows Read大的表定位
grep -ni "Rows Read" /tmp/snap.out | grep -v "Not Collected" | sort -k 5rn | more
#2.執行次數多的sql
grep -ni "Number of executions" /tmp/snap.out | sort -k 6rn  | more