Loading...

We've detected that your browser language is Chinese. Would you like to visit our Chinese website? [ Dismiss ]
By: Emma

OracleにSHOW TABLESコマンドが存在しない理由

MySQLやPostgreSQLを使用する開発者は慣れからSHOW TABLES;または\dtを実行しがちですが、Oracleにはこれらのコマンドが実装されておらず、実行するとエラーが発生します。

Oracleではデータディクショナリという読み取り専用のシステムビュー群を利用してデータベース内の全メタデータを管理します。1行の簡略コマンドより記述量は多くなりますが、機能性が大幅に高いのが特徴です。テーブル名だけでなく、ストレージ情報、パーティション設定、レコード件数、統計情報の最終分析日などを同一クエリで取得可能です。

データベース テーブル一覧の取得方法
MySQL SHOW TABLES;
PostgreSQL \dt または information_schema のクエリ実行
Oracle データディクショナリビューを参照(USER_TABLES、ALL_TABLES、DBA_TABLES)

データディクショナリはアクセス権限に応じ3段階に分類されており、実行するビューはアカウントの参照権限によって使い分けます。詳細は後述します。

Oracleにおけるテーブル確認の意味

自身のアクセス権限に応じたOracleデータベースのテーブル一覧取得方法

Oracleのデータディクショナリビューはテーブルの所有者と権限に基づき3種類に分かれています。クエリを作成する前に、自身のアカウントに適したビューを把握することが第一歩です。

方法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_rows(レコード件数)とlast_analyzed(統計最終取得日)を取得することで、テーブルにデータが存在するか、オプティマイザが最後に統計情報を収集したタイミングを瞬時に把握できます。

補足:USER_TABLESにはOWNER列が存在しません。このビューは自身所有のテーブルのみ出力するため、所有者情報は不要と判断され省略されています。

方法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'と小文字で記述すると検索結果が0件となります。引用符内は必ず大文字を使用してください。引用符付きで大文字小文字混在のスキーマを作成した場合のみ例外となります。

方法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でDB全体のテーブルを取得

ORA-00942: 表またはビューが存在しません というエラーが出る場合、アカウントに必要な権限が付与されていません。DBAにSELECT_CATALOG_ROLEを付与してもらってください。このロールは完全なDBA権限を付与せず、ディクショナリビューの参照権限だけを許可する標準的な手段です。

実務で活用するOracle高度テーブル取得クエリ6選

標準クエリでは基本的なテーブル一覧しか取得できません。以下のクエリは列名、容量、部分一致したテーブル名から検索するといった高度な要件に対応し、用途に合わせて活用できます。

利用シナリオ 参照するビュー 必要な権限
列名からテーブルを検索 ALL_TAB_COLUMNS 標準権限
レコード件数・統計最終分析日を確認 USER_TABLES 標準権限
テーブル名の部分一致検索 USER_TABLES 標準権限
容量順にテーブルを表示 DBA_SEGMENTS DBAロール
システムスキーマを除外したテーブル一覧 DBA_TABLES DBAロール
GUIによる視覚的な確認 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を参照する必要があります。以下のクエリは各テーブルの総容量をメガバイト単位で出力し、容量の大きい順に並び替えます。

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テーブル一覧 - システムスキーマ除外

6. SQL*Plus、SQL Developer、GUIツールの使い分け

業務スタイルに応じて適切なツールを選択します:

  • SQL*Plus / SQLCL:簡易確認やシェルスクリプトと連携する場面に最適。軽量ですが、出力のレイアウト調整にSET LINESIZEなどのコマンドを手動で記述する必要があります。
  • SQL Developer:Oracle純正GUIツール。左側の接続パネルからSQLを記述せずにテーブルを視覚的に参照可能です。
  • dbForge / Toad:サードパーティ製ツール。パフォーマンス分析やER図作成など高度な機能を搭載しています。

よくあるエラーとトラブルシューティング

経験豊富なDBAでもOracleのデータディクショナリを参照する際、権限の問題や検索結果が空になるトラブルに遭遇します。代表的な4つの事例と解決策を記載します。

1. ORA-00942: 表またはビューが存在しません

  • 原因:DBA_TABLESを参照するのに必要な管理権限が付与されていない。Oracleは権限のないユーザーに対しこれらのビューを完全に隠すため、存在しないテーブルを参照した場合と同一のエラーが表示されます。
  • 解決策:用途に応じUSER_TABLESまたはALL_TABLESに切り替えてください。どうしてもDBA_TABLESを参照する必要がある場合は、管理者にSELECT_CATALOG_ROLEまたはSELECT ANY DICTIONARY権限を付与してもらいます。

2. USER_TABLESの検索結果が空

  • 原因:現在のユーザーが自身のテーブルを1つも保有していない。新規作成したアカウントや、権限のみ付与され実オブジェクトを持たない接続用ユーザーで頻発します。
  • 解決策:ALL_TABLESに切り替え、アカウントにアクセス権限のある全テーブルを確認します。他スキーマのテーブルを参照したい場合は、該当スキーマ所有者が自身のユーザーにSELECT権限を付与しているか確認してください。

3. 大文字小文字混在のテーブル名と引用付き識別子

  • 原因:Oracleは標準ですべての識別子を大文字で保管します。CREATE TABLE "Sales_Data"のように二重引用符付きでテーブルを作成すると、大文字小文字の表記がそのまま保持されます。'SALES_DATA'で検索しても結果が0件となります。
  • 解決策:データディクショナリのクエリ結果にあるTABLE_NAME列を確認し、小文字が含まれている場合は以降のSQL文で二重引用符を使用してテーブルを指定します:SELECT * FROM "Sales_Data";

4. DBA_TABLESの検索結果が0件

  • 原因:Oracle 12c以降のマルチテナント構成において、業務テーブルが存在するプラグ可能データベース(PDB)ではなく、コンテナデータベース(CDB)のルートに接続している。
  • 解決策:接続文字列を確認し、正しいPDBに切り替えてからクエリを実行します。切り替えコマンド:ALTER SESSION SET CONTAINER = pdb_name;

テーブル一覧取得を超える:i2StreamによるOracleレプリケーション

テーブル構造を把握した後、次に検討する課題は複数システム間でデータを保護・同期する方法です。本番環境でOracleを運用する企業には、大量トランザクション、スキーマ変更、マルチプラットフォーム環境に対応し、業務を停止させない安定したレプリケーション基盤が不可欠です。

i2Streamはこれらの課題に特化したエンタープライズ向けデータベースレプリケーションソリューションです。汎用的なレプリケーション製品と異なり、Oracle環境特有の課題に完全に適応した設計となっています。

i2Streamの主な機能

  • ミリ秒単位のリアルタイムデータ同期:ポーリングではなくログ解析によりデータ変更を捕捉するため、高負荷環境でも遅延の少ない同期を実現。書き込み負荷の高いOracle環境でもレプリケーションが遅延することなく追従します。
  • DDL・DML処理を完全サポート:テーブル構造変更、テーブル編集、データ操作をすべて捕捉し同期します。スキーマ更新後にレプリケーションを一時停止したり手動で再同期したりする必要がありません。
  • トランザクション単位の整合性保証:トランザクションの実行順序を保ったままターゲットに反映し、INSERT/UPDATE/DELETEの競合解消機能を標準搭載。複雑で高並行な業務環境でもデータの整合性を維持します。
  • エージェントレスアーキテクチャ:本番データベースサーバーにソフトウェアをインストールする必要がないため、Oracleインスタンスのパフォーマンスに影響を与えず、ソース側の保守工数も削減できます。
  • 柔軟なレプリケーショントポロジ:1対1、1対多、多対1、カスケード同期といった構成に対応。支店データを中央ウェアハウスに集約する、複数のターゲットにデータを配信するといった環境に合わせて自由に設定可能です。
  • 幅広いデータベース対応:Oracle以外にSQL Server、MySQL、PostgreSQL、DB2など40種類以上のデータベース、Kafka、Hive、HDFSといったビッグデータ基盤にも対応。複数種類のDBを運用する企業に適しています。

レプリケーション以外に総合的なデータ耐性を確保したい企業には、Info2Softの製品ラインナップが対応します。i2Backupは物理・仮想・クラウド環境の一元バックアップを実現し、i2MigrationはOracleをはじめ各種システムの業務停止なしクロスプラットフォーム移行に対応します。

60日間無料トライアル

よくある質問

Q1:DBA権限なしでOracleのテーブル一覧を取得できますか?

可能です。USER_TABLESとALL_TABLESは特別な権限なしで一般ユーザーが参照できます。USER_TABLESは自身が所有するテーブル、ALL_TABLESはアクセス権限の付与された全テーブルを出力します。DBA_TABLESのみ高度な権限が必要となります。

 

Q2:USER_TABLESの結果が空になるのはなぜですか?

現在のユーザーが自身のテーブルを1つも保有していることが主な原因です。専用の接続アカウントや新規作成ユーザーの場合はALL_TABLESを参照し、自身にアクセス権限のあるオブジェクトを確認してください。

 

Q3:USER_TABLES、ALL_TABLES、DBA_TABLESの違いは?

USER_TABLES:自身が作成したテーブルのみ表示。ALL_TABLES:自身のテーブルに加え、他ユーザーからアクセス権限を付与されたテーブルを表示。DBA_TABLES:データベース全体の全テーブルを表示、参照には管理権限が必要。

 

Q4:Oracleで容量順にテーブルを表示する方法は?

DBA_SEGMENTSを参照し、segment_type = ‘TABLE’でフィルタリングし、セグメントごとのバイト数を集計します。実行にはDBA権限が必要です。詳細な構文は上記高度クエリの項目を参照してください。

まとめ

Oracleでテーブル一覧を取得するには、自身の権限に適したデータディクショナリビューを選択することが鍵となります。自身のスキーマのみ確認する場合はUSER_TABLES、複数スキーマの権限あるテーブルを参照する場合はALL_TABLES、適切な管理権限がありDB全体のテーブルを確認したい場合はDBA_TABLESを使用します。

本ガイドの高度クエリを活用すれば、列名検索、統計情報確認、容量フィルタ、テーブル名部分一致といった詳細な抽出が可能です。大半の参照トラブルは権限不足または大文字小文字の不一致に起因するため、原因を把握すれば簡単に解消できます。

テーブル構造の参照を超え、複数システム間のデータ同期を実現する必要がある場合はInfo2softのi2Streamをご検討ください。トランザクション単位のリアルタイムOracleレプリケーションに対応し、スキーマ変更に手動対応が不要、本番サーバーに負荷をかけずマルチデータベース環境に対応します。

概要は準備中です

関連記事

【3つの方法】Oracleデータベースへ接続する手順
Oracleデータベースへの接続方法は使用するツールや環境によって異なります。本ガイドでは代表的な3種類の接続手法を記載し、Oracleデータベース接続時に発生する一般的なエラーのトラブルシューティング方法を解説します。
記事を読む
Oracle Data Guardの設定方法(手順解説ガイド)
Oracle Data Guardの環境構築は複雑になりがちで、特にスタンバイデータベース、REDOログ転送、リカバリ設定周りの作業が難しいです。本ガイドでは作業手順を分かりやすく段階別に整理し、トラブルや混乱を抑え、安定した高可用性環境を構築できるよう解説します。
記事を読む
SQLデータベース制約とは何か:完全ガイド[2026年]
SQL制約は信頼性が高く正確なデータベースを構築する基盤です。不正なデータが問題を引き起こす前に排除します。本ガイドでは主要なSQL制約の種類を実例、各DB製品の相違点、2026年におけるデータ整合性維持のベストプラクティスと共に解説します。
記事を読む
ブロックレベルバックアップ解説:概要、メリット、その他詳細
ブロックレベルバックアップはファイル全体ではなく変更されたデータブロックのみを保存することで、バックアップ速度とストレージ効率を向上させます。本ガイドではブロックレベルバックアップの仕組み、ファイルレベルバックアップとの比較、最新の企業向けバックアップ・災害復旧における役割について解説します。
記事を読む
目次:
最新情報を購読
最新のインサイト、ニュース、限定コンテンツをお届けします。いつでも配信解除が可能です。
購読する
ビジネスデータのセキュリティ強化を始めませんか?
60日間の無料トライアルまたはデモで、Info2softが企業データをどのように保護するかをご確認ください。
フォームにご記入の上、送信してください。担当者より追ってご連絡いたします。
このフォームを送信することにより、 プライバシー通知を読み、同意したことを確認します。
{{ isSubmitting ? '送信中...' : '送信する' }}