为什么 Oracle 没有 SHOW TABLES 命令

MySQL 和 PostgreSQL 用户习惯于使用 SHOW TABLES;\dt。在 Oracle 中,这两个命令都不存在,运行它们会报错。

Oracle 使用数据字典(Data Dictionary),这是一组只读的系统视图,存储数据库中所有内容的元数据。查询这些视图比单行快捷命令更冗长,但也功能强大得多。除了表名之外,您还可以在同一次查询中获取存储详情、分区信息、行数和上次分析日期。

数据库 如何列出表
MySQL SHOW TABLES;
PostgreSQL \dt 或查询 information_schema
Oracle 查询数据字典视图(USER_TABLESALL_TABLESDBA_TABLES

数据字典按三个作用域级别组织,每个级别对应不同的数据库访问权限。您查询哪个视图取决于您的账户被允许查看的内容,而这正是下一节要介绍的内容。

oracle 列出表是什么意思

根据访问权限级别在 Oracle 数据库中列出表

Oracle 根据所有权和权限将其数据字典视图组织为三个级别。在编写任何查询之前,了解您的账户适用的级别是第一步。

方法 1:列出您拥有的表(USER_TABLES)

当您只需要查看自己模式中创建的表时,请使用 USER_TABLES。这是开发人员处理自己对象时最常见的起点。

SELECT table_name, tablespace_name, num_rows, last_analyzed
FROM user_tables
ORDER BY table_name;

 

oracle 列出表   列出您拥有的表 user tables

包含 num_rowslast_analyzed 可以让您快速了解表是否有数据以及优化器上次收集统计信息的时间。

注意:USER_TABLES 没有 OWNER 列。由于此视图仅显示您自己的表,Oracle 认为所有者字段是多余的,完全将其省略。

方法 2:列出您有权访问的表(ALL_TABLES)

在多模式环境中,您可能需要查看其他用户拥有的、您已被授予读取或修改权限的表。ALL_TABLES 涵盖您的账户可访问的所有表,而不仅仅是您自己的表。

要按特定模式筛选,请添加 WHERE 子句:

SELECT owner, table_name, tablespace_name
FROM all_tables
WHERE owner = 'SALES_DEPT'
ORDER BY owner, table_name;

 

oracle 列出表   列出您有权访问的表 all tables

一个重要细节:Oracle 默认以大写存储表名和用户名。查询 WHERE owner = 'sales_dept' 将返回零结果。请始终在单引号内使用大写,除非模式是用带引号的混合大小写名称创建的。

方法 3:列出数据库中的所有表(DBA_TABLES)

DBA_TABLES 为您提供跨所有模式的每个表的完整视图。您需要 DBA 角色或 SELECT ANY DICTIONARY 权限才能查询它。

由于 Oracle 附带许多内部系统模式,原始查询会返回大量噪音。使用排除列表将其过滤掉:

SELECT owner, table_name, tablespace_name
FROM dba_tables
WHERE owner NOT IN ('SYS', 'SYSTEM', 'OUTLN', 'DBSNMP', 'APPQOSSYS')
ORDER BY owner, table_name;

 

oracle 列出表   列出数据库中的所有表 dba tables

如果您收到 ORA-00942:表或视图不存在,则您的账户缺少所需权限。请向 DBA 申请授予您 SELECT_CATALOG_ROLE,这是无需完整 DBA 权限即可启用对字典视图读取访问的标准方式。

您会实际使用的 6 个高级 Oracle 列出表查询

标准查询可以获取基本列表。以下查询更进一步,帮助您按列、按大小或按部分名称查找表,并为工作选择合适的工具。

使用场景 查询视图 所需权限
按列名查找表 ALL_TAB_COLUMNS 标准
检查行数和上次分析日期 USER_TABLES 标准
按部分名称搜索表 USER_TABLES 标准
按大小列出表 DBA_SEGMENTS DBA 角色
列出排除系统模式的表 DBA_TABLES DBA 角色
可视化浏览 SQL Developer / dbForge 用户访问

1. 按列名查找表

如果您知道一个列名但不记得哪些表使用了它,请查询 ALL_TAB_COLUMNS。这在包含许多相关表的复杂模式中尤其有用。

SELECT owner, table_name, column_name
FROM all_tab_columns
WHERE column_name = 'USER_ID'
ORDER BY owner, table_name;

oracle 列出表   按列名查找表

 

2. 检查行数和上次分析日期

Oracle 优化器依赖统计信息来选择最高效的执行计划。如果 num_rows 不准确或 last_analyzed 是几个月前的,查询性能可能会悄悄下降,而没有任何明显错误。

SELECT table_name, num_rows, last_analyzed
FROM user_tables
WHERE num_rows > 0
ORDER BY num_rows DESC;

oracle 列出表   检查行数和上次分析日期

 

提示:如果您的统计信息看起来过时,请让 DBA 在相关表上运行 DBMS_STATS.GATHER_TABLE_STATS

3. 按部分名称搜索表

当您只记得表名的一部分时,使用 LIKE 运算符配合 % 通配符。请将搜索字符串保持为大写,以匹配 Oracle 存储标识符的方式。

SELECT table_name 
FROM user_tables 
WHERE table_name LIKE '%INVENTORY%';

 

oracle 列出表   按部分名称搜索表

4. 按大小列出表

Oracle 中的表数据存储在段中,因此您需要查询 DBA_SEGMENTS 来获取准确的大小数据。此查询返回每个表的总大小(以 MB 为单位),从大到小排列。

SELECT segment_name AS table_name, 
       owner, 
       SUM(bytes) / 1024 / 1024 AS size_mb
FROM dba_segments
WHERE segment_type = 'TABLE'
GROUP BY segment_name, owner
ORDER BY size_mb DESC;

 

oracle 列出表   按大小列出表

这是进行存储审计或在迁移前识别大表的实用起点。

5. 列出排除 Oracle 系统模式的表

DBA_TABLES 的原始查询包含 Oracle 自己的内部表,这些通常不是您需要的。将其过滤掉以获得应用程序表的清晰视图。

SELECT owner, table_name 
FROM dba_tables 
WHERE owner NOT IN (
    'SYS', 'SYSTEM', 'OUTLN', 'DBSNMP', 
    'APPQOSSYS', 'CTXSYS', 'XDB', 'WMSYS'
)
ORDER BY owner, table_name;

 

oracle 列出表   列出排除 oracle 系统模式的表

6. SQL*Plus vs SQL Developer vs GUI 工具

选择正确的工具取决于您的工作方式:

  • SQL*Plus / SQLCL:最适合快速检查和 shell 脚本。轻量级,但输出格式需要手动设置,如 SET LINESIZE 等命令。
  • SQL Developer:Oracle 的标准 GUI。左侧的 Connections 面板让您无需编写任何 SQL 即可直观浏览表。
  • dbForge / Toad:具有更高级功能的第三方工具,包括性能分析和可视化 ER 图。

常见错误与故障排查

即使是经验丰富的 DBA 在查询 Oracle 数据字典时也会遇到访问问题或意外的空结果。以下是四个最常见的问题及其修复方法。

1. ORA-00942:表或视图不存在

  • 原因:您尝试在未获得所需管理权限的情况下查询 DBA_TABLES。Oracle 对未经授权的用户完全隐藏这些视图,因此该错误看起来与查询不存在的表相同。
  • 修复:根据您的需要切换到 USER_TABLESALL_TABLES。如果您确实需要访问 DBA_TABLES,请让管理员授予您 SELECT_CATALOG_ROLESELECT ANY DICTIONARY 权限。

2. USER_TABLES 返回空结果

  • 原因:当前用户不拥有任何表。这在新创建的账户或持有权限但没有对象的专用连接用户中很常见。
  • 修复:改为查询 ALL_TABLES 以查看您的账户被授予访问权限的所有内容。如果您需要查看其他模式中的表,请确认模式所有者已向您的用户授予对这些对象的 SELECT 权限。

3. 混合大小写表名和带引号的标识符

  • 原因:Oracle 默认以大写存储所有标识符。如果表是使用双引号创建的,例如 CREATE TABLE "Sales_Data",Oracle 会保留精确的大小写。使用 'SALES_DATA' 的标准查询将返回空。
  • 修复:检查数据字典查询中的 TABLE_NAME 列。如果看到小写字母,则在后续所有语句中引用该表时必须使用双引号:SELECT * FROM "Sales_Data";

4. DBA_TABLES 未返回行

  • 原因:在多租户架构(Oracle 12c 及更高版本)中,您可能连接到了容器数据库(CDB)根,而不是您的应用程序表实际所在的可插拔数据库(PDB)。
  • 修复:检查您的连接字符串并确认您连接到了哪个数据库。如有需要,在运行查询之前使用 ALTER SESSION SET CONTAINER = pdb_name; 切换到正确的 PDB。

超越列出表:使用 i2Stream 进行 Oracle 复制

一旦您清楚了解了表结构,自然的下一个问题就是如何使数据保持受保护并在系统间同步。对于在生产环境中运行 Oracle 的团队来说,这意味着需要有一个可靠的复制层,能够处理高事务量、模式变更和跨平台环境,而不会中断生产运行。

i2Stream 是一款企业级数据库复制解决方案,正是为这些场景而构建的。它不是将复制视为一种通用流程,而是直接映射 Oracle 环境在实践中面临的挑战。

i2Stream 关键功能

  • 近零延迟的实时数据同步: i2Stream 通过日志解析而非轮询来捕获变更,在高并发下也能实现毫秒级同步。对于写入负载较重的 Oracle 环境,这意味着复制能够跟上生产节奏而不会落后。
  • 完整 DDL 和 DML 支持: 模式变更、表修改和数据操作都被捕获并一起复制。您无需在模式更新后暂停复制或手动重新同步。
  • 事务级一致性: i2Stream 确保事务在目标端按正确顺序应用,并内置了针对插入、更新和删除操作的冲突解决机制。即使在复杂的高并发工作负载下,数据完整性也能得到保持。
  • 无代理架构: 生产数据库服务器上无需安装任何软件。这意味着对您的 Oracle 实例零性能影响,且源端无额外维护开销。
  • 灵活的复制拓扑: i2Stream 支持一对一、一对多、多对一和级联同步配置。无论您是将分支机构数据整合到中央数据仓库,还是将数据集分发到多个目标,拓扑结构都可以根据您的架构进行配置。
  • 广泛的数据库兼容性: 除 Oracle 外,i2Stream 还支持 SQL Server、MySQL、PostgreSQL、DB2 以及包括 Kafka、Hive 和 HDFS 在内的大数据平台等 40 多种数据库环境。这使其成为管理异构环境的团队的实用选择。

对于需要超越复制的更广泛数据韧性的团队,英方软件的产品套件覆盖了完整范围。i2Backup 处理跨物理、虚拟和云环境的集中备份,而 i2Move 支持 Oracle 及其他系统的非中断跨平台迁移。

常见问题

问 1:我可以在没有 DBA 权限的情况下在 Oracle 中列出表吗?

可以。USER_TABLESALL_TABLES 都可以被标准用户访问,无需任何特殊权限。USER_TABLES 显示您拥有的表,ALL_TABLES 显示您被授予访问权限的所有表。只有在查询 DBA_TABLES 时才需要提升权限。

问 2:为什么 USER_TABLES 不返回结果?

这通常意味着当前用户不拥有任何表。如果您使用的是专用连接账户或新创建的用户,请尝试查询 ALL_TABLES 来查看您的账户有权访问的对象。

问 3:USER_TABLES、ALL_TABLES 和 DBA_TABLES 之间有什么区别?

USER_TABLES 仅显示您拥有的表。ALL_TABLES 包括这些加上其他用户授予您访问权限的表。DBA_TABLES 涵盖数据库中所有表,但需要管理权限才能查询。

问 4:如何在 Oracle 中按大小列出表?

查询 DBA_SEGMENTS,按 segment_type = ‘TABLE’ 过滤并按段汇总字节数。这需要 DBA 权限。完整语法请参见上文高级查询部分。

结论

在 Oracle 中列出表归结为知道哪个数据字典视图适合您的情况。使用 USER_TABLES 查询您自己的模式,ALL_TABLES 用于查看您有权限访问的跨模式表,DBA_TABLES 用于在具备适当权限时获取完整的数据库范围视图。

在此基础上,本指南中的高级查询可帮助您更进一步:按列名查找表、检查统计信息、按大小筛选或按部分名称缩小结果范围。大多数访问问题都追溯到权限差距或大小写敏感不匹配,一旦知道要查找什么,这两者都很容易解决。

如果您的工作超越查询表结构,进入跨系统保持数据同步的领域,英方软件 的 i2Stream 值得探索。它在事务级别处理实时 Oracle 复制,支持模式变更而无需人工干预,并可在不触碰生产服务器的情况下跨异构数据库环境工作。

博客分类底部

准备好构建企业数据韧性了吗?

立即开启 60 天免费试用,或预约产品演示,了解英方软件如何为您的核心业务提供「零中断、零丢失」的数据保护。

请先完成图形验证

验  证  码:

英方官网验证码
第三方二维码 第三方二维码
英方公告铃铛图标
英方公告铃铛图标

公告

英方侧边栏向右箭头
英方高亮提示圆点
英方软件公告
各位求职者、合作伙伴:
近期有第三方冒用英方名义发布虚假招聘、不实业务信息。我司正规招聘全程零收费,非官网渠道信息均不作数。
信息核验热线:400-0078-655
遇诈骗请保留证据,及时联系我们并报警
英方软件
2026 年 6 月 23 日
英方邮件咨询图标
英方邮件咨询图标

邮件

英方销售支持图标
英方销售支持图标

销售

英方侧边栏向右箭头
联系销售:400-0078-655 转 1