Oracle9i Supplied PL/SQL Packages and Types Reference Release 2 (9.2) Part Number A96612-01 |
|
DBMS_APPLY_ADM, 2 of 2
Alters an apply process.
DBMS_APPLY_ADM.ALTER_APPLY( apply_name IN VARCHAR2, rule_set_name IN VARCHAR2 DEFAULT NULL, remove_rule_set IN BOOLEAN DEFAULT false, message_handler IN VARCHAR2 DEFAULT NULL remove_message_handler IN BOOLEAN DEFAULT false, ddl_handler IN VARCHAR2 DEFAULT NULL, remove_ddl_handler IN BOOLEAN DEFAULT false, apply_user IN VARCHAR2 DEFAULT NULL, apply_tag IN RAW DEFAULT NULL, remove_apply_tag IN BOOLEAN DEFAULT false);
Parameter | Description |
---|---|
|
The name of the apply process being altered. You must specify an existing apply process name. |
|
The name of the rule set that contains the apply rules for this apply process. If you want to use a rule set for the apply process, then you must specify an existing rule set in the form An error is returned if the specified rule set does not exist. You can create a rule set and add rules to it using the If you specify |
|
If If If the |
|
A user-defined procedure that processes non-LCR messages in the queue for the apply process. You must specify an existing procedure in one of the following forms: If the procedure is in a package, then the If the schema is not specified, then the user who invokes the |
|
If If If the |
|
A user-defined procedure that processes DDL LCRs in the queue for the apply process. You must specify an existing procedure in the form If the schema is not specified, then the user who invokes the All applied DDL LCRs commit automatically. Therefore, if a DDL handler calls the |
|
If If If the |
|
The user who applies all DML and DDL changes and who runs user-defined apply handlers. If The specified user must have the necessary privileges to perform DML and DDL changes on the apply objects and to run any apply handlers. The specified user must also have dequeue privileges on the queue used by the apply process and privileges to execute the rule set and transformation functions used by the apply process. These privileges must be granted directly to the apply user; they cannot be granted through roles. By default, this parameter is set to the user who created the apply process by running either the Note: If the specified user is dropped using |
|
A binary tag that is added to redo entries generated by the specified apply process. The tag is a binary value that can be used to track LCRs. The tag is relevant only if a capture process at the database where the apply process is running will capture changes made by the apply process. If so, then the captured changes will include the tag specified by this parameter. If The following is an example of a tag with a hexadecimal value of HEXTORAW('17') See Also: Oracle9i Streams for more information about tags |
|
If If If the |
An apply process is stopped and restarted automatically when you change the value of one or more of the following ALTER_APPLY
procedure parameters:
Creates an apply process.
DBMS_APPLY_ADM.CREATE_APPLY( queue_name IN VARCHAR2, apply_name IN VARCHAR2, rule_set_name IN VARCHAR2 DEFAULT NULL, message_handler IN VARCHAR2 DEFAULT NULL, ddl_handler IN VARCHAR2 DEFAULT NULL, apply_user IN VARCHAR2 DEFAULT NULL, apply_database_link IN VARCHAR2 DEFAULT NULL, apply_tag IN RAW DEFAULT '00', apply_captured IN BOOLEAN DEFAULT false);
Parameter | Description |
---|---|
|
The name of the queue from which the apply process dequeues LCRs and user messages. You must specify an existing queue in the form Note: The |
|
The name of the apply process being created. A Note: The |
|
The name of the rule set that contains the apply rules for this apply process. If you want to use a rule set for the apply process, then you must specify an existing rule set in the form An error is returned if the specified rule set does not exist. You can create a rule set and add rules to it using the If you specify |
|
A user-defined procedure that processes non-LCR messages in the queue for the apply process. You must specify an existing procedure in one of the following forms: If the procedure is in a package, then the If the schema is not specified, then the user who invokes the See "Usage Notes" for more information about a message handler procedure. |
|
A user-defined procedure that processes DDL LCRs in the queue for the apply process. You must specify an existing procedure in one of the following forms: If the procedure is in a package, then the If the schema is not specified, then the user who invokes the All applied DDL LCRs commit automatically. Therefore, if a DDL handler calls the See "Usage Notes" for more information about a DDL handler procedure. |
|
The user who applies all DML and DDL changes and who runs user-defined apply handlers. If The user must have the necessary privileges to perform DML and DDL changes on the apply objects and to run any apply handlers. The specified user must also have dequeue privileges on the queue used by the apply process and privileges to execute the rule set and transformation functions used by the apply process. These privileges must be granted directly to the apply user; they cannot be granted through roles. Note: If the specified user is dropped using See Also: Oracle9i Streams for more information about the privileges required to apply changes |
|
A binary tag that is added to redo entries generated by the specified apply process. The tag is a binary value that can be used to track LCRs. The tag is relevant only if a capture process at the database where the apply process is running will capture changes made by the apply process. If so, then the captured changes will include the tag specified by this parameter. By default, the tag for an apply process is the hexadecimal equivalent of The following is an example of a tag with a hexadecimal value of HEXTORAW('17') If See Also: Oracle9i Streams for more information about tags |
|
If If To apply both captured and user-enqueued events in a queue, you must create at least two apply processes. Note: The See Also: Oracle9i Streams for more information about captured and user-enqueued events |
The procedure specified in both the message_handler
parameter and the ddl_handler
parameter must have the following signature:
PROCEDURE handler_procedure ( parameter_name IN SYS.AnyData);
Here, handler_procedure
stands for the name of the procedure and parameter_name
stands for the name of the parameter passed to the procedure. For the message handler, the parameter passed to the procedure is a SYS.AnyData
encapsulation of a user message. For the DDL handler procedure, the parameter passed to the procedure is a SYS.AnyData
encapsulation of a DDL LCR.
See Also:
Chapter 108, "Logical Change Record Types" for information DDL LCRs |
Deletes all the error transactions for the specified apply process from the error queue.
DBMS_APPLY_ADM.DELETE_ALL_ERRORS( apply_name IN VARCHAR2 DEFAULT NULL);
Parameter | Description |
---|---|
|
The name of the apply process that raised the errors while processing the transactions. If |
Deletes the specified error transaction from the error queue.
DBMS_APPLY_ADM.DELETE_ERROR( local_transaction_id IN VARCHAR2);
Parameter | Description |
---|---|
|
The identification number of the error transaction to delete. If the specified transaction does not exist in the error queue, then an error is raised. |
Drops an apply process.
DBMS_APPLY_ADM.DROP_APPLY( apply_name IN VARCHAR2);
Parameter | Description |
---|---|
|
The name of the apply process being dropped. You must specify an existing apply process name. |
Reexecutes the error queue transactions for the specified apply process.
The transactions are reexecuted in commit SCN order. Error reexecution stops if an error is raised.
DBMS_APPLY_ADM.EXECUTE_ALL_ERRORS( apply_name IN VARCHAR2 DEFAULT NULL execute_as_user IN BOOLEAN DEFAULT false);
Reexecutes the specified error queue transaction.
DBMS_APPLY_ADM.EXECUTE_ERROR( local_transaction_id IN VARCHAR2, execute_as_user IN BOOLEAN DEFAULT FALSE);
Returns the message payload from the error queue for the specified message number and transaction identifier.
DBMS_APPLY_ADM.GET_ERROR_MESSAGE( message_number IN NUMBER, local_transaction_id IN VARCHAR2) RETURN Sys.Anydata;
Parameter | Description |
---|---|
|
Identifier of the error transaction for which to return a message |
Sets a user procedure as a DML handler for a specified operation on a specified object. The user procedure alters the apply behavior for the specified operation on the specified object. Run this procedure at the destination database. The SET_DML_HANDLER
procedure provides a way for users to apply logical change records containing DML changes (row LCRs) using a customized apply.
If the error_handler
parameter is set to true
, then it specifies that the user procedure is an error handler. An error handler is invoked only when a row LCR raises an apply process error. Such an error may result from a data conflict if no conflict handler is specified or if the update conflict handler cannot resolve the conflict. If the error_handler
parameter is set to false
, then the user procedure is a DML handler, not an error handler, and a DML handler is always run instead of performing the specified operation on the specified object.
This procedure either sets a DML handler or an error handler for a particular operation on an object. It cannot set both a DML handler and an error handler for the same object and operation.
At the source database, you must specify an unconditional supplemental log group for the columns needed by a DML or error handler.
Note: Currently, setting an error handler for an apply process that is applying changes to a non-Oracle database is not supported. |
DBMS_APPLY_ADM.SET_DML_HANDLER( object_name IN VARCHAR2, object_type IN VARCHAR2, operation_name IN VARCHAR2, error_handler IN BOOLEAN DEFAULT false, user_procedure IN VARCHAR2, apply_database_link IN VARCHAR2 DEFAULT NULL);
The SET_DML_HANDLER
procedure can be used to set either a general DML handler or an error handler for row LCRs that perform a specified operation on a specified object. The following sections describe the signature of a general DML handler procedure and the signature of an error handler procedure.
In either case, you must specify the full procedure name for the user_procedure
parameter in one of the following forms:
If the procedure is in a package, then the package_name
must be specified. If the schema is not specified, then the user who invokes the SET_DML_HANDLER
procedure is the default. This user must have EXECUTE
privilege on the specified procedure.
For example, suppose the procedure_name
has the following properties:
In this case, specify the following:
hr.apply_pkg.employees_default
The following restrictions apply to the user procedure:
COMMIT
or ROLLBACK
statements. Doing so may endanger the consistency of the transaction that contains the LCR.EXECUTE
member procedure for the row LCR, then do not attempt to manipulate more than one row in a row operation. You must construct and execute manually any DML statements that manipulate more than one row.UPDATE
or DELETE
, then row operations resubmitted using the EXECUTE
member procedure for the LCR must include the entire key in the list of old values. The key is the primary key, unless a substitute key has been specified by the SET_KEY_COLUMNS
procedure.INSERT
, then row operations resubmitted using the EXECUTE
member procedure for the LCR should include the entire key in the list of new values. Otherwise, duplicate rows are possible. The key is the primary key, unless a substitute key has been specified by the SET_KEY_COLUMNS
procedure.The procedure specified in the user_procedure
parameter must have the following signature:
PROCEDURE user_procedure ( parameter_name IN SYS.AnyData);
Here, user_procedure
stands for the name of the procedure and parameter_name
stands for the name of the parameter passed to the procedure. The parameter passed to the procedure is a SYS.AnyData
encapsulation of a row LCR.
See Also:
Chapter 108, "Logical Change Record Types" for more information about LCRs |
The procedure you create for error handling must have the following signature:
PROCEDURE user_procedure ( message IN SYS.AnyData, error_stack_depth IN NUMBER, error_numbers IN DBMS_UTILITY.NUMBER_ARRAY, error_messages IN emsg_array);
Running an error handler results in one of the following outcomes:
If you want to retry the DML operation, then have the error handler procedure run the EXECUTE
member procedure for the LCR.
Records the specified instantiation SCN for the specified source database. This procedure overwrites any existing instantiation SCN for the database.
This procedure gives you precise control over which DDL LCRs for a database are ignored and which DDL LCRs are applied by an apply process. If the commit SCN of a DDL LCR for a database object from a source database is less than or equal to the instantiation SCN for that database at some destination database, then the apply process at the destination database disregards the DDL LCR. Otherwise, the apply process applies the DDL LCR.
The instantiation SCN specified by this procedure is used for a DDL LCR only if the DDL LCR does not have object_owner
, base_table_owner
, and base_table_name
specified. For example, the instantiation SCN set by this procedure is used for DDL LCRs with a command_type
of CREATE
USER
.
See Also:
|
DBMS_APPLY_ADM.SET_GLOBAL_INSTANTIATION_SCN( source_database_name IN VARCHAR2, instantiation_scn IN NUMBER, apply_database_link IN VARCHAR2 DEFAULT NULL);
Records the set of columns to be used as the substitute primary key for apply purposes and removes existing substitute primary key columns for the specified object if they exist. Unlike true primary keys, these columns may contain NULL
s.
When not empty, this set of columns takes precedence over any primary key for the specified object. Do not specify substitute key columns if the object already has primary key columns and you want to use those primary key columns as the key.
Run this procedure at the destination database. At the source database, you must specify an unconditional supplemental log group for the substitute key columns.
Note: This procedure is overloaded. The |
DBMS_APPLY_ADM.SET_KEY_COLUMNS( object_name IN VARCHAR2, { column_list IN VARCHAR2, | column_table IN DBMS_UTILITY.NAME_ARRAY, } apply_database_link IN VARCHAR2 DEFAULT NULL);
Sets an apply parameter to the specified value.
When you alter a parameter value, a short amount of time may pass before the new value for the parameter takes effect.
DBMS_APPLY_ADM.SET_PARAMETER ( apply_name IN VARCHAR2, parameter IN VARCHAR2, value IN VARCHAR2);
Parameter | Description |
---|---|
|
The apply process name |
|
The name of the parameter you are setting. See "Apply Process Parameters" for a list of these parameters. |
|
The value to which the parameter is set |
The following table lists the parameters for the apply process.
Records the specified instantiation SCN for the specified schema in the specified source database. This procedure overwrites any existing instantiation SCN for the particular schema.
This procedure gives you precise control over which DDL LCRs for a schema are ignored and which DDL LCRs are applied by an apply process. If the commit SCN of a DDL LCR for a database object in a schema from a source database is less than or equal to the instantiation SCN for that database object at some destination database, then the apply process at the destination database disregards the DDL LCR. Otherwise, the apply process applies the DDL LCR.
The instantiation SCN specified by this procedure is used on the following types of DDL LCRs:
command_type
of CREATE
TABLE
NULL
object_owner
specified and no base_table_owner
nor base_table_name
specified.For example, the instantiation SCN set by this procedure is used for a DDL LCR with a command_type
of CREATE
TABLE
and ALTER
USER
.
The instantiation SCN specified by this procedure is not used for DDL LCRs with a command_type
of CREATE
USER
.
See Also:
|
DBMS_APPLY_ADM.SET_SCHEMA_INSTANTIATION_SCN( source_schema_name IN VARCHAR2, source_database_name IN VARCHAR2, instantiation_scn IN NUMBER, apply_database_link IN VARCHAR2 DEFAULT NULL);
Records the specified instantiation SCN for the specified table in the specified source database. This procedure overwrites any existing instantiation SCN for the particular table.
This procedure gives you precise control over which LCRs for a table are ignored and which LCRs are applied by an apply process. If the commit SCN of an LCR for a table from a source database is less than or equal to the instantiation SCN for that table at some destination database, then the apply process at the destination database disregards the LCR. Otherwise, the apply process applies the LCR.
The instantiation SCN specified by this procedure is used on the following types of LCRs:
NULL
base_table_owner
and base_table_name
specified, except for DDL LCRs with a command_type
of CREATE
TABLE
For example, the instantiation SCN set by this procedure is used for DDL LCRs with a command_type
of ALTER
TABLE
or CREATE
TRIGGER
.
Note: The instantiation SCN specified by this procedure is used only for LCRs captured by a capture process. It is not used for user-created LCRs. |
See Also:
|
DBMS_APPLY_ADM.SET_TABLE_INSTANTIATION_SCN( source_object_name IN VARCHAR2, source_database_name IN VARCHAR2, instantiation_scn IN NUMBER, apply_database_link IN VARCHAR2 DEFAULT NULL);
Adds, modifies, or removes an update conflict handler for the specified object.
If you want to modify an existing update conflict handler, then you specify the table and resolution column of an the existing update conflict handler. You can modify the prebuilt method or the column list.
If you want to remove an existing update conflict handler, then specify NULL
for the prebuilt method and specify the table, column list, and resolution column of the existing update conflict handler.
If an update conflict occurs, then Oracle completes the following series of actions:
Note: Currently, setting an update conflict handler for an apply process that is applying to a non-Oracle database is not supported. |
See Also:
"Signature of an Error Handler Procedure" for information about setting an error handler |
DBMS_APPLY_ADM.SET_UPDATE_CONFLICT_HANDLER( object_name IN VARCHAR2, method_name IN VARCHAR2, resolution_column IN VARCHAR2, column_list IN DBMS_UTILITY.NAME_ARRAY, apply_database_link IN VARCHAR2 DEFAULT NULL);
The following is an example for setting an update conflict handler for the employees
table in the hr
schema:
DECLARE cols DBMS_UTILITY.NAME_ARRAY; BEGIN cols(1) := 'salary'; cols(2) := 'commission_pct'; DBMS_APPLY_ADM.SET_UPDATE_CONFLICT_HANDLER( object_name => 'hr.employees', method_name => 'MAXIMUM', resolution_column => 'salary', column_list => cols); END; /
This example sets a conflict handler that is called if a conflict occurs for the salary
or commission_pct
column in the hr.employees
table. If such a conflict occurs, then the salary
column is evaluated to resolve the conflict. If a conflict occurs only for a column that is not in the column list, such as the job_id
column, then this conflict handler is not called.
Directs the apply process to start applying events.
The start status is persistently recorded. Hence, if the status is START
, then the apply process is started upon database instance startup. Each apply process is an Oracle background process and is prefixed by AP
.
The enqueue and dequeue state of DBMS_AQADM.START_QUEUE
and DBMS_AQADM.STOP_QUEUE
have no effect on the start status of an apply process.
You can create the apply process using the following procedures:
DBMS_APPLY_ADM.CREATE_APPLY
DBMS_STREAMS_ADM.ADD_GLOBAL_RULES
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES
DBMS_STREAMS_ADM.ADD_TABLE_RULES
DBMS_STREAMS_ADM.ADD_SUBSET_RULES
DBMS_APPLY_ADM.START_APPLY( apply_name IN VARCHAR2);
Parameter | Description |
---|---|
|
The apply process name. A |
Stops the apply process from applying events and rolls back any unfinished transactions being applied.
The stop status is persistently recorded. Hence, if the status is STOP
, then the apply process is not started upon database instance startup.
The enqueue and dequeue state of DBMS_AQADM.START_QUEUE
and DBMS_AQADM.STOP_QUEUE
have no effect on the STOP
status of an apply process.
DBMS_APPLY_ADM.STOP_APPLY( apply_name IN VARCHAR2 force IN BOOLEAN DEFAULT false);
Parameter | Description |
---|---|
|
The apply process name. A |
|
If If The behavior of the apply process depends on the setting specified for the |
The following table describes apply process behavior for each setting of the force
parameter in the STOP_APPLY
procedure and the commit_serialization
apply process parameter. In all cases, the apply process rolls back any unfinished transactions when it stops.
For example, assume that the commit_serialization
apply process parameter is set to none
and there are three transactions: transaction 1 has the earliest commit time, transaction 2 is committed after transaction 1, and transaction 3 has the latest commit time. Also assume that an apply process has applied transaction 1 and transaction 3 and is in the process of applying transaction 2 when the STOP_APPLY
procedure is run. Given this scenario, if the force
parameter is set to true
, then transaction 2 is not applied, and the apply process stops (transaction 2 is rolled back). If, however, the force
parameter is set to false
, then transaction 2 is applied before the apply process stops.
A different scenario would result if the commit_serialization
apply process parameter is set to full
. For example, assume that the commit_serialization
apply process parameter is set to full
and there are three transactions: transaction A has the earliest commit time, transaction B is committed after transaction A, and transaction C has the latest commit time. In this case, the apply process has applied transaction A and is in the process of applying transactions B and C when the STOP_APPLY
procedure is run. Given this scenario, if the force
parameter is set to true
, then transactions B and C are not applied, and the apply process stops (transactions B and C are rolled back). If, however, the force
parameter is set to false
, then transaction B is applied before the apply process stops, and transaction C is rolled back.
See Also:
"SET_PARAMETER Procedure" for more information about the |
|
Copyright © 2000, 2002 Oracle Corporation. All Rights Reserved. |
|