程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> [補充]有關DB2的FAQ

[補充]有關DB2的FAQ

編輯:DB2教程

   在DB2的使用中一些FAQ發出來與大家分享,並期待您的補充:


1、DB2 命令行處理器中命令選項的介紹

環境 產品:DB2 UDB
 平台:跨平台
 版本:Version 6.1,Version 7.1 
問題 介紹 DB2 命令行狀態下有關命令選項的用途及設置方法。 
解答 在 DB2 命令行處理器中使用命令 db2 list command options,可得到如下輸出:

命令行處理器選項設置 
後端進程等待時間(秒) (DB2BQTIME) = 1 
連接至後端的重試次數 (DB2BQTRY) = 60 
請求隊列等待時間(秒)  (DB2RQTIME) = 5 
輸入隊列等待時間(秒)  (DB2IQTIME) = 5 
命令選項  DB2OPTIONS) = 
  
選項 說明 當前設置 
------ ------------------------------- ------------ 
-a 顯示 SQLCA OFF 
-c 自動落實 ON 
-e 顯示 SQLCODE/SQLSTATE OFF 
-f 讀取輸入文件 OFF 
-l 將命令記錄到歷史文件中 OFF 
-n 除去換行字符 OFF 
-o 顯示輸出 ON 
-p 顯示交互式輸入提示 ON 
-r 將輸出保存到報告文件 OFF 
-s 在命令出錯時停止執行 OFF 
-t 設置語句終止字符 OFF 
-v 回送當前命令 OFF 
-w 顯示 FETCH/SELECT 警告信息 ON 
-x 不打印列標題 OFF 
-z 將所有輸出保存到輸出文件 OFF 

這些選項的具體功能及其缺省設置為: 
.a 顯示 SQLCA 的數據,缺省為 OFF。 
.c 是否自動落實 SQL 命令,缺省為 ON。 
.e {c|s} 顯示 SQLCODE 或 SQLSTATE,缺省為 OFF。 
.f 文件名 將命令的輸入從標准輸入指定到某一文件,缺省為 OFF。 
 注:命令“db2 < 文件名”與“db2 -f 文件名”作用相同。 
.l 文件名 將命令記錄到歷史文件中,缺省為 OFF。 
.n 除去換行字符,缺省為 OFF。 
.o 將輸出數據及信息送到標准輸出,缺省為 ON。 
.p 在交互方式下顯示命令行處理器的提示信息,缺省為 ON。 
.r 將輸出保存到指定文件中,缺省為 OFF。 
.s 執行批處理文件中或交互方式下的命令出錯時即停止執行操作,缺省為 OFF。 
.t 設置語句終止字符,缺省為 OFF。 
.v 回送當前命令到標准輸出,缺省為 OFF。 
.w 顯示 FETCH 或 SELECT 警告信息,缺省為 ON。 
.x 不打印列標題,缺省為 OFF。 
.z 文件名 將所有輸出保存到輸出文件,缺省為 OFF。 

  以上選項不要求順序並可以進行組合使用。若要修改其缺省設置,將選項設為打開,只需在選項前加“+”;而將選項關閉則加“-”。

  通過設置環境變量 DB2OPTIONS,也可對這些選項進行設置。如在 Intel 系統下使用:set DB2OPTIONS='+c -a';在 UNIX 系統下使用:export DB2OPTIONS='+c -a'。但命令行處理器選項設置的優先級高於 DB2OPTIONS 的設置。

  另外使用 db2 update command options 命令,同樣可以實現通過交互式輸入模式或命令文件改變選項設置的功能。如:db2 update command options using c off。

2、DB2備份歷史文件損壞

環境 產品:DB2
 平台:跨平台
 版本:DB2 5.2;DB2 6.1 
問題 DB2備份歷史文件損壞 
解答 如果在作數據庫備份操作時遇到DB2備份歷史文件db2rhist.asc損壞, 錯誤代碼SQL2048的錯誤,可按照如下步驟操作: 1. 先在NODE000x/SQL000x目錄下找到該文件,及其備份文件db2rhist.bak,將db2rhist.asc文件移動到其他目錄中。 
2. 重新運行備份命令。此命令仍會報同樣的錯誤,但同時DB2系統會自動用db2rhist.bak重新生成db2rhist.asc文件。 
3. 再次運行備份命令,它將能夠正確運行。 

如果按照上面的步驟操作後,仍出同樣的錯誤,則再按如下操作: 1. 先在NODE000x/SQL000x目錄下找到該文件,及其備份文件db2rhist.bak,將這兩個文件移動到其他目錄中。 
2. 重新運行備份命令。此命令仍會報同樣的錯誤,但同時DB2系統會自動重新生成這兩個文件。 
3. 再次運行備份命令,它將能夠正確運行。 

3、DB2從7.2版本開始支持存儲過程的發布,即可以將一個數據庫上已編譯好的存儲過程抽取並安裝到其它數據庫上,目標數據庫所在的服務器上不再需要c編譯器。 
解答 發布存儲過程請按以下步驟:
1. 如果數據庫是從7.1版本打補丁後升為7.2版本,請用
  db2updv7 -d 數據庫名
使DB2可以抽取或安裝已編譯好的存儲過程;

2. 在源數據庫,編譯好存儲過程;

3. 在源數據庫,運行
  db2 "get routine into 文件名 from procedure 存儲過程名"
抽取存儲過程;

4. 上傳文件至目標服務器;

5. 在目標服務器端,運行
  db2 "put routine from 文件名"
安裝已編譯好的存儲過程。

4、DB2數據庫中一個表的行長度、列數以及每頁行數在表空間中的限制

環境 [產品] DB2 UDB
 [平台] Windows 9x/NT/2000, Unix, Linux
 [版本] 6.x/7.x 
問題 DB2數據庫中一個表的行長度、列數以及每頁行數在表空間中的限制 
解答 在DB2數據庫中一個表的每行長度、列數以及每頁行數在表空間中的限制如下:

表空間頁面大小 表空間中行長度限制(bytes) 表空間中列數限制 表空間中每頁最大行數 
4K 4005 500 255 
8K 8101 1012 255 
16K 16293 1012 255 
32K 32677 1012 255 
注:表空間頁面大小只有4K,8K,16K,32K四種。 

5、當編譯一個復雜的SQL語句時,出現SQL0101N錯誤,怎麼辦?

環境 DB2 V5.2; DB2 V6.1; DB2 V7.1 
問題 某些SQL語句可能非常復雜,比如嵌套調用多個表或觸發許多觸發器,在對這樣
 的SQL語句進行編譯時,出現SQL0101N錯誤,如何處理 
解答 對於一個復雜的SQL語句,在調用多個表或觸發多個觸發器時, 可能會占用
大量的系統資源. 
當出現SQL0101N錯誤時, 首先需要確認系統中沒有遞歸的觸發器存在.
之後可通過增加如下參數的值來解決此問題:

  1)STMTHEAP
  2)APPLHEAPSZ
  3)PCKCACHESZ

6、如何實施已刪除表的恢復(Dropped Table Recovery) 
解答 如何實施已刪除表的恢復(Dropped Table Recovery)

解答:
1. 首先數據庫要可以前滾恢復(數據庫配置參數logretain或userexit打開)。


2. 對要實施Drop Table Recovery的表空間(限regular tablespace),執行:
alter tablespace 表空間名 dropped table recovery on


3. 用 list history dropped table all for 數據庫名 得到刪除表的tableid(例如 0000000000006d0000020003)和表結構的生成語句(DDL),記錄tableid和該語句以便恢復。之後,用drop命令刪除的表中的數據可以在前滾恢復時導出。


4. 恢復數據庫後,如果想恢復已刪除的表,在前滾時加recover dropped table tableid to 目標目錄 。 在該目錄下被刪除的表中的數據導出,例如導出至 ../NODE0000/data文件。利用上面提到表結構生成語句生成被刪除了的表,然後用import命令將數據導入表中。
 
7、如何更改本地系統名稱

環境 [產品] DB2 UDB
 [平台] Windows 9x/NT/2000, Unix, Linux
 [版本] 5.x/6.x/7.x 
問題 在控制中心(Control Center)中,可以看到編目在節點下的系統名稱。可啟動控制中心的節點作為本地系統,名稱是不能在這裡改變的。那麼如何改變本地系統的名稱呢? 
 
解答 首先,從控制中心(Control Center)中知道本地系統所在的原節點名。
然後退出控制中心,在命令行處理器中輸入以下命令:

1. db2set db2system=新系統名
2. db2 terminate
3. db2 uncatalog node 原節點名
4. db2 terminate

重起控制中心,可以看到,本地系統名已更改。

8、如何將表空間的狀態置為正常

環境 [產品] DB2 UDB
 [平台] Windows 9x/NT/2000, Unix, Linux
 [版本] 5.x/6.x/7.x 
問題 quiesce是一種持續狀態的鎖,它屬於一個連接,當該連接失敗時,quIEsce狀態依然存在。如何將表空間的狀態置為正常狀態? 
解答 除去quIEsce狀態:

1. 連接到數據庫 
2. 用 list tablespaces 判斷哪個tablespace處於quIEsce狀態和和取得對象(object)ID 
3. 判斷對象ID對應的表 
 a)用 db2 "select tabname from syscat.tables where tablid=對象ID" 得到表名 
 b)用 db2 list history 判斷是那個表 
4. 用 db2 quiesce tablespaces for table 表名 reset 去除quIEsce狀態 
 

9、如何實施聯機備份

環境 [產品] DB2 UDB
 [平台] Windows 9x/NT/2000, Unix, Linux
 [版本] 5.x/6.x/7.x 
問題 如何實施聯機備份? 
解答 數據庫建立時日志方式默認是循環日志模式(Circular Log),這時是無法做聯機備份的。所以,希望實施聯機備份,首先要將日志方式改為歸檔日志模式(Archival Log)。

以sample數據庫為例,可以在控制中心中改變sample數據庫的配置參數LOGRETAIN為Recovery,或在命令行下用 db2 update db cfg for sample using LOGRETAIN on。改變此參數後,再次連接數據庫會顯示數據庫處於備份暫掛(BACKUP PENDING)狀態。這時,需要做一次對數據庫的脫機備份。在控制中心中選擇對數據庫進行脫機備份或在命令行下用 db2 backup db sample 實施。此後數據庫就可以進行聯機備份了。

可以選擇在控制中心中對數據庫進行聯機備份,或在命令行下用 db2 backup db sample online 實施。

注意: 利用聯機備份得到的IMAGE文件進行恢復時,還需要相關的日志文件。

10、如何在AIX上建立使用裸設備的數據庫管理(DMS)表空間

環境 [產品] DB2 UDB
 [平台] AIX
 [版本] 5.x/6.x/7.x 
問題 如何在AIX上建立使用裸設備的數據庫管理(DMS)表空間? 
解答 1. 用mklv命令建裸設備,語法為: 
 mklv -t jfs -y 設備名 -U 用戶名 -G 組名 vg名 lv大小 硬盤 
 例如: mklv -t jfs -y contest -U db2inst1 -G db2iadm1 rootvg 10 hdisk0 
2. 然後創建表空間 
 1). 連接數據庫 
 2). 創建表空間:注意在命令中要在加引號: 
 db2 "create tablespace 表空間名 managed by database using (device 裸設備名及路徑 大小)" 
 例如: db2 "create tablespace tptest managed by database using (device '/dev/rcontest' 80M)" 
 db2 "create tablespace tptest managed by database using (device '/dev/rc

1、如何在Unix平台上啟動DB2控制中心(Control Center)

環境 [產品] DB2 UDB
 [平台] Unix
 [版本] 6.x/7.x 
問題 如何在Unix平台上啟動DB2控制中心(Control Center) 
解答 再Unix平台上啟動DB2控制中心需要一下幾個步驟,以AIX操作系統為例: 

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

2、如何在查詢語句中只顯示結果的前n條記錄

環境 [產品] DB2 UDB
 [平台] Windows 9x/NT/2000, Unix, Linux
 [版本] 5.x/6.x/7.x 
問題 在查詢語句中,不想顯示所有記錄,只顯示結果的前n條記錄 
解答 在查詢語句中,不想顯示所有記錄,只顯示結果的前n條記錄,可以用 fetch first n rows only 跟在查詢語句後面實現。

以sample數據庫中的staff表為例,用如下命令可以得到查詢結果的前5條建立:
db2 "select * from staff fetch first 5 rows only"

3、如何在命令行下查看修改實例和數據庫配置參數

環境 [產品] DB2 UDB
 [平台] Windows 9x/NT/2000, Unix, Linux
 [版本] 5.x/6.x/7.x 
問題 如何在命令行下查看修改實例和數據庫配置參數 
解答 在命令行下查看實例的配置參數,可用 db2 get dbm cfg 命令實現。
類似地用 db2 get db cfg for 數據庫名 可以得到數據庫的配置參數。
以下是數據庫參數的一部分:

Log file size (4KB) (LOGFILSIZ) = 250
Number of Prima(最完善的虛擬主機管理系統)ry log files (LOGPrima(最完善的虛擬主機管理系統)RY) = 3
Number of secondary log files (LOGSECOND) = 2

修改實例配置參數,用 db2 update dbm cfg using 參數名 新值
類似,用 db2 update db cfg for 數據庫名 using 參數名 新值 修改數據庫配置參數。

例如,要修改sample數據庫配置參數中的LOGPrima(最完善的虛擬主機管理系統)RY為10,可用以下命令實現:
db2 update db cfg for sample using logPrima(最完善的虛擬主機管理系統)ry 10

4、如何在命令行下執行DB2腳本(script)

環境 [產品] DB2 UDB
 [平台] Windows 9x/NT/2000, Unix, Linux
 [版本] 5.x/6.x/7.x 
問題 如何在命令行下執行DB2腳本(script) 
解答 在命令窗口中運行DB2腳本,可用 db2 -svtf 腳本文件名 來實現。
例如,腳本文件名為sample.sql,運行:db2 -svtf sample.sql

 參數中:
  s 代表遇到錯誤時中止運行腳本
  v 代表輸出結果到屏幕
  t 指以;號作為每行的分隔符
  f 指後面需跟腳本文件名

 如果希望即使遇到錯誤也不要中止運行可以去掉參數s。 
 
5、文件標題: 如何解決資料庫別名已存在問題?
修訂日期: 2001/10/15
文件來源: TSC Team
英文標題: How to eliminate the existed database alias name?
產品名稱: DB2 UDB
作業平台: 跨平台
適用範圍: system administrator


--------------------------------------------------------------------------------

問題:

如何解決資料庫別名已存在問題?



解答:

在建立資料庫時遇到資料庫別名已存在的問題時,可以:

1)首先用 db2 list database directory 命令查看系統資料庫目錄(System Database Directory)中有沒有該資料庫。
如果有,應該再確定該資料庫是沒有用的資料庫之後用 db2 drop database 資料庫名將其刪除。 

2)如果沒有,再用 db2 list database directory on location 看在本端資料庫目錄(Local Database Directory)中有沒有該資料庫,location指定資料庫的位置(如Windows下的C: ,Unix下的/home/db2inst1)。
如果有,先用 db2 catalog database 資料庫名 on location 將資料庫catalog到節點上,再對其進行刪除處理。 

6、文件標題: 如何直接備份DB2資料庫到磁帶設備?
修訂日期: 2001/06/06
文件來源: 
英文標題: How to backup DB2 database to a tape library?
產品名稱: Database and Data Management
作業平台: 跨平台
適用範圍:system administrator


--------------------------------------------------------------------------------

問題:

如何直接備份DB2資料庫到磁帶設備?



解答:

在UNIX和Windows NT作業系統,支援本端的磁帶設備。OS/2作業系統不提供本端磁帶
設備支援。下面以Windows作業系統為例,介紹如何將DB2資料庫直接備份到磁帶設備。

(1)首先在備份資料庫之前先要初始化磁帶設備,可用INITIALIZE TAPE命令完成此工作
   ,例如initialize tape on \\.\tape0
(2)備份資料庫到磁帶設備,可用backup database命令。如:backup database sample to \\.\tape0
(3)在回復資料庫時要先將磁帶倒帶,可用命令rewind tape。如:rewind tape on \\.\tape0。
(4)回復資料庫sample到一個新資料庫newdb時,可用restore database命令。如:
    restore database sample from \\.\tape0 into newdb

附註:在備份資料庫到磁帶設備或從磁帶設備回復時,可能需要檢查磁帶機的blocking
參數與DB2的資料庫管理(DBM)參數Max requester I/O block size是否符合。如
需更詳細資訊可參考DB2的命令手冊。


7、文件標題: 怎樣解決DB2資料庫代碼頁不相容的問題
修訂日期: 2001/03/10 
文件來源: http://www-900.ibm.com/cn/support/vIEwdoc/FaqDisplay?DocId=1307130000002 
英文標題: How to solve DB2 database codepage imcompatablility problem 
產品名稱: DB2 UDB 7.1/6.1/5.2 
作業平台: ALL 
適用範圍: system administrator


--------------------------------------------------------------------------------

問題: 

怎樣解決DB2資料庫代碼頁(codepage)不相容的問題

解答:

當發出命令:db2 connect to db_name 後系統出現

SQL0332N There is no available conversion for the source code page "819" to the target code page "1386". Reason Code "1". SQLSTATE=57017

DB2 要求來源代碼與目標代碼頁是相容的, 在以上的例子中,來源代碼頁為819與目標代碼頁1386不相容,導致了資料庫連接失敗, 解決方法如下:
在發出db2 connect 命令失敗的機器上,在DB2 命令視窗中執行如下命令後重新進行連接:
-> 
db2set db2codepage=1386  I instance_name
db2 terminate 


8、在 AIX 和 Solaris 上如何配置存儲過程構建器(SPB)?

環境 產品: DB2 通用數據庫
 版本: 7.1
 平台: AIX, Solaris 
問題 在 AIX 和 Solaris 上如何配置存儲過程構建器(SPB)? 
解答 為了在 AIX 或 Solaris 上配置“存儲過程構建器”,需確保在您的系統上安裝了“Java 開發者工具箱”(JDK)。DB2 在可用於“控制中心”的系統上安裝“Java 運行期環境”(JRE),但是,它將不允許使用“存儲過程構建器”。 
一旦安裝了 JDK,就需要確保 DB2 知道 JDK 的位置,方法是在該實例的數據庫管理程序配置文件中設置 JDK 的路徑。要設置 JDK 的路徑,執行下列步驟: 

1. 以具有 SYSADM 權限的用戶登錄系統。 
2. 通過輸入以下命令來更新數據庫管理程序配置文件: 
 db2 update dbm cfg using jdk11_path /usr/jdk_base 
 其中 /usr/jdk_base 表示 JDK 安裝路徑。 
3. 一旦更新了實例的數據庫管理程序配置文件,您就必須停止並重新啟動該實例,以使更改生效。要停止並啟動當前實例的數據庫管理程序,輸入下列命令: 
 db2stop
db2start 
 
9、在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 游標,則該表中的所有數據都被刪除。不記錄 對用戶臨時表所作的更改。用戶臨時表被放在指定的用戶臨時表空間中。此表空間必須存在,否則此表的聲明將失敗。 

10、在使用IMPORT命令向數據庫出入數據時,如何避免日志空間滿錯誤?

環境 平台: 所有平台
 版本: DB2 V7,DB2 V6,DB2 V5 
問題 在用IMPORT命令向數據庫插入大量數據時,如何避免日志空間滿錯誤 
解答  在執行IMPORT命令時, 如果使用循環日志, 有時會出現日志滿錯誤, 
這時可用COMMITCOUNT參數來解決. 
 因為日志空間滿往往是因為所有的日志均處於活動狀態導致的.
而COMMIT執行後, 會釋放所占據的資源, 其中包括日志 .
這樣, 被當前事務使用的日志在COMMIT命令執行後, 即變成非活動狀態了.

1、在由備份恢復一個數據庫時,遇到SQL2542錯誤,怎麽辦?

環境 版本:(試用)DB2 V5.0,DB2 V6.1,DB2 V7.1
 操作系統:(試用)Windows NT,AIX 
問題 在由備份恢復一個數據庫時,遇到SQL2542錯誤 
解答 如果有幾個數據庫的備份,在做數據庫恢復時,需要提供正確的路徑和時間戳,如果是用DB2命令行來執行恢復操作,在Windows NT操作系統,可參照如下命令:

  RESTORE DATABASE SAMPLE FROM D:\backups TAKEN AT 19991117125141

此命令中要注意路徑和時間戳。時間戳可以通過list history命令得到。可參照如下命令:

  LIST HISTORY BACKUP ALL FOR SAMPLE

Op Obj Timestamp+sequence Type Dev EarlIEst log Current log Backup ID 
B D 19991117125141001 F D S0000000.LOG S0000000.LOG 


Contains 2 tablespace(s):

00001 SYSCATSPACE
00002 USERSPACE1

此命令的輸出列出了備份的時間戳加上一個3位的數字序列:

  時間戳+3位的數字序列=19991117125141001

所以,可以在restore命令中使用時間戳:19991117125141。

如果你有多於一個備份,list history命令將顯示所有備份紀錄的信息。

更多的信息可以參考“IBM DB2 Universal Database 命令手冊:第三章 CLP命令”。
 
2、怎麼樣檢查數據庫連接有關的錯誤?

環境 產品: DB2 UDB
 平台: Windows 9x/NT/2000, Unix, Linux
 版本: 5.x/6.x/7.x 
問題 怎麼樣檢查數據庫連接有關的錯誤? 
解答 以TCP/IP連接為例, 若連接失敗,您可以檢查下列項目: 
A) 在服務器上: 1) db2comm 注冊表值包括值 tcpip。 
輸入 db2set DB2COMM 命令, 以檢查 db2comm 注冊表值的設置。有關詳情,請參考管理指南。 
2) 正確地更新了 services 文件。 
3) 在數據庫管理程序配置文件中正確地更新了服務名 (svcename) 參數。 
4) 安全服務已啟動。輸入 net start db2ntsecserver 命令(僅對於 Windows NT 服務器)。 
5) 正確地創建並編目了數據庫。 
6) 數據庫管理程序已停止並再次啟動(在服務器上輸入 db2stop 和 db2start 命令)。 
* 如果在啟動一個協議的連接管理程序時出現問題, 則會出現警告信息,並將錯誤信息記錄在 db2diag.log 文件中。

B) 在客戶機上: 1) 正確地更新了 services 和 hosts 文件(若使用過的話)。 
2) 使用正確的主機名 (hostname) 或 IP 地址 (ip_address)編目了此節點。 
3) 端口號必須匹配,或服務名必須映射為服務器上所用的端口號。 
4) 在數據庫目錄中指定的節點名 (node_name) 指向節點目錄中的正確項目。 
5) 數據庫已正確編目, 它使用在服務器上創建該數據庫時編目的服務器的數據庫別名(database_alias), 作為客戶機上的數據庫名 (database_name)。 

驗證這些項目後,若連接仍失敗,則參考 DB2 Troubleshooting Guide
 
3、怎麼樣獲取表結構以及索引的信息?

環境 產品: DB2 UDB
 平台: Windows 9x/NT/2000, Unix, Linux
 版本: 5.x/6.x/7.x 
問題 怎麼樣獲取表結構以及索引的信息? 
解答 您可以使用"describe" 命令: 
(1) 顯示關於SELECT語句的 SQLDA 信息;
(2) 顯示表或視圖的列信息;
(3) 顯示表或視圖的索引信息;
* 命令語法:
>>-DESCRIBE-------------------------->
 >--+-select-statement---------+-><
  '--+-TABLE--table-name----------+---+----------+-'
   '-INDEXES FOR TABLE--table-name--' '-SHOW DETAIL--'

例如: 
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 
453 CHARACTER 5 JOB 3 
501 SMALLINT 2 YEARS 5 
485 DECIMAL 7, 2 SALARY 6 
485 DECIMAL 7, 2 COMM 7 

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 
 
4、以空文件為數據文件導入(IMPORT)並替換(REPLACE)目標表和刪除(DELETE)表操作的對比(一種可以繞開刪除整個表操作時遇到交易日志已滿的辦法) 
 文章編號:1347131000035 
 日  期:2001-12-24 
 
  打印格式 
 
以空文件為數據文件導入(IMPORT)並替換(REPLACE)目標表和刪除(DELETE)
表操作的對比(一種可以繞開刪除整個表操作時遇到交易日志已滿的辦法)

環境 [產品] DB2 UDB
 [平台] 跨平台
 [版本] 5.x/6.1/7.x 
問題 以空文件為數據文件導入(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操作上比較簡單一些。


from jourmen
問題描述: 
db2的界面都顯示不了中文,所有該顯示中文的地方都是顯示方框 
操作系統: 
win2k(別的我沒有試,不知道是不是這樣) 
db2版本: 
db2 8.1 for win 
解決方法: 
控制面板-->區域選項-->常規選項卡-->你的區域設置設成中文(中國) 
ok,問題解決 

問題原因:一般是你把區域設置成非中文(中國),比如我設成了英語(美國),來顯示時間(9:05AM)這樣格式的 
P.S.:win別的平台和db2的別的版本沒有試,也許一樣:)   技術交流 永無止境
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved