查询DBA_Tables中列出的表

Bra*_*eon 4 oracle

我们公司的第三方产品使用Oracle作为后端.我正在尝试登录Oracle数据库并查看架构和数据.我以sys/sysdba身份登录,创建了一个具有应用程序创建的默认表空间的用户,并授予用户查询结构所需的所有权限.我还将O7_DICTIONARY_ACCESSIBILITY设置为true以允许查询数据字典对象.

以用户身份登录并查询User_Tables后,不会返回任何内容.但是当我查询DBA_Tables时,我希望找到的表格会被返回.我是Oracle的新手,所以我不太确定非系统表如何在表空间中,而不是user_table.

更重要的是,您如何查询这些表中的数据?每当我从表中尝试一个简单的"Select*"时,我得到一个"表或视图不存在"错误.

提前致谢.

Jus*_*ave 15

您为用户设置的默认表空间控制创建该用户拥有的表空间对象.它与它们可以查询的对象无关.

  • USER_TABLES返回有关特定用户拥有的表的信息.这听起来不像您的用户拥有任何表,因此您可能希望它是空的.
  • ALL_TABLES返回有关特定用户有权访问的表的信息.如果您授予了适当的权限,则您的用户应该在此数据字典视图中查看表.
  • DBA_TABLES 即使您不一定有权访问基础表,也会返回有关数据库中每个表的信息.

如果您尝试查询其中一个表中的数据,是否指定了模式名称(OWNER列中ALL_TABLES)?如果您不拥有对象,则通常需要使用完全限定名称来引用它,即

SELECT *
  FROM schema_owner.table_name
Run Code Online (Sandbox Code Playgroud)

如果,您可以避免使用完全限定名称

  • 您为对象创建同义词(公共或私有)
  • 您更改CURRENT_SCHEMA会话.这会更改在其下解析名称的默认架构.它不会影响权限和权限.您可以使用该命令更改当前架构

    ALTER SESSION SET current_schema = new_schema_name

    您必须为用户创建的每个会话执行此操作 - 可能在登录触发器中执行此操作.