当我运行一个使用DBMS_COMPARISON包在两个不同模式上同步两个表的存储过程时,得到ORA-00942表或视图不存在错误。
这大概就是我所拥有的:
remote table local comparison local table
DB1.PRODUCTS DB2.PRODUCTS_CMP DB2.PRODUCTS
这是本地DB2过程:
create or replace PROCEDURE SYNC_SINGLE AS
L_SCAN_INFO SYS.DBMS_COMPARISON.COMPARISON_TYPE;
L_RESULT BOOLEAN;
L_COMPNAME VARCHAR2(30);
BEGIN
L_COMPNAME:='PRODUCT_CMP';
SYS.DBMS_COMPARISON.PURGE_COMPARISON(
COMPARISON_NAME => L_COMPNAME
);
L_RESULT :=
SYS.DBMS_COMPARISON.COMPARE (
COMPARISON_NAME => L_COMPNAME,
SCAN_INFO => L_SCAN_INFO,
PERFORM_ROW_DIF => TRUE
);
FOR ROW_ID IN (
SELECT SCAN_ID
FROM USER_COMPARISON_SCAN_SUMMARY
WHERE COMPARISON_NAME = L_COMPNAME
AND STATUS = 'BUCKET DIF'
)
LOOP
SYS.DBMS_COMPARISON.CONVERGE (
COMPARISON_NAME => L_COMPNAME,
SCAN_ID => ROW_ID.SCAN_ID,
SCAN_INFO => L_SCAN_INFO,
CONVERGE_OPTIONS => SYS.DBMS_COMPARISON.CMP_CONVERGE_REMOTE_WINS,
PERFORM_COMMIT => FALSE
);
END LOOP ROW_ID;
SYS.DBMS_COMPARISON.PURGE_COMPARISON(
COMPARISON_NAME => L_COMPNAME
);
END SYNC_SINGLE;
该过程以以下错误结束:
ORA-00942: table or view does not exist
ORA-06512: a "SYS.DBMS_COMPARISON", line 734
ORA-06512: a "SYS.DBMS_COMPARISON", line 5964
ORA-06512: a "SYS.DBMS_COMPARISON", line 682
ORA-06512: a "DB2.SYNC_SINGLE", line 26
ORA-06512: a "DB2.SYNC_SINGLE", line 26
ORA-06512: a line 2
我想这里有个许可问题,但我搞不懂是什么。用户SYS已经获得了本地表DB2.PRODUCTS上的所有权限,而且,我在相同的模式上有其他表,我以相同的方式同步这些表,对于这些表,一切都进行得很好。查看表SYS.COMPARISON$和SYS.COMPARISON_COL$,一切似乎都配置正确。
有人能帮我建议一下我该检查什么吗?
发布于 2020-10-16 15:46:40
我找到了它是什么:AUTHID CURRENT_USER在过程声明中丢失了。
create or replace PROCEDURE SYNC_SINGLE AUTHID CURRENT_USER AS
https://stackoverflow.com/questions/64259644
复制相似问题