標籤:
移動工具有
import/export
load
db2look/db2move
使用資料移動的情境及問題
1.在對某表做大量修改時,特別是CR時,檢查資料庫的備份記錄,是否有最近的備份檔案,如果有,請客戶確認如果出現問題是否可用;另一種,就是做資料的臨機操作備份,這時我們需要DataMovement Tools
如何評估表中的資料量大小
如何方便的查看錶中是否含有識別欄位
db2 "select distinct identity from syscat.columns where tabname = ‘XXXX‘"
如何方便的查看錶中是否含有lob列
db2 "select TABSCHEMA concat ‘.‘||TABNAME from syscat.columns where typename like ‘%LOB‘ and TABSCHEMA not like ‘%IBM%‘ and not like ‘SYS%‘" | grep -i xxxxx
另一種方式是查看錶的定義
db2look -d db_name -t t1 t2 -e -o db2look_tables.out;cat db2look_tables.out
e.g. db2look -d sample -t dbv97fp7.employee -e
NOTE:如果在-t選項做了某表的alias,那麼將不會匯出資料
2. 在跨作業系統情況下,恢複資料庫,在這種情況下,無法使用offline 或online 備份檔案進行資料庫恢複
似乎export 無法完成這樣的工作啊,因為文法上是需要select 語句匯出資料的,該如何?的呢?
db2look+db2move
3. 表資料移轉,有時,客戶需要將一個表中的資料移轉到另一個表中,其中表的定義可能不一致的
識別欄位:
NOTE:識別欄位匯入匯出的注意事項
1) 在原資料中沒有識別欄位的情況下匯入到含有識別欄位的表
A B C ---> A B i1 C
NOTE:這是原資料中的列數小於目標表中的列數的特殊情況
2)在原資料中帶有識別欄位的情況下匯入到含有識別欄位的表
A B i1 C ---> A B i1 C
3)目標錶帶有 generated always 的識別欄位,不需要匯入檔案中的識別欄位值
4)目標錶帶有 generated always 的識別欄位,需要使用載入原資料中識別欄位的值
NOTE:普通的identity能否使用identityoverride 檔案修飾符
5)匯入檔案中含有識別欄位,但是表中不包含識別欄位
NOTE:這是目標表列數小於原資料列數的特例
產生列:
匯入注意事項:
沒有使用檔案類型修飾符時,將會按照如下規則進行
1)當資料檔案中相應的行缺少產生列的值或提供了NULL值時,將建立產生列值;
直接匯入將導致產生列後的列的值,無法匯入必須使用如下方法
2)如果為產生列提供了非空值,那麼將拒絕該行(SQL3550W)
產生列與識別欄位有類似的問題
匯入和匯出產生列同樣有類似與識別欄位的檔案修飾符 generatedignore,generatedmissing,generatedoverride
NOTE:使用load 和檔案修飾符 generatedoverride 會出現如下問題,該如何處理
SQL0668N Operation not allowed for reason code "1" on table "DBV97FP7.TBGE".SQLSTATE=57016 ????
3)如果為不可空產生列建立了NULL值,例如如果將列定義為兩個表列之和,但這兩個表列的檔案中含有NULL值,那麼會發生這種情況,那麼將拒絕整行(SQL0407N)
大對象的匯入匯出:
匯出大對象(LOB)列的表時,預設操作是對每個LOB值匯出最多32KB,以便將其與列資料的餘下部分放在同一個檔案中。如果要匯出超過32KB的LOB值,那麼應將LOB資料寫至單獨檔案以便截斷。
要指定應將LOB寫至自己的檔案,可以使用lobsinfile檔案修飾符。此檔案類型修飾符指示EXPORT使用程式將LOB資料放置在LOBS TO 子句指定的目錄中。使用LOBS TO 或LOBFILE會隱式啟用lobsinfile檔案類型修飾符。
預設情況下,LOB值與匯出的關係資料將寫至同一路徑。如果LOBS TO 選項指定了一個或多個路徑,那麼EXPORT使用程式將迴圈使用這些LOB路徑,以便每個成功的LOB值寫入相應的LOB檔案。
可以使用lobfile選項對輸出LOB檔案指定名稱。如果指定了LOBFILE選項,那麼LOBFILENAME的格式為lobfilespecxxx.lob,其中lobfilespec是為LOBFILE選項指定的值,而xxx是 EXPORT使用程式生存的lob檔案的序號,否則,lobfilename的格式為exportfilename.xxx.lob,其中exportfilename是為EXPORT命令指定的已輸出檔案格式名稱,而xxx是export公用程式輸出的lob檔案的序號
預設情況下,多個LOB將寫至單個檔案,如果將各個LOB儲存在不同的檔案中,可以使用lobsinfepfiles檔案修飾符已將每個LOB寫至單獨的檔案
空值:
對於空值的處理,往往會有很多問題,比如
1)我們在匯入列是空值時,完成插入一個預設值,而非空,避免存在列有非空限制,導致資料匯入失敗;
2)對於變成字元列來說 ,對於匯入的資料,往往希望將字元尾部的空格自動消除掉,但是事與願違,匯入的資料將會保留尾部的null or blank;
3)資料庫預設情況下,會消除字串前面的空格,有時候,我們希望保留,比如是名字的前面
對於null處理資料庫提供了如下檔案修飾符 nullindchar striptnulls striptblanks keepblanks
定界符:
什麼是定界符?
定界符包括哪些類型,分別什麼意思? record delimiter, character delimiter, column delimiter
對於定界符的作用,往往是避免資料庫識別錯誤檔案資料。
1)我們的資料,有時候需要匯入的資料如下
I am 6" tall
資料中不包含字元定界符,""是資料而不是定界符的情況; ----這裡的兩種處理方式(取消字元定界符,修改字元定界符為其他)
2)我們想匯出的資料不包含字元定界符;
3)字元定界符““與資料衝突,想改變字元定界符;
4)"Vincent <row delimiter> is a manager", <row delimiter>
"Vincent
is a manager"
"Bob
is a employee"
匯入的資料庫中;
資料庫提供如下的檔案修飾符:nodoubledel,
chardel,coldel,delprioritychar
雙字元定界符
"" ---解釋一下雙字元定界符
nodoubledel
字元定界符,列定界符,行定界符(記錄定界符)
PC/IXF:
日期格式:
在不同平台和系統上進行資料移動時,日期格式容易出問題。
這幾個檔案修飾符僅用於ASC和DEL格式
dateformat
datesiso
timeformat
timestampformat
DB2 移動資料總結一