无法在Oracle架构之间交换分区。 ALTER TABLE EXCHANGE受到细粒度安全性的限制。境界违规......豁免访问政策

时间:2014-09-23 15:46:25

标签: oracle database-partitioning database-permissions

我有一个可以执行以下操作的Oracle过程:

  1. 从源表中选择分区
  2. 将此分区中的记录插入到Swap表中。 (交换表的设计/结构与源匹配)
  3. 修改交换表中的记录。
  4. 是否使用“交换分区”将交换表中的记录交换回源。
  5. 当过程和所有表在同一模式中时,这非常有效:( INBOUND)

    但是......下一步是让它使用另一个Schema中存在的Source表:WAREHOUSE

    现在Exchange分区步骤失败了:

    Alter Table WAREHOUSE.ITEM_FCT Exchange Partition SYS_ABCD WITH TABLE INBOUND.ITEM_SWP Including     
    Indexes Without Validation;
    

    SQL错误:ORA-14136:由细粒度安全性限制的ALTER TABLE EXCHANGE 14136. 00000 - “由细粒度安全限制的ALTER TABLE EXCHANGE” *原因:由于VPD,用户进行交换没有完整的表访问权限            政策。 *行动:向该用户授予豁免权限。

    我尝试根据Google研究添加所需的权限:

    grant ALL on INBOUND.ITEM_SWP TO WAREHOUSE;
    grant EXEMPT ACCESS POLICY to INBOUND;
    

    当我尝试免除授权访问策略时,它会说:

    grant EXEMPT ACCESS POLICY to INBOUND
    Error report -
    SQL Error: ORA-47410: Realm violation for GRANT on EXEMPT ACCESS POLICY
    

    我非常感谢任何指导。将所有内容放在WAREHOUSE模式中将是绝对的最后手段。

    谢谢!

3 个答案:

答案 0 :(得分:1)

您无法对启用了FGAC策略的表应用Exchange分区操作。 Oracle参考中描述了此限制。您需要禁用策略,应用操作并再次重新启用它。但是,这不是理想的原因,因为您的数据将在一段短时间内不受政策保护。

答案 1 :(得分:1)

如果您已授予EXEMPT_ACCESS_ROLE,则无需禁用该策略即可执行交换分区操作。上面的用户即使在授予角色后也可能会遇到问题,因为他试图在2个不同的架构之间交换分区,但仅将角色授予一个架构。

答案 2 :(得分:0)

我遇到了同样的问题,但是简单的拨款解决了我的问题。

-在分区表架构上

 GRANT ALL ON <partition-table> TO <source-table-schema-name>;

-在源表架构上

GRANT ALL ON <source-table> TO <partition-table-schema-name>;

-关于分区表架构的最终查询

ALTER TABLE <partition-table> EXCHANGE PARTITION p_all WITH TABLE <source-table-schema-name>.<source-table> INCLUDING INDEXES WITHOUT VALIDATION;

我希望这对您也有帮助。干杯!