查询DBA_Tables中列出的表

时间:2009-10-08 22:58:29

标签: oracle

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

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

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

提前致谢。

1 个答案:

答案 0 :(得分:14)

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

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

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

SELECT *
  FROM schema_owner.table_name

如果

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

    更改当前架构

    ALTER SESSION SET current_schema = new_schema_name

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