|
Types of Replication
Oracle's four basic types of replication. Starting from Oracle9 Read-only Snapshots are so
called Read-Only Materialized Views.
|
Replication Type
|
Description
|
|
Read-only materialized views
|
A master table is copied to one or more databases. Changes in
the master table are reflected in the snapshot tables whenever the snapshot
refreshes. The snapshot site determines the frequency of the refreshes; data is
pulled.
|
|
Updateable materialized views
|
Similar to read-only snapshots, except that the snapshot sites
are able to modify the data and send their changes back to the master. The
snapshot site determines the frequency of the refreshes and the frequency with
which updates are sent back to the master.
|
|
Multi-master replication
|
A table is copied to one or more databases, and each database
has the ability to insert, update, or delete records from it. Modifications are
pushed to the other database at an interval that the DBA sets for each
replication group. The highest theoretical frequency is once per second.
|
|
Procedural replication
|
A call to a packaged procedure or function is replicated to
one or more databases.
|
As you can see, these modes of replication are quite different,
and each is suited for specific kinds of uses. A single environment can utilize all
of these methods; they are not mutually exclusive.
Read-only snapshot sites
can be used to provide local access to remote master tables. Having a local snapshots
of the data improves query response time. Updates can only be issued against the
master table.
In a basic configuration, materialized views can provide read-only
access to the table data that originates from a master site or master materialized
view site. Applications can query data from read-only materialized views to avoid
network access to the master site, regardless of network availability. However,
applications throughout the system must access data at the master site to perform
data manipulation language changes (DML). The master tables and master materialized
views of read-only materialized views do not need to belong to a replication
group.
Read-only materialized views provide the following
benefits:
-
Eliminate the possibility of conflicts because they cannot be
updated.
-
Support complex materialized views. Examples of complex
materialized views are materialized views that contain set operations or a
CONNECT BY clause.
Example
In order to create one (or
many) read-only snapshot of the master Oracle database tables, the following steps
are necessary.
-
Master Site: Oracle
10.1.0.3, Solaris 9, SID=QUO3
-
Snapshot Site: Oracle
8.1.7.4, Solaris 8, SID=DIA1
Check TNSNAMES.ORA
-
On Master (Host=quorum)
DIA1.WORLD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = diamond)(PORT =
1521))
(CONNECT_DATA =
(SERVICE_NAME = DIA1)
(INSTANCE_NAME = DIA1)
(SRVR = DEDICATED)
)
)
DIA1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = diamond)(PORT =
1521))
(CONNECT_DATA =
(SERVICE_NAME = DIA1)
(INSTANCE_NAME = DIA1)
(SRVR = DEDICATED)
)
)
On Snapshot (Host=diamond)
QUO3.WORLD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = quorum)(PORT =
1523))
(CONNECT_DATA =
(SERVICE_NAME = QUO3)
(INSTANCE_NAME = QUO3)
(SRVR = DEDICATED)
)
)
QUO3 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = quorum)(PORT =
1523))
(CONNECT_DATA =
(SERVICE_NAME = QUO3)
(INSTANCE_NAME = QUO3)
(SRVR = DEDICATED)
)
)
Create DB Links
On Master (Host=quorum)
sqlplus scott/tiger@QUO3
CREATE DATABASE LINK DIA1 CONNECT TO scott IDENTIFIED BY tiger using
'DIA1';
Database link created.
On Snapshot (Host=diamond)
sqlplus scott/tiger@DIA1
CREATE DATABASE LINK QUO3 CONNECT TO scott IDENTIFIED BY tiger using
'QUO3';
Database link created.
desc emp@QUO3;
Name
Null? Type
----------------------------------------- --------
----------------------
EMPNO
NOT NULL NUMBER(4)
ENAME
VARCHAR2(10)
JOB
VARCHAR2(9)
MGR
NUMBER(4)
HIREDATE
DATE
SAL
NUMBER(7,2)
COMM
NUMBER(7,2)
DEPTNO
NUMBER(2)
Create Snapshot Log
For each table, which
should be replicated, a SNAPSHOT LOG must be created (as user, who owns the
table).
A materialized view log
(Snapshot Log) is a table at the materialized view's master site or master
materialized view site that records all of the DML changes to the master table or
master materialized view. A materialized view log is associated with a single master
table or master materialized view, and each of those has only one materialized view
log, regardless of how many materialized views refresh from the master. A fast
refresh of a materialized view is possible only if the materialized view's master has
a materialized view log. When a materialized view is fast refreshed, entries in
the materialized view's associated materialized view log that have appeared since the
materialized view was last refreshed are applied to the materialized view.
On Master (Host=quorum)
sqlplus scott/tiger@QUO3
DROP SNAPSHOT LOG ON emp;
CREATE SNAPSHOT LOG ON emp
TABLESPACE tab
STORAGE
(INITIAL 200K
NEXT 200K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0);
Materialized view log created.
Create Snapshot
A snapshot contains on the
remote site the data of the master table. All data changes are reflected in the
snapshot after a refresh of the snapshot (either triggered manually or
automatically).
On Snapshot (Host=diamond)
sqlplus scott/tiger@DIA1
CREATE SNAPSHOT emp
PCTFREE 15
STORAGE
(INITIAL 200K
NEXT 200K
PCTINCREASE 0)
TABLESPACE tab
USING INDEX
PCTFREE 0
STORAGE
(INITIAL 200K
NEXT 200K
PCTINCREASE 0)
TABLESPACE idx
REFRESH FORCE
START WITH SYSDATE NEXT SYSDATE+(1/1440) /* 60
SECONDS */
AS SELECT * FROM emp@QUO3;
Materialized view created.
Create Synonym
On Snapshot (Host=diamond)
sqlplus scott/tiger@DIA1
CREATE PUBLIC SYNONYM emp FOR scott.emp;
Synonym created.
Now, you can access the table emp locally which will be
automatically refreshed every 60 sec.
Refresh the Snapshot
The snapshot on the remote site must be refreshed regularily. This
can be done bullet either by hand after a substantial change on the master site or in
regular intervalls.
Manual Refresh
On Snapshot (Host=diamond)
sqlplus scott/tiger@DIA1
execute dbms_snapshot.refresh('scott.emp','F');
PL/SQL procedure successfully completed.
The first parameter is a list of snapshots to be refreshed. The
second describes the method, F stands for FAST refresh (only changes in the master
table are propagated, C stands for complete refresh.
There is also a dbms_snapshot.refresh_all routine. It
requires some more privileges.
execute dbms_snapshot.refresh_all;
Automatic Refresh
Automatic refresh is realized by parameters for a refresh group or
by the definition of the snapshot. In order to run periodoc jobs in the database (as
automatic refresh jobs), the ability to run SNP background jobs must be given.
Especially, in the file init<instance>.ora , located the parameter
job_queue_processes = 1
must be included (the default is 0) and the database must be
restarted! This parameter allows background processes to be executed in one job
queue.
Check Automatic Refresh
You may use the following query to check, if automatically refresh
works.
SELECT SUBSTR(job,1,4) "Job", SUBSTR(log_user,1,5)
"User",
SUBSTR(schema_user,1,5) "Schema",
SUBSTR(TO_CHAR(last_date,'DD.MM.YYYY HH24:MI'),1,16) "Last Date",
SUBSTR(TO_CHAR(next_date,'DD.MM.YYYY HH24:MI'),1,16) "Next Date",
SUBSTR(broken,1,2) "B", SUBSTR(failures,1,6) "Failed",
SUBSTR(what,1,20) "Command"
FROM dba_jobs;
Job User Schem Last
Date Next
Date B Failed Command
---- ----- ----- ---------------- ---------------- - ------
--------------------
2 SCOTT SCOTT 06.09.2005 15:05 06.09.2005 15:06 N
0 dbms_refresh.refresh
Drop Snapshots and Snapshot Logs
On Master (Host=quorum)
sqlplus scott/tiger@QUO3
spool drop_snapshot_logs.sql
select 'PROMPT Dropping Snapshot Log for '||MASTER||chr(10)
||'drop snapshot log on '||MASTER||';'
from USER_SNAPSHOT_LOGS;
spool off
@drop_snapshot_logs.sql
PROMPT Snapshot Logs Dropped
On Snapshot (Host=diamond)
sqlplus scott/tiger@DIA1
spool drop_snapshots.sql
select 'PROMPT Dropping Snapshot for '||NAME||chr(10)
||'drop snapshot '||NAME||';'
from USER_SNAPSHOTS;
@drop_snapshots.sql
PROMPT Snapshots dropped
Refresh Groups
If the snapshot must obey certain integrity rules, like
referential integrity, then the refresh of the snapshot tables must be synchronized.
This is achieved by creating refresh groups.
dbms_refresh.make(
name =>
'MY_GRP',
list =>
'emp,dept,bonus,salgrade',
next_date
=> SYSDATE,
interval
=> 'SYSDATE + (1/1440)', /* 60 seconds
*/
implicit_destroy => TRUE, /* delete the group if substracting
the last member */
lax
=> TRUE, /* delete from other group if
already
existing in a group */
rollback_seg => 'RB06'
);
commit;
Overview
You have already seen how to create and use read-only materialized
views. They offer the powerful ability to replicate data in tables across separate
databases. With multi-master replication, you can replicate more than just database
tables. You can replicate:
-
Tables
-
Indexes
-
Procedures, functions, and triggers
-
Packages
-
User-defined types (Oracle9i)
As always, there are plusses and minuses to using multi-master
replication.
The positive benefits of MMR include the following:
-
Replicates more objects, including user-defined objects.
-
Updates or modifies the objects being replicated. Adding a
column to a table at the master definition site can be replicated to other master
sites.
-
Replicates with any number of other databases. Any master site
can replicate with other master sites, updatable Mview sites, and read-only Mview
sites.
However, there are some downsides such as:
-
Potentially large network bandwidth requirements. Not only does
multi-master push and pull changes between sites, it also sends
acknowledgements and quite a bit of administrative data.
-
Reduced Performance. Complexity and robustness comes at a
price. MMR involves the use of triggers and procedures, and this can result in a
database performance hit. Depending on how much data you are replicating, this
performance hit can be substantial.
-
Significant increases in administration requirements.
When problems appear in the database, the DBA must insure that replication is not
the cause or that the cause is not replicated to other databases. Database
performance tuning and problem resolution becomes more complicated by an order of
magnitude.
-
Database changes require additional planning. Rolling out a
new version of an application can be much more difficult. Each new version will
require revisiting the design of the replication.
The considerations above should reinforce not to implement a
higher level of replication than you need. Multi-master replication is powerful, and
it is complicated to create and monitor the replication environment.
Concepts and
Terminology
A deferred transaction is a transaction that is queued for
delivery to one or more remote databases. If you use multi-master replication
with asynchronous propagation, Oracle creates deferred transactions for all local DML
activity against the replicated tables.
A replication group is a collection of one or more replicated
objects (typically tables) that are administrated together. Very generally
speaking, the objects in a given replication group are logically related; for
example, they are often the set of objects that a given application uses. A given
replication group can contain objects from multiple schema, and a given schema can
have objects in more than one replication group. However, any given object can be in
only one replication group.
The most significant property of replication groups is that all
objects in a given group are quiesced together. That is, DML activity is enabled and
disabled for all group members simultaneously.
Quiescence is the act of suspending DML activity for all tables
in a given replication group. This is required in order to perform certain
administrative tasks on objects in a replication group, such as altering a table. The
Oracle built-in package procedure call that quiesces a replication group is
DBMS_REPCAT.SUSPEND_MASTER_ACTIVITY.
The master definition site of a replication group is the
database instance from which the group is administered. This site is usually, but
not necessarily, the site at which the replication group was originally
created.
A master site is a site that is participating in one or more
replication groups but is not the master definition site.
Replication support refers to the packages and triggers that
Oracle creates in order to propagate changes to replicated objects, to detect and
resolve conflicts, and so on.
When Oracle propagates an update to destination tables, it expects
the current data for the row at the destination to match the data at the originating
site prior to the update. If the data is not the same, an update conflict results.
Similarly, if an insert fails because of a primary key violation (i.e., a unique
constraint violation) the result is a uniqueness conflict or violation. And, if the
target row of a delete does not exist at the destination site, a delete conflict
results.
Unless you are propagating changes among master sites
synchronously, there is a delay between the time a DML change is applied at the
originating database and the time the transaction reaches the destination databases.
This lag is known as propagation latency.
Replication Users
-
The Administrator maintains the master group, adds or
removes objects, etc.
-
The Propagator is responsible for pushing items in the
deferred transaction queue to all other master sites.
-
The Receiver takes items that have arrived in the
deferred transaction queue and applies them to the local objects.
Oracle recommends that you use the Replication Administrator to
perform all three tasks when establishing your replication environment. For
additional security, you can establish a separate user as the receiver and
propagator.
-
A master site can have only one propagator.
-
A propagator has the "execute any procedure" grant.
-
A master site can have multiple receivers.
-
A master group can have only one receiver per master
site.
-
A receiver is not granted "execute any procedure".
Next, we illustrate how to set up both a master site and a
materialized view replication site using the replication management API.
Before you build the replication environment, you need to set up
the sites that will participate in the replication environment. As illustrated there
are separate processes for setting up a master site versus setting up a materialized
view site.
We use the following databases:
-
CEL1.WORLD
-
CEL2.WORLD
-
REP1.WORLD
-
REP2.WORLD
Notice that REP1.WORLD and REP2.WORLD are materialized views based on the CEL1.WORLD. The arrows in the Figure represents database
links.
Important Note !
|
If you get an error when creating Replication Groups
such as:
ERROR at line 1:
ORA-04052: error occurred when looking up remote object
REPADMIN.SYS@CEL1.WORLD
ORA-00604: error occurred at recursive SQL level 2
ORA-12154: TNS:could not resolve the connect identifier specified
then, connect directly to the Database as
follows:
export ORACLE_SID=CEL1
sqlplus repadmin/repadmin
Now create the Replication Group.
|
Create SCOTT Schemas
We use the simple EMP/DEPT schema from SCOTT/TIGER.
sqlplus scott/tiger@CEL1.WORLD
start demobld.sql
ALTER TABLE emp ADD (CONSTRAINT pk_emp PRIMARY KEY (empno) ENABLE);
ALTER TABLE dept ADD (CONSTRAINT pk_dept PRIMARY KEY (deptno) ENABLE);
ALTER TABLE emp ADD (
CONSTRAINT fk_emp_dept FOREIGN KEY (deptno)
REFERENCES dept (deptno) ENABLE);
sqlplus scott/tiger@CEL2.WORLD
start demobld.sql
ALTER TABLE emp ADD (CONSTRAINT pk_emp PRIMARY KEY (empno) ENABLE);
ALTER TABLE dept ADD (CONSTRAINT pk_dept PRIMARY KEY (deptno) ENABLE);
ALTER TABLE emp ADD (
CONSTRAINT fk_emp_dept FOREIGN KEY (deptno)
REFERENCES dept (deptno) ENABLE);
The following sections contain step-by-step instructions for
setting up the master sites in the sample replication environment: CEL1.WORLD and CEL2.WORLD. Before you
set up the master sites, configure your network and Oracle Net so that all three
databases can communicate with each other.
Create Password Files
If the DBA wants to start up an Oracle instance there must be a
way for Oracle to authenticate this DBA. That is if (s)he is allowed to do so.
Obviously, his password can not be stored in the database, because Oracle can not
access the database if the instance has not been started up. Therefore, the
authentication of the DBA must happen outside of the database.
The init parameter remote_login_passwordfile specifies if a password file is
used to authenticate the DBA or not. If it set either to shared or exclusive a
password file will be used.
Default location and file name
The default location for the password file is:
Deleting a password file
If password file authentication is no longer needed, the password
file can be deleted and the init parameter remote_login_passwordfile set to none.
Password file state
If a password file is shared or exclusive is also stored in the
password file. After its creation, the state is shared. The state can be changed by
setting remote_login_passwordfile and starting
the database. That is, the database overwrites the state in the password file when it
is started up. A password file whose state is shared can
only contain SYS.
Creating a password file
Password files are created with the orapwd tool.
orapwd file=orapwCEL1 password=manager entries=5 force=y
Create a Symbolic Link from $ORACLE_HOME/dbs to the Password.
lrwxrwxrwx 1 oracle dba 39 2005-09-13 16:55 initCEL1.ora ->
/home/oracle/config/10.1.0/initCEL1.ora
lrwxrwxrwx 1 oracle dba 39 2005-09-14 11:22 initCEL2.ora ->
/home/oracle/config/10.1.0/initCEL2.ora
lrwxrwxrwx 1 oracle dba 39 2005-09-14 08:20 initREP1.ora ->
/home/oracle/config/10.1.0/initREP1.ora
lrwxrwxrwx 1 oracle dba 39 2005-09-14 11:22 initREP2.ora ->
/home/oracle/config/10.1.0/initREP2.ora
lrwxrwxrwx 1 oracle dba 36 2005-09-22 11:22 orapwCEL1 ->
/home/oracle/config/10.1.0/orapwCEL1
lrwxrwxrwx 1 oracle dba 36 2005-09-22 11:22 orapwCEL2 ->
/home/oracle/config/10.1.0/orapwCEL2
lrwxrwxrwx 1 oracle dba 36 2005-09-22 11:22 orapwREP1 ->
/home/oracle/config/10.1.0/orapwREP1
lrwxrwxrwx 1 oracle dba 36 2005-09-22 11:22 orapwREP2 ->
/home/oracle/config/10.1.0/orapwREP2
Adding Users to the password file
Users are added to the password file when they're granted the
SYSDBA or SYSOPER privilege.
select * from v$pwfile_users;
USERNAME
SYSDB SYSOP
------------------------------ ----- -----
SYS
TRUE TRUE
grant SYSDBA to scott;
Grant succeeded.
select * from v$pwfile_users;
USERNAME
SYSDB SYSOP
------------------------------ ----- -----
SYS
TRUE TRUE
SCOTT
TRUE FALSE
Setup Oracle Network
The Network must be setup for all Sites:
# Akadia AG, Fichtenweg 10, CH-3672
Oberdiessbach
listener.ora
# --------------------------------------------------------------------------
# File: listener.ora
#
# Autor: Martin Zahn Akadia AG
#
# Purpose: Configuration file for Net Listener
#
# Location: $TNS_ADMIN
#
# Certified: Oracle 10.1.0.4 on Gentoo Linux (2004.0)
# --------------------------------------------------------------------------
LSNR101 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = cellar)(PORT =
1521))
)
)
SID_LIST_LSNR101 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = CEL1.WORLD)
(ORACLE_HOME = /opt/oracle/product/10.1.0)
(SID_NAME = CEL1)
)
(SID_DESC =
(GLOBAL_DBNAME = CEL2.WORLD)
(ORACLE_HOME = /opt/oracle/product/10.1.0)
(SID_NAME = CEL2)
)
(SID_DESC =
(GLOBAL_DBNAME = REP1.WORLD)
(ORACLE_HOME = /opt/oracle/product/10.1.0)
(SID_NAME = REP1)
)
(SID_DESC =
(GLOBAL_DBNAME = REP2.WORLD)
(ORACLE_HOME = /opt/oracle/product/10.1.0)
(SID_NAME = REP2)
)
)
USE_PLUG_AND_PLAY_LSNR101 = OFF
STARTUP_WAIT_TIME_LSNR101 = 0
LOG_DIRECTORY_LSNR101 = /home/oracle/config/10.1.0
TRACE_FILE_LSNR101 = listener_LSNR101.trc
CONNECT_TIMEOUT_LSNR101 = 10
TRACE_LEVEL_LSNR101 = OFF
SAVE_CONFIG_ON_STOP_LISTENER = OFF
# Akadia AG, Fichtenweg 10, CH-3672
Oberdiessbach
tnsnames.ora
#
--------------------------------------------------------------------------
# File: tnsnames.ora
#
# Autor: Martin Zahn Akadia AG
#
# Purpose: Configuration File for all Net Clients
#
# Location: $TNS_ADMIN
#
# Certified: Oracle 10.1.0.2 on Gentoo Linux (2004.0)
# --------------------------------------------------------------------------
#
CEL1.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = cellar)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = CEL1.WORLD)
)
)
CEL1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = cellar)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = CEL1)
)
)
CEL2.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = cellar)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = CEL2.WORLD)
)
)
CEL2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = cellar)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = CEL2)
)
)
REP1.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = cellar)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = REP1.WORLD)
)
)
REP1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = cellar)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = REP1)
)
)
REP2.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = cellar)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = REP2.WORLD)
)
)
REP2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = cellar)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = REP2)
)
)
# Akadia AG, Fichtenweg 10, CH-3672
Oberdiessbach
sqlnet.ora
#
--------------------------------------------------------------------------
# File: sqlnet.ora
#
# Autor: Martin Zahn Akadia AG
#
# Purpose: Configuration File for all Net8 Clients
#
# Location: $TNS_ADMIN
#
# Certified: Oracle 10.1.0.2 on Gentoo Linux (2004.0)
# --------------------------------------------------------------------------
#
TRACE_LEVEL_CLIENT = OFF
NAMES.DIRECTORY_PATH= (TNSNAMES)
SQLNET.CRYPTO_SEED = 4fhfguweotcadsfdsafjkdsfqp5f201p45mxskdlfdasf
AUTOMATIC_IPC = ON
NAMES.DEFAULT_DOMAIN = WORLD
BEQUEATH_DETACH = NO
SQLNET.EXPIRE_TIME = 10
NAME.DEFAULT_ZONE = WORLD
USE_DEDICATED_SERVER = ON
Setup INIT.ORA Parameters
global_names = TRUE
db_name = CEL1
db_domain = WORLD
instance_name = CEL1
service_names = CEL1.WORLD
remote_login_passwordfile = exclusive
job_queue_processes = 10
parallel_min_servers = 2
parallel_max_servers = 10
The following Figure shows the needed Steps to setup the users at
the Master Sites.
The next steps shows how to create the following Users and
Database Links on the two Master Sites. The commands for CEL2.WORLD are not shown, these are the same as for CEL1.WORLD.
(1) Connect at Master Site CEL1.WORLD
CONNECT sys/manager@CEL1.WORLD as sysdba;
(2) Setup the Replication Administrator
The Replication Administrator on the Master has the following
Privileges
CREATE USER repadmin IDENTIFIED BY repadmin
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 0 ON system
PROFILE default;
GRANT CONNECT,RESOURCE TO repadmin;
Authorise the Replication Administrator to administer replication
groups and schemas.
BEGIN
DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (
username => 'repadmin');
END;
/
This procedure grants the necessary privileges to the Replication
Administrator to administer any replication groups at the current site.
(3) Grant create, lock and select to administrator
GRANT
LOCK ANY TABLE,
COMMENT ANY TABLE,
CREATE SESSION,
SELECT ANY TABLE,
CREATE TABLE,
CREATE PROCEDURE,
CREATE SEQUENCE,
CREATE TRIGGER,
CREATE VIEW,
CREATE SYNONYM,
ALTER SESSION,
CREATE MATERIALIZED VIEW,
CREATE DATABASE LINK,
SELECT ANY DICTIONARY
TO repadmin;
(4) Register Propagator
Grant propagate privileges to the Replication Administrator, to
propagate changes to remote sites. The propagator is responsible for propagating the
deferred transaction queue to other master sites.
BEGIN
DBMS_DEFER_SYS.REGISTER_PROPAGATOR (
username=>'repadmin');
END;
/
This procedure registers the specified user as the propagator for
the local database. It also grants the following privileges to the specified user (so
that the user can create wrappers):
CREATE SESSION
CREATE PROCEDURE
CREATE DATABASE LINK
EXECUTE ANY PROCEDURE
(5) Register Receiver
Register receiver, the receiver receives the propagated deferred
transactions sent by the propagator from other master sites.
BEGIN
DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
username => 'repadmin',
privilege_type => 'receiver',
list_of_gnames => NULL);
END;
/
This procedure assigns proxy materialized view administrator or
receiver privileges at the master site or master materialized view site for use with
remote sites. This procedure grants only the necessary privileges to the proxy
materialized view administrator or receiver.
|
privilege_type
|
Specifies the privilege type you are assigning. Use the
following values for to define your privilege_type:
-
receiver for
receiver privileges.
-
proxy_snapadmin for
proxy materialized view administration privileges
|
|
list_of_gnames
|
Comma-separated list of replication groups you want a user
registered for receiver privileges. There must be no spaces between entries in
the list. If you set list_of_gnames to NULL, then the user is registered for all
replication groups, even replication groups that are not yet known when this
procedure is called.
|
(6) Schedule a job to delete successfully replicated transactions on
Master
In order to keep the size of the deferred transaction queue in
check, you should purge successfully completed deferred transactions. The
SCHEDULE_PURGE procedure automates the purge process for you. You must
execute this procedure as the replication administrator.
CONNECT REPADMIN/REPADMIN@CEL1.WORLD
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PURGE (
next_date => sysdate,
interval => 'sysdate+1/24/30',
delay_seconds =>
0);
END;
/
(7a) Setup Proxy Materialized View Administrator
The proxy materialized view administrator performs tasks at the
target master site on behalf of the materialized view administrator at the
materialized view site.
CONNECT sys/manager@CEL1.WORLD as sysdba;
CREATE USER proxyadmin IDENTIFIED BY proxyadmin
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 0 ON system
PROFILE default;
GRANT CONNECT,RESOURCE TO proxyadmin;
Register Proxy Materialized View Administrator
BEGIN
DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
username => 'proxyadmin',
privilege_type => 'proxy_snapadmin',
list_of_gnames => NULL);
END;
/
GRANT
CREATE SESSION,
SELECT ANY TABLE,
SELECT_CATALOG_ROLE
TO proxyadmin;
(7b) Setup Proxy Refresher
The proxy refresher performs tasks at the master site on behalf
of the refresher at the materialized view site.
CREATE USER proxyrefresher IDENTIFIED BY proxyrefresher
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 0 ON system
PROFILE default;
GRANT CREATE SESSION TO proxyrefresher;
GRANT SELECT ANY TABLE TO proxyrefresher;
********** Now, do exactly the same for the
Master Site CEL2.WORLD (Not shown here). ***********
(8) Create the DB-Links between the master sites
The database links provide the necessary distributed mechanisms to
allow the different replication sites to replicate data among themselves. Before
you create any private database links, you must create the public database links that
each private database link will use. You then must create a database link between
all replication administrators at each of the master sites that you have set
up.
CONNECT sys/manager@CEL1.WORLD as
sysdba;
DROP PUBLIC DATABASE LINK CEL2.WORLD;
CREATE PUBLIC DATABASE LINK CEL2.WORLD USING
'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(COMMUNITY=TCP)(PROTOCOL=TCP)(Host=cellar)(Port=1521)))(CONNECT_DATA=(SID=CEL2)))';
CONNECT repadmin/repadmin@CEL1.WORLD;
CREATE DATABASE LINK CEL2.WORLD CONNECT TO repadmin
IDENTIFIED BY repadmin;
CONNECT sys/manager@CEL2.WORLD as sysdba;
DROP PUBLIC DATABASE LINK CEL1.WORLD;
CREATE PUBLIC DATABASE LINK CEL1.WORLD USING
'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(COMMUNITY=TCP)(PROTOCOL=TCP)(Host=cellar)(Port=1521)))(CONNECT_DATA=(SID=CEL1)))';
CONNECT repadmin/repadmin@CEL2.WORLD;
CREATE DATABASE LINK CEL1.WORLD CONNECT TO repadmin
IDENTIFIED BY repadmin;
(9) Define a schedule for each database link
Create a scheduled link by defining a database link when you
execute the SCHEDULE_PUSH procedure. The scheduled link determines how often your
deferred transaction queue is propagated to each of the other master sites. You need
to execute the SCHEDULE_PUSH procedure for each database link. The database link is
specified in the destination parameter of the SCHEDULE_PUSH procedure.
Even when using Oracle's asynchronous replication mechanisms, you
can configure a scheduled link to simulate continuous, real-time replication. The
scheduled links in this example simulate continuous replication.
The following example schedules a periodic push every minute. Make sure that the
refresh rate is not smalled than the time needed to refresh.
CONNECT repadmin/repadmin@CEL1.WORLD
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PUSH (
destination => 'CEL2.WORLD',
interval => 'SYSDATE + (1/24/60)',
next_date => SYSDATE,
stop_on_error =>
FALSE,
parallelism => 1,
delay_seconds => 0);
END;
/
CONNECT repadmin/repadmin@CEL2.WORLD
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PUSH (
destination => 'CEL1.WORLD',
interval => 'SYSDATE + (1/24/60)',
next_date => SYSDATE,
stop_on_error =>
FALSE,
parallelism => 1,
delay_seconds => 0);
END;
/
Scheduling Continuous Pushes
Even when using Oracle's asynchronous replication mechanisms, you
can configure a scheduled link to simulate continuous, real-time replication. To do
so, use the DBMS_DEFER_SYS.SCHEDULE_PUSH procedure and specify the following
settings:
|
Parameter
|
Value
|
|
delay_seconds
|
1200
|
|
interval
|
Lower than the delay_seconds
setting
|
|
parallelism
|
1 or higher
|
|
execution_seconds
|
Higher than the delay_seconds
setting
|
With this configuration, Oracle continues to push transactions
that enter the deferred transaction queue for the duration of the entire interval. If
the deferred transaction queue has no transactions to propagate for the amount of
time specified by the delay_seconds parameter, then
Oracle releases the resources used by the job and starts fresh when the next job
queue process becomes available.
Important Note !
|
We observed, that the Database cannot be shutdown with
SHUTDOWN IMMEDIATE with these settings. The Database can only be shutdown with
SHUTDOWN ABORT, therefore we do NOT recommend to use Continuous Pushes.
|
The following is an example that simulates continual
pushes:
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PUSH (
destination => 'CEL2.WORLD',
interval => 'SYSDATE + (1/144)',
next_date => SYSDATE,
stop_on_error =>
FALSE,
parallelism => 1,
execution_seconds =>
1500,
delay_seconds => 1200);
END;
/
After you have set up your master sites, you are ready to build a
master group.
(1) Create Schema at Master Sites
It is assumed that the SCOTT schema exists at CEL1.WORLD and
CEL2.WORLD.
(2) Create the Master Group
When you add an object to your master group or perform other
replication administrative tasks, you reference the master group name defined during
this step. This step must be completed by the replication administrator.
CONNECT repadmin/repadmin@CEL1.WORLD
BEGIN
DBMS_REPCAT.DROP_MASTER_REPGROUP (
gname => 'REPG');
END;
/
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPGROUP (
gname => 'REPG');
END;
/
(3) Add objects to the Replication
Group on Master
Now, add the replicated Objets (TABLE, INDEX, SYNONYM, TRIGGER,
VIEW, PROCEDURE, FUNCTION, PACKAGE, and PACKAGE BODY) to the Replication
Group.
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPOBJECT (
gname => 'REPG',
type => 'TABLE',
oname => 'EMP',
sname => 'SCOTT',
use_existing_object => TRUE,
copy_rows => FALSE);
END;
/
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPOBJECT (
gname => 'REPG',
type => 'TABLE',
oname => 'DEPT',
sname => 'SCOTT',
use_existing_object => TRUE,
copy_rows => FALSE);
END;
/
If Your Tables Don’t Have a Primary Key.
The DBMS_REPCAT.SET_COLUMNS procedure enables you to use an
alternate column or group of columns, instead of the primary key, to determine which
columns of a table to compare when using row-level replication. You must call this
procedure from the master definition site.
BEGIN
DBMS_REPCAT.SET_COLUMNS (
sname => 'owner_master',
oname => 'DEPT',
column_list => '"COL1","COL2","COL3","COL4"');
END;
(4) Add Additional Master Site CEL2.WORLD
After you have defined your master group at the master
definition site = CEL1.WORLD (the site where the
master group was created becomes the master definition site by default), you can
define the other sites that will participate in the replication environment.
In this example, the use_existing_objects parameter in the ADD_MASTER_DATABASE procedure is set to TRUE because it is
assumed that the SCOTT schema already exists at all master sites. In other words, it
is assumed that the objects in the SCOTT schema are precreated at all master sites.
Also, the copy_rows parameter is set to FALSE because
it is assumed that the identical data is stored in the tables at each master
site.
CONNECT repadmin/repadmin@CEL1.WORLD
If you get an error when connection over SQL*Net for the DBMS_REPCAT.ADD_MASTER_DATABASE
command such as:
ERROR at line 1:
ORA-04052: error occurred when looking up remote object
REPADMIN.SYS@CEL1.WORLD
ORA-00604: error occurred at recursive SQL level 2
ORA-12154: TNS:could not resolve the connect identifier specified
then, connect directly to the Database:
export ORACLE_SID=CEL1
sqlplus repadmin/repadmin
BEGIN
DBMS_REPCAT.ADD_MASTER_DATABASE (
gname => 'REPG',
master => 'CEL2.WORLD',
use_existing_objects => TRUE,
copy_rows => FALSE,
propagation_mode => 'ASYNCHRONOUS');
END;
/
Check that Master Site CEL2.WORLD is
now in the Replication Group 'REPG'.
Wait until CEL2.WORLD appears in the
DBA_REPSITES view before continuing. Execute the following
SELECT statement in another SQL*Plus session to make sure that CEL2.WORLD has appeared:
SELECT DBLINK FROM DBA_REPSITES WHERE GNAME = 'REPG';
DBLINK
----------------------------------------------
CEL1.WORLD
CEL2.WORLD
(5) If conflicts are possible, then configure conflict
resolution methods.
The most common data conflict occurs when the same row at two or
more different sites are updated at nearly the same time, or before the deferred
transaction from one site was successfully propagated to the other sites.
Before you define overwrite or discard conflict resolution
methods, quiesce the master group that contains the table to which you want to apply
the conflict resolution method. In a single master replication environment, quiescing
the master group might not be required
BEGIN
DBMS_REPCAT.SUSPEND_MASTER_ACTIVITY (
gname => 'REPG');
END;
/
All Oracle conflict resolution methods are based on logical column
groupings called column groups.
BEGIN
DBMS_REPCAT.MAKE_COLUMN_GROUP (
sname => 'SCOTT',
oname => 'EMP',
column_group => 'EMPCG',
list_of_column_names =>
'ename,job,mgr,hiredate,sal,comm,deptno');
END;
/
This example creates an OVERWRITE conflict resolution
method.
BEGIN
DBMS_REPCAT.ADD_UPDATE_RESOLUTION (
sname => 'SCOTT',
oname => 'EMP',
column_group => 'EMPCG',
sequence_no => 1,
method => 'DISCARD',
parameter_column_name =>
'ename,job,mgr,hiredate,sal,comm,deptno');
END;
/
(6) Activate Replication Support for each added Table on
Master
Replication support generates the triggers and packages needed to
support replication for a specified object.
CONNECT repadmin/repadmin@CEL1.WORLD
BEGIN
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT (
sname => 'SCOTT',
oname => 'EMP',
type => 'TABLE',
min_communication => TRUE);
END;
/
BEGIN
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT (
sname => 'SCOTT',
oname => 'DEPT',
type => 'TABLE',
min_communication => TRUE);
END;
/
|
min_communication
|
Set to false if any master site is running Oracle7 release
7.3.
Set to true when you want propagation of new and old values to be
minimized. The default is true.
|
(7) Start the Replication on the Master
We are now all set up and ready to replicate, so let’s do
it. From the master database, start the replication process (track activity on the
REPG objects).
CONNECT repadmin/repadmin@CEL1.WORLD
You should wait until the DBA_REPCATLOG view is empty
before resuming master activity.
SELECT COUNT(*) FROM DBA_REPCATLOG WHERE GNAME = 'REPG';
BEGIN
DBMS_REPCAT.RESUME_MASTER_ACTIVITY (
gname => 'REPG');
END;
/
The master site is now waiting for the snapshot site to begin
replication. As changes are made to the master tables, they will be propagated as
required.
The view dba_repgroup can be used to check the status of
the replication groups that you create. After you have created the replication groups
and generated the replication support for various tables within that group, you
should query the dba_repgroup table to insure that REPG status field is set to
"Normal".
select sname, master, status from dba_repgroup;
SNAME
M STATUS
------------------------------ - ---------
REPG
Y NORMAL
The following Figure shows the needed Steps to setup the users at
the Materialized View Sites.
The next steps shows how to create the following Users and
Database Links on the two Materialized View Sites. The commands for REP2.WORLD are not shown, these are the same as for REP1.WORLD.
(1) Connect as system at Materialized View Site REP1.WORLD
CONNECT sys/manager@REP1.WORLD as
sysdba;
(2) Create Materialized View Site Users
Setup the Materialized View Administrator
DROP USER mviewadmin CASCADE;
CREATE USER mviewadmin IDENTIFIED BY mviewadmin
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 0 ON system
PROFILE default;
GRANT CONNECT,RESOURCE TO mviewadmin;
Authorise the Materialized View Administrator to administer
replication groups and schemas.
BEGIN
DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (
username => 'mviewadmin');
END;
/
Grant create,lock and select to Materialized View
Administrator
GRANT
LOCK ANY TABLE,
COMMENT ANY TABLE,
CREATE SESSION,
SELECT ANY TABLE,
CREATE TABLE,
CREATE PROCEDURE,
CREATE SEQUENCE,
CREATE TRIGGER,
CREATE VIEW,
CREATE SYNONYM,
ALTER SESSION,
CREATE MATERIALIZED VIEW,
CREATE DATABASE LINK,
SELECT ANY DICTIONARY
TO mviewadmin;
Create Materialized View Propagator
The propagator is responsible for propagating the deferred
transaction queue to the target master site.
DROP USER propagator CASCADE;
CREATE USER propagator IDENTIFIED BY propagator
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 0 ON system
PROFILE default;
GRANT CONNECT,RESOURCE TO propagator;
Grant privs to the Materialized View Propagator, to propagate
changes to remote sites
BEGIN
DBMS_DEFER_SYS.REGISTER_PROPAGATOR (
username => 'propagator');
END;
/
This procedure registers the specified user as the propagator for
the local database. It also grants the following privileges to the specified user (so
that the user can create wrappers):
-
CREATE SESSION
-
CREATE PROCEDURE
-
CREATE DATABASE
LINK
-
EXECUTE ANY
PROCEDURE
Create the refresher
The refresher is responsible for "pulling" changes made to the
replicated tables at the target master site to the materialized view site. This user
refreshes one or more materialized views. If you want the mviewadmin user to be the
refresher, then this step is not required. The receiver is necessary only if the site
will function as a master materialized view site for other materialized views
sites.
Register Receiver to Materialized View Administrator
BEGIN
DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
username => 'mviewadmin',
privilege_type => 'receiver',
list_of_gnames => NULL);
END;
/
(3) Setup Database Links to Master(s)
Create Public Database Link
CONNECT sys/manager@REP1.WORLD as
sysdba;
DROP PUBLIC DATABASE LINK CEL1.WORLD;
CREATE PUBLIC DATABASE LINK CEL1.WORLD USING
'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(COMMUNITY=TCP)(PROTOCOL=TCP)(Host=cellar)(Port=1521)))(CONNECT_DATA=(SID=CEL1)))';
Create the materialized view administrator database link.
You need to create a database link from the materialized view
administrator at the materialized view site to the proxy materialized view
administrator at the master site.
CONNECT mviewadmin/mviewadmin@REP1.WORLD;
DROP DATABASE LINK CEL1.WORLD;
CREATE DATABASE LINK CEL1.WORLD
CONNECT TO proxyadmin
IDENTIFIED BY proxyadmin
USING 'CEL1.WORLD';
Create the propagator/receiver database link.
You need to create a database link from the propagator at the
materialized view site to the receiver at the master site. The receiver was defined
when you created the master site.
CONNECT propagator/propagator@REP1.WORLD
DROP DATABASE LINK CEL1.WORLD;
CREATE DATABASE LINK CEL1.WORLD
CONNECT TO repadmin
IDENTIFIED BY repadmin
USING 'CEL1.WORLD';
(4) Schedule Purge at Materialized View Site (Optional)
In order to keep the size of the deferred transaction queue in
check, you should purge successfully completed deferred transactions. The
SCHEDULE_PURGE procedure automates the purge process for you. If your
materialized view site only contains "read-only" materialized views, then you do not
need to execute this procedure.
CONNECT mviewadmin/mviewadmin@REP1.WORLD
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PURGE (
next_date => SYSDATE,
interval => 'SYSDATE + 1/24',
delay_seconds => 0,
rollback_segment => '');
END;
/
(5 ) Schedule Push at Materialized View site (Optional)
If the materialized view site has a constant connection to its
master site, then you optionally can schedule push at the materialized view sites.
If the materialized view site is disconnected from its master site for extended
periods of time, then it is typically better not to schedule push and refresh on
demand, which pushes changes to the master site.
CONNECT mviewadmin/mviewadmin@REP1.WORLD
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PUSH (
destination => 'CEL1.WORLD',
interval => 'SYSDATE + 1/144',
next_date => SYSDATE,
stop_on_error => FALSE,
delay_seconds => 0,
parallelism => 0);
END;
/
(6) Create the proxy materialized view administrator at Materialized
View site (Optional)
The proxy materialized view administrator performs tasks at the
target master materialized view site on behalf of the materialized view administrator
at the materialized view sites based on this materialized view site. This user is not
required if the site will not function as a master materialized view site for other
materialized view sites.
In our example we do not need this step.
********** Now, do exactly the same for the
Materialized View Site REP2 (Not shown here). ***********
The following Figure shows the needed Steps to setup the
Materialized View Group at the Materialized View Sites.
(1) Create Materialized View Logs on Master
When DML changes are made to the master table's data, Oracle
stores rows describing those changes in the materialized view log and then uses the
materialized view log to refresh materialized views based on the master table. This
process is called an incremental or fast refresh.
Without a materialized view log, Oracle must reexecute the
materialized view query to refresh the materialized view. This process is called a
complete refresh. Usually, a fast refresh takes less time than a complete
refresh.
A materialized view log is located in the master database in the
same schema as the master table. A master table can have only one materialized view
log defined on it.
CONNECT scott/tiger@CEL1.WORLD
CREATE MATERIALIZED VIEW LOG ON emp
TABLESPACE tab;
CREATE MATERIALIZED VIEW LOG ON dept
TABLESPACE tab;
(2) Create the Replicated Schema and its Database Link
Before building your materialized view group, you must make sure
that the replicated schema exists at the remote materialized view site and that the
necessary database links have been created.
In this example, if the SCOTT schema does not exist, then create
the schema.
CONNECT sys/manager@REP1.WORLD as
sysdba;
GRANT
CREATE SESSION,
CREATE TABLE,
CREATE PROCEDURE,
CREATE SEQUENCE,
CREATE TRIGGER,
CREATE VIEW,
CREATE SYNONYM,
ALTER SESSION,
CREATE MATERIALIZED VIEW,
ALTER ANY MATERIALIZED VIEW,
CREATE DATABASE LINK
TO SCOTT;
CONNECT scott/tiger@REP1.WORLD;
DROP DATABASE LINK CEL1.WORLD;
CREATE DATABASE LINK CEL1.WORLD
CONNECT TO proxyrefresher IDENTIFIED BY proxyrefresher
USING 'CEL1.WORLD';
(3) Create Materialized View Group
Now create a new, empty materialized view group in your slave
database. CREATE_MVIEW_REPGROUP automatically calls
REGISTER_MIEW_REPGROUP, but ignores any errors that may have happened
during registration.
CONNECT mviewadmin/mviewadmin@REP1.WORLD;
If you get an error when connection over SQL*Net for the DBMS_REPCAT.CREATE_MVIEW_REPGROUP
command such as:
ERROR at line 1:
ORA-04052: error occurred when looking up remote object
PROXYADMIN.SYS@CEL1.WORLD
ORA-00604: error occurred at recursive SQL level 2
ORA-12154: TNS:could not resolve the connect identifier specified
then, connect directly to the Database:
export ORACLE_SID=REP1
sqlplus mviewadmin/mviewadmin
BEGIN
DBMS_REPCAT.CREATE_MVIEW_REPGROUP (
gname => 'REPG',
master => 'CEL1.WORLD',
propagation_mode => 'ASYNCHRONOUS');
END;
/
|
gname
|
Name of the replication group. This group must exist at the
specified master site or master materialized view site.
|
|
master
|
Fully qualified database name of the database in the
replication environment to use as the master site or master materialized view
site.
|
|
propagation_mode
|
Method of propagation for all updatable materialized views in
the replication group. Acceptable values are synchronous and asynchronous.
|
(4) Create a Refresh Group
Now we must create a refresh group and the time interval used to determine when the
members of this group should be refreshed.
CONNECT mviewadmin/mviewadmin@REP1.WORLD;
BEGIN
DBMS_REFRESH.MAKE (
name => 'REVG',
list => '',
next_date => SYSDATE,
interval => 'SYSDATE +
1/1440',
implicit_destroy => FALSE,
rollback_seg => '',
push_deferred_rpc => TRUE,
refresh_after_errors =>
FALSE);
END;
/
|
name
|
Unique name used to identify the refresh group. Refresh groups
must follow the same naming conventions as tables.
|
|
list
|
Comma-separated list of snapshots that you want to refresh.
(Synonyms are not supported.) These snapshots can be located in different schemas
and have different master tables; however, all of the listed snapshots must be in
your current database.
|
|
implicit_destroy
|
Set this to TRUE if you want to delete the
refresh group automatically when it no longer contains any members.
|
|
push_deferred_rpc
|
Used by updatable snapshots only. Use the default value,
TRUE, if you want to push changes from the snapshot to its
associated master before refreshing the snapshot. Otherwise, these changes may
appear to be temporarily lost.
|
|
refresh_after_errors
|
Used by updatable snapshots only. Set this to 0 if you want
the refresh to proceed even if there are outstanding conflicts logged in the
DEFERROR view for the snapshot's master.
|
(5) Add Objects to the Materialized View Group
Now create all materialized view. - The word "snapshot" is synonymous with
"materialized view".
export ORACLE_SID=REP1
sqlplus scott/tiger
DROP MATERIALIZED VIEW emp;
CREATE MATERIALIZED VIEW emp
TABLESPACE tab
NOCACHE
NOPARALLEL
USING INDEX TABLESPACE idx
REFRESH FAST
WITH PRIMARY KEY
USING DEFAULT LOCAL ROLLBACK SEGMENT
DISABLE QUERY REWRITE
AS
SELECT * FROM scott.emp@CEL1.WORLD;
DROP MATERIALIZED VIEW dept;
CREATE MATERIALIZED VIEW dept
TABLESPACE tab
NOCACHE
NOPARALLEL
USING INDEX TABLESPACE idx
REFRESH FAST
WITH PRIMARY KEY
USING DEFAULT LOCAL ROLLBACK SEGMENT
DISABLE QUERY REWRITE
AS
SELECT * FROM scott.dept@CEL1.WORLD;
EXIT;
Add the materialized views to the Materialized View Group.
export ORACLE_SID=REP1
sqlplus mviewadmin/mviewadmin
BEGIN
DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
gname => 'REPG',
sname => 'SCOTT',
oname => 'EMP',
type => 'SNAPSHOT',
min_communication => TRUE);
END;
/
BEGIN
DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
gname => 'REPG',
sname => 'SCOTT',
oname => 'DEPT',
type => 'SNAPSHOT',
min_communication => TRUE);
END;
/
(6) Add Objects to the Refresh Group
Add the materialized views to the refresh group.
BEGIN
DBMS_REFRESH.ADD (
name => 'REVG',
list => 'SCOTT.EMP',
lax => TRUE);
END;
/
BEGIN
DBMS_REFRESH.ADD (
name => 'REVG',
list => 'SCOTT.DEPT',
lax => TRUE);
END;
/
|
lax
|
A materialized view can belong to only one refresh group at a
time. If you are moving a materialized view from one group to another, then you
must set the lax flag to true to succeed. Oracle then
automatically removes the materialized view from the other refresh group and
updates its refresh interval to be that of its new group. Otherwise, the call to
ADD generates an error message.
|
Manually Refresh
Now manually refresh the refresh group.
BEGIN
DBMS_REFRESH.REFRESH (
name => 'REVG');
END;
/
********** Now, do exactly the same for the Materialized View
Site REP2 (Not shown here).
***********
Test the Replication
The Replication is now working and should be tested. Login as User SCOTT and UPDATE
some rows. Check if the changed rows will appear on the other Sites.
connect scott/tiger@CEL1.WORLD
update emp set job = 'ENGINEER' where empno = 7934;
commit;
select * from emp;
EMPNO
ENAME
JOB MGR
HIREDATE
SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ----------
----------
7369 SMITH
CLERK 7902
17-DEC-80
800
20
7499 ALLEN
SALESMAN 7698
20-FEB-81
1600
300 30
7521 WARD
SALESMAN 7698
22-FEB-81
1250
500 30
7566 JONES
MANAGER 7839
02-APR-81
2975
20
7654 MARTIN
SALESMAN 7698
28-SEP-81
1250
1400 30
7698 BLAKE
MANAGER 7839
01-MAY-81
2850
30
7782 CLARK
MANAGER 7839
09-JUN-81
2450
10
7788 SCOTT
ANALYST 7566
09-DEC-82
3000
20
7839 KING
PRESIDENT
17-NOV-81
5000
10
7844 TURNER
SALESMAN 7698
08-SEP-81
1500
0 30
7876 ADAMS
CLERK 7788
12-JAN-83
1100
20
EMPNO ENAME
JOB MGR
HIREDATE
SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ----------
----------
7900 JAMES
CLERK 7698
03-DEC-81
950
30
7902 FORD
ANALYST 7566
03-DEC-81
3000
20
7934 MILLER
ENGINEER 7782
23-JAN-82
1300
10
connect scott/tiger@CEL2.WORLD
select * from emp;
EMPNO
ENAME
JOB MGR
HIREDATE
SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ----------
----------
7369 SMITH
CLERK 7902
17-DEC-80
800
20
7499 ALLEN
SALESMAN 7698
20-FEB-81
1600
300 30
7521 WARD
SALESMAN 7698
22-FEB-81
1250
500 30
7566 JONES
MANAGER 7839
02-APR-81
2975
20
7654 MARTIN
SALESMAN 7698
28-SEP-81
1250
1400 30
7698 BLAKE
MANAGER 7839
01-MAY-81
2850
30
7782 CLARK
MANAGER 7839
09-JUN-81
2450
10
7788 SCOTT
ANALYST 7566
09-DEC-82
3000
20
7839 KING
PRESIDENT
17-NOV-81
5000
10
7844 TURNER
SALESMAN 7698
08-SEP-81
1500
0 30
7876 ADAMS
CLERK 7788
12-JAN-83
1100
20
EMPNO ENAME
JOB MGR
HIREDATE
SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ----------
----------
7900 JAMES
CLERK 7698
03-DEC-81
950
30
7902 FORD
ANALYST 7566
03-DEC-81
3000
20
7934 MILLER
ENGINEER 7782
23-JAN-82
1300
10
If you have any troubles or the rows do not appear, then monitor your environment.
This section contains queries that you can run to display information about a master
replication environment. The replication environment can be a multimaster
environment, a master materialized view environment, or a hybrid environment that
includes multiple master sites and materialized views.
connect sys/manager@CEL1.WORLD as sysdba;
Listing General Information About a Master Site
You can find the following general information about a master site:
-
The number of administrative requests.
-
The number of administrative request errors.
-
The number of unpropagated deferred transaction-destination pairs. Each deferred
transaction can have multiple destinations to which it will be propagated, and
each destination is a single deferred transaction-destination pair
-
The number of deferred transaction errors (error transactions).
-
The number of successfully propagated transactions that are still in the queue.
These transactions should be purged from the queue.
COLUMN GLOBAL_NAME HEADING 'Database' FORMAT A25
COLUMN ADMIN_REQUESTS HEADING 'Admin|Reqests' FORMAT 9999
COLUMN STATUS HEADING 'Admin|Errors' FORMAT 9999
COLUMN TRAN HEADING 'Def|Trans|Pairs' FORMAT 9999
COLUMN ERRORS HEADING 'Def|Trans|Errors' FORMAT 9999
COLUMN COMPLETE HEADING 'Propagated|Trans' FORMAT 9999
SELECT G.GLOBAL_NAME, D.ADMIN_REQUESTS, E.STATUS, DT.TRAN, DE.ERRORS,
C.COMPLETE
FROM (SELECT GLOBAL_NAME FROM GLOBAL_NAME) G,
(SELECT COUNT(ID) ADMIN_REQUESTS FROM DBA_REPCATLOG)
D,
(SELECT COUNT(STATUS) STATUS FROM DBA_REPCATLOG WHERE
STATUS = 'ERROR') E,
(SELECT COUNT(*) TRAN FROM DEFTRANDEST) DT,
(SELECT COUNT(*) ERRORS FROM DEFERROR) DE,
(SELECT COUNT(A.DEFERRED_TRAN_ID) COMPLETE FROM
DEFTRAN A
WHERE A.DEFERRED_TRAN_ID NOT IN (
SELECT B.DEFERRED_TRAN_ID FROM DEFTRANDEST B)) C;
Def Def
Admin Admin Trans Trans Propagated
Database
Reqests Errors Pairs Errors Trans
------------------------- ------- ------ ----- ------ ----------
CEL1.WORLD
2
2 0
0 0
Listing the Master Sites Participating in a Master Group
Run the following query to list the master sites for each master group at a
replication site and indicate which master site is the master definition site for
each master group:
COLUMN GNAME HEADING 'Master Group' FORMAT A20
COLUMN DBLINK HEADING 'Sites' FORMAT A25
COLUMN MASTERDEF HEADING 'Master|Definition|Site?' FORMAT A10
SELECT GNAME, DBLINK, MASTERDEF
FROM DBA_REPSITES
WHERE MASTER = 'Y'
AND GNAME NOT IN (SELECT GNAME FROM DBA_REPSITES WHERE SNAPMASTER
= 'Y')
ORDER BY GNAME;
The subquery in the SELECT statement ensures that materialized view groups do not
appear in the output. Your output looks similar to the following:
Master
Definition
Master Group
Sites
Site?
-------------------- ------------------------- ----------
REPG
CEL1.WORLD
Y
REPG
CEL2.WORLD
N
This list indicates that CEL1.WORLD is the master definition site for the PPC_REPG
master group, which also includes the master sites CEL1.WORLD.
Listing General Information About Master Groups
You can use the query in this section to list the following general information about
the master groups at a master site:
-
The name of each master group.
-
The number of unpropagated deferred transaction-destination pairs. Each deferred
transaction can have multiple destinations to which it will be propagated, and each
destination is a single deferred transaction-destination pair.
-
The number of deferred transaction errors (error transactions) for each master
group
-
The number of administrative requests for each master group
-
The number of administrative request errors for each master group
COLUMN GNAME HEADING 'Master Group' FORMAT A15
COLUMN deftran HEADING 'Number of|Deferred|Transaction|Pairs' FORMAT 9999
COLUMN deftranerror HEADING 'Number of|Deferred|Transaction|Errors' FORMAT
9999
COLUMN adminreq HEADING 'Number of|Administrative|Requests' FORMAT 9999
COLUMN adminreqerror HEADING 'Number of|Administrative|Request|Errors'
COLUMN adminreqerror FORMAT 9999
SELECT G.GNAME,
NVL(T.CNT1, 0) deftran,
NVL(IE.CNT2, 0) deftranerror,
NVL(A.CNT3, 0) adminreq,
NVL(B.CNT4, 0) adminreqerror
FROM
(SELECT DISTINCT GNAME FROM DBA_REPGROUP WHERE MASTER='Y')
G,
(SELECT DISTINCT RO.GNAME, COUNT(DISTINCT D.DEFERRED_TRAN_ID)
CNT1
FROM DBA_REPOBJECT RO, DEFCALL D,
DEFTRANDEST TD
WHERE RO.SNAME = D.SCHEMANAME
AND RO.ONAME = D.PACKAGENAME
AND RO.TYPE IN ('TABLE', 'PACKAGE',
'MATERIALIZED VIEW')
AND TD.DEFERRED_TRAN_ID =
D.DEFERRED_TRAN_ID
GROUP BY RO.GNAME ) T,
(SELECT DISTINCT RO.GNAME, COUNT(DISTINCT E.DEFERRED_TRAN_ID)
CNT2
FROM DBA_REPOBJECT RO, DEFCALL D,
DEFERROR E
WHERE RO.SNAME = D.SCHEMANAME
AND RO.ONAME = D.PACKAGENAME
AND RO.TYPE IN ('TABLE', 'PACKAGE',
'MATERIALIZED VIEW')
AND E.DEFERRED_TRAN_ID =
D.DEFERRED_TRAN_ID
AND E.CALLNO = D.CALLNO
GROUP BY RO.GNAME ) IE,
(SELECT GNAME, COUNT(*) CNT3 FROM DBA_REPCATLOG GROUP BY GNAME)
A,
(SELECT GNAME, COUNT(*) CNT4 FROM DBA_REPCATLOG
WHERE STATUS = 'ERROR'
GROUP BY GNAME) B WHERE G.GNAME =
IE.GNAME (+)
AND G.GNAME = T.GNAME (+)
AND G.GNAME = A.GNAME (+)
AND G.GNAME = B.GNAME (+) ORDER BY
G.GNAME;
Number of Number
of
Number of
Deferred Deferred Number of
Administrative
Transaction Transaction Administrative
Request
Master Group
Pairs Errors
Requests Errors
--------------- ----------- ----------- -------------- --------------
REPG
1
0
0
0
Listing Information About Materialized Views Based on a Master
If you have materialized view sites based on a master, then you can use the query in
this section to list the following information about the master:
-
The number of replication groups at a master. The replication groups can be
either master groups or materialized view groups.
-
The number of registered materialized view groups based on the replication groups
at the master.
-
The number of registered materialized views based on objects at the master. The
objects can be either master tables or master materialized views.
-
The number of materialized view logs at the master.
-
The number of deployment templates at the master.
COLUMN repgroup HEADING 'Number of|Replication|Groups' FORMAT 9999
COLUMN mvgroup HEADING 'Number of|Registered|MV Groups' FORMAT 9999
COLUMN mv HEADING 'Number of|Registered MVs' FORMAT 9999
COLUMN mvlog HEADING 'Number of|MV Logs' FORMAT 9999
COLUMN template HEADING 'Number of|Templates' FORMAT 9999
SELECT A.REPGROUP repgroup,
B.MVGROUP mvgroup,
C.MV mv,
D.MVLOG mvlog,
E.TEMPLATE template
FROM (SELECT COUNT(G.GNAME) REPGROUP
FROM
DBA_REPGROUP G, DBA_REPSITES S
WHERE
G.MASTER = 'Y'
AND
S.MASTER = 'Y'
AND G.GNAME
= S.GNAME
AND
S.MY_DBLINK = 'Y') A,
(SELECT COUNT(*) MVGROUP
FROM
DBA_REGISTERED_MVIEW_GROUPS) B,
(SELECT COUNT(*) MV
FROM
DBA_REGISTERED_MVIEWS) C,
(SELECT COUNT(*) MVLOG
FROM
(SELECT 1 FROM DBA_MVIEW_LOGS
GROUP BY
LOG_OWNER, LOG_TABLE)) D,
(SELECT COUNT(*) TEMPLATE FROM
DBA_REPCAT_REFRESH_TEMPLATES) E;
Number of Number of
Replication Registered Number of Number of Number
of
Groups MV Groups Registered MVs MV Logs
Templates
----------- ---------- -------------- --------- ---------
1
2
4
2 0
Listing Information About the Materialized View Logs at a Master
A materialized view log enables you to fast refresh materialized views based on a
master. A master can be a master table or a master materialized view. If you have
materialized view logs based at a master, then you can use the query in this section
to list the following information about them:
-
The name of each log table that stores the materialized view log data
-
The owner of each materialized view log
-
The master on which each materialized view log is based
-
Whether a materialized view log is a row id materialized view log
-
Whether a materialized view log is a primary key materialized view log
-
Whether the materialized view log is an object id materialized view log
-
Whether a materialized view log has filter columns
COLUMN LOG_TABLE HEADING 'Log Table' FORMAT A30
COLUMN LOG_OWNER HEADING 'Log|Owner' FORMAT A5
COLUMN MASTER HEADING 'Master' FORMAT A30
COLUMN ROWIDS HEADING 'Row|ID?' FORMAT A3
COLUMN PRIMARY_KEY HEADING 'Primary|Key?' FORMAT A7
COLUMN OBJECT_ID HEADING 'Object|ID?' FORMAT A6
COLUMN FILTER_COLUMNS HEADING 'Filter|Columns?' FORMAT A8
SELECT DISTINCT LOG_TABLE,
LOG_OWNER,
MASTER,
ROWIDS,
PRIMARY_KEY,
OBJECT_ID,
FILTER_COLUMNS
FROM DBA_MVIEW_LOGS
ORDER BY 1;
Log
Row Primary Object Filter
Log
Table
Owner
Master
ID? Key? ID? Columns?
------------------------------ ----- ------------------------------ --- -------
------ --------
MLOG$_DEPT
SCOTT
DEPT
NO YES NO NO
MLOG$_EMO
SCOTT
EMP
NO YES NO NO
Listing the Materialized Views that Use a Materialized View Log
More than one materialized view can use a materialized view log. If you have
materialized view logs based at a master, then you can use the query in this section
to list the following the materialized views that use each log:
-
The name of each log table that stores the materialized view log data
-
The owner of each materialized view log
-
The master on which each materialized view log is based
-
The materialized view identification number of each materialized view that uses the
materialized view log
-
The name of each materialized view that uses the materialized view log
COLUMN LOG_TABLE HEADING 'Mview|Log Table' FORMAT A30
COLUMN LOG_OWNER HEADING 'Mview|Log Owner' FORMAT A10
COLUMN MASTER HEADING 'Master' FORMAT A20
COLUMN MVIEW_ID HEADING 'Mview|ID' FORMAT 9999
COLUMN NAME HEADING 'Mview Name' FORMAT A20
SELECT L.LOG_TABLE, L.LOG_OWNER, B.MASTER, B.MVIEW_ID, R.NAME
FROM ALL_MVIEW_LOGS L, ALL_BASE_TABLE_MVIEWS B, ALL_REGISTERED_MVIEWS R
WHERE B.MVIEW_ID = R.MVIEW_ID
AND B.OWNER = L.LOG_OWNER
AND B.MASTER = L.MASTER;
Mview
Mview
Mview
Log
Table
Log Owner
Master
ID Mview Name
------------------------------ ---------- -------------------- -----
--------------------
MLOG$_DEPT
SCOTT
DEPT
6 DEPT
MLOG$_DEPT
SCOTT
DEPT
4 DEPT
MLOG$_EMP
SCOTT
EMP
5 EMP
MLOG$_EMP
SCOTT
EMP
3 EMP
Listing Information About the Deployment Templates at a Master
Deployment templates enable you to create multiple materialized view environments
quickly. They also enable you to use variables to customize each materialized
view environment for its individual needs. You can use the query in this section to
list the following information about the deployment templates at a master:
-
The name of each deployment template
-
The owner of each deployment template
-
Whether a deployment template is public
-
The number of instantiated materialized view sites based on each deployment
template
-
The comment associated with each deployment template
COLUMN REFRESH_TEMPLATE_NAME HEADING 'Template|Name' FORMAT A10
COLUMN OWNER HEADING 'Owner' FORMAT A10
COLUMN PUBLIC_TEMPLATE HEADING 'Public?' FORMAT A7
COLUMN INSTANTIATED HEADING 'Number of|Instantiated|Sites' FORMAT 9999
COLUMN TEMPLATE_COMMENT HEADING 'Comment' FORMAT A35
SELECT DISTINCT RT.REFRESH_TEMPLATE_NAME,
OWNER,
PUBLIC_TEMPLATE,
RS.INSTANTIATED,
RT.TEMPLATE_COMMENT
FROM DBA_REPCAT_REFRESH_TEMPLATES RT,
(SELECT Y.REFRESH_TEMPLATE_NAME, COUNT(X.STATUS)
INSTANTIATED
FROM DBA_REPCAT_TEMPLATE_SITES X,
DBA_REPCAT_REFRESH_TEMPLATES Y
WHERE X.REFRESH_TEMPLATE_NAME(+) =
Y.REFRESH_TEMPLATE_NAME
GROUP BY Y.REFRESH_TEMPLATE_NAME)
RS
WHERE RT.REFRESH_TEMPLATE_NAME(+) =
RS.REFRESH_TEMPLATE_NAME
ORDER BY 1
This section contains queries that you can run to display information about the
materialized view sites.
sqlplus sys/manager@REP1.WORLD as sysdba
Listing General Information About a Materialized View Site
You can use the query in this section to list the following general information about
the current materialized view site:
-
The number of materialized view groups at the site
-
The number of materialized views at the site
-
The number of refresh groups at the site
COLUMN MVGROUP HEADING 'Number of|Materialized|View Groups' FORMAT 9999
COLUMN MV HEADING 'Number of|Materialized|Views' FORMAT 9999
COLUMN RGROUP HEADING 'Number of|Refresh Groups' FORMAT 9999
SELECT A.MVGROUP, B.MV, C.RGROUP
FROM
(SELECT COUNT(S.GNAME) MVGROUP
FROM DBA_REPSITES S
WHERE S.SNAPMASTER = 'Y') A,
(SELECT COUNT(*) MV
FROM DBA_MVIEWS) B,
(SELECT COUNT(*) RGROUP
FROM DBA_REFRESH) C;
Number of Number of
Materialized Materialized Number of
View Groups Views Refresh
Groups
------------ ------------ --------------
1 2
1
Listing General Information About Materialized View Groups
You can use the query in this section to list the following general information about
the materialized view groups at the current materialized view site:
-
The name of each materialized view group
-
The master of each materialized view group
-
The method of propagation to a materialized view group's master, either
asynchronous or synchronous
-
The comment associated with each materialized view group
COLUMN GNAME HEADING 'Group Name' FORMAT A10
COLUMN DBLINK HEADING 'Master' FORMAT A25
COLUMN Propagation HEADING 'Propagation|Method' FORMAT A12
COLUMN SCHEMA_COMMENT HEADING 'Comment' FORMAT A30
SELECT S.GNAME,
S.DBLINK,
DECODE(S.PROP_UPDATES,
0,
'ASYNCHRONOUS',
1,
'SYNCHRONOUS') Propagation,
G.SCHEMA_COMMENT
FROM DBA_REPSITES S, DBA_REPGROUP G
WHERE S.GNAME = G.GNAME
AND S.SNAPMASTER = 'Y';
Propagation
Group Name
Master
Method Comment
---------- ------------------------- ------------
------------------------------
REPG CEL1.WORLD
ASYNCHRONOUS
Listing Master Information For Materialized Views
The following query shows the master for each materialized view at a replication site
and whether the materialized view can be fast refreshed:
COLUMN MVIEW_NAME HEADING 'Materialized|View Name' FORMAT A25
COLUMN OWNER HEADING 'Owner' FORMAT A10
COLUMN MASTER_LINK HEADING 'Master Link' FORMAT A30
COLUMN Fast_Refresh HEADING 'Fast|Refreshable?' FORMAT A16
SELECT MVIEW_NAME,
OWNER,
MASTER_LINK,
DECODE(FAST_REFRESHABLE,
'NO',
'NO',
'DML', 'YES',
'DIRLOAD', 'DIRECT LOAD ONLY',
'DIRLOAD_DML', 'YES',
'DIRLOAD_LIMITEDDML', 'LIMITED') Fast_Refresh
FROM DBA_MVIEWS;
Fast
MVIEW_NAME
Owner Master
Link
Refreshable?
------------------------------ ---------- ------------------------------
----------------
DEPT
SCOTT
@CEL1.WORLD
YES
EMP
SCOTT
@CEL1.WORLD
YES
Listing the Properties of Materialized Views
You can use the query in this section to list the following information about the
materialized views at the current replication site:
-
The name of each materialized view
-
The owner of each materialized view
-
The refresh method used by each materialized view: COMPLETE, FORCE, FAST, or
NEVER
-
Whether a materialized view is updatable
-
The last date on which each materialized view was refreshed
COLUMN MVIEW_NAME HEADING 'Materialized|View Name' FORMAT A25
COLUMN OWNER HEADING 'Owner' FORMAT A10
COLUMN REFRESH_METHOD HEADING 'Refresh|Method' FORMAT A10
COLUMN UPDATABLE HEADING 'Updatable?' FORMAT A10
COLUMN LAST_REFRESH_DATE HEADING 'Last|Refresh|Date' FORMAT A25
COLUMN LAST_REFRESH_TYPE HEADING 'Last|Refresh|Type' FORMAT A15
SELECT MVIEW_NAME,
OWNER,
REFRESH_METHOD,
UPDATABLE,
TO_CHAR(LAST_REFRESH_DATE,'DD.MM.YYYY:HH24:MI:SS') LAST_REFRESH_DATE,
LAST_REFRESH_TYPE
FROM DBA_MVIEWS;
Last
Last
Materialized
Refresh
Refresh
Refresh
View
Name
Owner Method Updatable?
Date
Type
------------------------- ---------- ---------- ---------- -------------------------
---------------
DEPT
SCOTT FAST
N
22.09.2005:19:29:31 FAST
EMP
SCOTT FAST
N
22.09.2005:19:29:31 FAST
Listing Information About the Refresh Groups at a Materialized View Site
Each refresh group at a materialized view site is associated with a refresh job that
refreshes the materialized views in the refresh group at a set interval. You can
query the DBA_REFRESH data dictionary view to list the following information about
the refresh jobs at a materialized view site:
-
The name of the refresh group.
-
The owner of the refresh group.
-
Whether the refresh job is broken.
-
The next date and time when the refresh job will run.
-
The current interval setting for the refresh job. The interval setting specifies
the amount of time between the start of a job and the next start of the same job.
COLUMN RNAME HEADING 'Refresh|Group|Name' FORMAT A10
COLUMN ROWNER HEADING 'Refresh|Group|Owner' FORMAT A10
COLUMN BROKEN HEADING 'Broken?' FORMAT A7
COLUMN next_refresh HEADING 'Next Refresh'
COLUMN INTERVAL HEADING 'Interval' FORMAT A20
SELECT RNAME,
ROWNER,
BROKEN,
TO_CHAR(NEXT_DATE, 'DD-MON-YYYY HH:MI:SS AM')
next_refresh,
INTERVAL
FROM DBA_REFRESH
ORDER BY 1;
Refresh Refresh
Group Group
Name Owner
Broken? Next
Refresh
Interval
---------- ---------- ------- ----------------------- --------------------
REVG MVIEWADMIN Y
01-JAN-4000 12:00:00 AM SYSDATE + 1/24/4
connect MVIEWADMIN/MVIEWADMIN@REP1
execute dbms_job.run(2);
PL/SQL procedure successfully completed.
Refresh Refresh
Group Group
Name Owner
Broken? Next
Refresh
Interval
---------- ---------- ------- ----------------------- --------------------
REVG MVIEWADMIN N
01-JAN-4000 12:00:00 AM SYSDATE + 1/24/4
Determining Which Materialized Views Are Currently Refreshing
The following query shows the materialized views that are currently
refreshing:
COLUMN SID HEADING 'Session|Identifier' FORMAT 9999
COLUMN SERIAL# HEADING 'Serial|Number' FORMAT 999999
COLUMN CURRMVOWNER HEADING 'Owner' FORMAT A15
COLUMN CURRMVNAME HEADING 'Materialized|View' FORMAT A25
SELECT * FROM V$MVREFRESH;
Session
Serial
Materialized
Identifier Number
Owner View
---------- ------- --------------- -------------------------
96 51
SCOTT DEPT
This section contains queries that you can run to display information about the
administrative requests at a master site.
Listing General Information About Administrative Requests at the Master
You can use the query in this section to list the following general information about
the administrative requests at a master site:
-
The identification number of each administrative request
-
The action requested by each administrative request
-
The status of each request
-
The master site where the request is being executed
COLUMN ID HEADING 'Admin|Request|ID' FORMAT 999999
COLUMN REQUEST HEADING 'Request' FORMAT A25
COLUMN STATUS HEADING 'Status' FORMAT A15
COLUMN MASTER HEADING 'Master|Site' FORMAT A25
SELECT ID, REQUEST, STATUS, MASTER FROM DBA_REPCATLOG;
Admin
Request
Master
ID
Request
Status Site
------- ------------------------- --------------- -------------------------
11 CREATE_MASTER_REPOBJECT ERROR
CEL1.WORLD
10 CREATE_MASTER_REPOBJECT ERROR
CEL1.WORLD
Determining the Cause of Administrative Request Errors at the Master
You can determine the cause of an administrative request error by displaying its
error message.
COLUMN ID HEADING 'Admin|Request|ID' FORMAT 999999
COLUMN REQUEST HEADING 'Request' FORMAT A30
COLUMN ERRNUM HEADING 'Error|Number' FORMAT 999999
COLUMN MESSAGE HEADING 'Error|Message' FORMAT A32
SELECT ID, REQUEST, ERRNUM, MESSAGE
FROM DBA_REPCATLOG WHERE STATUS = 'ERROR';
Admin
Request
Error Error
ID
Request
Number Message
------- ------------------------------ -------
--------------------------------
11
CREATE_MASTER_REPOBJECT -23308
ORA-23308: object PPB.ACTIVATION
AREAPREFIX does not exist or is
invalid
10
CREATE_MASTER_REPOBJECT -23308
ORA-23308: object PPB.ACTIVATION
AREA does not exist or is invalid
Listing Information About the Job that Executes Administrative Requests at the Master
Each master group is associated with a DBMS_REPCAT.DO_DEFERRED_REPCAT_ADMIN
job that executes administrative requests. You can query the DBA_JOBS data dictionary
view to list the following information about this job. The
DBMS_REPCAT.DO_DEFERRED_REPCAT_ADMIN porcedure executes the local outstanding
deferred administrative procedures for the specified master group at the current
master site, or (with assistance from job queues) for all master sites.
-
The job identification number of each do_deferred_repcat_admin job. Each job
created by the DBMS_JOB package is assigned a unique identification number.
-
The privilege schema, which is the schema whose default privileges apply to the
job.
-
The status of each do_deferred_repcat_admin job, either normal or broken.
-
The next date and time when each do_deferred_repcat_admin job will run.
-
The current interval setting for each do_deferred_repcat_admin job. The interval
setting specifies the amount of time between the start of a job and the next
start of the same job.
COLUMN JOB HEADING 'Job ID' FORMAT 999999
COLUMN PRIV_USER HEADING 'Privilege|Schema' FORMAT A10
COLUMN BROKEN HEADING 'Broken?' FORMAT A7
COLUMN next_start HEADING 'Next Start'
COLUMN INTERVAL HEADING 'Interval' FORMAT A20
SELECT JOB,
PRIV_USER,
BROKEN,
TO_CHAR(NEXT_DATE,'DD.MM.YYYY:HH:MI:SS AM')
next_start,
INTERVAL
FROM DBA_JOBS
WHERE WHAT LIKE
'%dbms_repcat.do_deferred_repcat_admin%'
ORDER BY 1;
Privilege
Job ID Schema Broken? Next
Start
Interval
------- ---------- ------- ---------------------- --------------------
2
REPADMIN N 12.09.2005:04:25:06
PM SYSDATE + (1/144)
Checking the Definition of Each DBMS_REPCAT.DO_DEFERRED_REPCAT_ADMIN Job
You can query the DBA_JOBS data dictionary view to show the definition of each
DBMS_REPCAT.DO_DEFERRED_REPCAT_ADMIN job at a replication site. The following query
shows the definitions:
COLUMN JOB HEADING 'Job ID' FORMAT 999999
COLUMN WHAT HEADING 'Definitions of Admin Req Jobs' FORMAT A70
SELECT JOB, WHAT
FROM DBA_JOBS
WHERE WHAT LIKE '%dbms_repcat.do_deferred_repcat_admin%'
ORDER BY 1;
Job ID Definitions of Admin Req Jobs
------- ----------------------------------------------------------------------
2 dbms_repcat.do_deferred_repcat_admin('"REPG"',
FALSE);
This section contains queries that you can run to display information about the
deferred transactions queue at a replication site.
Listing the Number of Deferred Transactions for Each Destination Master Site
You can find the number of unpropagated deferred transactions for each destination
master site by running the query in this section. This query shows each master site
to which the current master site is propagating deferred transactions and the number
of deferred transactions to be propagated to each destination site.
CONNECT repadmin/repadmin@CEL1.WORLD
COLUMN DEST HEADING 'Destination' FORMAT A45
COLUMN TRANS HEADING 'Def Trans' FORMAT 9999
SELECT DBLINK DEST, COUNT(*) TRANS
FROM DEFTRANDEST D
GROUP BY DBLINK;
Destination Def Trans
--------------------------------------------- ---------
CEL1.WORLD 1
Listing General Information About the Push Jobs at a Replication Site
Each scheduled link at a replication site is associated with a push job that
propagates deferred transactions in the deferred transaction queue to a destination
site. You can use the query in this section to list the following information about
the push jobs at a replication site:
-
The job identification number of each push job. Each job created by the DBMS_JOB
package is assigned a unique identification number.
-
The privilege schema, which is the schema whose default privileges apply to the
job.
-
The destination site where the deferred transactions are pushed.
-
The status of the push job, either normal or broken.
CONNECT repadmin/repadmin@CEL1.WORLD
COLUMN JOB HEADING 'Job ID' FORMAT 999999
COLUMN PRIV_USER HEADING 'Privilege|Schema' FORMAT A10
COLUMN DBLINK HEADING 'Destination' FORMAT A40
COLUMN BROKEN HEADING 'Broken?' FORMAT A7
SELECT J.JOB,
J.PRIV_USER,
S.DBLINK,
J.BROKEN
FROM DEFSCHEDULE S, DBA_JOBS J
WHERE S.DBLINK != (SELECT GLOBAL_NAME FROM GLOBAL_NAME)
AND S.JOB = J.JOB
ORDER BY 1;
Privilege
Job ID Schema
Destination
Broken?
------- ---------- ---------------------------------------- -------
6 REPADMIN
CEL2.WORLD
N
Determining the Next Start Time and Interval for the Push Jobs
Each scheduled link at a replication site is associated with a push job that
propagates deferred transactions in the deferred transaction queue to a destination
site. You can query the DEFSCHEDULE and DBA_JOBS data dictionary views to list the
following information about the push jobs at a replication site:
-
The job identification number of each push job. Each job created by the DBMS_JOB
package is assigned a unique identification number.
-
The destination site where the deferred transactions are pushed.
-
The next date and time when the push job will run.
-
The current interval setting for the push job. The interval setting specifies the
amount of time between the start of a job and the next start of the same job.
CONNECT repadmin/repadmin@CEL1.WORLD
COLUMN JOB HEADING 'Job ID' FORMAT 999999
COLUMN DBLINK HEADING 'Destination' FORMAT A22
COLUMN next_start HEADING 'Next Start'
COLUMN INTERVAL HEADING 'Interval' FORMAT A25
SELECT JOB,
DBLINK,
TO_CHAR(NEXT_DATE, 'DD-MON-YYYY HH:MI:SS AM')
next_start,
INTERVAL
FROM DEFSCHEDULE
WHERE DBLINK != (SELECT GLOBAL_NAME FROM GLOBAL_NAME)
AND JOB IS NOT NULL
ORDER BY 1;
Job ID
Destination Next
Start
Interval
------- ---------------------- -----------------------
-------------------------
6
CEL2.WORLD
25-SEP-2005 02:00:46 PM SYSDATE + (1/24/60)
Determining the Total Number of Transactions Queued for Propagation
Run the following query to display the total number of transactions in the deferred
transaction queue that are waiting to be propagated:
CONNECT repadmin/repadmin@CEL1.WORLD
SELECT COUNT(DISTINCT DEFERRED_TRAN_ID) "Transactions Queued"
FROM DEFTRANDEST;
Transactions Queued
-------------------
0
This section contains queries that you can run to display information about purges of
successfully propagated transactions from the deferred transactions queue.
Listing General Information About the Purge Job
During standard setup of a replication site, you configure a purge job to remove
successfully propagated transactions from the deferred transactions queue. You can
query the DBA_JOBS data dictionary view to list the following information about the
purge job at a replication site:
-
The job identification number of the purge job. Each job created by the DBMS_JOB
package is assigned a unique identification number.
-
The privilege schema, which is the schema whose default privileges apply to the
job.
-
The status of the job, either normal or broken.
-
The next date and time when the purge job will run.
-
The current interval setting for the purge job. The interval setting specifies
the amount of time between the start of a job and the next start of the same job.
CONNECT repadmin/repadmin@CEL1.WORLD
COLUMN JOB HEADING 'Job ID' FORMAT 999999
COLUMN PRIV_USER HEADING 'Privilege|Schema' FORMAT A10
COLUMN BROKEN HEADING 'Broken?' FORMAT A7
COLUMN next_start HEADING 'Next Start'
COLUMN INTERVAL HEADING 'Interval' FORMAT A25
SELECT JOB,
PRIV_USER,
BROKEN,
TO_CHAR(NEXT_DATE, 'DD.MM.YYYY:HH:MI:SS AM')
next_start,
INTERVAL
FROM DBA_JOBS
WHERE WHAT LIKE '%dbms_defer_sys.purge%'
ORDER BY 1;
Privilege
Job ID Schema Broken? Next
Start
Interval
------- ---------- ------- ---------------------- -------------------------
1 REPADMIN
N 13.09.2005:08:08:37 AM sysdate+1/24/30
Checking the Definition of the Purge Job
You can query the DBA_JOBS data dictionary view to show the definition of the purge
job at a replication site. The following query shows the definition:
SELECT WHAT "Definition of the Purge Job"
FROM DBA_JOBS
WHERE WHAT LIKE '%dbms_defer_sys.purge%' ORDER BY 1;
Definition of the Purge Job
---------------------------------------------------------------------------------------
declare rc binary_integer; begin rc := sys.dbms_defer_sys.purge(
delay_seconds=>0); end;
Determining the Amount of Time Since the Last Purge
The following query shows the total amount of time, in minutes, since the
successfully propagated transactions were purged from the deferred transactions
queue:
SELECT ((SYSDATE - LAST_PURGE_TIME) / 60) "Minutes Since Last Purge"
FROM V$REPLQUEUE;
Minutes Since Last Purge
------------------------
13.43333
Determining the Total Number of Purged Transactions
The following query shows the total number of successfully propagated transactions
that have been purged from the deferred transaction queue since the instance was last
started:
SELECT TXNS_PURGED "Transactions Purged"
FROM V$REPLQUEUE;
Transactions Purged
-------------------
6541
This section contains queries that you can run to display information about the error
queue at a replication site. The error queue contains deferred transactions that
resulted in an error at the destination site. These error transactions are placed in
the error queue at the destination site.
Listing General Information About the Error Transactions at a Replication Site
The following query lists the general information about the error transactions at a
replication site:
COLUMN DEFERRED_TRAN_ID HEADING 'Deferred|Transaction|ID' FORMAT A11
COLUMN ORIGIN_TRAN_DB HEADING 'Origin|Database' FORMAT A15
COLUMN DESTINATION HEADING 'Destination|Database' FORMAT A15
COLUMN TIME_OF_ERROR HEADING 'Time of|Error' FORMAT A22
COLUMN ERROR_NUMBER HEADING 'Oracle|Error|Number' FORMAT 999999
SELECT DEFERRED_TRAN_ID,
ORIGIN_TRAN_DB,
DESTINATION,
TO_CHAR(START_TIME, 'DD-Mon-YYYY hh24:mi:ss')
TIME_OF_ERROR,
ERROR_NUMBER
FROM DEFERROR ORDER BY START_TIME;
Deferred
Oracle
Transaction Origin
Destination Time
of
Error
ID
Database
Database
Error
Number
----------- --------------- --------------- ---------------------- -------
1.8.2470 CEL2.WORLD
CEL1.WORLD 22-Oct-2003
07:19:14 1403
You can use the deferred transaction ID and the destination database to either
attempt to rerun the transaction that caused the error or to delete the error.
For example, to attempt to rerun the transaction in the previous example, enter the
following:
EXECUTE DBMS_DEFER_SYS.EXECUTE_ERROR('1.8.2470', 'CEL1.WORLD');
To delete the error in the previous example, enter the following:
EXECUTE DBMS_DEFER_SYS.DELETE_ERROR('1.8.2470', 'CEL1.WORLD');
Typically, you should delete an error only if you have resolved it manually.
Determining the Percentage of Error Transactions
When propagating transactions to a remote master site, some transactions are
propagated and applied successfully while other transactions can result in errors at
the remote master site. Transactions that result in errors are called error
transactions.
Run the following query to display the percentage of error transactions that resulted
from propagation to the remote master site CEL2.WORLD:
SELECT DECODE(TOTAL_TXN_COUNT, 0, 'No Transactions',
(TOTAL_ERROR_COUNT/TOTAL_TXN_COUNT)*100) "ERROR
PERCENTAGE"
FROM DEFSCHEDULE
WHERE DBLINK = 'CEL2.WORLD';
Error Percentage
----------------
3.265
If this query returns 'No transactions', then no transactions have been propagated to
the specified remote site since the statistics were last cleared.
Listing the Number of Error Transactions from Each Origin Master Site
You can find the number of transaction errors resulting from pushes by each origin
master site by running the query in this section.
COLUMN SOURCE HEADING 'Origin' FORMAT A45
COLUMN ERRORS HEADING 'Def Trans Errors' FORMAT 9999
SELECT E.ORIGIN_TRAN_DB SOURCE, COUNT(*) ERRORS
FROM DEFERROR E
GROUP BY E.ORIGIN_TRAN_DB;
Origin
Def Trans Errors
--------------------------------------------- ----------------
CEL2.WORLD
1
Listing the Error Messages for the Error Transactions at a Replication Site
The following query lists the error messages for the error transactions at a
replication site:
COLUMN DEFERRED_TRAN_ID HEADING 'Deferred|Transaction|ID' FORMAT A11
COLUMN ERROR_MSG HEADING 'Error Messages' FORMAT A68
SELECT DEFERRED_TRAN_ID, ERROR_MSG
FROM DEFERROR;
Deferred
Transaction
ID Error Messages
-----------
--------------------------------------------------------------------
1.8.2470 ORA-01403: no data found
Determining the Error Operations at a Replication Site
The following query lists the type of operation that was attempted for each call that
caused an error at a replication site:
COLUMN CALLNO HEADING 'Call|Number' FORMAT 9999
COLUMN DEFERRED_TRAN_ID HEADING 'Deferred|Transaction|ID' FORMAT A11
COLUMN PACKAGENAME HEADING 'Package|Name' FORMAT A20
COLUMN PROCNAME HEADING 'Operation' FORMAT A15
COLUMN ORIGIN_TRAN_DB HEADING 'Origin|Database' FORMAT A15
SELECT /*+ ORDERED */
C.CALLNO,
C.DEFERRED_TRAN_ID,
C.PACKAGENAME,
C.PROCNAME, E.ORIGIN_TRAN_DB
FROM DEFERROR E, DEFCALL C
WHERE C.DEFERRED_TRAN_ID = E.DEFERRED_TRAN_ID
AND C.CALLNO = E.CALLNO
ORDER BY E.START_TIME;
Deferred
Call Transaction
Package
Origin
Number ID
Name
Operation Database
------ ----------- -------------------- --------------- ---------------
0 1.8.2470
EMPLOYEES$RP
REP_UPDATE CEL2.WORLD
This section contains queries that you can run to monitor the performance of your
replication environment.
Tracking the Average Number of Row Changes in a Replication Transaction
The following query shows the average number of row changes in a replication
transaction since instance startup:
SELECT DECODE(TXNS_ENQUEUED, 0, 'No Transactions Enqueued',
(CALLS_ENQUEUED / TXNS_ENQUEUED)) "Average
Number of Row Changes"
FROM V$REPLQUEUE;
Average Number of Row Changes
-----------------------------
56.16
If this query returns 'No Transactions Enqueued', then no transactions have been
enqueued since the start of the instance.
Tracking the Rate of Transactions Entering the Deferred Transactions Queue
The following query shows the average number of transactions for each second entering
at the deferred transactions queue at the current site since instance startup:
SELECT (R.TXNS_ENQUEUED / ((SYSDATE - I.STARTUP_TIME)*24*60*60)) "Average TPS"
FROM V$REPLQUEUE R, V$INSTANCE I;
Average TPS
-----------
150
Determining the Average Network Traffic Created to Propagate a Transaction
Propagation of deferred transactions creates a certain amount of traffic on your
network. Here, the network traffic created by a transaction is the number of bytes
being sent and received and the number of network round trips needed to propagate the
transaction.
The following query shows the average network traffic created when propagating a
transaction to the CEL2.WORLD remote master site:
COLUMN AV_BYTES HEADING 'Average Bytes' FORMAT 999999999
COLUMN AV_TRIPS HEADING 'Average Round Trips' FORMAT 9999999
SELECT
DECODE(TOTAL_TXN_COUNT, 0, 'No Transactions',
((TOTAL_BYTES_SENT + TOTAL_BYTES_RECEIVED) / TOTAL_TXN_COUNT)) AV_BYTES,
DECODE(TOTAL_TXN_COUNT, 0, 'No Transactions',
(TOTAL_ROUND_TRIPS / TOTAL_TXN_COUNT)) AV_TRIPS
FROM DEFSCHEDULE WHERE DBLINK = 'CEL2.WORLD';
Average
Bytes Average Round Trips
---------------------- -------------------
69621.5
5
If this query returns 'No transactions' in both columns, then no transactions have
been propagated to the specified remote site since the statistics were last cleared.
Determining the Average Amount of Time to Apply Transactions at Remote Sites
Average latency is the average number of seconds between the first call of a
transaction on the current site and the confirmation that the transaction was applied
at the remote site. The first call begins when the user makes the first data
manipulation language (DML) change, not when the transaction is committed.
The following query shows the average latency for applying transactions at the remote
master site CEL2.WORLD:
SELECT AVG_LATENCY "Average Latency"
FROM DEFSCHEDULE
WHERE DBLINK='CEL2.WORLD';
Average Latency
---------------
25.5
Determining the Percentage of Time the Parallel Propagation Job Spends Sleeping
When the parallel propagation coordinator is inactive, it is sleeping. You control
the amount of time that the propagation coordinator sleeps using the delay_seconds
parameter in the DBMS_DEFER_SYS.PUSH procedure.
The following query shows the percentage of time that the parallel propagation
coordinator spends sleeping when propagating transactions to the CEL2.WORLD remote
master site:
SELECT DECODE(AVG_THROUGHPUT, 0, NULL,
((TOTAL_SLEEP_TIME / (TOTAL_TXN_COUNT /
AVG_THROUGHPUT)) * 100))
"Percent Sleep Time"
FROM DEFSCHEDULE WHERE DBLINK = 'CEL2.WORLD';
Percent Sleep Time
------------------
2
In this case, the parallel propagation coordinator is active 98% of the time.
If this query returns a NULL, then no transactions have been propagated to the
specified remote site since the statistics were last cleared or since the last
database startup.
Clearing the Statistics for a Remote Master Site in the DEFSCHEDULE View
To clear the propagation statistics in the DEFSCHEDULE view for a particular remote
master site, use the CLEAR_PROP_STATISTICS procedure in the DBMS_DEFER_SYS package.
For example, to clear the propagation statistics for the CEL2.WORLD remote master
site, run the following procedure:
BEGIN
DBMS_DEFER_SYS.CLEAR_PROP_STATISTICS (
dblink => 'CEL1.WORLD');
END;
/
Monitoring Parallel Propagation of Deferred Transactions Using V$REPLPROP
The V$REPLPROP dynamic performance view provides information about current parallel
propagation sessions.
The V$REPLPROP dynamic performance view is only relevant if you are using parallel
propagation of deferred transactions. If you are using serial propagation, then this
view is empty.
Determining the Databases to Which You Are Propagating Deferred Transactions
Run the following query to list the database link of each database to which you are
currently propagating deferred transactions using parallel propagation:
SELECT DBLINK "Database Link"
FROM V$REPLPROP
WHERE NAME LIKE '%Coordinator%';
Database Link
-----------------
CEL2.WORLD
ORC3.WORLD
Determining the Transactions Currently Being Propagated to a Remote Master
You can list the following information about the transactions that are currently
being propagated to a specified remote master site using parallel propagation:
-
The transaction identification number of each transaction.
-
The number of calls in each transaction.
-
The percentage of processed calls in each transaction. The number in this column
becomes larger as the calls in the transaction are processed. When the number
reaches 100, all of the calls are processed.
SELECT /*+ ORDERED */ P.XID "Tran Being Propagated",
(MAX(C.CALLNO) + 1) "Number of Calls in
Tran",
(P.SEQUENCE/MAX(C.CALLNO) + 1) * 100 "%
Processed Calls"
FROM V$REPLPROP P, DEFCALL C
WHERE P.NAME LIKE '%SLAVE%'
AND P.DBLINK = 'CEL1.WORLD'
AND C.DEFERRED_TRAN_ID = P.XID
GROUP BY P.XID, P.SEQUENCE;
Tran Being Propagated Number of Calls in Tran % Processed
Calls
---------------------- ----------------------- -----------------
1.11.4264
43357
78
1.15.4256
23554
49
The transaction identification numbers should change as existing transactions are
pushed and new transactions are processed. This query can be particularly useful if
the any of the following conditions apply to your replication environment:
-
You push a large number of transactions on a regular basis.
-
You have some transactions that are very large.
-
You are simulating continuous push using asynchronous propagation.
If the first two bullets apply to your replication environment, then you can run this
query to check if the slave processes are pushing the transactions. In this type of
environment, the slave processes do not exist when they are not pushing transactions.
In replication environments that are simulating continuous push, the slave processes
exist whenever there are transactions to push in the deferred transactions queue.
When there are no transactions to push, the slave processes might not exist. So, when
there are transactions to push, you can use this query to make sure the slave
processes exist and are processing the transactions.
Stop replication
CONNECT repadmin/repadmin@CEL1.WORLD;
BEGIN
DBMS_REPCAT.SUSPEND_MASTER_ACTIVITY (
gname => 'REPG');
END;
/
Drop Materialized View Group
CONNECT mviewadmin/mviewadmin@REP1.WORLD;
BEGIN
DBMS_REPCAT.DROP_MVIEW_REPGROUP (
gname => 'REPG');
END;
/
Drop Refresh Group
BEGIN
DBMS_REFRESH.DESTROY (
name => 'REVG');
END;
/
Drop materialized views
DROP MATERIALIZED VIEW scott.emp;
DROP MATERIALIZED VIEW scott.dept;
Drop Master Replication Group
CONNECT repadmin/repadmin@CEL1.WORLD;
BEGIN
DBMS_REPCAT.DROP_MASTER_REPGROUP (
gname => 'REPG');
END;
/
Drop Materialized View Logs
DROP MATERIALIZED VIEW LOG ON scott.emp;
DROP MATERIALIZED VIEW LOG ON scott.dept;
Remove Database Links
CONNECT mviewadmin/mviewadmin@REP1.WORLD;
DROP DATABASE LINK CEL1.WORLD;
CONNECT sys/manager@CEL1.WORLD as sysdba;
DROP PUBLIC DATABASE LINK CEL2.WORLD;
Remove any leftover DBA_JOBS
CONNECT repadmin/repadmin@CEL1.WORLD
COLUMN JOB HEADING 'Job ID' FORMAT 999999
COLUMN PRIV_USER HEADING 'Privilege|Schema' FORMAT A10
COLUMN BROKEN HEADING 'Broken?' FORMAT A7
COLUMN next_start HEADING 'Next Start'
COLUMN INTERVAL HEADING 'Interval' FORMAT A25
SELECT JOB,
PRIV_USER,
BROKEN,
TO_CHAR(NEXT_DATE, 'DD.MM.YYYY:HH:MI:SS AM')
next_start,
INTERVAL
FROM DBA_JOBS
ORDER BY 1;
EXECUTE Dbms_Job.Remove(<Number>);
Remove Administrator
CONNECT sys/manager@CEL1.WORLD as sysdba;
--
BEGIN
DBMS_REPCAT_ADMIN.UNREGISTER_USER_REPGROUP (
username=>'repadmin',
privilege_type => 'receiver',
list_of_gnames => NULL);
END;
/
BEGIN
DBMS_REPCAT_ADMIN.UNREGISTER_USER_REPGROUP (
username=>'proxyadmin',
privilege_type => 'proxy_snapadmin',
list_of_gnames => NULL);
END;
/
CONNECT sys/manager@REP1.WORLD as sysdba;
BEGIN
DBMS_REPCAT_ADMIN.UNREGISTER_USER_REPGROUP (
username=>'mviewadmin',
privilege_type => 'receiver',
list_of_gnames => NULL);
END;
/
Unregister Propagator
CONNECT sys/manager@REP1.WORLD as sysdba;
BEGIN
Dbms_Defer_Sys.Unregister_Propagator (
username=>'propagator');
END;
/
Revoke Admin Any Schema Privilage from Replication Administrator
CONNECT sys/manager@CEL1.WORLD as sysdba;
BEGIN
Dbms_Repcat_Admin.Revoke_Admin_Any_Schema (
username=>'repadmin');
END;
/
|