0.先来个例子:CREATE OR REPLACE SYNONYM IMWSAPP.TB_IWR_MPS_PROCESS_LOG_X FOR IMWS.TB_IWR_MPS_PROCESS_LOG_X;
synonyms是对可以跨schema的表的代理,主要做对表,权限的管理。
跟view视图类似,但是view只能在同一个schema下,
比如:一个synonyms名叫IFINAPP,他本身也是一个schema,可以在他下面建表,同时还可以在他下面建synonyms,让IFINAPP由从多个schema下抽取的一些表组成。
synonyms也像个别名,可以给N多个数据源都起这个别名,这样即使很多app要连到很多不同的jndi下面,也都可以在配置的时候都用这同一个synonyms名字。
synonyms是单向的。如果CIS要用到IRS的表,而CIS的表是建在IFIN这个schema下的,同时IFINAPP是IFIN的synonyms;(一旦有了synonyms的关系,2者就不能有同名的表了)
而IRS的表完全是建在IFINAPP和IFIN(分别在这俩个schema下都建了)下,且2者之间没有synonyms关系。
我们CIS在IFIN下建的view视图,这个视图是去取IRS的表数据。现在问题就来了,CIS根据view是取的IFIN下的表,而IRS这个app取数据的时候是直接取的IFINAPP的表,就导致CIS AND IRS2个app查出来的数据不一致了。
1.q1:IRS表建在IFINAPP,CIS 的view还是建在IFIN,同时IFINAPP做IFIN的synonyms,这样还有问题吗?
A1:有。synonyms是单向的IFINAPP代理IFIN,在IFIN是查不到IFINAPP下的IRS的表的。
2.synonyms的创建必须是以connect sys as sysdba的权限才行。写drs里面用到的sql,自己整体跑一遍都正确而且可以连贯执行才行。
3.q3:trigger要创建synonyms吗?
IMWS下的表aLog,bLog。创建在IMWS下的trigger作用:一旦aLog表中插入数据,bLog表中插入相同的数据。MPS项目连得数据源是IMWSAPP(它对IMWS下面的MPS的表都做了synonyms)
问题就是这个trigger只在IMWS下面,那这样的话向IMWSAPP synonyms对应的aLog中插入数据的时候,IMWS下的bLog还会自动执行trigger,插入数据吗?
A3:会的,trigger是在table的基础上的,虽然存在synonyms,最外层调用都会通过synonyms,但是trigger的定义就是只要aLog插入数据bLog就会插入数据。所以不会受任何影响,不需要再创建trigger的synonyms。
1.创建完了synonym,同时还要授权,不然还是操作不了synonym对应的那张表的
CONNECT AS SYSDBA;
CREATE OR REPLACE SYNONYM IMWSAPP.TB_IWR_MPS_PROCESS_LOG_X FOR IMWS.TB_IWR_MPS_PROCESS_LOG_X;
GRANT ALTER, DELETE, INSERT, SELECT, UPDATE ON IMWS.TB_IWR_MPS_PROCESS_LOG_X TO IMWSAPP;
COMMIT;