SYBASE數據庫方面BCP說明
BCP是SYBASE公司提供專門用於數據庫表一級數據備份的工具。 一般存放在所安裝的ASE或者Open Client 的BIN目錄中。 12版本以前的ASE,bcp存放目錄爲 $SYBASE/bin 12版本(含12版本)以後存放目錄爲 $SYBASE/OCS-12_x/bin 其中$SYBASE爲SYBASE安裝目錄,12_x代表12.0、12.5版本,顯示爲12_0或者12_5 可執行文件名稱爲bcp.EXE參數列表如下
(可用 bcp 得到) usage: bcp [[database_name.]owner.]table_name[:slice_number] {in | out} datafile [-m maxerrors] [-f formatfile] [-e errfile] [-F firstrow] [-L lastrow] [-b batchsize] [-n] [-c] [-t field_terminator] [-r row_terminator] [-U username] [-P password] [-I interfaces_file] [-S server] [-a display_charset] [-q datafile_charset] [-z language] [-v] [-A packet size] [-J client character set] [-T text or image size] [-E] [-g id_start_value] [-N] [-X] [-M LabelName LabelValue] [-labeled] [-K keytab_file] [-R remote_server_principal] [-V [security_options]] [-Z security_mechanism] [-Q] 常用數據備份格式爲: bcp dbname..tablename out c:\temp\filename -Usa -Ppassword -Sservername -c 即可。 其中 -U後爲SYBASE登錄名稱,-P後爲SYBASE登錄口令,-S後爲SYBASE服務名稱,-c代表使用可見文本方式導出數據 如果爲數據恢復只需要將out 替換爲 in 即可。 可用如下方法生成一個可以一次導出一個數據庫中所有表的數據的執行腳本。 編輯一個如下文本文件 文件名稱例爲 bcpscript: use dbname 選中將要導出數據的數據庫 go select 'bcp dbname..' + name + ' out c:\temp\' + name + ' -Usa -P -Ssybcdsrv -c' from sysobjects where type = 'U' 在sysobjects系統表中type爲U的表爲用戶表,系統表爲S。 go用如下格式執行
isql -Usa -Ppassword -Sservername -i bcpscript -o bcpout.bat i參數後爲輸入文件,o參數後文件爲輸入文件執行後得到的輸出文件。 執行後可以得到一個後綴名爲 BAT 的批處理文件(在unix下則生成一個shell文件並更改相應的執行權限),可直接執行。即在指定的目錄下導出了相應的數據文件。一個表的數據爲一個文件。如在UNIX下則可不用BAT後綴。 備份得到的數據文件如果需要重新往數據庫中恢復,只需要將上面操作步驟中BCP命令中的out 參數換爲in參數即可。 注意:在對正式數據做操作前最好先作一些測試。 另外,如果牽涉到使用bcp進行字符集的更改,可以採用 -J charset 參數進行 關於BCP等工具的具體使用指南,請參見SYBASE相關文檔。 針對系統移植所需做的工作,應該有如下幾個步驟: 1. 安裝新環境的硬件環境,包括網絡,硬盤狀況; 2. 安裝新環境的操作系統,包括Service Pack; 3. 安裝相同版本的SYBASE數據庫產品,包括補丁; 4. 添加數據庫用戶,設備等相關信息,應與老系統中一致 5. 創建新系統數據庫; 6. 利用你所擁有的表腳本或者通過SYBASE CENTRAL中的生成DDL功能,將老系統中的建表腳本導出,生成數據庫中的表.最好將建表腳本與建立表上約束(主鍵,外鍵等)的腳本分開,先在表上不建約束,在數據導入後,再加上.; 7. BCP OUT 老系統中數據,根據上面提到的方法; 8. 運行建立其他對象的腳本,包括索引,主鍵,外鍵及存儲過程,觸發器,缺省等; 9. 在新系統中對需要更改的表結構做更改,或者添加新表;10. 測試應用系統是否工作正常.
bcp 說明 以用戶指定的格式將數據庫表複製到操作系統文件或從操作系統文件中複製出來。bcp 位於$SYBASE/$SYBASE_OCS/bin 中。
Windows NT 實用程序是 bcp.exe,它位於 %SYBASE%\%SYBASE_OCS%\bin 中。
語法 bcp [[database_name.]owner.]table_name [:slice_number] {in | out} datafile
[-m maxerrors]
[-f formatfile]
[-e errfile]
[-F firstrow]
[-L lastrow]
[-b batchsize]
[-n]
[-c]
[-t field_terminator]
[-r row_terminator]
-U username
[-P password]
[-I interfaces_file]
[-S server]
[-a display_charset]
[-z language]
[-A packet_size]
[-J client_charset]
[-T text_or_image_size]
[-E]
[-g id_start_value]
[-N]
[-X]
[-K keytab_file]
[-R remote_server_principal]
[-V [security_options]]
[-Z security_mechanism]
[-Q]
[-Y]
或
bcp -v
參數 database_name
如果正被複制的表位於缺省數據庫或 master 中,則此參數是可選項。否則,必須指定數據庫名。
所有者
如果您或數據庫所有者擁有正被複制的表,則此參數是可選項。如果未指定所有者,bcp 首先查找您所擁有的表是否有此名稱,然後查找
數據庫所有者所擁有的表是否有此名稱。如果其他用戶擁有此表,則必須指定所有者名,否則命令將失敗。
view_name
是正在拷出的視圖名。
table_name
是要複製的數據庫表的名稱。表名不能是 Transact-SQL 保留字。分區號 partition_number 並不存在於表 table_name 中。
slice_number
是要複製的數據庫表的數據段的編號。
partition_id
是要複製到的分區的標識符。
in | out
是複製方向。in 表示從文件向數據庫表中複製;out 表示從數據庫表或視圖向文件複製。
datafile
是操作系統文件的全路徑名。路徑名的長度可以是 1 到 255 個字符。
-m maxerrors
是在 bcp 中止複製之前,允許的最大非致命錯誤數。bcp 放棄不能插入的每一行 (由於轉換錯誤,或嘗試向不允許有空值的列中插入空值〕,同時將每個被放棄的行計爲一個錯誤。如果不包括此參數,
bcp 將使用缺省值 10。
- f formatfile
是文件的完整路徑名,該文件存儲着上次在同一個表上使用 bcp 時的應答。回答 bcp 的格式提問後,它提示您將回答保存到一個格式文件中。格式文件的創建是可選的。缺省文件名是 bcp.fmt。bcp 程序可以在複製數據時引用格式文件,這樣用戶就不必以交互式方式重複以前的格式應答。只有在用戶以前創建了希望現在用於拷入或拷出的格式文件的情況下,才使用 -f 參數。如果不指定此參數,bcp 將以交互方式向用戶詢問有關格式的信息。
- e errfile
是錯誤文件的全路徑名,bcp 在其中存儲無法從文件傳送給數據庫的所有行。來自 bcp 的錯誤消息顯示在終端上。bcp 只在指定此參數後才創建錯誤文件。
- F firstrow
是要從輸入文件中複製的第一行的行號 (缺省爲第一行) 。在執行多進程複製這一繁重任務時應避免使用 -F 選項,因爲它通常導致 bcp 佔用更多資源來運行,且不能加快進程。而應將 -F 用於單個進程,進行即席複製。
- L lastrow
是要從輸入文件複製的最後一行的行號 (缺省爲最後一行)。
- b batchsize
是每批數據中被複制的行數 (缺省爲複製一批數據的所有行)。批量複製只適用於批量拷入;對批量拷出不起作用。bcp 接受的 batchsize 的最小數值爲 1。
- n
使用本機(操作系統)格式執行復制操作。指定 -n 參數意味着 bcp 將不對每個字段進行提示。使用本機數據格式的文件爲人工不可讀格式。
- c
使用 char 數據類型作爲數據文件中所有列的缺省數據類型來進行復制操作。如果要在平臺間共享數據,則使用這種格式。此參數不對每個字段進行提示;它使用 char 作爲缺省的存儲類型,沒有前綴,使用 \t(製表符)作爲缺省的字段終結符,並且使用 \n (換行符)作爲缺省的行終結符。
- t field_terminator
指定缺省的字段終結符。
- r row_terminator
指定行終結符。
-U username
指定 Adaptive Server 的登錄名。
- P password
指定 Adaptive Server 口令。如果沒有指定 -Ppassword,bcp 將提示輸入口令。如果口令是 NULL,可以省略 -P 標誌。
- I interfaces_file
指定連接到 Adaptive Server 時要搜索的接口文件的名稱和位置。如果沒有指定 -I,bcp 將在 SYBASE 環境變量(Windows NT 中的 ini 目錄)指定的目錄中查找接口文件 (Windows NT 中的 sql.ini)。
- S server
指定要連接到的 Adaptive Server 名。如果指定不帶參數的 -S,bcp 將使用 DSQUERY 環境變量指定的服務器。
- a display_charset
允許用戶從終端上運行 bcp,而此終端上的字符集與正在運行 bcp 的計算機上的字符集不同。將 -a 和 -J 聯用以指定轉換所需的字符集轉換文件 (.xlt 文件) 。只有在客戶端字符集與缺省字符集相同時,才單獨使用 -a,而不使用 -J。
如果使用 -a 參數命名的字符轉換文件遺漏或輸錯名稱,將出現如下錯誤消息:
Error in attempting to determine the size of a pair of translation tables.:'stat' utility failed.
- z language
是服務器用來顯示 bcp 提示和消息的替代語言的正式名稱。沒有 -z 標誌時,bcp 使用服務器的缺省語言。可以在安裝期間或安裝之後,使用 langinstall 實用程序 (或 Windows NT 中的 langinst)或 sp_addlanguage 存儲過程向 Adaptive Server 添加語言。
如果使用 -z 參數指定了不正確或無法識別的語言,會顯示如下錯誤消息:
Unrecognized localization object. Using default value 'us_english'.Starting copy...=> warning.
- v
顯示 bcp 的版本號和版權消息,並返回操作系統。
- A packet_size
指定用於此 bcp 會話的網絡包大小。例如:bcp pubs2..titles out table_out -A 2048爲此 bcp 會話將包大小設置爲 2048 字節。 packet_size 必須介於 default network packet size 和 maximum network packet size 配置變量的值之間,且必須是 512 的倍數。使用大於缺省值的網絡包大小可提高大批量複製操作的性能。
- J client_charset
指定在客戶端上使用的字符集。bcp 使用過濾器在 client_charset 和Adaptive Server 字符集之間轉換輸入。
-J client_charset 請求將 Adaptive Server 字符集與客戶端上使用的字符集 client_charset 進行相互轉換。
不帶參數的 -J 將字符集轉換設置爲 NULL。這樣不會發生任何轉換。若客戶端與服務器使用相同的字符集,則使用該設置。
如果省略 -J,則字符集將設置爲平臺的缺省字符集,且不必是客戶端正使用的字符集。
如果使用 -J 參數指定了不正確或無法識別的字符集,將顯示如下錯誤消息:
Unrecognized localization object. Using default value 'iso_1'.Starting copy...=> warning.
- T text_or_image_size
允許以字節爲單位指定 Adaptive Server 發送的 text 或 image 數據的最大長度。缺省值爲 32K。如果 text 或 image 字段大於 -T 的值或缺省值,bcp 不會發送此溢出值。
- E
顯式指定表的 IDENTITY 列的值。缺省情況下,在向包含 IDENTITY 列的表中批量複製數據時,bcp 將爲每行指派一個臨時的 IDENTITY 列值 0。這僅在向表中複製數據時有效。bcp 從數據文件中讀取 ID 列的值,但是不將值發送給服務器。相反,在 bcp 向表中插入每一行時,服務器爲每行指定一個唯一的、連續的 IDENTITY 列值,起始值爲 1。如果向表中複製數據時指定了 - E 標誌,bcp 將從數據文件中讀取列值,並將該值發送給向表中插入該值的服務器。如果插入的行數超過了
IDENTITY 列可能的最大值,Adaptive Server 將返回一個錯誤。將數據批量複製出來時,-E 參數不起作用。Adaptive Server 會將 ID 列複製到數據文件,除非您使用 -N 參數。
不能同時使用 -E 和 -g 標誌。
- g id_start_value
指定將 IDENTITY 列的值作爲拷入數據的起點。
不能同時使用 -g 和 -E 標誌。
- N
跳過 IDENTITY 列。在以下情況下使用該參數:拷入數據時主機數據文件不包含 IDENTITY 列值的佔位符;或者拷出數據時不希望主機文件中包含 IDENTITY 列信息。拷入數據時,-N 和 -E 參數不能同時使用。
- X
指定在與服務器的這次連接中,應用程序啓動帶客戶端口令加密的登錄。bcp (客戶端)通知服務器希望進行口令加密。服務器返回一個密鑰,bcp 使用此密鑰加密口令,然後服務器在口令到達時使用此密鑰對它進行鑑定。如果 bcp 崩潰,系統將創建一個包含用戶口令的核心文件。如果未使用加密選項,則口令在文件中以純文本格式顯示。如果使用加密選項,則口令不可讀。
- K keytab_file
指定用於 DCE 中鑑定的 keytab 文件的路徑。
- R remote_server_principal
按照安全性機制的定義爲服務器指定主管名。缺省情況下,服務器的主管名與服務器的網絡名 (由 -S 參數或 DSQUERY 環境變量指定)相匹配。當服務器的主管名和網絡名不一致時,使用 -R 參數。
- V security_options
指定基於網絡的用戶鑑定。使用此選項時,用戶必須在運行實用程序之前登錄到網絡的安全系統。在這種情況下,用戶必須用 -U 選項提供其網絡用戶名;任何用 -P 選項提供的口令都將被忽略。
- V 後面可接一組 security_options 關鍵字母選項來啓用其它安全服務。
這些關鍵字母包括:
· c - 啓用數據保密性服務
· i - 啓用數據完整性服務
· m - 啓用連接建立過程中的相互鑑定
· o - 啓用數據源加戳服務
· r - 啓用數據重放檢測
· q - 啓用順序混亂檢測
- Z security_mechanism
指定用於連接的安全性機制名稱。
在 $SYBASE/install/libtcl.cfg 配置文件中定義安全性機制名稱。如果不提供 security_mechanism 名稱,則使用缺省機制。
- Q
提供對 bcp 版本 10.0.4 的向後兼容性,以用於可空列的複製操作。
- Y
指定字符集轉換在服務器中被禁用,而是在使用 bcp IN 時由 bcp 在客戶端上執行。
BCP in
bcp "db_ams..tblPatchPolTrxnMthly1101" in "D:\PatchData_1101.txt" -b 3000 -c -t! -S server_name -U username -P password
BCP out
bcp "db_ams..tblBusnSrc_Alt_Pol_Txn_Mthly03" out "D:\PatchDataAlt_1103.txt" -c -t! -S "server_name" -U "username" -P "password"