2

我有一个执行EXCHANGE SUBPARTITION语句的过程。

根据架构中的所有表都有VPD POLICY保护的事实,

我们有一个存储过程,EXEMPT ACCESS POLICY它在操作之前授予用户并在操作之后撤销它。

通常它工作得很好,但有时,我们仍然会遇到这个异常:

ORA-14136: ALTER TABLE EXCHANGE 受细粒度安全性限制

即使在我们给予资助之后,它也会发生。

例子:

交换子分区代码:

-- exchange subpartition statement
--ALTER TABLE DWH.FACT_AMS EXCHANGE SUBPARTITION P07_2017_ALL_AUDIT WITH TABLE DWH.MNG_ALL_CURRENT_KPIS

V_EXEC_I :=Q_CUR.SQL_QUERY;                                                      

--insert to log the exchage partition step
LOG_WRITER_INS(V_EXEC_I,V_ERROR_MSG,V_COMMENT_MSG,V_MASTER,C_PROCESS_NAME,C_PID);

-- execute exchange subpartition statement
DBA_MAINT.SF_GRANT_EXCEMPT(1);
EXECUTE IMMEDIATE V_EXEC_I;
DBA_MAINT.SF_GRANT_EXCEMPT(0);

sf_grant_excempt 程序:

create or replace
procedure           SF_GRANT_EXCEMPT(grant_opt in number)
is

v_cnt number := -1;

begin

if grant_opt = 1 then
      EXECUTE IMMEDIATE 'GRANT EXEMPT ACCESS POLICY TO dwh';
ELSIF GRANT_OPT = 0 THEN
      EXECUTE IMMEDIATE 'REVOKE EXEMPT ACCESS POLICY from dwh';
END IF;

END SF_GRANT_EXCEMPT;

它可以发生在不同的表上(这是一个动态的过程),但是语句中涉及的表总是属于同一所有者(总是dwh),EXCHANGE SUBPARTITION同一用户的包的代码也是(dwh) ,并且我们得到的异常不是来自 SF_GRANT_EXCEMPT 过程。因此,赠款正在发挥作用...

4

0 回答 0