Creating a shadow table involves several steps to ensure
that the table is in a normal state and has a primary key defined.
Shadow tables are materialized query tables (MQTs) that are column-organized
tables and maintained by replication.
Before you begin
- Ensure that your database supports shadow table functionality
by meeting the requirements in DB2 server configuration for shadow tables.
- Ensure that a supported version of IBM® InfoSphere® Change Data Capture is
installed and configured. For more information, see Installation requirements for IBM InfoSphere Change Data Capture for shadow tables.
- Ensure that the SYSTOOLS.REPL_MQT_LATENCY table exists to share
the replication latency information between InfoSphere CDC and
the DB2 database manager. For
more information, see Creating the SYSTOOLS.REPL_MQT_LATENCY table.
- The source table that you want to shadow must have an enforced
primary key constraint or enforced unique constraint included in the
select list of the create statement. Non-enforced unique constraints
on source tables cause replication errors in InfoSphere CDC because
duplicate rows are rejected when only the target shadow table has
a primary key.
Restrictions
- Review any applicable restrictions on column-organized tables
or MQTs that are maintained by replication in the following topics:
Procedure
To create a shadow table:
- Ensure that the source table has a primary key or unique constraint
defined. The following example shows the SQL statements
that were used to create the TRADE source table and its primary key:
CREATE TABLE DTW.TRADE (
"T_ID" BIGINT NOT NULL ,
"T_DTS" TIMESTAMP NOT NULL ,
"T_ST_ID" CHAR(4 OCTETS) NOT NULL ,
"T_TT_ID" CHAR(3 OCTETS) NOT NULL ,
"T_IS_CASH" SMALLINT NOT NULL ,
"T_S_SYMB" VARCHAR(15 OCTETS) NOT NULL ,
"T_QTY" INTEGER NOT NULL ,
"T_BID_PRICE" DECIMAL(8,2) NOT NULL ,
"T_CA_ID" BIGINT NOT NULL ,
"T_EXEC_NAME" CHAR(49 OCTETS) NOT NULL ,
"T_TRADE_PRICE" DECIMAL(8,2) ,
"T_CHRG" DECIMAL(10,2) ,
"T_COMM" DECIMAL(10,2) NOT NULL ,
"T_TAX" DECIMAL(10,2) NOT NULL ,
"T_LIFO" SMALLINT NOT NULL )
ORGANIZE BY ROW;
ALTER TABLE DTW.TRADE
ADD CONSTRAINT "T_PK" PRIMARY KEY ("T_ID");
- Create the shadow table by issuing the CREATE TABLE statement
with the MAINTAINED BY REPLICATION clause. This clause
identifies this table as a shadow table. The primary key of the source
table must be included in the select list of the CREATE TABLE statement
for the shadow table. For example:
CREATE TABLE DTW.TRADE_SHADOW AS
(SELECT * from DTW.TRADE) DATA INITIALLY DEFERRED REFRESH DEFERRED
ENABLE QUERY OPTIMIZATION MAINTAINED BY REPLICATION ORGANIZE BY COLUMN;
After you issue the CREATE TABLE statement,
the new shadow table is put in set integrity-pending state.
- Bring the shadow table out of set integrity-pending state
into normal state by issuing the SET INTEGRITY statement with the
IMMEDIATE UNCHECKED clause. For example:
SET INTEGRITY FOR DTW.TRADE_SHADOW ALL IMMEDIATE UNCHECKED;
- Define a primary key on the shadow table by issuing the
ALTER TABLE statement. For example:
ALTER TABLE DTW.TRADE_SHADOW
ADD CONSTRAINT T_SHADOW_IX PRIMARY KEY (T_ID);
The
primary key on the shadow table is required to provide a one-to-one
mapping for each row in the source table to the corresponding row
in the shadow table. The primary key on the shadow table
must match the enforced primary key constraint or a unique constraint
on the source table in both column list and key sequence. This
primary key also facilitates maintenance of the shadow table.
- To verify that the shadow table was successfully created, issue
the following query to list shadow tables that exists in the database.
SELECT
SUBSTR(TABNAME, 1, 24) AS TABNAME,
SUBSTR(TABSCHEMA, 1, 24) AS TABSCHEMA
FROM SYSCAT.TABLES
WHERE SUBSTR(PROPERTY,23,1) = 'Y';
What to do next
After
you create all the shadow tables that you need, set up their replication
with
InfoSphere CDC in
one of the following ways: