系统表上的Oracle闪回

时间:2017-03-21 10:29:28

标签: database oracle flashback

是否有可能在系统表上使用Oracle Flashback,例如user_tablescols

我能够针对我创建的表成功发出闪回查询,但是当我对System表尝试相同时,我得到了ORA-01031: insufficient privileges。是否需要授予特权?

1 个答案:

答案 0 :(得分:1)

这是预期的,因为您使用AS OF查询进行访问的视图基于SYS拥有的系统表,并且无法被flashback any table等授权访问或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中测试。

注意:在启用之前阅读文档。

<强>参考: O7_DICTIONARY_ACCESSIBILITY