更新它时Oracle锁表

时间:2018-02-13 19:41:56

标签: oracle

我有一个下游系统使用的oracle表。每当我对表(DML)进行更改时,我都想阻止下游系统读取它。

可以在Oracle中做到吗?从我读到的,即使我在更新它时锁定表,读者仍然可以查询表。 有办法防止这种情况吗?

2 个答案:

答案 0 :(得分:0)

您可以使用Oracle Fine Grained Auditing功能创建一个策略,该策略将引发ORA-20001"表XYZ当前正在进行维护,请稍后重试"每当有人试图通过SELECT声明访问该表时。

作为额外的好处,您可以限制策略仅影响请求更新行或列的SELECT语句(如果您了解它们)。例如,假设您有一个只更新几列的进程。您的FGA策略可以配置为仅在请求任何列时抛出ORA-20001 - 使表可用于与您的处理无关的查询。

答案 1 :(得分:0)

您可以使用SYNONYM(但我之前没有尝试过)

CREATE TABLE t1
(col1 VARCHAR2(10));

CREATE TABLE t2
(col1 VARCHAR2(10));

INSERT INTO t1
values ('t1');

CREATE OR REPLACE PUBLIC SYNONYM TABLE1_S FOR T1;

SELECT * 
  FROM TABLE1_S;

COL1     
----------
t1     

CREATE OR REPLACE PUBLIC SYNONYM TABLE1_S FOR T2;

SELECT * FROM TABLE1_S;

no rows selected