我有一个下游系统使用的oracle表。每当我对表(DML)进行更改时,我都想阻止下游系统读取它。
可以在Oracle中做到吗?从我读到的,即使我在更新它时锁定表,读者仍然可以查询表。 有办法防止这种情况吗?
答案 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