【问题标题】:SYSTEM tablespace in Oracle databaseOracle 数据库中的 SYSTEM 表空间
【发布时间】:2018-10-08 06:55:28
【问题描述】:

我不知道如何从 oracle 数据库的 SYSTEM 表空间中获取所有表。

我正在执行下一个命令:

select * 
from dba_tables 
where tablespace_name='SYSTEM'; 

然而,像 all_users 或 ALL_TABLES 这样的表没有在这个输出中列出(我读到这些表来自这里的 SYSTEM 表空间:https://www.techonthenet.com/oracle/sys_tables/index.php)。

我做错了什么?这就是我的理解:SYSTEM是一个表空间,其中包含有关数据库信息的元数据,这就是为什么它有一些像“all_tables”这样的表。

如果我错了,请尽可能纠正我。

【问题讨论】:

  • 这个问题展示了依赖互联网上的非官方资源而不是实际的 Oracle 文档的问题。这些不是表,而是 Oracle 数据字典中的 视图Find out more.
  • 表空间包含数据文件。要获取数据,您应该根据架构进行查询。

标签: sql oracle


【解决方案1】:

ALL_USERSALL_TABLES 是视图,而不是表,因此它们出现在 ALL_VIEWS 视图中。以下查询可能对您有用:

SELECT *
  FROM ALL_TABLES
  WHERE TABLESPACE_NAME = 'SYSTEM';

SELECT OWNER, VIEW_NAME
  FROM ALL_VIEWS
  WHERE VIEW_NAME IN ('ALL_USERS', 'ALL_TABLES')

SELECT OWNER, TABLE_NAME
  FROM ALL_TABLES
  WHERE TABLE_NAME IN ('ALL_USERS', 'ALL_TABLES')

See this dbfiddle

【讨论】:

    【解决方案2】:

    Tablespace 在 Oracle 术语中是用于数据存储的物理或内存位置。您在问题中指的是schemas

    在大多数情况下,数据字典包含视图,而不是表。您可以通过查询 all_views 而不是 all_tables 来找到它们。因为它们是动态视图并且不存储数据,所以没有表空间。相反,请查询架构所有者 SYS 和 'SYSTEM`。

    SELECT *
      FROM all_views
     WHERE owner IN ('SYS', 'SYSTEM')
    

    【讨论】:

    • 我会同时添加“SYS”和“SYSTEM”:select * from dba_tables where owner in ('SYS','SYSTEM')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    相关资源
    最近更新 更多