Article:
How
to replicate data from location "A" to "B" based on a table with a VARRAY
collection type?
Gathered By:
John Kazerooni
Today,
a lot of company wants to replicate their data for a reason of backup and recovery, accessibility,
performance, etc.
This
article is intended to introduce the enhancement in Oracle9i to teach how to replicate an object
from location “A” to “B” based on a table with a VARRAY collection type.
We
will learn how to create a materialized view based on a table with a VARRAY collection type.
We
assume that you have two sites (Master Site with a service name of SITEA and Materialized View Site
with a service name of SITEB). Also we assume that we have user schema called REPLICATOR in both
sites.
STEPS
to implement replication:
Step
1: Connect to “SITEA” (Master Site) as the REPLICATOR user.
CONNECT
replicator/…@SITEA
Step
2: Create the “Address_Book_type” type with VARRAY collection type to keep address1, address2,
and address3.
CREATE
OR REPLACE TYPE Address_Book_type_array AS VARRAY(3) OF VARCHAR2(20);
Step
3: Create the “ADDRESS_BOOK” table with created “ADDRESS_BOOK_TYPE_ARRAY” type.
CREATE
TABLE address_book
(
id NUMBER(10) CONSTRAINT address_book_pk PRIMARY KEY,
first_name
VARCHAR2(15),
last_name
VARCHAR2(15),
address_obj
address_book_type_array );
Step
4: Now, create a Materialized View Log.
CREATE
MATERIALIZED VIEW LOG
ON
address_book WITH PRIMARY KEY;
Step
5: Insert some records into your address book table and then commit the transaction.
INSERT
INTO address_book
VALUES
('100','Borna','Kaz',
Address_Book_type_array(‘Company
Name’, '1576 Dunterry place', 'Orlando','FL, 22101'));
INSERT
INTO address_book
VALUES
('200','Dana','Kaz’,
Address_Book_type_array(‘Company
Name2’, ‘1299 King Ave.','McLean','VA, 43200'));
COMMIT;
Query
the address book table.
SELECT
id, first_name, last_name, c.address_obj.*
FROM
address_book c;
Step
5: Connect to SITEA again with a DBA privilege.
CONNECT
system/…@SITEA
Step
6: Obtain Object ID of created “ADDRESS_BOOK_TYPE” object.
SELECT
OWNER, TYPE_OID FROM DBA_TYPES
WHERE
TYPE_NAME = 'ADDRESS_BOOK_TYPE';
OWNER
TYPE_OID
Step
7: Connect to SITEB (Materialized View Site) as the REPLICATOR user.
CONNECT
replicator/...@SITEB
Step
8: Assuming that the “ADDRESS_BOOK_TYPE_ARRAY” object ID is
‘XXXXXXXXXXXXXXXXXXXXX,’
create the “ADDRESS_BOOK_TYPE_ARRAY” object with the same above object ID.
CREATE
OR REPLACE TYPE address_book_type_array OID ‘XXXXXXXXXXXXXXXXXXXXX’ AS VARRAY (3) OF VARCHAR2
(20);
Step
9: Now, create a Materialized View that it will be updated as soon as there is any changes on the
Master table (ADDRESS_BOOK) by executing refresh procedure.
CREATE
MATERIALIZED VIEW address_book_mv
REFRESH
FAST AS
SELECT
id, first_name, c.address_obj.*
FROM
replicator.address_book@SITEA c;
Step
10: From now on, any changes in the ADDRESS_BOOK table in the Master Site (SITEA) will be replicated
to the SITEB (Materialized View Site) by executing DBMS_MVIEW.REFRESH procedure on the SITEB.
EXECUTE
dbms_mview.refresh(‘address_book_mv’,’F’);
|