我们公司的第三方产品使用Oracle作为后端。我正在尝试登录Oracle数据库并查看架构和数据。我以sys / sysdba身份登录,创建了一个具有应用程序创建的默认表空间的用户,并授予用户查询结构所需的所有权限。我还将O7_DICTIONARY_ACCESSIBILITY设置为true以允许查询数据字典对象。
以用户身份登录并查询User_Tables后,不会返回任何内容。但是当我查询DBA_Tables时,我希望找到的表格会被返回。我是Oracle的新手,所以我不太确定非系统表如何在表空间中,而不是user_table。
更重要的是,您如何查询这些表中的数据?每当我从表中尝试一个简单的“Select *”时,我得到一个“表或视图不存在”错误。
提前致谢。
答案 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
您必须为用户创建的每个会话执行此操作 - 可能是在登录触发器中。