如前例中所示,指定对象跳过应用虽然被取消,但是有可能在此期间由于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.