Replication Distribution Agent
Applies to: SQL Server Azure SQL Database
The Replication Distribution Agent is an executable that moves the snapshot (for snapshot replication and transactional replication) and the transactions held in the distribution database tables (for transactional replication) to the destination tables at the Subscribers.
Note
Parameters can be specified in any order. When optional parameters aren't specified, values from predefined registry settings on the local computer are used.
distrib [ -? ]
-Publisher server_name [ \instance_name ]
-PublisherDB publisher_database
-Subscriber server_name [ \instance_name ]
-SubscriberDB subscriber_database
[ -AltSnapshotFolder alt_snapshot_folder_path ]
[ -BcpBatchSize bcp_batch_size ]
[ -CommitBatchSize commit_batch_size ]
[ -CommitBatchThreshold commit_batch_threshold ]
[ -Continuous ]
[ -DefinitionFile def_path_and_file_name ]
[ -Distributor distributor ]
[ -DistributorLogin distributor_login ]
[ -DistributorPassword distributor_password ]
[ -DistributorSecurityMode [ 0 | 1 ] ]
[ -EncryptionLevel [ 0 | 1 | 2 ] ]
[ -ErrorFile error_path_and_file_name ]
[ -ExtendedEventConfigFile configuration_path_and_file_name ]
[ -FileTransferType [ 0 | 1 ] ]
[ -FtpAddress ftp_address ]
[ -FtpPassword ftp_password ]
[ -FtpPort ftp_port ]
[ -FtpUserName ftp_user_name ]
[ -HistoryVerboseLevel [ 0 | 1 | 2 | 3 ] ]
[ -Hostname host_name ]
[ -KeepAliveMessageInterval keep_alive_message_interval_seconds ]
[ -LoginTimeOut login_time_out_seconds ]
[ -MaxBcpThreads ]
[ -MaxDeliveredTransactions number_of_transactions ]
[ -MessageInterval message_interval ]
[ -MultiSubnetFailover [ 0 | 1 ] ]
[ -OledbStreamThreshold oledb_stream_threshold ]
[ -Output output_path_and_file_name ]
[ -OutputVerboseLevel [ 0 | 1 | 2 ] ]
[ -PacketSize packet_size ]
[ -PollingInterval polling_interval ]
[ -ProfileName profile_name ]
[ -Publication publication ]
[ -QueryTimeOut query_time_out_seconds ]
[ -QuotedIdentifier quoted_identifier ]
[ -SkipErrors native_error_id [ :...n ] ]
[ -SubscriberDatabasePath subscriber_path ]
[ -SubscriberLogin subscriber_login ]
[ -SubscriberPassword subscriber_password ]
[ -SubscriberSecurityMode [ 0 | 1 ] ]
[ -SubscriberType [ 0 | 1 | 3 ] ]
[ -SubscriptionStreams [ 1 | 2 | ...64 ] ]
[ -SubscriptionTableName subscription_table ]
[ -SubscriptionType [ 0 | 1 | 2 ] ]
[ -TransactionsPerHistory [ 0 | 1 | ...10000 ] ]
[ -UseDTS ]
[ -UseInprocLoader ]
[ -UseOledbStreaming ]
Prints all available parameters.
The name of the Publisher. Specify <server_name>
for the default instance of Microsoft SQL Server on that server. Specify <server_name>\<instance_name>
for a named instance of SQL Server on that server. If your publisher database is in an availability group (AG), this still reflects the original primary publisher server name due to sp_redirect_publisher. It doesn't reflect the AG listener name.
The name of the Publisher database.
The name of the Subscriber. Specify <server_name>
for the default instance of SQL Server on that server. Specify <server_name>\<instance_name>
for a named instance of SQL Server on that server. If your subscriber database is in an AG, this should reflect the AG listener name.
The name of the Subscriber database.
The path to the folder that contains the initial snapshot for a subscription.
The number of rows to send in a bulk copy operation. When you perform a bcp in
operation, the batch size is the number of rows to send to the server as one transaction, and also the number of rows that must be sent before the Distribution Agent logs a bcp progress message. When you perform a bcp out
operation, a fixed batch size of 1000
is used.
The number of transactions to be issued to the Subscriber before a COMMIT statement is issued. The default is 100 and the max is 10000. This parameter is ignored when the snapshot is applied on the subscriber by the Distribution Agent.
The number of replication commands to be issued to the Subscriber before a COMMIT statement is issued. The default is 1000 and the max is 10000. This parameter is ignored when the snapshot is applied on the subscriber by the Distribution Agent.
Specifies whether the agent attempts to poll replicated transactions continually. If specified, the agent polls replicated transactions from the source at polling intervals, even if there are no transactions pending.
The path of the agent definition file. An agent definition file contains command prompt arguments for the agent. The content of the file is parsed as an executable file. Use double quotation marks (") to specify argument values containing arbitrary characters.
The Distributor name. For Distributor (push) distribution, the name defaults to the name of the local Distributor. If your distributor database is in an AG, this should reflect the AG listener name.
The Distributor login name.
The Distributor password.
Specifies the security mode of the Distributor. A value of 0 indicates SQL Server Authentication Mode, and a value of 1 indicates Windows Authentication Mode (default).
The level of Transport Layer Security (TLS), previously known as Secure Sockets Layer (SSL), encryption used by the Distribution Agent when making connections.
EncryptionLevel value | Description |
---|---|
0 |
Specifies that TLS isn't used. |
1 |
Specifies that TLS is used, but the agent doesn't verify that the TLS server certificate is signed by a trusted issuer. |
2 |
Specifies that TLS is used, and that the certificate is verified. |
A valid TLS certificate is defined with a fully qualified domain name of the SQL Server. In order for the agent to connect successfully when setting -EncryptionLevel
to 2
, create an alias on the local SQL Server. The 'Alias Name' parameter should be the server name and the 'Server' parameter should be set to the fully qualified name of the SQL Server.
For more information, see View and Modify Replication Security Settings.
The path and file name of the error file generated by the Distribution Agent. This file is generated at any point where failure occurred while applying replication transactions at the Subscriber; errors that occur at the Publisher or Distributor aren't logged in this file. This file contains the failed replication transactions and associated error messages. When not specified, the error file is generated in the current directory of the Distribution Agent. The error file name is the name of the Distribution Agent with an .err extension. If the specified file name exists, error messages are appended to the file. This parameter can be a maximum of 256 Unicode characters.
Specifies the path and file name for the extended events XML configuration file. The extended events configuration file allows you to configure sessions and enable events for tracking.
Specifies the file transfer type. A value of 0
indicates UNC (universal naming convention), and a value of 1
indicates FTP (file transfer protocol).
The network address of the FTP service for the Distributor. When not specified, DistributorAddress
is used. If DistributorAddress
isn't specified, Distributor
is used.
The user password used to connect to the FTP service.
The port number of the FTP service for the Distributor. When not specified, the default port number for FTP service (21) is used.
The user name used to connect to the FTP service. When not specified, anonymous
is used.
Specifies the amount of history logged during a distribution operation. You can minimize the performance effect of history logging by selecting 1
.
HistoryVerboseLevel value | Description |
---|---|
0 |
Progress messages are written either to the console or to an output file. History records aren't logged in the distribution database. |
1 (default) |
Always update a previous history message of the same status (startup, progress, success, and so on). If no previous record with the same status exists, insert a new record. |
2 |
Insert new history records unless the record is for such things as idle messages or long-running job messages, in which case update the previous records. |
3 |
Always insert new records, unless it's for idle messages. |
The host name used when connecting to the Publisher. This parameter can be a maximum of 128 Unicode characters.
The number of seconds before the history thread checks if any of the existing connections is waiting for a response from the server. This value can be decreased to avoid having the checkup agent mark the Distribution Agent as suspect when executing a long-running batch. The default is 300
seconds.
The number of seconds before the login times out. The default is 15
seconds.
Specifies the number of bulk copy operations that can be performed in parallel. The maximum number of threads and ODBC connections that exist simultaneously is the lesser of MaxBcpThreads
or the number of bulk copy requests that appear in the synchronization transaction in the distribution database. MaxBcpThreads
must have a value greater than 0
and has no hard-coded upper limit. The default is 2
times the number of processors, up to a maximum value of 8
. When applying a snapshot that was generated at the Publisher using the concurrent snapshot option, one thread is used, regardless of the number you specify for MaxBcpThreads
.
The maximum number of push or pull transactions applied to Subscribers in one synchronization. A value of 0
indicates that the maximum is an infinite number of transactions. Other values can be used by Subscribers to shorten the duration of a synchronization being pulled from a Publisher.
If -MaxDeliveredTransactions
and -Continuous
are both specified, the Distribution Agent delivers the specified number of transactions and then stops (even though -Continuous
is specified). You must restart the Distribution Agent after the job completes.
The time interval used for history logging. A history event is logged when one of these parameters is reached:
The
TransactionsPerHistory
value is reached after the last history event is logged.The
MessageInterval
value is reached after the last history event is logged.
If there's no replicated transaction available at the source, the agent reports a no-transaction message to the Distributor. This option specifies how long the agent waits before reporting another no-transaction message. Agents always report a no-transaction message when they detect that there are no transactions available at the source after previously processing replicated transactions. The default is 60 seconds.
Applies to: SQL Server 2019 (15.x) and later versions.
Specifies whether the MultiSubnetFailover property is enabled or not. If your application is connecting to an AG on different subnets, setting MultiSubnetFailover=true provides faster detection of and connection to the (currently) active server.
Specifies the minimum size, in bytes, for binary large object data above which the data is bound as a stream. You must specify -UseOledbStreaming
to use this parameter. Values can range from 400 bytes to 1,048,576 bytes, with a default of 16,384 bytes.
The path of the agent output file. If the file name isn't provided, the output is sent to the console. If the specified file name exists, the output is appended to the file.
Specifies whether the output should be verbose. If the verbose level is 0
, only error messages are printed. If the verbose level is 1
, all the progress report messages are printed. If the verbose level is 2
(default), all error messages and progress report messages are printed, which is useful for debugging.
The packet size, in bytes. The default is 4096 (bytes).
How often, in seconds, the distribution database is queried for replicated transactions. The default is 5 seconds.
Specifies an agent profile to use for agent parameters. If ProfileName
is NULL
, the agent profile is disabled. If ProfileName
isn't specified, the default profile for the agent type is used. For information, see Replication Agent Profiles.
The name of the publication. This parameter is only valid if the publication is set to always have a snapshot available for new or reinitialized subscriptions.
The number of seconds before the query times out. The default is 1,800 seconds.
Specifies the quoted identifier character to use. The first character of the value indicates the value the Distribution Agent uses. If QuotedIdentifier
is used with no value, the Distribution Agent uses a space. If QuotedIdentifier
isn't used, the Distribution Agent uses whatever quoted identifier the Subscriber supports.
A colon-separated list that specifies the error numbers to be skipped by this agent. This parameter is ignored when the snapshot is being applied on the subscriber by the Distribution Agent.
The path to the Jet database (.mdb file) if SubscriberType
is 2
(allows a connection to a Jet database without an ODBC Data Source Name (DSN)).
The Subscriber login name. If SubscriberSecurityMode
is 0
(for SQL Server Authentication), this parameter must be specified.
The Subscriber password. If SubscriberSecurityMode
is 0
(for SQL Server Authentication), this parameter must be specified.
Specifies the security mode of the Subscriber. A value of 0
indicates SQL Server Authentication, and a value of 1
indicates Windows Authentication Mode (default).
Specifies the type of Subscriber connection used by the Distribution Agent.
SubscriberType value | Description |
---|---|
0 |
SQL Server |
1 |
ODBC data source |
3 |
OLE DB data source |
The number of connections allowed per Distribution Agent to apply batches of changes in parallel to a Subscriber, while maintaining many of the transactional characteristics present when using a single thread. For a SQL Server Publisher, a range of values from 1 to 64 is supported.
This parameter isn't supported or must be 0
for non-SQL Server Subscribers or peer-to-peer subscriptions. This parameter is ignored when the snapshot is being applied on the subscriber by the Distribution Agent.
If one of the connections fails to execute or commit, all connections abort the current batch, and the agent uses a single stream to retry the failed batches. Before this retry phase completes, there can be temporary transactional inconsistencies at the Subscriber. After the failed batches are successfully committed, the Subscriber is brought back to a state of transactional consistency.
Important
When you specify a value of 2
or greater for -SubscriptionStreams
, the order in which transactions are received at the Subscriber might differ from the order in which they were made at the Publisher. If this behavior causes constraint violations during synchronization, you should use the NOT FOR REPLICATION
option to disable the enforcement of constraints during synchronization. For more information, see Control Behavior of Triggers and Constraints in Synchronization.
Subscription streams don't work for articles configured to deliver Transact-SQL. To use subscription streams, configure articles to deliver stored procedure calls instead.
The name of the subscription table generated or used at the given Subscriber. When not specified, the MSreplication_subscriptions table is used. Use this option for database management systems (DBMS) that don't support long file names.
Specifies the subscription type for distribution. A value of 0
indicates a push subscription, a value of 1
indicates a pull subscription, and a value of 2
indicates an anonymous subscription.
Specifies the transaction interval for history logging. If the number of committed transactions after the last instance of history logging is greater than this option, a history message is logged. The default is 100. A value of 0
indicates infinite TransactionsPerHistory
. See the preceding –MessageInterval
parameter.
Must be specified as a parameter for a publication that allows data transformation.
Improves the performance of the initial snapshot by causing the Distribution Agent to use the BULK INSERT command when applying snapshot files to the Subscriber. This parameter is deprecated because it isn't compatible with the XML data type. If you aren't replicating XML data, this parameter can be used. This parameter can't be used with character mode snapshots or non- SQL Server Subscribers. If you use this parameter, the SQL Server service account at the Subscriber requires read permissions on the directory where the snapshot .bcp
data files are located. When this parameter isn't used, the agent (for non- SQL Server Subscribers) or the ODBC driver loaded by the agent (for SQL Server Subscribers) reads from the files, so the security context of the SQL Server service account isn't used.
When specified, enables the binding of binary large object data as a stream. Use -OledbStreamThreshold
to specify the size, in bytes, above which a stream is used. UseOledbStreaming
is enabled by default.
In SQL Server 2017 (14.x) CU 22 and later versions, UseOledbStreaming
writes to the C:\Users\<DistributionAgentAccount>\AppData\Temp
folder.
Before SQL Server 2017 (14.x) CU 22, UseOledbStreaming
writes to the C:\Program Files\Microsoft SQL Server\<version>\COM
folder.
In SQL Server 2019 (15.x) CU 29, SQL Server 2022 (16.x) CU 16, and later versions, you can disable OLE DB streaming by updating -UseOledbStreaming
to 0
to avoid the error mentioned in Error message when you run the Distribution Agent in SQL Server.
If you installed SQL Server Agent to run under a local system account rather than under a domain user account (the default), the service can only access the local computer. If the Distribution Agent that runs under SQL Server Agent is configured to use Windows Authentication Mode when it logs in to an instance of SQL Server, the Distribution Agent fails. The default setting is SQL Server Authentication. For information on changing security accounts, see View and Modify Replication Security Settings.
To start the Distribution Agent, execute distrib.exe
from the command prompt. For information, see Replication Agent Executables Concepts.