| Title: | DBSTARS Conference |
| Moderator: | BROKE::BASTINE |
| Created: | Wed Feb 02 1994 |
| Last Modified: | Thu Jun 05 1997 |
| Last Successful Update: | Fri Jun 06 1997 |
| Number of topics: | 791 |
| Total number of notes: | 1521 |
Copyright (c) 1997 by Oracle Corporation. All Rights Reserved.
KEYWORDS: Replication DDD ROR DDAL-E-BADDBKSTO
TITLE: Replication transfer fails with DDAL-E-BADDBKSTO error
PRODUCT: Rdb Replication Option
OP/SYS: OpenVMS VAX or AXP
SOURCE: Oracle Worldwide Customer Support
SYMPTOM: A Rdb Replication transfer fails with a DDAL-E-BADDBKSTO error msg.
RESPONSE: This error has only appeared in replication update transfers which
retain deleted source rows in the target table. This type of
transfer is called an archive transfer. An archive transfer is
created using the /WITH_NO_DELETE qualifier.
In the transfer log file the DDAL-E-BADDBKSTO error message also
includes a hex representation of the source row's DBKEY value.
This error will arise if the real source DBKEY value already
exists in the target table's DDAL$DBKEY column. In an archive
transfer you cannot have duplicate DDAL$DBKEY values unless the
values are NULL.
The DDAL$DBKEY column in the target table contains an encrypted
hex representation of the real source table's DBKEY value. You
cannot issue a SQL SELECT statement using the DDAL$DBKEY value in
a WHERE clause.
The steps to find the target row with the duplicate DDAL$DBKEY
value are as follows:
1. Get the hex DBKEY string from the failed transfer log file.
2. Do an RMU/DUMP/LAREA of the logical area in the target database
to an output file. This will probably result in a huge output
file so monitor the size of the file with DIR/SIZE/FULL and
also check available disk space with SHOW DEV commands.
3. Use the VMS SEARCH command to search the output file created
in step 2 for the hex DBKEY string. Use /WIN= in the SEARCH
command so that you can see more surrounding data around the
DBKEY string.
4. The DDAL$DBKEY column is always the first column in the target
table and is 8 bytes long. You will need to do a SHOW TABLE(COL)
command to see the column offsets and datatypes of the target
table. You then need to start translating the column data from
the output file from step 2. You will have to decipher enough
columns until you have enough values to do a SQL SELECT command
which will return just that one row. At this point you could
issue a SELECT DBKEY FROM target_table WHERE command if you
want to find and dump the actual page in the target table.
How can this problem occur? A missed delete transaction from
the source database's RDB$CHANGES table could create this problem
at a later date. Because the delete operation never made it to
the target table (and the row was deleted from the source db)
that DBKEY value could get reused over time on an insert
operation in the source table. The next time the transfer runs
the insert will fail with this error. Customers should never
manually update the RDB$CHANGES table.
WORKAROUND: Either mark the existing target row as a deleted row by changing
the DDAL$DBKEY column to NULL and then restart the transfer or
else reinitialize the transfer.
\
\ CONTRIBUTORS:
\
\ Technical: Don Green
\ Editorial:
\
\
| T.R | Title | User | Personal Name | Date | Lines |
|---|---|---|---|---|---|
| 775.1 | Sent on 4/25/97 | BROKE::BITHER | Wed Apr 30 1997 12:08 | 2 | |
Talked to Don. He sent to either Marilyn or Mem on 4/25/97 thru oracle office. | |||||