Using EXCEPTIONSONLY
EXCEPTIONSONLY is valid for one pair of source and target tables that are explicitly named and mapped one-to-one in a MAP statement; that is, there cannot be wildcards. To use EXCEPTIONSONLY, create two MAP statements for each source table that you want to use EXCEPTIONSONLY for on the target:
-
The first, a standard
MAPstatement, maps the source table to the actual target table. -
The second, an exceptions MAP statement, maps the source table to the exceptions table (instead of to the target table). An exceptions
MAPstatement executes immediately after an error on the source table to send the row values to the exceptions table.To identify a
MAPstatement as an exceptionsMAPstatement, use theINSERTALLRECORDSandEXCEPTIONSONLYoptions. The exceptionsMAPstatement must immediately follow the regularMAPstatement that contains the same source table. Use aCOLMAPclause in the exceptionsMAPstatement if the source and exceptions-table columns are not identical, or if you want to map additional information to extra columns in the exceptions table, such as information that is captured by means of column-conversion functions orSQLEXEC.
For more information about these parameters, see Parameters and Functions Reference for Oracle GoldenGate.
-
A regular
MAPstatement that maps the source tableggs.equip_accountto its target tableequip_account2. -
An exceptions
MAPstatement that maps the same source table to the exceptions tableggs.equip_account_exception.
In this case, four extra columns were created, in addition to the same columns that the table itself contains:
DML_DATE OPTYPE DBERRNUM DBERRMSG
To populate the DML_DATE column, the @DATENOW column-conversion function is used to get the date and time of the failed operation, and the result is mapped to the column. To populate the other extra columns, the @GETENV function is used to return the operation type, database error number, and database error message.
The EXCEPTIONSONLY option of the exceptions MAP statement causes the statement to execute only after a failed operation on the source table. It prevents every operation from being logged to the exceptions table.
The INSERTALLRECORDS parameter causes all failed operations for the specified source table, no matter what the operation type, to be logged to the exceptions table as inserts.
Note:
There can be no primary key or unique index restrictions on the exception table. Uniqueness violations are possible in this scenario and would generate errors.
Example 9-21 EXCEPTIONSONLY
This example shows how to use REPERROR with EXCEPTIONSONLY and an exceptions MAP statement. This example only shows the parameters that relate to REPERROR; other parameters not related to error handling are also required for Replicat.
REPERROR (DEFAULT, EXCEPTION)
MAP ggs.equip_account, TARGET ggs.equip_account2,
COLMAP (USEDEFAULTS);
MAP ggs.equip_account, TARGET ggs.equip_account_exception,
EXCEPTIONSONLY,
INSERTALLRECORDS
COLMAP (USEDEFAULTS,
DML_DATE = @DATENOW (),
OPTYPE = @GETENV ('LASTERR', 'OPTYPE'),
DBERRNUM = @GETENV ('LASTERR', 'DBERRNUM'),
DBERRMSG = @GETENV ('LASTERR', 'DBERRMSG'));
In this example, the REPERROR parameter is set for DEFAULT error handling, and the EXCEPTION option causes the Replicat process to treat failed operations as exceptions and continue processing.