程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2表格操作技巧——正確導出LOB數據

DB2表格操作技巧——正確導出LOB數據

編輯:DB2教程

導讀:如現在有一張員工信息的表(USER_INFO)表。在這張表中有三個字段,分別為員工編號、員工姓名、員工身份證復印件等等。由於員工身份證復印件其容量比較大,為此數據庫中采用的是LOB數據類型。當需要將這張表格中的數據導出到特定文件中的時候,只要這些身份證復印件的容量超過32KB的話,則在導出的目標文件中是看不到這些身份證復印件的。在導出的時候,系統會將這些身份證復印件保存在用戶指定的文件夾內。而在導出地目標文件中,只有這些復印件對應的名字而已。所以說,如果一個表中有LOB數據類型,在導出到特定格式的文件中時,就需要區別對待。

如果某張表帶有LOB類型的數據,此時在書寫導出語句的時候,就需要特別的注意。如需要按如下的格式來書寫導出LOB數據的語句:

導出LOB數據表與普通表相比的一些特殊選項。

跟普通的導出語句相比,在導出帶有LOB數據類型的數據時,在語句中多了Lob to d:\photo1,d:\photo2 Lobfile p1,p2 modifiled by lobsinfile這麼一條語句。其中選項LOB TO定義的是LOB文件要存儲的路徑。在定義這個路徑的時候,用戶可以定義多個目錄。即可以指定一個使用逗號分隔符的目錄列表來定義其文件存儲的位置。如果沒有定義目錄的話,則數據庫會采用當前目錄作為這個LOB文件存儲的位置。跟普通的操作系統目錄一樣,不同目錄中的LOB文件名字可以不同。但是同一目錄中的LOB文件名字必須唯一。第二個需要指定的是LOB文件的命名規則。由於在導出數據的時候,會產生很多的LOB文件。而這些數據庫自動創建的文件必須要具有文件的名字。此時數據庫管理員必須要指定這些LOB文件的命名規則。這個命名規則主要是利用可選項LOBFILE來確定。通過這個可選項,數據庫管理員可以提高一個使用逗號分隔的基本名稱列表。操作系統就會根據這些名字來生成LOB文件的名字。需要注意的是,此時數據庫管理員提供的只是一個基本的名稱,或者說只是LOB文件名的前綴。系統在生成LOB文件的時候,會自動在這個基本名稱(或者叫做前綴)的後面加上3位數字的擴展。如上面筆者提供了p1作為LOB文件名的擴展,那麼其最後生成的文件名就可能使p1001、p1002等等。可見系統管理員提供一個文件前綴名,系統就會自動擴展出999個可用的LOB文件名。因為操作系統會在LOB文件前綴後面加上3位阿拉伯數字的擴展名。這個選項跟目錄選項一樣是可選的。如果用戶沒有指定可用的文件基本名稱,則DB2數據庫會以db2exp作為基本的文件擴展名。然後在這個名字後面采用3位數字的擴展名,生成1000個可用的LOB文件的文件名字。

最後需要注意的是,如果在將某個表導出到特定文件的時候,想要分離文件導出LOB的時候,即將LOB文件與其他信息分開存放,還需要在導出語句中加入一個特殊的關鍵字。二、確定可用的文件名。

在將LOB數據類型導出的時候,數據庫系統會在用戶指定的目錄中創建文件用來保存這些LOB數據類型。在數據庫中一個LOB數據段就需要創建一個文件。也就是說,如果表中有2個字段采用的是LOB數據類型,而這個表有2萬條記錄的話,那麼在導出的時候就會創建4萬個文件。而一個文件對應一個文件名字,所以數據庫管理員必須要保證有4萬個可用的文件名字(注意不是文件基本名字)。如果在導出的時候,LOB數據類型太多,現有可用的文件名字不夠使用的話,那麼導出作業就會以失敗告終。

為此在導出數據之前,數據庫管理員需要評估一下數據表中LOB數據段的數量。然後根據這個數量來確定到底需要有多少個可用的文件名字。然後根據這個數量來確定存儲的目錄與文件基本名稱的數量。如上面這個例子所示,最終的可用文件名字有多少呢?

首先數據庫管理員需要知道的,一個基本名稱可以通過三個阿拉伯數字擴展,得到1000個文件名字。然後同一個文件名字可以在不同的目錄中使用。也就是說,上面指定的目錄中,目錄不同,文件名可以不同。只要保證同一個文件夾內部要有重名的文件即可。那麼,兩個文件基本名稱,兩個目錄,再加上文件名字擴展的話,可以得到4000個可用的文件名字。這裡有一個簡單的計算公式,就是文件基本名稱的數量*定義目錄的數量*1000,最後得到的結果就是可用的文件名字數量。如果最後生成的LOB文件的數量小於這個文件可用數量的話,那麼就可以正常導出。但是如果表中包含的LOB文件數量超過了這個可用的文件名數量,即使超過了一個,也會因為目的LOB文件得不到可用的文件名字而導致導出失敗。當失敗的時候,很難查詢到底是哪個LOB文件沒有導出。為此在導出之前,最好能夠預計到可能需要的文件名字數量。其實這個預算也是比較簡單的。至需要知道需要導出的表中有多少列是LOB數據類型的,然後再乘以記錄數即可。一般情況下,文件的可用數量只可以比實際的LOB文件多,而不能夠比起少。多了不會出文件,但是如果少了的話,則會導致數據導出失敗。

有時候為了避免這個問題的出現,數據庫管理員不得不增加LOB文件的目標目錄,或者增加LOB基本文件名的數量,使得導出能夠為所有包含在SELECT語句的結果集合中的LOB數據生成足夠多的文件名字。這裡需要注意的是,數據庫管理員不可以增加擴展的位數。即文件名擴展只可以用到3位阿拉伯數字。另外需要注意的是,由於LOB數據類型的數據都比較大,將他們導出到特定文件中的時候,往往需要花費比較長的時間。為此筆者並不建議一下子就將導出LOB數據類型導出來。在Select語句中加入適當的限制條件,可以分批導出LOB文件,以減少每次導出的時間。如導出所有員工的身份證復印件時,可以按性別分為兩類或者按部分來進行分類。這有兩個好處。一是可以縮短每次導出的時間,即使中間遇到問題也可以控制在最小的范圍之內。二是導出的LOB文件名是隨機的。為此分批導出的話,在尋找對應LOB文件的時候,會方便許多。
上文中就正確導出LOB數據給出了詳細的解析,希望對打擊能夠有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved