ITPub博客

首页 > 数据库 > SQL Server > Sqlserver BCP参数解释和字符格式选择和故障处理小结

Sqlserver BCP参数解释和字符格式选择和故障处理小结

原创 SQL Server 作者:lusklusklusk 时间:2016-09-12 19:14:01 1 删除 编辑

官方文档



SET OUT_SQLSERVER=-S192.168.132.63 -U sa -P sccs123

bcp FDC.DBO.tb_First_Five_QCout tb_First_Five_QC.txt -w -k -C 65001 %OUT_SQLSERVER%

以上如果把脚本存成文件名bcp.bat或没有-c或-w,则运行的时候一直刷屏这两行数据。却压根不执行,因为存成文件名bcp.bat与真实的bcp命令相冲突,只要改成其他名字如bcp1.bat并加上-c或-w


-C后面指定字符集,如65001表示UTF-8


-w是单独存在且必须存在的,不是说-w后面就是接%变量%,一般使用-w,较少用-c


-F 后面接数字

指定从被导出表的哪一行导出,或从被导入文件的哪一行导入


-L 后面接数字

指定被导出表要导到哪一行结束,或从被导入文件导数据时,导到哪一行结束


-c

使用Char类型做为存储类型,没有前缀且以"\t"做为字段分割符,以"\n"做为行分割符


-w

和-c类似,只是当使用Unicode字符集拷贝数据时使用,且以nChar做为存储类型


-b 后面接数字

表示bcp in导入时,每多少行就提交

指定每批导入数据的行数。 每个批次均作为一个单独的事务进行导入并记录,在提交之前会导入整批。 默认情况下,数据文件中的所有行均作为一个批次导入。 若要将行分为多个批次进行操作,请指定小于数据文件中的行数的 batch_size 。 如果任何批次的事务失败,则将只回滚当前批次中的插入。 已经由已提交事务导入的批次不会受到将来失败的影响。

实验经历:1亿行的表,表容量是200GB,每1万行就提交,bcp in时该数据库的恢复模式是full,没有其他任何会话,只有这个一个bcp in的会话,导入5千万行时,该数据库日志已经达到260GB了且不可收缩。这里要理解一个问题,这个日志的增大和-b提交与否无关,因为日志Full模式的旧称叫”Checkpoint without truncate log“,也就是SQL Server的Checkpoint不主动截断log,只有备份log之后,才可以截断log,否则log文件会一直增大,直到撑爆硬盘


-n

使用数据的本机(数据库)数据类型执行大容量复制操作。 此选项不提示输入每个字段,它将使用本机值。


-N

执行大容量复制操作时,对非字符数据使用本机(数据库)数据类型的数据,对字符数据使用 Unicode 字符。 此选项是 -w 选项的一个替代选项,并具有更高的性能。此选项主要用于通过数据文件将数据从 SQL Server 的一个实例传送到另一个实例。 此选项不提示输入每个字段。 如果要传送包含 ANSI 扩展字符的数据,并希望利用本机模式的性能优势,则可使用此选项。


通过使用 bcp.exe 和 -N来导出数据后又将数据导入到同一表架构时,如果存在固定长度的非 Unicode 字符列(例如 char(10) ),系统可能会显示截断警告。

解决此警告的一个方法是使用 -n 来替代 -N。


(管理员/用户)应尽可能使用本机格式 (-n) 以避免分隔符问题。 使用本机格式可以使用 SQL Server进行导出和导入。 如果数据将导入到非 SQL Server 数据库,则使用 -c 或 -w 选项从SQL Server 导出数据。


如果实例名称带了斜杠,比如select @@servername,SERVERPROPERTY('machinename')显示为wodb\prod和DBPROD1,则-S时不能使用wodb\prod而要使用DBPROD1\prod或localhost\prod,因为-S [server_name[\instance_name]


bcp "select * from RayHistory.dbo.RAY_FinalEpsFCHistory where $PARTITION.FNDate(SnapshotDate)=1" queryout L:\BCP\RAY_FinalEpsFCHistory_p1.txt -n -T -k

报错Invalid object name '$PARTITION.FNDate'

解决方法:分区表需要在分区前面加上数据库名称

替换$PARTITION.FNDate(SnapshotDate)为RayHistory.$PARTITION.FNDate(SnapshotDate)

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30126024/viewspace-2124850/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Welcome to Lukes DB HOME。 Oracle OCM、Mysql OCP, 10年DBA工作经验,博客仅记录自己的一个学习过程,不代表完全准确,如有需要,欢迎转载。

注册时间:2015-02-02

  • 博文量
    348
  • 访问量
    1174935