带着疑问测试下: 重新创建表 对应表的synonym是否会失效,且重新查询synonym是否会自动将失效的synonym置为有效:
RAC环境:
SQL> SELECT O.OWNER,O.OBJECT_NAME,O.OBJECT_TYPE,O.STATUS,O.CREATED,O.LAST_DDL_TIME,O.TIMESTAMP FROM DBA_OBJECTS O WHERE O.OBJECT_NAME = 'LOTTERY';
OWNER OBJECT_NAME OBJECT_TYPE STATUS CREATED LAST_DDL_TIME TIMESTAMP
------------------------------ ------------------------------ ------------------- ------- ----------- ------------- -------------------
FWSB_B LOTTERY SYNONYM VALID 2014/11/5 1 2014/11/5 11: 2014-11-05:11:18:58
FWSB LOTTERY TABLE VALID 2014/11/5 1 2014/11/5 11: 2014-11-05:11:18:58
SQL> drop table fwsb.lottery purge;
Table dropped
SQL> create table fwsb.lottery as select * from dual;
Table created
SQL>
SQL> SELECT O.OWNER,O.OBJECT_NAME,O.OBJECT_TYPE,O.STATUS,O.CREATED,O.LAST_DDL_TIME,O.TIMESTAMP FROM DBA_OBJECTS O WHERE O.OBJECT_NAME = 'LOTTERY';
OWNER OBJECT_NAME OBJECT_TYPE STATUS CREATED LAST_DDL_TIME TIMESTAMP
------------------------------ ------------------------------ ------------------- ------- ----------- ------------- -------------------
FWSB_B LOTTERY SYNONYM INVALID 2014/11/5 1 2014/11/5 11: 2014-11-05:11:18:58
FWSB LOTTERY TABLE VALID 2014/11/5 1 2014/11/5 11: 2014-11-05:11:18:58
SQL>
测试环境:
SQL> SELECT count(1) FROM LOTTERY@db_backup; --因为【db_backup有对lottery同义词重新编译权限】 所以select 调用就相当于重新编译synonym 了...
COUNT(1)
----------
99
SQL>
SQL> SELECT O.OWNER,O.OBJECT_NAME,O.OBJECT_TYPE,O.STATUS,O.CREATED,O.LAST_DDL_TIME,O.TIMESTAMP FROM DBA_OBJECTS O WHERE O.OBJECT_NAME = 'LOTTERY';
OWNER OBJECT_NAME OBJECT_TYPE STATUS CREATED LAST_DDL_TIME TIMESTAMP
------------------------------ --------------- --------------- ------------------- ------- ----------- ------------- -------------------
FWSB_B LOTTERY SYNONYM VALID 2014/11/5 1 2014/11/5 11: 2014-11-05:11:28:38
FWSB LOTTERY TABLE VALID 2014/11/5 1 2014/11/5 11: 2014-11-05:11:27:40
SQL>