系统表上的 Oracle 闪回
Oracle Flashback on System Tables
是否可以在系统表上使用 Oracle 闪回,例如 user_tables
或 cols
?
我能够对我创建的表成功发出闪回查询,但是当我对系统表尝试相同的查询时,我得到 ORA-01031: insufficient privileges
。是否需要授予特殊权限?
这是预料之中的,因为您使用 AS OF
查询访问的视图基于 SYS
拥有的系统表,并且无法通过 [=13= 等授权访问] 或 select any table
。
您需要将 O7_DICTIONARY_ACCESSIBILITY
设置为 TRUE
以允许用户闪回系统表。
SQL> conn jay/jay
Connected.
SQL> SELECT * FROM user_tables
AS OF TIMESTAMP
TO_TIMESTAMP('2017-03-21 06:45:00', 'YYYY-MM-DD HH24:MI:SS');
SELECT * FROM user_tables
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> alter system set O7_DICTIONARY_ACCESSIBILITY=true scope=spfile;
System altered.
SQL> startup force
ORACLE instance started.
Total System Global Area 413372416 bytes
Fixed Size 2253784 bytes
Variable Size 327158824 bytes
Database Buffers 79691776 bytes
Redo Buffers 4268032 bytes
Database mounted.
Database opened.
SQL> conn jay/jay
Connected.
SQL> SELECT * FROM user_tables
AS OF TIMESTAMP
TO_TIMESTAMP('2017-03-21 06:45:00', 'YYYY-MM-DD HH24:MI:SS');
在 Oracle 11.2.0.4 中测试。
注意:在启用之前阅读文档。
是否可以在系统表上使用 Oracle 闪回,例如 user_tables
或 cols
?
我能够对我创建的表成功发出闪回查询,但是当我对系统表尝试相同的查询时,我得到 ORA-01031: insufficient privileges
。是否需要授予特殊权限?
这是预料之中的,因为您使用 AS OF
查询访问的视图基于 SYS
拥有的系统表,并且无法通过 [=13= 等授权访问] 或 select any table
。
您需要将 O7_DICTIONARY_ACCESSIBILITY
设置为 TRUE
以允许用户闪回系统表。
SQL> conn jay/jay
Connected.
SQL> SELECT * FROM user_tables
AS OF TIMESTAMP
TO_TIMESTAMP('2017-03-21 06:45:00', 'YYYY-MM-DD HH24:MI:SS');
SELECT * FROM user_tables
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> alter system set O7_DICTIONARY_ACCESSIBILITY=true scope=spfile;
System altered.
SQL> startup force
ORACLE instance started.
Total System Global Area 413372416 bytes
Fixed Size 2253784 bytes
Variable Size 327158824 bytes
Database Buffers 79691776 bytes
Redo Buffers 4268032 bytes
Database mounted.
Database opened.
SQL> conn jay/jay
Connected.
SQL> SELECT * FROM user_tables
AS OF TIMESTAMP
TO_TIMESTAMP('2017-03-21 06:45:00', 'YYYY-MM-DD HH24:MI:SS');
在 Oracle 11.2.0.4 中测试。
注意:在启用之前阅读文档。