SYBASE 資料庫遷移到AS 400 db2的FAQ(五) (轉)

amyz發表於2007-08-16
SYBASE 資料庫遷移到AS 400 db2的FAQ(五) (轉)[@more@]

 以下是我最後的一篇文章。

:namespace prefix = o ns = "urn:schemas--com::office" />

答:除去quiesce狀態:
1. 連線到

2. 用 list tablespaces 判斷哪個tablespace處於quiesce狀態和和取得()ID

3. 判斷物件ID對應的表

用 2 " tabname from syscat.tables where tablid=物件ID" 得到表名

b)用 list history 判斷是那個表

4. 用 db2 quiesce tablespaces for table 表名 reset 去除quiesce狀態

.在DB2 UDB中如何建立定義臨時表?

答:可使用 DECLARE GLOBAL TEMPORARY TABLE 語句來定義臨時表。此語句需在應用中使用。只有在應用程式與資料庫斷開連線之前,使用者定義臨時表才是持續的。
此表的說明並不出現在目錄中,使其對於其他應用程式而言不是持續的,也不能與其他應用程式共享此表。
當使用此表的應用程式終止或與資料庫斷開連線時,此表中的資料被刪除, 此表被隱式卸下。
下面是定義臨時表的一個示例:
   DECLARE GLOBAL TEMPORARY TABLE gbl_temp
      LIKE empltabl
      ON COMMIT DELETE ROWS
      NOT LOGGED
      IN usr_tbsp
此語句建立一個名為 gbl_temp 的使用者臨時表。定義此使用者臨時表 所使用的列的名稱和說明與 empltabl 的列的名稱和說明完全相同。隱式定義只包括列名、資料型別、可為空特性和列預設值屬性。未定義所有其他列屬性,包括唯一、外部關鍵字約束、和。 COMMIT 操作時, 若未對該表開啟 WITH HOLD 遊標,則該表中的所有資料都被刪除。不記錄 對使用者臨時表所作的更改。使用者臨時表被放在指定的使用者臨時表空間中。此表空間必須存在,否則此表的宣告將失敗。

 

答:在執行IMPORT命令時, 如果使用迴圈日誌, 有時會出現日誌滿錯誤,
這時可用COMMITCOUNT引數來解決.
因為日誌空間滿往往是因為所有的日誌均處於活動狀態導致的.
而COMMIT執行後, 會釋放所佔據的資源, 其中包括日誌 .
這樣, 被當前事務使用的日誌在COMMIT命令執行後, 即變成非活動狀態了

答:以連線為例, 若連線失敗,您可以檢查下列專案:
A) 在上: 1) db2comm 登錄檔值包括值 tcpip。
輸入 db2set DB2COMM 命令, 以檢查 db2comm 登錄檔值的設定。有關詳情,請參考管理指南。
2) 正確地了 services 。
3) 在資料庫管理程式檔案中正確地更新了服務名 (svcename) 引數。
4) 服務已啟動。輸入 start db2ntsecserver 命令(僅對於 NT 伺服器)。
5) 正確地建立並編目了資料庫。
6) 資料庫管理程式已停止並再次啟動(在伺服器上輸入 db2stop 和 db2start 命令)。
* 如果在啟動一個的連線管理程式時出現問題,則會出現警告資訊,並將錯誤資訊記錄在 db2diag.log 檔案中。

B) 在客戶機上: 1) 正確地更新了 services 和 hosts 檔案(若使用過的話)。
2) 使用正確的主機名 (hostname) 或 地址 (ip_address)編目了此節點。
3) 埠號必須匹配,或服務名必須對映為伺服器上所用的埠號。
4) 在資料庫目錄中指定的節點名 (node_name) 指向節點目錄中的正確專案。
5) 資料庫已正確編目, 它使用在伺服器上建立該資料庫時編目的伺服器的資料庫別名(database_alias),作為客戶機上的資料庫名 (database_name)。

驗證這些專案後,若連線仍失敗,則參考 DB2 Troubleshooting Gu

答:以空檔案為資料檔案匯入(IMPORT)並替換(REPLACE)目標表和刪除(DELETE)表操作的對比

當用DELETE TABLE命令刪除整個表中資料時,該操作會逐條刪除表中記錄,並記入活動的交易日誌。當表中資料量很大時,如果活動的交易日誌不夠大,就會遇到交易日誌已滿的錯誤,並回滾日誌。即使活動的交易日誌足夠大,刪除資料量很大的表的操作也會佔用很多時間。用以空檔案為資料檔案匯入(IMPORT)並替換(REPLACE)表的辦法可以解決這個問題。例如
IMPORT FROM /dev/null OF DEL REPLACE INTO 目標表名

這樣交易日誌只會記錄下該條命令,並立即釋放所佔的空間,而不會像刪除命令一樣逐條掃描記錄,這就類似於DROP掉該表再建立一個完全相同只是沒有資料的表一樣。對於屬於DMS表空間的表來說,刪除命令逐條掃描記錄,所佔的記錄空間仍標記為該表所用,而不立即釋放空間,需要用REORG命令才可以釋放剩餘空間。用 LIST TABLESPACE SHOW DETAIL 可以對比兩條命令執行後表空間中的剩餘空間的大小。

用LOAD命令加REPLACE引數可以達到類似IMPORT命令加REPLACE的效果,但是由於LOAD本身不記日誌,所以對於可恢復的資料庫,LOAD完成後建議馬上做一下聯機的,相比之下,IMPORT命令加REPLACE操作上比較簡單一些。
46. 怎麼樣獲取表結構以及索引的資訊

答:您可以使用"describe" 命令:
(1) 顯示關於SELECT語句的 DA 資訊;
(2) 顯示錶或檢視的列資訊;
(3) 顯示錶或檢視的索引資訊;

舉例:1) 下面的例子用於描述 SELECT 語句:
db2 "describe select * from staff"
SQLDA Information
sqldaid : SQLDA sqldabc: 896 sqln: 20 sqld: 7
Column Information
sqltype sqllen sqlname.data sqlname.length
--------------- ------ -------------- ---------------
500 SMALLINT 2 ID 2
449 VARCHAR 9 NAME 4
501 SMALLINT 2 DEPT 4

 

2) 下面的例子用於描述表結構:
db2 describe table user1.department
Table: USER1.DEPARTMENT
Column
name Type
schema Type
name Length Scale Nulls
--------- ------- ----------- -------- ------ ------
AREA SYSIBM SMALLINT 2 0 No
DEPT SYSIBM CHARACTER 3 0 No
DEPTNAME SYSIBM CHARACTER 20 0 YES

3) 下面的例子用於描述索引結構:
db2 describe indexes for table user1.department
Table: USER1.DEPARTMENT
Index
schema Index
name Unique
rule Number of
columns
------------ ---------- ------------ ----------------
USER1 IDX1 U 2

平臺上啟動DB2控制中心(Control Center)

答:再Unix平臺上啟動DB2控制中心需要一下幾個步驟,以AIX為例:

1. DB2時選擇安裝DB2控制中心(Control Center);
2. 以賬號登入,輸入xhost +命令(每次重新啟動Unix後需輸入該條命令以啟動控制中心);
3. 以DB2例項管理員賬號登入,輸入以下命令
a. db2jstrt
b. db2cc
這樣,就啟動了DB2控制中心(Control Center)。
#xhost +
#su - db2inst1
$db2jstrt
$db2cc
db2cc使用的是118
export _HOME=/usr/jdk118
export PATH=/usr/jdk118/bin:$PATH

答:首先,從控制中心(Control Center)中知道本地系統所在的原節點名。
然後退出控制中心,在命令列中輸入以下命令:
1. db2set db2system=新系統名
2. db2 tenate
3. db2 uncatalog node 原節點名
4. db2 terminate
重起控制中心,可以看到,本地系統名已更改。

 

 

DECLARE UNDO HANDLER FOR SQLEXCEPTION

SET errmsg = 'ERROR, ROLLBACK WAS ISSUED';

 

SIGNAL 和 RESIGNAL的用法?

答:舉例

CREATE PROCEDURE xhzq_db.G10()

LANGUAGE SQL

BEGIN

DECLARE c1 CONDITION FOR SQLSTATE '38001';

DECLARE CONTINUE HANDLER FOR C1

INSERT INTO XHZQ_DB.ZZ_RESULT(proc,res) VALUES ('exec of G10','EXIT handler fired');

INSERT INTO XHZQ_DB.ZZ_result(proc,res) VALUES ('exec of G10','START of Proc');

SIGNAL SQLSTATE '38001';

INSERT INTO XHZQ_DB.ZZ_result(proc,res) VALUES ('exec of G10','END of Proc');

END;

如果後,select *  from  XHZQ_DB.ZZ_result ;

結果如下:

proc  res

exec of G10  START of Proc

exec of G10  EXIT handler fired

exec of G10  END of Proc

舉例

CREATE PROCEDURE G11()

LANGUAGE SQL

BEGIN

DECLARE c1 CONDITION FOR SQLSTATE '38001';

INSERT INTO result(proc,res) VALUES ('exec of G11','START of Proc');

SIGNAL SQLSTATE '38001'; /*the handler will be fired by this statement*/

INSERT INTO result(proc,res) VALUES ('exec of G11','END of Proc');

END;

如果呼叫後,select *  from  result ;

結果如下:

proc   res

exec of G11  START of Proc

 

 

.關於00DB2中中文的問題

答:AS400下db2儲存中文作了特殊處理。

格式為 0e 開頭+ 中文字串 + 0f結尾,如果有中文和英文字串混合的字串,其中每個中文字串都加0e和0f

例如:  中國  儲存後 0e中國0f

  AV中國製造KK湖南  儲存後:  AV0e中國製造0fKK0e湖南0f

注意:除了a-z,A-Z以外的字元全部按中文字串同樣處理。

.SQLCODE的捆綁宣告語句

答:

DECLARE SQLCODE INTEGER DEFAULT 0;

DECLARE SQLSTATE CHAR(5) DEFAULT ’00000’;

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET retcode=SQLCODE;

DECLARE CONTINUE HANDLER FOR SQLWARNING SET retcode=SQLCODE;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET retcode=SQLCODE;

到此我已經完成了我的內容,希望感興趣的朋友!可以和我聯絡交流!

qq:50839655

to::dekkerdillon@.com">msn:dekkerdillon@hotmail.com

:zhangtao@xhzq.com,dekker99@163.com">email:zhangtao@xhzq.com,dekker99@163.com

htmp://


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-962563/,如需轉載,請註明出處,否則將追究法律責任。

相關文章