如前例中所示,指定对象跳过应用虽然被取消,但是有可能在此期间由于Primary数据库做过数据修改,两端此时已经不同步,如果Standby端继续应用极有可能导致应用错误的数据。
对于这类情况,
Oracle数据库也早有预见,DBMS_LOGSTDBY包中还有一个过程叫INSTANTIATE_TABLE,专门用来同步一下跳过的对象,以保持与Primary数据库的一致。
DBMS_LOGSTDBY.INSTANTIATE_TABLE的调用语法如下:
1. DBMS_LOGSTDBY.INSTANTIATE_TABLE (
2. schema_name IN VARCHAR2,
3. table_name IN VARCHAR2,
4. dblink IN VARCHAR2);
除了SCHEMA名称和表名称外,还需要提供一个数据库链,因此这里我们首先在逻辑Standby端创建一个连接Primary数据库的数据库链:
1. JSSLDG> CREATE DATABASE LINK PRE_TBL_DATA CONNECT TO
2. SYSTEM IDENTIFIED BY VERYSAFE USING 'jsspre_192.168.100.100';
3. Database link created.
执行使用DBMS_LOGSTDBY.INSTANTIATE_TABLE过程,重新同步SCOTT.TMP1表(注意执行该过程前别忘了暂停当前的SQL应用):
1. JSSLDG> EXEC DBMS_LOGSTDBY.INSTANTIATE_TABLE
2. ('SCOTT', 'TMP1', 'PRE_TBL_DATA');
3. PL/SQL procedure successfully completed.
4. JSSLDG> SELECT * FROM SCOTT.TMP1;
5. NAME
6. --------------------
7. test1
8. test2
9. test3
10. test4
11. test5
12. test6
13. 6 rows selected.
对象已被重建,然后重新启动SQL应用即可:
1. JSSLDG> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
2. Database altered.
转载于:https://blog.51cto.com/19880614/826772