澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站复制业务和复制命令,事务

2019-10-21 作者:数据库网络   |   浏览(68)

概述  

 快照代理准备已发布表的架构和初始数据文件以及其他对象、存储快照文件并记录分发数据库中的同步信息。 快照代理在分发服务器上运行;SQLServer2016版本对快照代理做了一些比较好的优化,接下来详细了解一下快照的执行过程。

 

 

--===============================================

copy from:

bcp 实用工具可以在 SQL Server 实例和用户指定格式的数据文件间大容量复制数据。使用 bcp 实用工具可以将大量新行导入 SQL Server 表,或将表数据导入数据文件。除非与 queryout 选项一起使用,否则使用该实用工具不需要了解 Transact-SQL 知识。若要将数据导入表中,必须使用为该表创建的格式文件,或者必须了解表的结构以及对于该表中的列有效的数据类型。

之前的一篇已经介绍了如何配置复制,介绍了发布者、分发者和订阅者以及事务日志运行的简单关系。其中提到了复制代理,我们这篇将详细介绍复制代理,它是什么?在事务复制的步骤中起到了什么作用?

一、快照代理文件

在执行快照作业是会在指定的快照目录生成4种类型的文件。

BCP文件:发布对象的数据文件。

IDX文件:索引创建脚本文件

PRE文件:复制快照脚本文件。

SCH文件:架构创建脚本文件

对复制一直属于一知半解浑浑噩噩的状态,仅知道一些皮毛,对很多细节没有深入学习过,

bcp [database_name.] schema.{table_name | view_name | "query" {in data_file | out data_file | queryout data_file | format nul}

bcp 所有参数:

代理和工作

首先我们要知道事务复制不是被SQLServer数据库引擎执行的,而是被其他外部的服务。这些服务中就包括了SQLServer 复制代理。

复制代理主要包括了快照代理、日志读代理和分发代理。双向复制也使用了队列-读代理。

这些代理可以理解为在复制场景链接服务器并且促使数据移动的Windows 程序。在标准的复制安装过程中,由SQLServer代理来执行代理步骤。SQL Server代理有独立的工作步骤模型(本地分发、远程分发)。除此之外,有一些额外的作业在事务复制的配置阶段将被创建。这些作业主要负责清理任务和探测问题的工作。

接下来我们举例来看一下那些作业将被在那些步骤来创建

二、默认快照代理配置文件

澳门新萄京官方网站 1

-BcpBachSize:每一次执行bcp操作copy的最大记录行数,默认是10万行。

-HistoryVerboseLevel:指定在快照操作过程中记录的历史记录大小。

-LoginTimeout:登录超时前等待的秒数。 默认值为 15 秒。

-QueryTimeOut:查询超时前等待的秒数。默认值为 1800 秒

 备注:通过右键快照代理-快照代理配置文件;可以配置快照代理。

如果不对之处,请各位大神批评指正。

   [-a packet_size]
   [-b batch_size]
   [-c]
   [-C { ACP | OEM | RAW | code_page } ]
   [-d database_name]
   [-e err_file]
   [-E]
   [-f format_file]
   [-F first_row]
   [-h"hint [,...n]"] 
   [-i input_file]
   [-k]
   [-K application_intent]
   [-L last_row]
   [-m max_errors]
   [-n]
   [-N]
   [-o output_file]
   [-P password]
   [-q]
   [-r row_term]
   [-R]
   [-S [server_name[instance_name]]
   [-t field_term]
   [-T]
   [-U login_id]
   [-v]
   [-V (80 | 90 | 100 )]
   [-w]
   [-x]
   /?
data_file 
数据文件的完整路径。 将数据大容量导入 SQL Server 时,数据文件将包含要复制到指定的表或视图中的数据。 从 SQL Server 中大容量导出数据时,数据文件将包含从表或视图中复制的数据。 路径可以有 1 到 255 个字符。 数据文件最多可包含 263 - 1 行。

澳门新萄京官方网站 2

本地分发模式

当你设置一个服务器为分发服务器,有几个作业需要被创建。图1 显示了完全的列表,其中只有syspolicy_purge_history 不是复制的作业。所有其他的作业都是被复制创建用来维护的作业。

 澳门新萄京官方网站 3

图1

三、对比不同版本快照代理

接下来测试对比2亿的记录表生成快照

*以下讨论的基于事务复制,不考虑同步存储过程的情况

database_name 
指定的表或视图所在数据库的名称。 如果未指定,则使用用户的默认数据库。

bcp可以执行四种操作:

远程分发模式

当在发布服务器上设置远程分发的时候,只有一个维护作业被创建。如图2所示,这个作业是用来删除在发布服务器上过期的元数据。

澳门新萄京官方网站 4

图2

1.bcp文件数量对比

2008R2

 澳门新萄京官方网站 5

2016SP1

澳门新萄京官方网站 6

这里重点说一下BCP文件,因为应用快照到订阅服务器是以BCP文件为基本单位,也就是说不管你的BCP文件有多大都是一次性bulk到订阅服务器,所以BCP文件越大每次应用的时间就会越长。如果一个BCP文件太大可能会导致插入到订阅端失败。

从上图可以看到同样是2亿的记录,2008R2总共有8个BCP文件,而且最大的BCP文件大小将近1G其它的都才几兆;2016有16个BCP文件,并且前15个都是50M左右数据比较均匀。接下来看下图的每个BCP文件的记录对比。

 

--===============================================

也可以使用 d- 显式指定数据库名称。

(1) 导入 
这个动作使用in命令完成,后面跟需要导入的文件名。 
(2) 导出 
这个动作使用out命令完成,后面跟需要导出的文件名。 
(3) 使用SQL语句导出 
这个动作使用queryout命令完成,它跟out类似,只是数据源不是表或视图名,而是SQL语句。 
(4) 导出格式文件 
这个动作使用format命令完成,后而跟格式文件名。

发布

复制安装的下一步就是创建发布了,这里需要两个新的作业分在分发数据库。如图3所示,两个的名字叫做“W7AR2A-ReplA-1” and “W7AR2A-ReplA-MyFirstPublication-1”代表了日志读和快照两个代理。

澳门新萄京官方网站 7

图3

通过在SQLServer 代理作业活动监视器中观察category列,你能分辨出这些作业分别代表什么吗?图4所示

澳门新萄京官方网站 8

图4

2.快照生成详细过程对比

2008r2

澳门新萄京官方网站 9

澳门新萄京官方网站 10

2016SP1

澳门新萄京官方网站 11

从生成的BCP文件记录对比来看:

2008R2:前7个文件每个文件记录数大概70万左右,最后一个文件记录1.1亿。

2016:前15个文件每个文件记录700万左右,最后一个文件78万。

说明:

2008R2前7个文件每个文件大概存储的记录量是70万剩下的记录都会存储到最后一个文件,所以2008R2比较适合的表记录数是600万左右。

2016前15个文件每个文件大概存储的记录量是700万剩下的记录都会存储到最后一个文件,2016适合的表记录数1.2亿左右。

澳门新萄京官方网站 12

共同缺点:表记录超过“适合的复制表记录数”后剩下数据会全部存储到最后个bcp文件中。

当发布数据库上发生数据修改(增删改)时,会将相关操作写入日志,以保证数据一致性,而对发布表上聚集索引的修改的日志会被标记为‘REPLICATE’。

in data_file | outdata_file | queryoutdata_file | format nul 
指定大容量复制的方向,具体如下:

常用参数:

推送订阅

对于每一个订阅服务有一个额外的作业,这个作业表示了分发代理,以防推送订阅的作业出问题。你能看到一个实例在图5中。分发作业的名字叫做“W7AR2A-ReplA-MyFirstPublication-W7CR2A-2”。在订阅模式下,所有的代理和作业都在分发数据库上。

澳门新萄京官方网站 13

图5

3.分发对比

接下来看一下分发的详细过程

澳门新萄京官方网站 14

 从2008R2分发记录过程中可以看到每次BULK都是以bcp文件为单位,复制最后一个bcp文件花费了大概22分钟,而前面的每个文件都是十几秒;还是由于我当前的表只有三个字段而且除了主键没有索引否则的时间就更长了。

澳门新萄京官方网站 15

•in 从文件复制到数据库表或视图。

-f format_file 
format_file表示格式文件名。这个选项依赖于上述的动作,如果使用的是in或out,format_file表示已经存在的格式文件,如果使用的是format则表示是要生成的格式文件。

-x 
这个选项要和-f format_file配合使用,以便生成xml格式的格式文件。

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

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

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

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

-t field_term 
指定字符分割符,默认是"t"。

-r row_term 
指定行分割符,默认是"n"。

-S server_name[ instance_name] 
指定要连接的SQL Server服务器的实例,如果未指定此选项,BCP连接本机的SQL Server默认实例。如果要连接某台机器上的默认实例,只需要指定机器名即可。

-U login_id 
指定连接SQL Sever的用户名。

-P password 
指定连接SQL Server的用户名密码。

-T 
指定BCP使用信任连接登录SQL Server。如果未指定-T,必须指定-U和-P。

-k 
指定空列使用null值插入,而不是这列的默认值。

请求订阅

以防在订阅数据库的分发代理的请求订阅失效,如图6配置,这个代理作业的名称是W7AR2A-ReplA-MyFirstPublication-W7CR2A-ReplB-3E02694F-8281-4EBA-81CE-185B3BDE0830”。

 

澳门新萄京官方网站 16

图6

如果你打算确认正在工作的分发代理,你可以参考SQL Server代理作业活动监视器中的category 列。如图7

澳门新萄京官方网站 17

图7

四、快照生成过程

复制快照代理是一个可执行文件,用于准备快照文件(其中包含已发布表和数据库对象的架构及数据),然后将这些文件存储在快照文件夹中,并在分发数据库中记录同步作业。

澳门新萄京官方网站 18

从上图可以了解整个快照的生成过程。

(PS:从上图中不难看出,在checkpoint时会记录复制相关的信息)

•out 从数据库表或视图复制到文件。 如果指定了现有文件,则该文件将被覆盖。 提取数据时,请注意 bcp 实用工具将空字符串表示为 null,而将 null 字符串表示为空字符串。

bcp常用操作

代理

乍看,大量的作业和代理,每一个作何不同事情在不同的时间。但是,当你自己观察会发现仅有三个主要的作业在事务复制中:

快照代理,日志读代理和分发代理。图8给出了三个代理的概览

 

澳门新萄京官方网站 19

图8

图中绿色的箭头代表读取,红色箭头表示写入。分发代理在分发数据库还是在订阅服数据库,取决于订阅的模式。

五、语法

snapshot [ -?]   
-Publisher server_name[instance_name]   
-Publication publication_name   
[-70Subscribers]   
[-BcpBatchSize bcp_batch_size]  
[-DefinitionFile def_path_and_file_name]  
[-Distributor server_name[instance_name]]  
[-DistributorDeadlockPriority [-1|0|1] ]  
[-DistributorLogin distributor_login]  
[-DistributorPassword distributor_password]  
[-DistributorSecurityMode [0|1] ]  
[-DynamicFilterHostName dynamic_filter_host_name]  
[-DynamicFilterLogin dynamic_filter_login]  
[-DynamicSnapshotLocation dynamic_snapshot_location]   
[-EncryptionLevel [0|1|2]]  
[-FieldDelimiter field_delimiter]  
[-HistoryVerboseLevel [0|1|2|3] ]  
[-HRBcpBlocks number_of_blocks ]  
[-HRBcpBlockSize block_size ]  
[-HRBcpDynamicBlocks ]  
[-KeepAliveMessageInterval keep_alive_interval]  
[-LoginTimeOut login_time_out_seconds]  
[-MaxBcpThreads number_of_threads ]  
[-MaxNetworkOptimization [0|1]]  
[-Output output_path_and_file_name]  
[-OutputVerboseLevel [0|1|2] ]  
[-PacketSize packet_size]  
[-ProfileName profile_name]  
[-PublisherDB publisher_database]  
[-PublisherDeadlockPriority [-1|0|1] ]  
[-PublisherFailoverPartner server_name[instance_name] ]  
[-PublisherLogin publisher_login]  
[-PublisherPassword publisher_password]   
[-PublisherSecurityMode [0|1] ]  
[-QueryTimeOut query_time_out_seconds]  
[-ReplicationType [1|2] ]  
[-RowDelimiter row_delimiter]  
[-StartQueueTimeout start_queue_timeout_seconds]  
[-UsePerArticleContentsView use_per_article_contents_view]  

参数

-?
输出所有可用的参数。

-Publisher server_name[*instance_name]
发布服务器的名称。 为该服务器上的 Microsoft SQL Server 默认实例指定 server_name。 为该服务器上的 
server_nameinstance_name* instance_name SQL Server 默认实例指定 server_name。

-Publication 发布
发布的名称。 只有将发布设置为总是使快照可用于新订阅或重新初始化的订阅时,此参数才有效。

-70Subscribers
如果有任何订阅服务器在运行 SQL Server 7.0 版,则必须使用此参数。

-BcpBatchSize bcp batch size
在一次大容量复制操作中发送的行数。 执行 bcp in 操作时,批的大小为要作为一个事务发送到服务器的行数,并且也是分发代理记录 bcp 进度消息之前必须发送的行数。 当执行 bcp out 操作时,将使用固定批大小 1000。 值为 0 表示不记录任何消息。

-DefinitionFile def_path_and_file_name
代理定义文件的路径。 代理定义文件中包含该代理的命令行参数。 文件的内容被当作可执行文件进行分析。 使用双引号 (") 指定包含任意字符的参数值。

-Distributor server_name[*instance_name]
分发服务器名称。 为该服务器上的 
默认实例指定 server_name SQL Server 。 为该服务器上的 server_nameinstance_name* instance_name SQL Server 默认实例指定 server_name。

-DistributorDeadlockPriority [-1|0|1]
死锁发生时快照代理连接到分发服务器的优先级。 指定此参数是为了解决快照生成期间在快照代理和用户应用程序之间发生的死锁问题。

DistributorDeadlockPriority 值

说明

-1

在分发服务器上发生死锁时,应用程序而非快照代理优先。

0 (默认值)

未分配优先级。

1

在分发服务器上发生死锁时,快照代理优先。

-DistributorLogin distributor_login
使用 SQL Server 身份验证连接到分发服务器时所用的登录名。

-DistributorPassword distributor_password
使用 SQL Server 身份验证连接到分发服务器时使用的密码。 。

-DistributorSecurityMode [ 01]
指定分发服务器的安全模式。 值 0 指示 SQL Server 身份验证模式(默认设置),值 1 指示 Windows 身份验证模式。

-DynamicFilterHostName dynamic_filter_host_name
在创建动态快照时,用来为筛选中的 [HOST_NAME

标记为‘REPLICATE’的日志会被日志读取代理器读取,转换成复制事务和命令,然后写入到分发库中的表dbo.MSrepl_transactions和dbo.MSrepl_commands。

•queryout 从查询中复制,仅当从查询大容量复制数据时才必须指定此选项。

--导出数据到tset1.txt,并指定本地数据库的用户名和密码
--这里需要注意:指定的数据库必须是完全限定名。
EXEC master..xp_cmdshell 'BCP "select * from testad.dbo.Test" queryout d:tset1.txt -c -U"sa" -P"sasasa"'
--导出数据到tset2.xls,使用-T信任连接
--通过-F 10 -L 13 指定导出的起始行和结束行数
EXEC master..xp_cmdshell 'BCP "select * from testad.dbo.Test" queryout d:test2.xls -c -F 10 -L 13 -T"'
--使用in语句来将数据导入到数据表EXEC master..xp_cmdshell 'BCP te.dbo.Test in D:test2.xls -c -T'

快照代理

快照代理是在快照复制中起到重要作用。在事务复制和其他所有复制类型中,快照代理被用来初始化同步。快照代理不是唯一的初始化同步方式,但是确实是最方便的方式。

创建一个快照包含两个步骤。第一是将所有的订阅端复制对象快照代理的删除和创建的脚本放置在快照文件夹。它生成BCP文件后发表的所有表中的数据,所有生成的文件将被保存在分发数据库,

澳门新萄京官方网站 20

运行这个语句在Listing1 中的,看看每个BCP文件的条目。

对于快照复制而言当BCP文件被生成时一个共享锁被加在了所有发布的表上。这就允许快照代理去保证了事务的数据一致性,但是它锁住了其他所有同时想去写入表数据的请求。取决于这次涉及的表的大小可能锁的时间是相当大的。在快照复制中这是唯一的方式去保证事务一致性。

事务处理的一致性通过以下几点来保证:

  1. 一旦快照的进程开始,一个表锁将被加到所有发布包含的表上。然后一个快照进程开始的标识将被写入发布数据库的日志文件里面。在标记记录完以后这个锁将被释放。BCP文件将被生成并不带有表锁。但是更多细粒度且短暂的锁将被将在页或者行级别上。
  2. BCP文件创建完成后,另一个标记被写入到发布数据库的日志文件中,它标识着快照进程的结束。对于复制的表,所有已提交的更改将被记录在日志文件中且在日志文件中的两个标记中间,然后通过日志读代理复制到发布数据库。
  3. 当去应用快照到订阅数据库的时候,通过使用之前的脚本在快照文件夹中删除并重建表。然后来自BCP文件的数据被复制到这些表里,同时一个表锁住全部的表。伴随着锁,最后一个环节是分发代理使用快照产生之间捕捉的日志数据来保证所有的表在事务处理一致性。

通过SQL Server默认的为每个发布执行的快招代理创建SQL的代理作业。这些作业的命名依据一下模式<Server>-<Publication Database>-<Publication>-<number>。当然你也可以手工创建开启一个代理或者安排它过一段时间执行。

(Transact-SQL)]() 设置值。 例如,如果为项目指定了子集筛选器子句 rep_id

HOST_NAME() ,并且在调用合并代理之前将 DynamicFilterHostName 属性设置为“FBJones”,则只会复制 rep_id 列中具有“FBJones”的行。

-DynamicFilterLogin dynamic_filter_login
在创建动态快照时,用来为筛选中的 [SUSER_SNAME

为保证订阅服务器上的数据一致性,日志读取代理默认情况下不会将发布数据库中的事务拆分成多个事务存放到分发数据库(可以修改日志读取代理中的MaxCmdsInTran默认值来拆分大事务)

•format 根据指定的选项(-n、-c、-w 或 -N)以及表或视图的分隔符创建格式化文件。 大容量复制数据时,bcp 命令可以引用一个格式化文件,从而避免以交互方式重复输入格式信息。 format 选项要求指定 -f 选项;创建 XML 格式化文件时还需要指定 -x 选项。 有关详细信息,请参阅创建格式化文件 (SQL Server)。 您必须指定 nul 作为值 (format nul)。

总结

日志-读代理

日志-读代理是负责将所有发生改变的发布数据库的对象的事务处理以复制事物日志记录的形式复制到分发数据库。正如我们知道的,每一次数据库任何对象发生变化首先记录到数据库的事务日志中,然后才会将改变实现在真是数据页上面。这是任何关系数据库的原子性的核心部分。

澳门新萄京官方网站复制业务和复制命令,事务代理作业。同样的,在复制的发布系统通过将发布的复制对象的改变的事务日志最终发送到订阅数据库的目标对象上。

假如一个DML改变或者DDL改变发生在非发布数据库的发布对象上,则这些改变的日志记录会被标记一个复制的状态,这些非复制对象的将不会被标记也就不会被复制到分发数据库,即使他们在一个事务里面。

 

假如你已经配置好了复制,请注意你发布数据库的日志文件的大小,你可以使用下面的查询来看是否复制正在阻止日志记录重新使用。假如

log_reuse_wait_desc 列中包含了值R‘REPLICATION’,则复制发生了不被预期的日志增长,写操作将被阻止。

澳门新萄京官方网站 21

在复制数据库中首次配置复制发布的期间,SQLServer将创建一个单一的SQL代理作业来执行日志-读代理。命名格式如下:<Publisher>-<Publication Database>-<number>。所有其他在这个数据库的发布将重用这个作业。这个作业被默认安排与SQLServer一同启动,根据我们之前的理论这意味着它总是在运行顺序中优先执行,并且你不应该改变这个常规。

(Transact-SQL)]() 设置值。 例如,如果为项目指定了子集筛选器子句 user_id

SUSER_SNAME() ,并且在调用 SQLSnapshot 对象的 Run 方法之前将 DynamicFilterLogin 属性设置为“rsmith”,则只将 user_id 列中具有“rsmith”的行包括在快照中。

-DynamicSnapshotLocation dynamic_snapshot_location
应生成动态快照的位置。

-EncryptionLevel [ 0 | 1 | 2 ]
建立连接时快照代理使用的安全套接字层 (SSL) 加密的等级。

EncryptionLevel 值

说明

0

指定不使用 SSL。

1

指定使用 SSL,但是代理不验证 SSL 服务器证书是否已由可信的颁发者进行签名。

2

指定使用 SSL,并验证证书。

-FieldDelimiter field_delimiter
在 SQL Server 大容量复制数据文件中用于标记字段末尾的字符或字符序列。 默认值为 n<x$3>n。

-HistoryVerboseLevel [ 123]
指定在快照操作过程中记录的历史记录大小。 选择 1可将历史日志记录对性能的影响减至最小。

HistoryVerboseLevel 值

说明

0

进度消息将写入控制台或输出文件。 不在分发数据库中记录历史记录。

1

总是更新具有相同状态(启动、进行中、成功等)的上一历史记录消息。 如果不存在状态相同的上一记录,将插入新记录。

2 (默认值)

除非记录为空闲消息或长时间运行的作业消息等信息(此时将更新上一记录),否则插入新的历史记录。

3

始终插入新记录,除非它与空闲消息有关。

-HRBcpBlocks number_of_blocks
在编写器线程和读取器线程之间排队的 bcp 数据块的数量。 默认值为 50。 HRBcpBlocks 仅用于 Oracle 发布。

备注

此参数用于通过 Oracle 发布服务器优化 bcp 的性能。

-HRBcpBlockSize*block_size*
每个 bcp 数据块的大小(以 KB 为单位)。 默认值为 64 KB。 HRBcpBlocks 仅用于 Oracle 发布。

备注

此参数用于通过 Oracle 发布服务器优化 bcp 的性能。

-HRBcpDynamicBlocks
每个 bcp 数据块的大小是否可以动态增长。 HRBcpBlocks 仅用于 Oracle 发布。

备注

此参数用于通过 Oracle 发布服务器优化 bcp 的性能。

-KeepAliveMessageInterval keep_alive_interval
快照代理在向 MSsnapshot_history 表中记录“waiting for backend message”之前等待的时间(以秒为单位)。 默认值为 300 秒。

-LoginTimeOut login_time_out_seconds
登录超时前等待的秒数。 默认值为 15 秒。

-MaxBcpThreads number_of_threads
指定可以并行执行的大容量复制操作的数量。 同时存在的线程和 ODBC 连接的最大数量为 MaxBcpThreads 或显示在分发数据库中同步事务中的大容量复制请求数中较小的那一个。 MaxBcpThreads 的值必须大于 0 ,并且不存在任何硬编码的上限。 默认值为 1

MaxNetworkOptimization [ 01]
是否将无关删除操作发送到订阅服务器。 无关删除操作是针对不属于订阅服务器分区的行发送到订阅服务器的 DELETE 命令。 无关删除操作不会影响数据的完整性或收敛,但它们会导致不必要的网络通信。 MaxNetworkOptimization 的默认值是 0澳门新萄京官方网站,。 将 MaxNetworkOptimization 设置为 1 可将不相关的删除操作发生的机会减至最小,从而减少网络通信,并最大程度地优化网络。如果存在多个级别的联接筛选器和复杂子集筛选器,则将此参数设置为 1 还会增加元数据的存储并导致发布服务器性能下降。 您应仔细评估您的复制拓扑,仅当无关删除操作导致的网络通信高到无法接受时才应将 MaxNetworkOptimization 设置为 1 。

备注

仅当合并发布的同步优化选项(sp_addmergepublication (Transact-SQL) 的 @keep_partition_changes 参数)设置为 true 时,将此参数设置为 1 才是有用的。

-Output output_path_and_file_name
代理输出文件的路径。 如果未提供文件名,则向控制台发送该输出。 如果指定的文件名已存在,会将输出追加到该文件。

-OutputVerboseLevel [ 012]
指定输出是否应提供详细内容。

OutputVerboseLevel 值

说明

0

仅输出错误消息。

1 (默认值)

输出所有进度报告消息(默认值)。

2

输出所有错误消息和进度报告消息,这对于调试很有用。

-PacketSize packet_size
快照代理连接到 SQL Server时使用的数据包大小(以字节为单位)。 默认值为 8192 字节。

备注

除非您确信能够提高性能,否则不要更改数据包的大小。 对于大多数应用程序而言,默认数据包大小为最佳数值。

-ProfileName profile_name
指定用于代理参数的代理配置文件。 如果 ProfileName 为 NULL,则将禁用代理配置文件。 如果未指定 ProfileName ,则使用该代理类型的默认配置文件。 

-PublisherDB publisher_database
发布数据库的名称。 Oracle 发布服务器不支持该参数。

-PublisherDeadlockPriority [-1|0|1]
死锁发生时快照代理连接到发布服务器的优先级。 指定此参数是为了解决快照生成期间在快照代理和用户应用程序之间发生的死锁问题。

PublisherDeadlockPriority 值

说明

-1

在发布服务器上发生死锁时,应用程序而非快照代理优先。

0 (默认值)

未分配优先级。

1

在发布服务器上发生死锁时,快照代理优先。

-PublisherFailoverPartner server_name[*instance_name*]
指定参加与发布数据库进行的数据库镜像会话的 SQL Server 故障转移伙伴实例。

-PublisherLogin publisher_login
使用 SQL Server 身份验证连接到发布服务器时所用的登录名。

-PublisherPassword publisher_password
使用 SQL Server 身份验证连接到发布服务器时使用的密码。 。

-PublisherSecurityMode [ 01]
指定发布服务器的安全模式。 值 0 指示 SQL Server 身份验证(默认值),值 1 指示 Windows 身份验证模式。

-QueryTimeOut query_time_out_seconds
查询超时前等待的秒数。默认值为 1800 秒。

-ReplicationType [ 12]
指定复制的类型。 值 1 指示事务复制,值 2 指示合并复制。

-RowDelimiter row_delimiter
在 SQL Server 大容量复制数据文件中用于标记行尾的字符或字符序列。 默认值为 n<,@g>n。

-StartQueueTimeout start_queue_timeout_seconds
当运行的并发动态快照进程数达到由 sp_addmergepublication (Transact-SQL) 的 @max_concurrent_dynamic_snapshots 属性设置的限制值时,快照代理等待的最大秒数。 如果在经过最大秒数之后快照代理仍在等待,快照代理将退出。 值 0 表示代理将无限期地等待,尽管可以将其取消。

UsePerArticleContentsView use_per_article_contents_view
已不推荐使用此参数,支持它是为了能够向后兼容。

 

针对事务中修改的每一行数据生成一条或多条复制命令,尤其是对varchar(max) xml text等大字段操作(再次感谢肖磊)。

owner 
表或视图的所有者的名称。 如果执行该操作的用户拥有指定的表或视图,则 owner 是可选的。 如果未指定 owner,并且执行该操作的用户不是指定的表或视图的所有者,则 SQL Server 将返回错误消息,而且该操作将取消。

bcp非常高效,可以使用C#结合bcp来导入导出数据,非常快速。

分发代理

 

分发代理负责将数据传送从分发数据库传送到订阅数据库。分发代理连接分发服务器并且读取改变的记录。然后它连接订阅服务器将改变以相同的顺序在再次实现,顺序在单一订阅服务器是被保证的。但是假如你有两个发布在相同的数据库的不同对象上,并且有两个相同订阅数据库的订阅,则顺序只被保证在每一个发布里面,而不再属于独立发布的语句中(如,一个sp关系到两个表的改变,而这两个表属于不同的复制发布,则对于每个表的修改记录是按顺序进行而两个表的之间没有先后顺序)。

按照默认模式,SQLServer创建一个作业为每个订阅去执行分发代理。这个作业有两种执行模式。

(“Push Subscription”) 这种模式的命名管惯例:<Publisher>-<Publication Database>-<Publication>-<Subscriber>-<number>

(“Pull Subscription”)而这种则看起来有点不同:<Publisher>-<Publication Database>-<Publication>-<Subscriber>-<Subscription Database>-<GUID>

 

总结

由于在生成快照需要拥有对象的架构锁,所以在生成快照的过程中表对象是只读的。如果对大表生成快照千万不要选择在业务繁忙的时候否则有可能造成系统瘫痪,2016生成快照的时间比2008要快很多。通过对比可以发现2016的复制生成快照比2008性能提升了很多。但是从2014到2016BCP文件从32个变成16个不知道是出于什么原因。

 

 

备注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。

《欢迎交流讨论》

 

--=====================================
--插入一条数据,生成16条复制命令
INSERT INTO [TestDemo].[dbo].[TB5](C1,C2)
SELECT REPLICATE('AC',10000),1
--查看生成的复制事务和命令
SELECT * FROM dbo.MSrepl_transactions
SELECT * FROM dbo.MSrepl_commands T
WHERE T.xact_seqno=0x00000100000002BA0020

" query " 
一个返回结果集的 Transact-SQL 查询。 如果该查询返回多个结果集,则只将第一个结果集复制到数据文件,而忽略其余的结果集。 将查询用双引号括起来,将查询中嵌入的任何内容用单引号括起来。 从查询大容量复制数据时,也必须指定 queryout。

参考:

Jobs(作业)

 

正如文章开头提到的那些作业,这些额外的作业是复制系统所需要的,我们应该有所了解主要以下几个,具体的作用请参考MSDN我就不一一解释了,如下:

  • Agent history clean up
  • Distribution clean up
  • Expired subscription clean up
  • Replication agents checkup 

澳门新萄京官方网站 22

只要在执行 bcp 语句之前存储过程内引用的所有表均存在,查询就可以引用该存储过程。 例如,如果存储过程生成一个临时表,则 bcp 语句便会失败,因为该临时表只在运行时可用,而在语句执行时不可用。 在这种情况下,应考虑将存储过程的结果插入表中,然后使用 bcp 将数据从表复制到数据文件中。

本文同步发布在:

总结

在这片文章里,我介绍了复制代理作业的内部逻辑,我们能够了解到每个作业代理的目的和作用,这对我们理解复制的细节和优化维护复制有非常大的帮助,尤其是实际生产环境中的特殊情况提供了底层的应对机制。复制作为SQLServer高可用的一个应用功能为跨服务器跨实例跨系统等提供了非常好的实用价值。接下来我将继续深入的了解复制的其他用途和细节。

 

table_name 
将数据导入 SQL Server (in) 时为目标表名称,将数据从 SQL Server (out) 导出时为源表名称。

转自:

默认日志读取代理配置中,日志读取代理会以间隔5秒的频率查询发布库日志(PollingInterval),每个处理周期从发布数据库的事务日志中读取至多500条事务。当发布服务器上运行大事务时,会导致单个处理周期读取过多事务日志,因此应尽量避免对发布库做大事务修改(PS:大事务对订阅数据库也会造成影响)

view_name 
将数据复制到 SQL Server (in) 时为目标视图名称,从 SQL Server (out) 中复制数据时为源视图名称。 只有其中所有列都引用同一个表的视图才能用作目标视图。 有关将数据复制到视图的限制的详细信息,请参阅 INSERT (Transact-SQL)。

学习收藏

PS:设置代理参数ReadBatchThreshold来控制单个处理周期读取最大的命令数(我没在生产服务器上设置过,但发现一片关于这个设置的文章:

-a packet_size 
指定服务器发出或接收的每个网络数据包的字节数。 可以使用 SQL Server Management Studio(或 sp_configure 系统存储过程)来设置服务器配置选项。 但是,可以使用此选项逐个替代服务器配置选项。 packet_size 的取值范围为 4096 到 65535 字节,默认为 4096 字节。

如果发布数据库上事务变更比较频繁时,可以修改PollingInterval参数的值来降低复制延迟(Paddy_张充在生产服务器上配置过)。过小的PollingInterval值会加重发布服务器负载。

增大数据包可以提高大容量复制操作的性能。 如果无法得到请求的较大数据包,则使用默认值。 bcp 实用工具生成的性能统计信息可以显示所用的数据包大小。

 

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

当发布数据库上的事务日志被日志读取代理读取后,日志便可以由checkpoint或日志备份截断。

不要将此选项与 -h"ROWS_PER_BATCH =bb" 选项一起使用。

 

-c 
使用字符数据类型执行该操作。 此选项不提示输入每个字段;它使用 char 作为存储类型,不带前缀;使用 t(制表符)作为字段分隔符,使用 rn(换行符)作为行终止符。 -c 与 -w 不兼容。

对于复制事务和复制命令,分发代理按照配置参数CommitBatchSize(默认100)和CommitBatchThreshold(默认1000)来将事务打包成一个bacth提交给订阅服务器(肖磊如是说:同时指定CommitBatchSize和CommitBatchThreshold时,也会出现不到命令数和事务数就提交给订阅服务器),分发代理作业按照指定的调度运行。

有关详细信息,请参阅使用字符格式导入或导出数据 (SQL Server)。

 

-C { ACP | OEM | RAW | code_page } 
指定该数据文件中数据的代码页。 仅当数据含有字符值大于 127 或小于 32 的 char、varchar 或 text 列时,code_page 才适用。
ACP 
 ANSI/Microsoft Windows (ISO 1252)。 
 
OEM 
 客户端使用的默认代码页。 未指定 -C 时使用的默认代码页。 
 
RAW 
 不进行代码页间的转换。 因为不进行转换,所以这是最快的选项。 
 
code_page 
 特定的代码页编号,例如 850。

在分发服务器上,复制清理作业默认按照每10分钟一次的频率执行,查找移除那些无需保留的事务和命令。复制事务和复制命令会按照分发服务器属性设置中指定“事务保持期”来存放,当超过最大事务保持期后,复制事务和复制命令会被清除,未同步的订阅会被标记为“过期”。

 
-d database_name 
指定要连接到的数据库。 默认情况下,bcp.exe 连接到用户的默认数据库。 如果指定了 -ddatabase_name 和包含三部分的名称(database_name.schema.table,作为第一个参数传递给 bcp.exe),则将发生错误,因为您不能两次指定数据库名称。如果 database_name 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -d 和数据库名称之间添加空格。

如果创建发布时未选择“立即初始化”(发布属性immediate_sync为false)时,复制事务和复制命令已传递给所有订阅,且存放时间超过最小“事务保持期”,复制事务和复制命令便可以被复制清理作业删除。(PS:清理作业不会清楚最后一条事务事务及其相关命令)

-e err_file 
指定错误文件的完整路径,此文件用于存储 bcp 实用工具无法从文件传输到数据库的所有行。 bcp 命令产生的错误消息将被发送到用户的工作站。 如果不使用此选项,则不会创建错误文件。

 

如果 err_file 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -e 与 err_file 值之间包含空格。

--===================================================================

-E 
指定导入数据文件中的标识值用于标识列。 如果未指定 -E,则将忽略所导入数据文件中此列的标识值,而且 SQL Server 将根据创建表期间指定的种子值和增量值自动分配唯一值。

MSDN 快速通道

如果数据文件不包含表或视图中的标识列的值,则可使用格式化文件指定,在导入数据时应跳过表或视图中的标识列;SQL Server 将自动为该列分配唯一值。 有关详细信息,请参阅 DBCC CHECKIDENT (Transact-SQL)。

链接:

-E 选项有一个特殊的权限要求。 有关详细信息,请参阅本主题后面的“备注”。

=====================================================================
日志读取器代理相关配置

-f format_file 
指定格式化文件的完整路径。 此选项的含义取决于使用它的环境,具体如下:

MaxCmdsInTran:number_of_commands
默认值:0
指定在日志读取器将命令写入到分发数据库时可分组到一个事务中的语句的最大数目。 如果使用此参数,在发布服务器上的大事务(包含许多命令)应用于订阅服务器时,日志读取器代理和分发代理可将这些大事务拆分为若干个较小的事务。 指定此参数可以减少分发服务器的争用问题并缩短发布服务器与订阅服务器之间的滞后时间。 由于初始事务是以较小的单元应用的,订阅服务器可以在初始事务结束之前访问一个较大的逻辑发布服务器事务的行,因而会破坏事务的原子性。 默认值为 0,这将保持发布服务器的事务边界。

•如果 -f 与 format 选项一起使用,则将为指定的表或视图创建指定的 format_file。 若要创建 XML 格式化文件,请同时指定 -x 选项。 有关详细信息,请参阅创建格式化文件 (SQL Server)。

PollingInterval: polling_interval
默认配置值:5秒
对日志进行已复制事务查询的频率(以秒计)。

•如果与 in 或 out 选项一起使用,则 -f 需要一个现有的格式化文件。

ReadBatchSize:number_of_transactions
默认值:500
每个处理周期从发布数据库的事务日志中读取的最大事务数目。代理不断读取批次中的事务,直到从该日志中读取所有事务为止。 Oracle 发布服务器不支持该参数。

-F first_row 
指定要从表中导出或从数据文件导入的第一行的编号。 此参数的值应大于 (>) 0,小于 (<) 或等于 (=) 总行数。 如果未指定此参数,则默认为文件的第一行。

ReadBatchThreshold:number_of_commands
默认值:0
在复制命令由分发代理发送给订阅服务器之前,从事务日志读取的复制命令的数目。 如果未指定此参数,日志读取器代理会一直读取完此日志,或者读取到 -ReadBatchSize 中指定的数字(事务数)为止。

first_row 可以是一个最大为 2^63-1 的正整数值。 -F first_row 从 1 开始。

==============================================================
分发复制代理相关配置
BcpBatchSize:bcp_batch_size
默认值:2147473647
在一次大容量复制操作中发送的行数。 执行 bcp in 操作时,批的大小为要作为一个事务发送到服务器的行数,并且也是分发代理记录 bcp 进度消息之前必须发送的行数。 当执行 bcp out 操作时,将使用固定批大小 1000。

-h " hint[ ,...n] " 
指定向表或视图中大容量导入数据时要用到的提示。

CommitBatchSize:commit_batch_size
默认值:100
发出 COMMIT 语句前要发给订阅服务器的事务数。

ORDER(column[ASC | DESC] [,...n]) 
数据文件中的数据排序次序。 如果根据表中的聚集索引(如果有)对要导入的数据排序,则将提高大容量导入的性能。 如果数据文件以不同的次序(即不同于聚集索引键的次序)排序,或者表中不存在任何聚集索引,则将忽略 ORDER 子句。 提供的列名必须是目标表中有效的列名。 默认情况下,bcp 假定数据文件没有排序。 对于经过优化的大容量导入,SQL Server 还将验证导入的数据是否已排序。

CommitBatchThreshold:commit_batch_threshold
默认值:1000
发出 COMMIT 语句前要发给订阅服务器的复制命令数。

ROWS_PER_BATCH =bb 
每批数据的行数(即 bb)。 在未指定 -b 时使用,这将导致整个数据文件作为单个事务发送到服务器。 服务器根据 bb 值优化大容量加载。 默认情况下,ROWS_PER_BATCH 未知。

MaxBcpThreads:number_of_threads
默认值:处理器数目的 2 倍,最大值为 8。
指定可以并行执行的大容量复制操作的数量。 同时存在的线程和 ODBC 连接的最大数量为 MaxBcpThreads 或显示在分发数据库中同步事务中的大容量复制请求数中较小的那一个。 MaxBcpThreads 的值必须大于 0,并且不存在任何硬编码的上限。 应用于使用并发快照选项在发布服务器上生成的快照时,不管为 MaxBcpThreads 指定了什么数值,都将使用一个线程。

KILOBYTES_PER_BATCH = cc 
每批数据以千字节计算的近似值(即 cc)。 默认情况下,KILOBYTES_PER_BATCH 未知。

MaxDeliveredTransactions:number_of_transactions
默认值:0
一次同步期间应用于订阅服务器的推送事务或请求事务的最大数量。 值为 0,表示最大值为无穷多个事务。 订阅服务器可使用其他值缩短从发布服务器请求的同步的持续时间。
如果MaxDeliveredTransactions设置为非0,即使订阅配置为连续运行,在传递指定数量的事务后,分发代理便会停止运行,需要重新手动启动。

TABLOCK 
指定在大容量加载操作期间获取大容量更新表级别的锁;否则,获取行级别的锁。 由于在大容量复制操作期间拥有锁可以减少表中的锁争夺,所以此提示可显著提高性能。 如果表没有索引并且指定了 TABLOCK,则该表可以同时由多个客户端加载。 默认情况下,锁定行为由表选项 table lock on bulk load 确定。

PollingInterval:polling_interval
默认值:5 秒。

CHECK_CONSTRAINTS 
指定在大容量导入操作期间,必须检查针对目标表或视图的所有约束。 如果没有 CHECK_CONSTRAINTS 提示,则忽略所有 CHECK 和 FOREIGN KEY 约束;操作完成后,对表的约束将被标记为不可信。

对分发数据库进行已复制事务查询的频率(以秒计)。

 惯例依旧是妹子

澳门新萄京官方网站 23

 

澳门新萄京官方网站 24

澳门新萄京官方网站 25

FIRE_TRIGGERS 
与 in 参数一同指定,在目标表中定义的任何插入触发器都将在大容量复制操作期间运行。 如果未指定 FIRE_TRIGGERS,将不运行任何插入触发器。 对于 out、queryout 和 format 参数,将忽略 FIRE_TRIGGERS。

-i input_file 
指定响应文件的名称,其中包含在交互模式(未指定 -n、-c、-w 或 -N)下执行大容量复制时,对该命令要求输入每个数据字段的提示信息所作出的响应。

如果 input_file 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -i 与 input_file 值之间包含空格。

-k 
指定在操作过程中空列应该保留 null 值,而不是所插入列的任何默认值。 有关详细信息,请参阅在大容量导入期间保留 Null 或使用默认值 (SQL Server)。

-K application_intent 
连接到服务器时声明应用程序工作负荷类型。 唯一可能的值是 ReadOnly。 如果未指定 -K,bcp 实用工具将不支持连接到 AlwaysOn 可用性组中的辅助副本。 有关详细信息,请参阅活动辅助副本:可读辅助副本(AlwaysOn 可用性组)。

-L last_row 
指定要从表中导出或从数据文件中导入的最后一行的编号。 此参数的值应大于 (>) 0,小于 (<) 或等于 (=) 最后一行的编号。 如果未指定此参数,则默认为文件的最后一行。

last_row 可以是一个最大为 2^63-1 的正整数值。

-m max_errors 
指定取消 bcp 操作之前可能出现的语法错误的最大数目。 语法错误是指将数据转换为目标数据类型时的错误。 max_errors 总数不包括只能在服务器中检测到的错误,如违反约束。

无法由 bcp 实用工具复制的行将被忽略,并计为一个错误。 如果未包括此选项,则默认值为 10。

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

有关详细信息,请参阅使用本机格式导入或导出数据 (SQL Server)。

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

有关详细信息,请参阅使用 Unicode 本机格式导入或导出数据 (SQL Server)。

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

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

-o output_file 
指定文件名称,该文件用于接收从命令提示符重定向来的输出。

如果 output_file 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -o 与 output_file 值之间包含空格。

-P password 
指定登录 ID 的密码。 如果未使用此选项,bcp 命令将提示输入密码。 如果在命令提示符的末尾使用此选项,但不提供密码,则 bcp 将使用默认密码 (NULL)。

-q 
在 bcp 实用工具和 SQL Server 实例之间的连接中,执行 SET QUOTED_IDENTIFIERS ON 语句。 使用此选项可以指定包含空格或单引号的数据库、所有者、表或视图的名称。 将由三部分组成的整个表名或视图名用英文双引号 ("") 引起来。

若要指定包含空格或单引号的数据库名称,必须使用 –q 选项。

-q 不适用于传递到 -d 的值。

有关详细信息,请参阅本主题后面的“备注”。

-r row_term 
指定行终止符。 默认的行终止符是 n(换行符)。 使用此参数可替代默认行终止符。 有关详细信息,请参阅指定字段终止符和行终止符 (SQL Server)。

如果您在 bcp.exe 命令中以十六进制表示法指定行终止符,则该值将在 0x00 处截断。 例如,如果您指定 0x410041,则将使用 0x41。

如果 row_term 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -r 与 row_term 值之间包含空格。

-R 
指定使用客户端计算机区域设置中定义的区域格式,将货币、日期和时间数据大容量复制到 SQL Server 中。 默认情况下,将忽略区域设置。

-S server_name[ instance_name] 
指定要连接的 SQL Server 实例。 如果未指定服务器,则 bcp 实用工具将连接到本地计算机上的默认 SQL Server 实例。 如果从网络或本地命名实例上的远程计算机中运行 bcp 命令,则必须使用此选项。 若要连接到服务器上的 SQL Server 默认实例,请仅指定 server_name。 若要连接到 SQL Server 的命名实例,请指定 server_nameinstance_name。

-t field_term 
指定字段终止符。 默认的字段终止符是 t(制表符)。 使用此参数可以替代默认字段终止符。 有关详细信息,请参阅指定字段终止符和行终止符 (SQL Server)。

如果您在 bcp.exe 命令中以十六进制表示法指定字段终止符,则该值将在 0x00 处截断。 例如,如果您指定 0x410041,则将使用 0x41。

如果 field_term 以连字符 (-) 或正斜杠 (/) 开头,则不要在 -t 与 field_term 值之间包含空格。

-T 
指定 bcp 实用工具通过使用集成安全性的可信连接连接到 SQL Server。 不需要网络用户的安全凭据、login_id 和 password。 如果未指定 –T,则需要指定 –U 和 –P 才能成功登录。

-U login_id 
指定用于连接到 SQL Server 的登录 ID。

-v 
报告 bcp 实用工具的版本号和版权。

-V (80 | 90 | 100) 
使用 SQL Server 早期版本中的数据类型执行大容量复制操作。 此选项并不提示输入每个字段,它将使用默认值。

80 = SQL Server 2000

90 = SQL Server 2005

100 = SQL Server 2008 和 SQL Server 2008 R2

例如,若要为 SQL Server 2000 不支持、但是在较高版本的 SQL Server 中引入的类型生成数据,请使用 -V80 选项。

有关详细信息,请参阅导入来自早期版本的 SQL Server 的本机格式数据和字符格式数据。

-w 
使用 Unicode 字符执行大容量复制操作。 此选项不提示输入每个字段;它使用 nchar 作为存储类型,不带前缀;使用 t(制表符)作为字段分隔符,使用 n(换行符)作为行终止符。 -w 与 -c 不兼容。

有关详细信息,请参阅使用 Unicode 字符格式导入或导出数据 (SQL Server)。

-x 
与 format 和 -fformat_file 选项一起使用,可以生成基于 XML 的格式化文件,而不是默认的非 XML 格式化文件。 在导入或导出数据时,-x 不起作用。 如果不与 format 和 -fformat_file 一起使用,则将生成错误。

bcp 脚本失败。   

字符模式 (-c) 和本机模式 (-n) 最佳做法


本节提供与字符模式 (-c) 和本机模式 (-n) 有关的一些建议。

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

•(管理员)在使用 BCP OUT 时验证数据。 例如,在您使用 BCP OUT、BCP IN,然后又使用 BCP OUT 时,请验证数据正确导出,并且终止符值未用作某个数据值的一部分。 请考虑使用随机的十六进制值覆盖默认的终止符(使用 -t 和 -r 选项),以便避免终止符值和数据值之间的冲突。

•(用户)使用长且唯一的终止符(任意字节或字符序列)可以最大程度减少与实际字符串值冲突的可能性。 这可以通过使用 -t 和 -r 选项实现。

 

 

本文由澳门新萄京官方网站发布于数据库网络,转载请注明出处:澳门新萄京官方网站复制业务和复制命令,事务

关键词: