BCP參數說明
可執行文件名稱為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數據庫備份
可用如下方法生成一個可以一次導出一個數據庫中所有表的數據的執行腳本。
編輯一個如下文本文件 文件名稱例為 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
BCP優化
1.表的索引和主鍵
為了提高bcp導入數據的速度,需要將比較大的表的索引和主鍵刪除,否則的話,每bcp進一條數據,數據庫都自動寫一條log日志,記載此數據的上一條和下一條記錄,確定本記錄在此表中的准確位置,一是影響bcp速度,二是數據庫的log飛速膨脹。數據庫的自動清除log功能只有在一個事務結束後才起作用。
2.Tempdb的大小
當Sybase執行bcp in腳本時,會占用導入數據2倍的tempdb空間,因此在執行前要仔細估計最大的table的大小,保證有足夠的tempdb空間。當空間不夠時,要考慮用分割table或刪除陳舊數據的方法縮小table的大小,或者考慮增加tempdb的大小。
3.數據庫配置選項的設置
當數據庫執行bcp in腳本時會產生大量的log,為保證bcp in進程不致因為log溢出而中斷,應該設置database的選項“truncate log on chkpt”為“true”。
4.是數據包太大了,這是好象是bcp的問題.
暫行方法:-F 1 -L 10000 從1條到10000條,這樣數據量會少一些.
5.增加擴展分配(extent allocation)。缺省情況下,預分配2到31個擴展。在一個BCP批次中,未使用的預分配擴展被釋放。為了獲得最佳BCP性能,設置BCP批次大小和 “number of preallocated extents”
預分配擴展個數,以消除空間重新釋放。使用Sp_config number of pre-allocated exetents,nn 對於系統10:buildmaster -ycpreallocext=nn
6.對表進行分區
7.配置OAM頁面的緩沖策略,以減少對OAM(Object Allocation Map)頁面的物理讀。
8.配置大I/O的緩沖池,例如16K:Sp-poolconfig default, "16K"
9.使用-A標記,加大網絡包大小: bcp -A 16384
10.bcp分為兩種,快速和慢速bcp。
在表上有主鍵、索引時,bcp是慢速bcp,速度慢,並且會寫日志,大表有可能導致日志撐滿,增加不必要的麻煩。
快速bcp速度快,不寫日志,但是要求打開數據庫的"select into"選項
對於大表的bcp經驗為:
慢速bcp的時間 > 快速bcp + 主鍵 + 索引的創建時間
bcp完成後,創建主鍵、外鍵、視圖、存儲過程......
11.-b 10 -e error導出錯誤記錄信息
C:\>bcp
usage: bcp {dbtable | query} {in | out | queryout | format} datafile
[-m maxerrors] [-f formatfile] [-e errfile]
[-F firstrow] [-L lastrow] [-b batchsize]
[-n native type] [-c character type] [-w wide character type]
[-N keep non-text native] [-6 6x file format] [-q quoted identifIEr]
[-C code page specifier] [-t fIEld terminator] [-r row terminator]
[-i inputfile] [-o outfile] [-a packetsize]
[-S server name] [-U username] [-P passWord]
[-T trusted connection] [-v version] [-R regional enable]
[-k keep null values] [-E keep identity values]
[-h "load hints"]
bcp命令詳解(Sybase)
bcp 實用工具在 Microsoft? SQL Server? 2000 實例和數據文件之間以用戶指定的格式復制數據。
語法
bcp {[[database_name.][owner].]{table_name | vIEw_name} | "query"}
{in | out | queryout | format} data_file
[-m max_errors] [-f format_file] [-e err_file]
[-F first_row] [-L last_row] [-b batch_size]
[-n] [-c] [-w] [-N] [-V (60 | 65 | 70)] [-6]
[-q] [-C code_page] [-t fIEld_term] [-r row_term]
[-i input_file] [-o output_file] [-a packet_size]
[-S server_name[\instance_name]] [-U login_id] [-P passWord]
[-T] [-v] [-R] [-k] [-E] [-h "hint [,...n]"]
參數
database_name
指定的表或視圖所在數據庫的名稱。如果未指定,則為用戶默認數據庫。
owner
表或視圖所有者的名稱。如果執行大容量復制操作的用戶擁有指定的表或視圖,則 owner 是可選的。如果沒有指定 owner 並且執行大容量復制操作的用戶不擁有指定的表或視圖,則 Microsoft? SQL Server? 2000 將返回錯誤信息並取消大容量復制操作。
table_name
是將數據復制到 SQL Server 時 (in) 的目的表名,以及從 SQL Server 復制數據時 (out) 的源表名。
vIEw_name
是將數據復制到 SQL Server 時 (in) 的目的視圖名,以及從 SQL Server 復制數據時 (out) 的源視圖名。只有其中所有列都引用同一個表的視圖才能用作目的視圖。有關將數據復制到視圖的限制的更多信息,請參見 INSERT。
Query
是返回一個結果集的 Transact-SQL 查詢。如果查詢返回多個結果集,例如指定 COMPUTE 子句的 SELECT 語句,只有第一個結果集將復制到數據文件,隨後的結果集被忽略。使用雙引號引起查詢語句,使用單引號引起查詢語句中嵌入的任何內容。在從查詢中大容量復制數據時,還必須指定 queryout。
in | out | queryout | format
指定大容量復制的方向。in 是從文件復制到數據庫表或視圖,out 是指從數據庫表或視圖復制到文件。只有從查詢中大容量復制數據時,才必須指定 queryout。根據指定的選項(-n、-c、-w、-6 或 -N)以及表或視圖分隔符,format 將創建一個格式文件。如果使用 format,則還必須指定 -f 選項。
說明 Microsoft SQL Server 6.5 中的 bcp 實用工具不支持大容量復制到包含 sql_variant 或 bigint 數據類型的表。
data_file
大容量復制表或視圖到磁盤(或者從磁盤復制)時所用數據文件的完整路徑。當將數據大容量復制到 SQL Server 時,此數據文件包含將復制到指定表或視圖的數據。當從 SQL Server 大容量復制數據時,該數據文件包含從表或視圖復制的數據。路徑可以有 1 到 255 個字符。
-m max_errors
指定在大容量復制操作取消之前可能產生的錯誤的最大數目。bcp 無法復制的每一行都將被忽略並計為一個錯誤。如果沒有包括該選項,則默認為 10。
-f format_file
指定格式文件的完整路徑,該格式文件包含以前在同一個表或視圖上使用 bcp 時的存儲響應。當使用由 format 選項所創建的格式文件大容量復制入或復制出數據時,使用此選項。格式文件的創建是可選的。在提示幾個格式問題之後,bcp 將提示是否在格式文件中保存回答。默認文件名為 Bcp.fmt。大容量復制數據時,bcp 可引用一個格式文件,因此不必重新交互輸入以前的回答。如果未使用此選項,也沒有指定 –n、-c、-w、-6 或 -N,則 bcp 將提示輸入格式信息。
-e err_file
指定錯誤文件的完整路徑,此錯誤文件用於存儲 bcp 無法從文件傳輸到數據庫的所有行。來自 bcp 的錯誤信息將發送到用戶工作站。如果未使用此選項,則不創建錯誤文件。
-F first_row
指定要大容量復制的第一行的序數。默認值是 1,表示在指定數據文件的第一行。
-L last_row
指定要大容量復制的最後一行的序數。默認值是 0,表示指定數據文件中的最後一行。
-b batch_size
指定所復制的每批數據中的行數。每個批處理作為一個事務復制至服務器。SQL Server 提交或回滾(在失敗時)每個批處理的事務。默認情況下,指定的數據文件中的所有數據都作為一批復制。請不要與 -h "ROWS_PER_BATCH = bb" 選項一起使用。
使用數據的本機(數據庫)數據類型執行大容量復制操作。此選項不提示輸入每一字段,它將使用本機值。
使用字符數據類型執行大容量復制操作。此選項不提示輸入每一字段;它使用 char 作為存儲類型,不帶前綴,\t(制表符)作為字段分隔符,\n(換行符)作為行終止符。
使用 Unicode 字符執行大容量復制操作。此選項不提示輸入每一字段;它使用 nchar 作為存儲類型,不帶前綴,\t(制表符)作為字段分隔符,\n(換行符)作為行終止符。不能在 SQL Server 6.5 版或更早版本中使用。
對非字符數據使用數據的本機(數據庫)數據類型和對字符數據使用 Unicode 字符類型執行大容量復制操作。這是可替代 -w 選項的性能更高的選項,其目的是使用數據文件將數據從一個 SQL Server 傳輸到另一個 SQL Server 中。它不提示輸入每一字段。在需要傳輸包含 ANSI 擴展字符的數據以及想利用本機模式的性能時,可以使用這一選項。不能在 SQL Server 6.5 版或更早版本中使用 -N 選項。
-V (60 | 65 | 70)
使用 SQL Server 早期版本中的數據類型執行大容量復制操作。此選項與字符 (-c) 或本機 (-n) 格式一起使用。此選項並不提示輸入每一字段,它使用默認值。例如,若要將 SQL Server 6.5 中的 bcp 實用工具所支持(但 ODBC 不再支持)的日期格式大容量復制到 SQL Server 2000,可使用 -V 65 參數。
重要 將數據從 SQL Server 大容量復制到數據文件時,即使指定了 –V,bcp 實用工具也不會為任何 datetime 或 smalldatetime 數據生成 SQL Server 6.0 或 SQL Server 6.5 的日期格式。日期將始終以 ODBC 格式寫入。另外,由於 SQL Server 6.5 版或更早版本不支持可為空的 bit 數據,因此 bit 列中的空值寫為值 0。
使用 SQL Server 6.0 或 SQL Server 6.5 數據類型執行大容量復制操作。僅為保持向後兼容性。改為使用 –V 選項。
在 bcp 實用工具和 SQL Server 實例的連接中執行 SET QUOTED_IDENTIFIERS ON 語句。使用該選項指定包含空格或引號的數據庫、所有者、表或視圖的名稱。將由三部分組成的整個表名或視圖名引在雙引號 (" ") 中。
-C code_page
僅為保持向後兼容性。作為代替,請在格式文件或交互式 bcp 中為每一列指定一個排序規則名。
指定數據文件中的數據代碼頁。只有當數據中包含字符值大於 127 或小於 32 的 char、varchar 或 text 列時,code_page 才有用。
代碼頁值 描述
ACP ANSI/Microsoft Windows? (ISO 1252)。
OEM 客戶程序使用的默認代碼頁。如果未指定 -C,則這是 bcp 使用的默認代碼頁。
RAW 不發生從一個代碼頁到另一個代碼頁的轉換。因為不發生轉換,所以這是最快的選項。
<值> 特定的代碼頁號碼,例如 850。
-t fIEld_term
指定字段終止符。默認的字段終止符是 \t(制表符)。使用此參數替代默認字段終止符。
-r row_term
指定行終止符。默認的行終止符是 \n(換行符)。使用此參數替代默認行終止符。
-i input_file
指定響應文件的名稱,使用交互模式(未指定 –n、-c、-w、-6 或 -N)執行大容量復制時,響應文件包含對每一字段命令提示問題的響應。
-o output_file
指定接收 bcp 輸出(從命令提示重定向)的文件的名稱。
-a packet_size
指定發送到和發送自服務器的每個網絡數據包的字節數。可以使用 SQL Server 企業管理器(或 sp_configure 系統存儲過程)設置服務器配置選項。但是,使用此選項可以單個地替代服務器配置選項。packet_size 可以設置為 4096 到 65535 字節,默認值為 4096。
數據包大小的增加能夠提高大容量復制操作的性能。如果要求一個較大的數據包而得不到,則使用默認設置。bcp 生成的性能統計顯示出所使用數據包的大小。
-S server_name[\instance_name]
指定要連接到的 SQL Server 實例。指定 server_name 以連接該服務器上的 SQL Server 默認實例。指定 server_name\instance_name 以連接到該服務器上的 SQL Server 2000 命名實例。如果未指定服務器,則 bcp 連接到本地計算機上的 SQL Server 默認實例。從網絡上的遠程計算機執行 bcp 時,要求此選項。
-U login_id
指定用於連接到 SQL Server 的登錄 ID。
-P passWord
指定登錄 ID 的密碼。如果未使用此選項,則 bcp 將提示輸入密碼。如果不帶密碼將此選項用於命令提示行末尾,則 bcp 將使用默認密碼 (NULL)。
指定 bcp 使用網絡用戶的安全憑據,通過信任連接連接到 SQL Server。不需要 login_id 和 passWord。
報告 bcp 實用工具的版本號和版權。
指定使用為客戶端計算機的區域設置定義的區域格式,將貨幣、日期和時間數據大容量復制到 SQL Server 中。默認情況下,將會忽略區域設置。
指定在大容量復制操作中空列應保留一個空值,而不是對插入的列賦予默認值。