Initiates a coordinated transaction dump.
Creates an rs_dumptran function string to execute a stored procedure named dumptran_proc. The stored procedure manages the dump devices and then executes the rs_update_lastcommit stored procedure, passing it the rs_origin, rs_origin_qid, -rs_secondary_qid, and rs_origin_commit_time parameters.
create function string rs_dumptran for sqlserver_derived_class output rpc 'execute dumptran_proc ?rs_dump_dbname!sys?, ?rs_dump_label!sys?, ?rs_dump_timestamp!sys?, ?rs_dump_status!sys?, ?rs_destination_db!sys?, ?rs_origin!sys?, ?rs_origin_qid!sys?, ?rs_secondary_qid!sys? ?rs_origin_commit_time!sys?'
If the server crashes after the dump is complete but before the rs_lastcommit system table is updated, Replication Server restarts the backup.
There is no guarantee that the dump and the rs_update_lastcommit procedure
will be executed atomically, because Adaptive Server does not allow the dump command
to be included in a transaction with other commands. If the rs_lastcommit system
table is not updated successfully, an additional dump may be performed.
In the following sample text of the dumptran_proc stored procedure, the dump devices are hard-coded. In a production environment, it is better to manage them in a table:
create proc dumptran_proc @dump_dbname varchar(30), @dump_label varchar(30), @dump_timestamp varbinary(16), @dump_status int, @destination_dbname varchar(30), @origin int, @origin_qid binary(36), @secondary_qid binary(36), @origin_time datetime as print 'Received a dump transaction command from Replication Server:' declare @message varchar(255) if @dump_status = 0 begin select @message = 'dump transaction ' + @dump_dbname + '. Label= ''' + @dump_label + '''' + '. Dest.db = ''' + @destination_dbname + '''' end else if @dump_status = 1 begin select @message = 'dump transaction standby ' + @dump_dbname + '. Label= ''' + @dump_label + '''' + '. Dest.db = ''' + @destination_dbname + '''' end print @message if @destination_dbname = 'pubs2' begin print 'issuing ''dump transaction pubs2.''' if @dump_status = 0 begin dump transaction pubs2 to pubs2_dmplog end else if @dump_status = 1 begin dump transaction pubs2 to pubs2_dmplog with standby_access end update dmp_count set d_count = d_count + 1 exec pubs2.dbo.rs_update_lastcommit @origin, @origin_qid, @secondary_qid, @origin_time end else if @destination_dbname = 'pubs3' begin print 'issuing ''dump transaction pubs3.''' if @dump_status = 0 begin dump transaction pubs3 to pubs3_dmplog end else if @dump_status = 1 begin dump transaction pubs3 to pubs3_dmplog with standby_access end update dmp_count set d_count = d_count + 1 exec pubs3.dbo.rs_update_lastcommit @origin, @origin_qid, @secondary_qid, @origin_time end
Alters the rs_dumptran function string that you created in the first example to execute as a remote procedure call.
alter function string rs_dumptran for sqlserver_derived_class output rpc 'execute dumptran_proc ?rs_dump_dbname!sys?, ?rs_dump_label!sys?, ?rs_dump_timestamp!sys?, ?rs_dump_status!sys?, ?rs_destination_db!sys?, ?rs_origin!sys?, ?rs_origin_qid!sys?, ?rs_secondary_qid!sys?, ?rs_origin_commit_time!sys?!'
Replication Server coordinates transaction dumps by inserting an rs_dumptran function call at the same place in the stream of transactions it distributes to all replicate Replication Servers.
rs_dumptran has function-string-class scope.
Replication Server does not initialize or generate rs_dumptran function
strings for the system-provided function-string classes. You must create
a function string before using a coordinated dump with Adaptive Server.
Create an rs_dumptran function string at the Replication Server that is the primary site for the class.
The rs_lastcommit system table should be updated when the rs_dumptran function string executes so that a restarted Replication Server does not perform duplicate dumps. See rs_commit for information about rs_lastcommit.
To account for different dump devices at multiple replicate sites, create a stored procedure in each replicate database that performs a transaction dump, then write the rs_dumptran function string to execute the stored procedure.
Table 4-3 lists the system variables used in rs_dumptran function strings.
Variable name |
Datatype |
Description |
---|---|---|
rs_destination_db |
varchar(30) |
Name of the database where a transaction was sent. |
rs_dump_dbname |
varchar(30) |
The name of the database where the dump originated. |
rs_dump_label |
varchar(30) |
Label information for the dump. For Adaptive Server, this variable contains a datetime value for the time the dump began. |
rs_dump_status |
int(4) |
Dump status indicator:
|
rs_dump_timestamp |
varbinary(16) |
An Adaptive Server database timestamp taken when the dump was started at the origin. The variable is used for informational purposes only. |
rs_origin |
int(4) |
ID of the originating database for a transaction. |
rs_origin_commit_time |
datetime |
The time that a transaction was committed at the origin.
|
rs_origin_qid |
varbinary(36) |
Origin queue ID of the first command in a transaction. |
rs_secondary_qid |
varbinary(36) |
Queue ID of a transaction in a subscription materialization or dematerialization queue. |
create function string, rs_commit, rs_dumpdb, rs_get_lastcommit