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"