alter replication definition

Description

Changes an existing replication definition.

Syntax

alter replication definition replication_definition
{with replicate table named [table_owner.]'table_name' | 
add column_name [as replicate_column_name]
       [datatype [null | not null]]
       [map to published_datatype] [quoted],... |
alter columns with column_name
       [as replicate_column_name] [quoted | not quoted],...|
alter columns with column_name
        datatype [null | not null]
        [map to published_datatype],...|
        references {[table_owner.]table_name [(column_name) | null}]
alter columns column_name {quoted | not quoted}
add primary key column_name [, column_name]... |
drop primary key column_name [, column_name]... |
add searchable columns column_name [, column_name]... |
drop searchable columns column_name [, column_name]... |
drop column_name[, column_name] ... |
send standby [off | {all | replication definition} columns] |
replicate {minimal | all} columns | 
replicate {SQLDML [‘off’] | ‘options’} |
replicate_if_changed column_name [, column_name]...|
always_replicate column_name [, column_name]... |
{with | without} dynamic sql |
alter replicate table name {quoted | not quoted}}
[with DSI_suspended]

Parameters

replication_definition

The name of the replication definition to change.

with replicate table named

Specifies the name of the table at the replicate database. table_name is a character string of up to 200 characters. table_owner is an optional qualifier for the table name, representing the table owner. Data server operations may fail if actual table owners do not correspond to what you specify in the replication definition.

add columns column_name

Specifies additional columns and their datatypes for the replication definition. column_name is the name of a column to be added to the replicated columns list. The column name must be unique for a replication definition.

Also add columns declared_column_name. See “Using column-level datatype translations”.

as replicate_column_name

For columns you are adding to the replication definition, specifies a column name in a replicate table into which data from the primary column will be replicated. replicate_column_name is the name of a column in a replicate table that corresponds to the specified column in the primary table. Use this clause when the replicate and primary columns have different names.

datatype

The datatype of the column you are adding to a replication definition column list or the datatype of an existing column you are altering. See “Datatypes” for a list of supported datatypes and their syntax.

If a column is listed in an existing replication definition for a primary table, subsequent replication definitions for the same primary table must specify the same datatype.

Use as declared_datatype if you are specifying a column-level datatype translation for the column. A declared datatype must be a native Replication Server datatype or a datatype definition for the primary datatype.

null or not null

Applies only to text, unitext, image, and rawobject columns. Specifies whether a null value is allowed in the replicate table. The default is not null, meaning that the replicate table does not accept null values.

The null status for each text, unitext, image, and rawobject column must match for all replication definitions for the same primary table, and must match the settings in the actual tables. Specifying the null status is optional if an existing replication definition of the same primary table has text, unitext, image, or rawobject columns.

quoted | not quoted

Specifies whether a table or column name is a quoted identifier.

alter columns column_name

Specifies columns and their datatypes to alter in the replication definition. column_name is the name of a column to be changed. The column name must be unique for a replication definition.

Use alter columns declared_column_name when specifying a column-level datatype translation.

map to published_datatype

Specifies the datatype of a column after a column-level datatype translation. published_datatype must be a Replication Server native datatype or a datatype definition for the published datatype.

references table owner.table name column name

Specifies the table name of the table with referential constraints at the primary database that you want to add or change as a referencing table. Use the null option to drop a reference. table_name is a character string of up to 200 characters. table_owner is optional, and represents the table owner. column name is optional. Data server operations may fail if the actual table owners do not correspond to what you specify in the replication definition. See “Handling tables that have referential constraints” for more information on usage.

add/drop primary key

Used to add or remove columns from the primary keys column list.Replication Server depends on primary keys to find the correct rows at the replicate or standby table. To drop all primary key columns, first alter the corresponding replication definition to add the new primary keys, then drop the old primary key columns in the table. If all primary keys are missing, the DSI will shut down. See create replication definition for additional information on primary keys.

add searchable columns column_name

Specifies additional columns that can be used in where clauses of the create subscription or define subscription command. column_name is the name of a column to add to the searchable columns list. The same column name must not appear more than once in each clause.

You cannot specify text, unitext, image, rawobject, rawobject in row or encrypted columns as searchable columns.

drop searchable columns column_name

Specifies columns to remove from the searchable column list. You can remove columns from the searchable column list only if they are not used in subscription or article where clauses.

drop column_name

Specifies columns to remove.

send standby

Specifies how to use the replication definition in replicating into a standby database in a warm standby application. See “Replicating into a standby database” for details on using this clause and its options.

replicate minimal columns

Sends (to replicate Replication Servers) only those columns needed to perform update or delete operations at replicate databases. To replicate all columns, use replicate all columns.

replicate SQLDML [‘off’]

Turns on or off the SQL statement replication of the DML option specified.

replicate ‘options

Replicates any combination of these DML operations:

  • U – update

  • D – delete

  • I – insert select

replicate_if_changed

Specifies text, unitext, image, or rawobject columns to be added to the replicate_if_changed column list. When multiple replication definitions exist for the same primary table, using this clause to change one replication definition changes all replication definitions of the same primary table.

always_replicate

Specifies text, image, or rawobject columns to be added to the always_replicate column list. When multiple replication definitions exist for the same primary table, using this clause to change one replication definition changes all replication definitions of the same primary table.

with dynamic sql

Specifies that DSI applies dynamic SQL to the table if the command qualifies and enough cache space is available. This is the default.

See the Replication Server Administration Guide Volume 2 for the conditions a command must meet to qualify for dynamic SQL.

without dynamic sql

Specifies that DSI must not use dynamic SQL commands.

with DSI_suspended

Allows you to suspend the standby DSI, if there is one, and each of the subscribing replicate DSI threads. Replication Server suspends the DSI thread in the standby or replicate database after Replication Server applies all the data for the old replication definition version to the standby or replicate database.

After Replication Server suspends a DSI thread, you can make changes to the target schema, and to any customized function strings. When you resume the DSI thread, Replication Server replicates the primary updates using the altered replication definition.

You do not need to use with DSI_suspended if:

  • There is no subscription to the replication definition.

  • You do not need to change customized function strings.

  • You do not need to change the replicate or standby database schema.

NoteIf there is a subscription from a replicate Replication Server with a site version earlier than 1550, the replicate DSI threads for that Replication Server are not suspended.

Examples

Example 1

Adds state as a searchable column to the authors_rep replication definition:

alter replication definition authors_rep
 add searchable columns state

Example 2

Changes the titles_rep replication definition to specify that only the minimum number of columns will be sent for delete and update operations:

alter replication definition titles_rep
 replicate minimal columns

Example 3

Changes the titles_rep replication definition to specify that the replication definition can be subscribed to by a replicate table called copy_titles owned by the user “joe”:

alter replication definition titles_rep
 with replicate table named joe.'copy_titles'

Example 4

Changes the pubs_rep replication definition to specify that the primary column pub_name will replicate into the replicate column pub_name_set:

alter replication definition pubs_rep
alter columns with pub_name as pub_name_set

Example 5

Introduces a column-level translation that causes hire_date column values to be translated from rs_db2_date (primary) format to the native datatype smalldatetime (replicate) format:

alter replication definition employee_repdef
alter columns with hire_date as rs_db2_date
map to smalldatetime

Example 6

Marks the table named foo as a quoted identifier:

alter replication definition repdef
   alter replicate table name “foo” quoted

Example 7

Removes the quoted identifier marking from the column foo_coll:

alter replication definition repdef
   with replicate table named “foo”
   alter columns “foo_col1” not quoted

Example 8

Instructs Replication Server to suspend the target DSI after primary data that exists before you execute alter replication definition is replicated to the target database:

alter replication definition pubs_rep
alter columns with pub_name as pub_name_set
with DSI_suspended

Example 9

Drops the address, city, state, and zip columns from the “authors” replication definition:

alter replication definition authors
drop address, city, state, zip

Usage


Adding columns


Dropping columns


Altering column datatypes


Using column-level datatype translations


Replicating all or minimal columns


Replicating into a standby database


Handling tables that have referential constraints

You can use a replication definition to specify tables that have referential constraints, such as a foreign key and other check constraints, so that Replication Server is aware of these tables when you enable RTL or HVAR. See “High Volume Adaptive Replication to Adaptive Server,” in Chapter 4, “Performance Tuning” in the Replication Server Administration Guide Volume 2 and Chapter 13, “Replication into Sybase IQ” in the Replication Server Heterogeneous Replication Guide.


Procedure to alter a replication definition

When you request changes to replication definitions, Replication Server coordinates the propagation of replication definition changes and data replication automatically. You can request replication definition changes directly at the primary Replication Server, or at the primary database using the alter replication definition, alter applied replication definition, or alter request function replication definition commands, while making changes to the database schema.

When the primary database log does not contain data for the replication definition being changed, you can issue the replication definition request directly at the primary Replication Server. Otherwise, it is always safe to issue the replication definition requests at the primary database, using the rs_send_repserver_cmd stored procedure.

If the database does not support rs_send_repserver_cmd, you need to wait until the primary database log does not have any data rows for the schema that you are changing, and then execute the alter replication definition request at the primary Replication Server.

See “Replication definition change request process,” in Chapter 9, “Managing Replicated Tables” in the Replication Server Administration Guide Volume 1.

Permissions

alter replication definition requires “create object” permission.

See also

admin verify_repserver_cmd, alter function string, create replication definition, drop replication definition, setrs_set_quoted_identifier, rs_send_repserver_cmd, rs_helprepversion