EXPORT實用程序概述
EXPORT實用程序使用一條SQL SELECT語句或XQUERY語句將數據從數據庫表提取到一個文件中。數據可以被導出到DEL、IXF或WSF文件中。建議在export中包括MESSAGES子句,以捕獲導出過程中遇到的錯誤、警告和包含有用信息的消息。
要想成功地調用EXPORT實用程序,必須擁有SYSADM或DBADM權限,或者擁有EXPORT命令中所訪問的表或視圖上的CONTROL或SELECT特權。
對於DB2 9.1中新引入的基於標簽的訪問控制(LBAC)支持,需要注意LBAC憑證,它可能允許也可能不允許訪問受保護的行和/或列。當從一個包含受保護行的表中導出數據時,LBAC憑證可能限制被導出的行。如果您不具備對某個行的讀訪問權限,那麼就不能導出這個行。這種情況下並不會給出任何錯誤或警告。然而,如果LBAC憑證不允許讀取導出中包含的一個或多個受保護的列,那麼導出將失敗,並返回一個錯誤。
我們來看看一個簡單的導出的例子。下面的命令將SELECT語句的結果導出到一個DEL格式的文件中。消息文件msg.out用於記錄有用的信息和遇到的錯誤或警告:
EXPORT TO myfile.del OF DEL
MESSAGES msg.out
SELECT staff.name, staff.dept, org.location
FROM org, staff
WHERE org.deptnumb = staff.dept;
文件類型修飾符
在前面的例子中,數據被提取到一個DEL格式的文件中。默認情況下,列值之間以逗號(,)隔開,字符串以雙引號(")括起來。如果被提取的數據已經包含逗號和雙引號,那麼會怎麼樣呢?在這種情況下,導入或裝載實用程序不可能確定哪些符號是實際的數據,哪些符號是分界符。為了定制EXPORT如何操作,可以使用MODIFIED BY子句,並指定您想用文件類型修飾符更改哪些方面。下面是帶MODIFIED BY子句的EXPORT命令:
EXPORT TO file_name OF file_type
MODIFIED BY file_type_modifIErs
MESSAGES message_file
select_statement
在Command Reference Guide中的EXPORT小節下,可以找到文件類型修飾符的完整列表。下面列出了一些常用的修飾符:
chardelx
指定x作為新的單字符字符串分界符。默認值是一個雙引號(")。
coldelx
指定x作為新的單字符列分界符。默認值是一個逗號(,)。
codepage=x
指定x(一個ASCII字符串)作為輸出數據的新的碼頁(code page)。在導出操作期間,字符數據被從應用程序碼頁轉換成這種碼頁。
timestampformat="x"
x是源表中時間戳的格式。
考慮這個例子:
EXPORT TO myfile.del OF DELMODIFIED BY chardel! coldel@ codepage=1208 timestampformat="yyyy.mm.dd hh:mm tt"MESSAGES msg.outSELECT * FROM schedule
前面的命令按照以下方式將SCHEDULE表中的數據導出到DEL格式的文件中:
字符串以感歎號(!)括起來。
列之間以@符號分隔開。
將字符串轉換成碼頁1208。
SCHEDULE表中用戶定義的時間戳的格式為yyyy.mm.dd hh:mm tt。
用LOBSINFILE修飾符導出大型對象
當導出包含大型對象列的表時,默認情況下只能導出LOB數據的前32KB。對象的這一部分與其他列數據放在同一個文件中。為了完整地導出LOB數據,並將它們與其他列數據分別存儲在不同的文件中,必須使用LOB選項。在DB2 V9.1中,可以指定是將多個LOB值連接起來並導出到同一個輸出文件中,還是將每個LOB值導出到一個單獨的文件中。
下面是一個帶LOBSINFILE修飾符的EXPORT命令,該修飾符將導致導出實用程序將多個LOB值寫到同一個輸出文件中。
EXPORT TO file_name OF file_type
LOBS TO lobfile_directory_1, lobfile_directory_2, ...
LOBFILE lobfilename
MODIFIED BY LOBSINFILE
MESSAGES message_file
select_statement
LOBS TO子句指定LOB文件將被存儲到的目錄。如果沒有發現LOBS TO子句,那麼LOB數據將被存儲到當前的工作目錄。注意,在前面的命令中,可以指定不止一個路徑作為LOB文件目標目錄。每個LOB路徑至少有一個文件,每個文件至少包含一個LOB。
有時候需要使用用戶指定的文件名來標識被提取出來的LOB文件。LOBFILE子句可以用於這一目的。每個LOB文件將有一個序列號作為文件擴展名(例如lobfile.001、lobfile.002、lobfile.003等)。
當指定LOBS TO或LOBFILE選項時,將隱式地激活LOBSINFILE行為。但是,最好顯式地指定LOBSINFILE修飾符,以避免與LOBSINSEPFILES修飾符行為混淆,稍後會談到後一種修飾符。
LOB Location SpecifIEr
當使用LOBSINFILE修飾符導出大型對象時,會生成一個LOB Location SpecifIEr (LLS),後者將被存儲在導出輸出文件中。LLS是一個字符串,用於表明在哪裡可以找到LOB數據。LLS的格式為filename.ext.lob.nnn.mmm/。我們來更詳細地看看這個格式:
filename.ext.lob是包含LOB數據的文件的文件名。ext是一個序列號,如前所述。
nnn是大型對象在LOB文件中的偏移位置,以字節計。
mmm是大型對象的長度,以字節計。
例如,resume.001.lob.1257.2415/表明大型對象位於resume.001.lob文件中,實際的LOB數據從文件的第1257個字節開始,其長度為2,415個字節。
為了清楚地說明LLS的用法,可以看看下面的例子。
EXPORT TO empresume.del DEL
LOBS TO d:\lob1\
LOBFILE resume
MODIFIED BY LOBSINFILE
MESSAGES msg.out
SELECT * FROM emp_resume
圖1
使用LOBSINSEPFILES修飾符導出大型對象
如前面的小節所示,您還可以選擇完整地導出LOB數據並將它們分別存儲在單獨的文件中。前面描述的LOB選項還是一樣的,不同的是這裡使用了LOBSINSEPFILES修飾符。
下面是使用LOBSINSEPFILES修飾符的一個例子。
EXPORT TO empresume.del DEL
LOBS TO d:\lob1\
LOBFILE resume
MODIFIED BY LOBSINSEPFILES
MESSAGES msg.out
SELECT * FROM emp_resume
上面的EXPORT命令將把LOB數據寫入到具有resume.ext.lob文件名的文件中(即resume.001.lob、resume.002.lob、resume.003.lob等),這些文件都位於LOB路徑d:\lob1中。
導出XML(標准化越來越近了)數據
隨著DB2 9.1中引入了本地xml(標准化越來越近了)支持,導出實用程序也被擴展,以支持xml(標准化越來越近了)。如果沒有指定任何與xml(標准化越來越近了)相關的選項而導出一個表(用xml(標准化越來越近了)數據定義的),那麼相關的xml(標准化越來越近了)數據將被寫入到與導出的其他關系數據分開的一個或多個文件中。讓我們看一個例子。下面的EXPORT命令是在PRODUCT表上發出的,該表中定義了一個XML(標准化越來越近了)列:
EXPORT TO prodexport.del DELMESSAGES msg.outSELECT * FROM product
在這個例子中,導出實用程序將生成兩個輸出文件。其中一個輸出文件是prodexport.del,該文件將包含表中的關系數據和XML(標准化越來越近了) data specifIEr (XDS)。
圖2
XDS是用名為“XDS”的一個xml(標准化越來越近了)標記表示的字符串。它具有一些屬性,用於描述關於列中實際的XML(標准化越來越近了)數據的信息。下面是XDS字符串中可能出現的一些屬性:
FIL指定包含XML(標准化越來越近了)數據的文件的文件名。
OFF指定XML(標准化越來越近了)數據在FIL屬性指定的文件中的字節偏移量。
LEN指定FIL屬性中指定的文件中的XML(標准化越來越近了)數據的字節長度。
SCH指定用於驗證xml(標准化越來越近了)文檔的XML(標准化越來越近了)模式的全限定SQL標識符。下一屏中將討論這個屬性。
從前面prodexport.del的內容中可以看出,第一個xml(標准化越來越近了)數據存儲在prodexport.del.001.XML(標准化越來越近了)中,從0字節偏移位置開始,長度為252個字節。
在這個例子中,導出實用程序生成的另一個文件是prodexport.del.001.xml(標准化越來越近了),該文件包含xml(標准化越來越近了)內容。導出的每個xml(標准化越來越近了)數據都被連接在一起寫入到這個文件中。下面是prodexport.del.001.XML(標准化越來越近了)文件的內容。
圖3
使用xml(標准化越來越近了)選項和修飾符導出XML(標准化越來越近了)數據
與導出大型對象一樣,您可以指定被導出XML(標准化越來越近了)文檔的存儲路徑,還可以指定輸出文件的文件名。考慮下面的例子:
EXPORT TO prodexport.del DELxml(標准化越來越近了) TO d:\xml(標准化越來越近了)pathxml(標准化越來越近了)FILE proddescMODIFIED BY xml(標准化越來越近了)INSEPFILES xml(標准化越來越近了)NODECLARATION xml(標准化越來越近了)CHARXML(標准化越來越近了)SAVESCHEMAMESSAGES msg.outSELECT * FROM product
在這個例子中,PRODUCT表的關系數據被導出到prodexport.del文件。然後,所有xml(標准化越來越近了)數據都被寫入到xml(標准化越來越近了) TO子句指定的目錄d:\xml(標准化越來越近了)path中。包含xml(標准化越來越近了)數據的文件被命名為proddesc.ext.xml(標准化越來越近了),其中ext是一個序列號(例如proddesc.001.xml(標准化越來越近了)、proddesc.002.xml(標准化越來越近了)、proddesc.003.xml(標准化越來越近了)等)。基本文件名是用XML(標准化越來越近了)FILE選項定義的。
您也許還注意到,這個例子中使用了一些修飾符。下面對所有與XML(標准化越來越近了)相關的修飾符作一個總結。
xml(標准化越來越近了)INSEPFILES導致導出實用程序將導出的每個xml(標准化越來越近了)文檔寫入到不同的XML(標准化越來越近了)文件中。
xml(標准化越來越近了)NODECLARATION表明導出xml(標准化越來越近了)數據無需使用xml(標准化越來越近了)聲明標記。默認情況下,xml(標准化越來越近了)標記被寫在XML(標准化越來越近了)文檔的開頭,並包括一個編碼屬性。
xml(標准化越來越近了)CHAR表明xml(標准化越來越近了)數據以字符碼頁編碼。默認情況下,XML(標准化越來越近了)數據是以Unicode編碼的。當使用這個修飾符的時候,使用的是codepage文件類型修飾符或應用程序碼頁。
xml(標准化越來越近了)GRAPHIC表明無論是codepage文件類型修飾符還是應用程序碼頁,導出的xml(標准化越來越近了)數據將以UTF-16碼頁編碼。注意,這個例子中沒有使用XML(標准化越來越近了)GRAPHIC。
我們要介紹的最後一個選項是xml(標准化越來越近了)SAVESCHEMA。當插入一個xml(標准化越來越近了)文檔時,可以用一個xml(標准化越來越近了)模式對其進行驗證。xml(標准化越來越近了)SAVESCHEMA選項導致導出實用程序還保存用於每個導出的xml(標准化越來越近了)數據的xml(標准化越來越近了)模式。那個模式的全限定SQL標識符將被存儲為相應的xml(標准化越來越近了) data specifIEr(XDS)中的一個SCH屬性。注意,如果沒有用xml(標准化越來越近了)模式驗證導出的XML(標准化越來越近了)文檔,或者該模式對象不再存在於數據庫中,那麼相應的XDS中將不包括SCH屬性。
下面顯示了前面的導出例子的結果。
圖4
用一個XQuery導出XML(標准化越來越近了)數據
EXPORT命令還允許指定一個XQuery語句,使導出實用程序將一個XQuery的結果導出到一個XML(標准化越來越近了)文件中。我們來看看下面的例子。
EXPORT TO custexport.del DELxml(標准化越來越近了) TO d:\xml(標准化越來越近了)pathxml(標准化越來越近了)FILE custphoneMODIFIED BY xml(標准化越來越近了)INSEPFILES xml(標准化越來越近了)NODECLARATIONMESSAGES msg.outSELECT XML(標准化越來越近了)QUERY ('$doc/customerinfo/phone' PASSING INFO AS "doc") FROM customer
前面例子中的XQuery返回存儲在CUSTOMER表的xml(標准化越來越近了)列INFO下的每個客戶的電話號碼。這裡討論的所有xml(標准化越來越近了)選項和修飾符都適用於XQuery語句。因此,這個例子將為XQuery的每個結果生成單獨的xml(標准化越來越近了)文檔。這個文件存放在d:\xml(標准化越來越近了)path中,並且以custphone.ext.xml(標准化越來越近了)命名,其中ext是一個序列號。此外,文檔中不包括XML(標准化越來越近了)聲明標記。
下面是導出的一個XML(標准化越來越近了)文檔的內容。
圖5
從Control Center中導出
除了從DB2命令行執行EXPORT命令外,還可以使用Control Center進行導出。從Control Center這個工具中,可以指定導出實用程序支持的所有選項和子句,例如大型對象和XML(標准化越來越近了)數據。如下圖所示,Schedule選項卡允許您創建一個任務,並調度在給定時間運行的導出。
圖6