在資料匯入之前,DB2資料庫系統往往會對外部檔案的格式進行仔細的檢查。如果外部檔案的格式不符合資料庫的強制性要求,資料庫就會拒絕匯入資料。筆者這次要給大家介紹的就是DB2外部檔案格式。希望通過這個分析能夠協助資料庫管理員減輕資料匯入匯出過程中的工作量。
一、定界的ASCII檔案。
定界的ASCII檔案,在資料庫領域內應用的是比較廣泛的。基本上任何一個資料庫都支援這種格式的外部檔案。不過各個資料庫對於定界ASCII檔案的分隔字元的要求是不同的。在DB2資料庫中,分隔字元好用來標識資料元素的起始位置和結束位置。一般來說,DB2資料庫支援如下幾種分隔字元。一是字元分隔字元。這個字元分隔字元主要用來界定字元型資料類型的起始位置。預設情況下,在DB2資料庫提高DB2資料備份與恢複的效率)中使用雙引號來作為字元分隔字元。這個跟其他資料庫有所不同。如在Oracle資料庫中,利用定界的ASCII檔案匯入資料的時候,其會自動判斷資料是否是字元型的資料類型,即不需要使用這個字元分隔字元。二是資料行分隔符號,即用來界定欄位的起始位置。大部分情況下,都採用逗號(英文狀態)來作為列的分隔字元。不過使用者可以根據自己的需要來設定不同的資料行分隔符號,如冒號或者分號等等。無論是哪一種符號來做資料行分隔符號,一般情況下都需要滿足一個前提條件,即必須是英文輸入環節下的符號。如果是中文狀態下的逗號或者分號,則會當作一般字元來對帶。三是行分隔字元。行分隔字元是一個比較特殊的分隔字元,因為其所採取的作業系統平台不同,其採用的行分隔字元是不同的。如在Windows作業系統上,行分隔字元就是普通的分行符號。而在Linux等作業系統上,雖然也是分行符號,但是兩個作業系統上分行符號是不同的。如在Linux作業系統上開啟Windows作業系統上建立的定界ASCII檔案,則格式會混亂。如所有記錄在同一行中顯示,好像沒有分行一樣。為此在匯入資料時,如果這個定界檔案是在Windwos作業系統上建立的,而DB2資料庫則是不屬在Linux作業系統上,就無法正常匯入導DB2資料庫中。而需要先對格式進行轉換,將分行符號轉換為Linux作業系統所能夠識別的分行符號。這一點資料庫管理員必須要引起足夠的重視。
根據上面的規則,如下記錄就是DB2資料庫所能夠支援的格式:
1001,”office”,2323,”BeiJing”,-233
注意,如果在外部檔案中,字串的值中包含資料行分隔符號時(如逗號資料行分隔符號),則這個字串分隔符號是必須的。也就是說,如果要匯入的資料是字元型資料的話,必須要使用雙引號括起來。如果沒有資料行分隔符號好的話,則這個字串分隔符號號可有可無。如Bei,Jing這個字串,如果不用雙引號括起來的話,DB2資料庫系統就會認為他是兩個欄位,而不是一個字串。此時就需要使用字元分隔字元將其引用起來,告訴資料庫系統這是一個字串。雖然這個定界的ASCII檔案可以用來轉換大多數的資料類型,如字元型資料、數字型資料、日期型資料等等。但是如果外部檔案中包含位元據的話,則採用這個定界的ASCII檔案不是很好的選擇。另外就是如果檔案建立的平台與DB2資料庫所在的平台所採用的作業系統平台不同,也不建立採用這個ASCII定界檔案。如果遇到這種情況的話,筆者建立採用PC整合交換格式的外部檔案。最後需要提醒的是,在定界的ASCII檔案中,資料行的最大長度沒有限制。但是單獨列的值的最大長度不能夠超過32KB。則只是從ASCII檔案的角度來說的。在將檔案匯入到資料庫的時候,還需要注意DB2資料庫表中欄位的大小能否容納這個外部檔案中欄位的值。
二、固定記錄長度的ASCII檔案。
DB2資料庫還支援固定長度的ASCII外部檔案格式,有時候也將這種格式的檔案叫做位置ASCII檔案。固定記錄長度位置的ASCII檔案格式使用固定的位元組位移量來替代記錄分隔字元以決定各個欄位的界限。簡單的說,在這種檔案格式下,檔案中的每一個記錄(記錄中的每一個欄位)都有固定的長度。如第N條記錄的起始位置就是記錄的固定長度乘以N的乘積決定。所計算出來的值就是從檔案起點算起的位元組位移量。不僅記錄行的長度是固定的,而且每條記錄中每個列的值的起始位置和終止位置也是相同的。即每個欄位的長度是相同的。不過欄位實際內容沒有達到這個固定寬度的話,則往往是使用空格符來代替。
不過這個檔案格式比起比起上面所講的定界的ASCII檔案有很大的缺陷。如製作這個檔案非常的麻煩,而且很容易出錯。多輸入一個空格與少輸入一個空格都會導致資料庫匯入錯誤。如中文字元與英文字元所佔的位置是不同的。如果資料檔案中同時包含中文與英文字元的話,那麼這個固定長度就很難控制。所以說,筆者跟很多資料庫管理員一樣,並不建立採用這個固定長度的ASCII檔案格式。如果一定要使用的話,那麼也要採用專業的工具來轉換這個檔案。如在Linux作業系統中,可以利用重新導向符號來製作固定寬度的ASCII檔案。總之,如果手工建立這個檔案的話,則出錯的可能性很大。現在的DB2資料庫系統,雖然某些匯入工具還支援這種格式的外部檔案。但是在資料匯出的時候,已經放棄了這個格式。可見這種格式的檔案正在退出曆史舞台。
三、二進位格式的檔案。
以上兩種檔案有一個共同的特點,即都不是以二進位形式儲存的。為此他們在應用的時候會遇到一個相容性的檔案。如在Linux作業系統平台上將某張表匯出為ASCII檔案。在Windows作業系統平台上,無法將這個檔案匯入到DB2資料庫系統中。主要是因為同樣是ASCII檔案,在不同的作業系統中(如Linux作業系統或者Windows作業系統),其儲存的格式是不同的。為此通過ASCII檔案是無法在不同的作業系統上進行資料互導的。其實不光光是DB2 資料庫遇到這種困擾,在Oracle資料庫也是如此。
為瞭解決問題,在DB2資料庫中涉及了二進位格式的外部檔案。這個二進位格式的資料檔案主要有兩種,分別為PC整合交換格式和工作表單格式。PC整合交換格式檔案主要用於在不同的作業系統平台上,如Linux、Windows作業系統平台上的DB2資料庫表之間進行資料傳遞。即通過這種格式的二進位檔案,可以將資料從Linux作業系統上的資料庫中到出來,然後匯入導Windows作業系統上的DB2資料庫中。這個檔案主要的特點就是,其儲存的不光光是記錄的內容,還儲存了表結構的定義。而且因為是二進位格式的檔案,所以在不同作業系統上可以容易的轉移,而不用擔心相容性的問題。
另外一種二進位檔案的格式是工作表單格式。這也是DB2資料庫產品的一種特殊的格式檔案。這個工作表單格式檔案的用途與PC整合交換格式的檔案用途不同。PC整合交換格式檔案主要用來解決的是不同作業系統平台上資料移轉時的相容性問題。而這個工作表單格式的檔案其主要用途則是用來解決DB2不同產品之間的資料移轉,如在DB2資料庫與Lotus產品之間的資料移轉。雖然他們同樣都是二進位檔案,但是他們用途是不同的。為此資料庫管理員需要根據不同用途來選擇合適的檔案格式。、
- DB2資料庫設計的三個建議
- 解析DB2與非DB2資料庫之間遠程複製
- DB2資料庫基本操作指令30條
- 提高DB2資料備份與恢複的效率
- DB2資料庫為單個會話鎖定的技巧