如現在有一張員工信息的表(USER_INFO)表。在這張表中有三個字段,分別為員工編號、員工姓名、員工身份證復印件等等。由於員工身份證復印件其容量比較大,為此數據庫中采用的是LOB數據類型。當需要將這張表格中的數據導出到特定文件中的時候,只要這些身份證復印件的容量超過32KB的話,則在導出的目標文件中是看不到這些身份證復印件的。在導出的時候,系統會將這些身份證復印件保存在用戶指定的文件夾內。而在導出地目標文件中,只有這些復印件對應的名字而已。所以說,如果一個表中有LOB數據類型,在導出到特定格式的文件中時,就需要區別對待。
如果某張表帶有LOB類型的數據,此時在書寫導出語句的時候,就需要特別的注意。如需要按如下的格式來書寫導出語句:
- Export to user_info.del of del
- Lob to d:\photo1,d:\photo2 Lobfile p1,p2 modifiled by lobsinfile
- Select * from user_info.
一、導出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數據段的數量。然後根據這個數量來確定到底需要有多少個可用的文件名字。然後根據這個數量來確定存儲的目錄與文件基本名稱的數量。如上面這個例子所示,最終的可用文件名字有多少呢?