当我从同义词进行计数时,它返回零行.当我从基础表执行相同 *** 作时,它返回12,000行.
我无法解释这种差异.有人可以帮忙吗?
select * from dba_synonymswhere synonym_name = 'CS_INCIDENTS_B_SEC';OWNER SYNONYM_name table_OWNER table_name DB_link------ ------------------- ------------ ------------------- -------APPS CS_INCIDENTS_B_SEC CS CS_INCIDENTS_ALL_B select count(*) from CS.CS_INCIDENTS_ALL_B;COUNT(*) ---------------------- 12549 select count(*) from APPS.CS_INCIDENTS_B_SEC;COUNT(*) ---------------------- 0
解释计划:
直接在桌子上……
EXPLAIN PLAN FORSELECT *FROM CS.CS_INCIDENTS_ALL_BPLAN_table_OUTPUT--------------------------------------------------------------------------| ID | Operation | name | Rows | Bytes| Cost(%cpu)|--------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 6056 | 1549K| 122 (3)|| 1 | table ACCESS FulL| CS_INCIDENTS_ALL_B | 6056 | 1549K| 122 (3)|--------------------------------------------------------------------------
通过同义词……
EXPLAIN PLAN FORSELECT *FROM APPS.CS_INCIDENTS_B_SECPLAN_table_OUTPUT---------------------------------------------------------------------------| ID | Operation | name | Rows | Bytes| Cost(%cpu)|---------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 262 | 0 (0)||* 1 | FILTER | | | | || 2 | table ACCESS FulL| CS_INCIDENTS_ALL_B | 6056 | 1549K| 122 (3)|---------------------------------------------------------------------------1 - filter(NulL IS NOT NulL)
同义词链……
sql> SELECT * 2 FROM dba_synonyms 3 START WITH 4 owner = 'CS' 5 AND synonym_name = 'CS_INCIDENTS_ALL_B' 6 CONNECT BY 7 owner = PRIOR table_owner 8 AND synonym_name = PRIOR table_name 9 /no rows selectedsql> SELECT * 2 FROM dba_synonyms 3 START WITH 4 owner = 'APPS' 5 AND synonym_name = 'CS_INCIDENTS_B_SEC' 6 CONNECT BY 7 owner = PRIOR table_owner 8 AND synonym_name = PRIOR table_name 9 /
检查数据库的策略…
sql> SELECT * 2 FROM dba_policIEs 3 WHERE OBJECT_name = 'CS_INCIDENTS_B_SEC' 4 /OBJECT_OWNER OBJECT_name POliCY_GROUP POliCY_name ------------- ------------------- ------------- -------------------- APPS CS_INCIDENTS_B_SEC SYS_DEFAulT CS_SR_SEC_SR_ACCESS PF_OWNER PACKAGE FUNCTION SEL INS UPD DEL IDX CHK --------- ------------------ -------------- --- --- --- --- --- --- APPS FND_GENERIC_POliCY GET_PREDICATE YES NO NO NO NO NO ENABLE STATIC_POliCY POliCY_TYPE LONG_PREDICATE------ ------------- ------------ --------------YES NO DYNAMIC YES解决方法 更新:
您已启用ROW LEVEL SECURITY
.
每次访问表时都会调用用户函数FND_GENERIC_POliCY.GET_PREDICATE,并限制对某些行的访问.
它会返回不同的结果,具体取决于您如何访问表:直接或通过SYNONYM.
您需要查看该函数并查看正在进行的 *** 作(或在此处发布函数文本).
总结以上是内存溢出为你收集整理的为什么Oracle同义词会向基础表返回不同数量的行?全部内容,希望文章能够帮你解决为什么Oracle同义词会向基础表返回不同数量的行?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)