Replicating data with a NESTED TABLE
collection type
Hands-On
Introduction
Today, a lot
of company wants to replicate their data for
a reason of backup and recovery,
accessibility, performance, etc.
This hand-on
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 NESTED TABLE collection type.
We will learn
how to create a materialized view based on a
table with a NESTED TABLE 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.
CONNECT
�/�@...
STEPS to
implement replication:
Step 1:
Connect to �SITEA� (Master Site) as the
REPLICATOR user.
SQL> CONNECT replicator/�@SITEA
CREATE TYPE �
AS OBJECT �
Step 2: Create
the �address_book_type_object� object. Then
create a nested table type from created
object.
SQL> CREATE OR
REPLACE TYPE address_book_type_object
AS OBJECT (
id_address
NUMBER(1),
address
VARCHAR2(20));
CREATE TYPE �
AS TABLE OF �
SQL> CREATE
TYPE address_book_nested_type
AS TABLE OF
address_book_type_object;
CREATE TABLE �
NESTED TABLE �
Step 3: Create
the �ADDRESS_BOOK� table with created
�ADDRESS_BOOK_NESTED_TYPE� type.
SQL> 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_nested_type)
NESTED TABLE
address_obj STORE AS address_nested
((PRIMARY KEY
(NESTED_TABLE_ID, id_address)));
CREATE
MATERIALIZED VIEW LOG �
Step 4: Now,
create a Materialized View Log.
SQL> CREATE
MATERIALIZED VIEW LOG ON address_book;
ALTER
MATERIALIZED VIEW LOG ON address_book
ADD(address_obj);
SQL> CREATE
MATERIALIZED VIEW LOG ON address_nested
WITH PRIMARY
KEY;
INSERT INTO �
VALUES (object_type(),�)
Step 5: Insert
some records into your address book table
and then commit the transaction.
SQL> INSERT
INTO address_book
VALUES
('100','Borna','Kaz',
address_book_nested_type(
address_book_type_object (1,�Company Name�),
address_book_type_object (2,'1576 Dunterry
place')
address_book_type_object (3, 'Orlando','FL,
22101')));
SQL> INSERT
INTO address_book
VALUES
('200','Dana','Kaz�,
address_book_nested_type (
address_book_type_object (1,�Company
Name2�')));
SQL> COMMIT;
Query the
address book table.
SQL> SELECT *
FROM
address_book;
Step 6:
Connect to SITEA again with a DBA privilege.
SQL> CONNECT system/�@SITEA
Obtaining an
Object ID (OID)
Step 7: Obtain
Object ID of created �ADDRESS_BOOK_TYPE�
object.
SQL> SELECT
OWNER, TYPE_OID FROM DBA_TYPES
WHERE
TYPE_NAME LIKE 'ADDRESS%';
Step 8:
Connect to SITEB (Materialized View Site) as
the REPLICATOR user.
SQL> CONNECT replicator/...@SITEB
Step 9:
Assuming that your object IDs are
�XXXXXXXXXXXXXXXXXXXXX� and
�YYYYYYYYYYYYYYYYYYYYY.
SQL> CREATE OR
REPLACE TYPE address_book_type_object
OID
�XXXXXXXXXXXXXXXXXXXXX�
AS OBJECT (
id_address
NUMBER(1),
address
VARCHAR2(20));
Creating type
using OID
SQL> CREATE
TYPE address_book_nested_type
OID
�YYYYYYYYYYYYYYYYYYYYY�
AS TABLE OF
address_book_type_object;
CREATE
MATERIALIZED VIEW �FROM ..@...
Step 10: 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.
SQL> CREATE
MATERIALIZED VIEW address_book_mv
NESTED TABLE
address_obj STORE AS address_nested_mv
REFRESH FAST
AS
SELECT *
FROM
replicator.address_book@SITEA;
DBMS_MVIEW.REFRESH procedure
Step 11: 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.
SQL> EXECUTE
dbms_mview.refresh(�address_book_mv�,�F�);
Questions:
Q: What is a
data replica?
Q: What is the
difference between a materialized view and a
materialized view log?
Q: What is an
object ID?
Q: How do you
retrieve an object ID?
Q: How do you
use an object ID to create an object type? |