还原了一个Oracle数据库发现表DBA_DATA_FILES 找不到,找了很多网上文章,说是数据库一个Bug,重启就可以了,但是实例情况却不是这样。

在Oracle中执行语句

Select * from DBA_DATA_FILES

报错如下:

ERROR:
ORA-04043: object DBA_DATA_FILES does not exist

我的这个是因为角色权限不对,原来以为只要是有dba权限就可以如下:

grant  dba  to myuser;

以上权限也是不够的,需要添加以下授权就可以了:

grant sysdba myuser;

其实需要查询 DBA_DATA_FILES表时我们使用sys登录 就可以了,如果自建账号需要这个权限就把sysdba给当前用户就行了。

报错原因

查询 DBA_DATA_FILES 报 ORA-04043: object does not exist,多因当前用户缺少访问该数据字典视图的权限,而不是数据库损坏。

处理办法

  • 仅授予 dba 角色有时仍不够,可再授予 SYSDBA:grant sysdba to myuser;(以 sys 身份执行)。
  • 或直接授予查询权限:grant select on dba_data_files to myuser;
  • 确认当前连接用户的权限:select * from user_role_privs;
  • 查询时加方案前缀:select * from sys.dba_data_files;

相关阅读

参考资料