ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
データディクショナリとは
データディクショナリとは、Oracle データベースの「メタデータ(データに関するデータ)」を格納する、システム所有の特別な表・ビュー群です。具体的には以下のような情報が入っています:
- ユーザー・スキーマ情報(誰がいるか)
- 表・ビュー・インデックスなどのオブジェクト定義
- カラム・データ型・制約・デフォルト値
- 権限・ロール
- 表領域・データファイル
- 統計情報・実行履歴
所有者は SYS ユーザーで、一般ユーザーは読み取り専用のビュー(=データディクショナリビュー)経由で参照します。
3 種類のプレフィックス
| プレフィックス | 見える範囲 | 例 |
|---|---|---|
USER_ | 自分が所有するオブジェクトのみ | USER_TABLES |
ALL_ | 自分がアクセス可能なすべて (他人の表で権限ありも含む) | ALL_TABLES |
DBA_ | データベース全体(管理者権限が必要) | DBA_TABLES |
カラム構成はほぼ同じで、DBA_ / ALL_ には OWNER 列が追加されます (USER_ は自分なので省略)。
主要なデータディクショナリビュー
スキーマ・表関連
| ビュー | 内容 |
|---|---|
USER_TABLES | 自分が所有する表の一覧 |
USER_TAB_COLUMNS | 表のカラム情報(型・長さ・NULL 可否) |
USER_TAB_COMMENTS | 表のコメント |
USER_COL_COMMENTS | カラムのコメント |
USER_INDEXES | インデックス一覧 |
USER_IND_COLUMNS | インデックスの構成カラム |
USER_CONSTRAINTS | 制約 (PK / FK / UNIQUE / CHECK) |
USER_CONS_COLUMNS | 制約の対象カラム |
USER_VIEWS | ビューの定義 |
USER_SEQUENCES | シーケンス一覧 |
USER_SYNONYMS | シノニム一覧 |
USER_TRIGGERS | トリガー一覧 |
USER_SOURCE | パッケージ / プロシージャの本体 |
USER_OBJECTS | 全オブジェクトのメタ情報 (種別・状態) |
ユーザー・権限・ロール
| ビュー | 内容 |
|---|---|
DBA_USERS | 全ユーザー一覧 |
USER_USERS | 自分のアカウント情報 |
DBA_ROLES | ロール一覧 |
USER_ROLE_PRIVS | 自分が持つロール |
USER_SYS_PRIVS | 自分のシステム権限 |
USER_TAB_PRIVS | 自分のオブジェクト権限 |
表領域・データファイル
| ビュー | 内容 |
|---|---|
DBA_TABLESPACES | 表領域一覧 |
DBA_DATA_FILES | データファイル |
DBA_FREE_SPACE | 空き領域 |
DBA_SEGMENTS | セグメント(表・インデックスの実体) |
動的パフォーマンスビュー (V$)
データディクショナリと並ぶ重要なメタ情報源が V$ ビューです。こちらはインスタンス(メモリ・SGA)の状態をリアルタイム反映するもので、性能分析や障害解析で頻用します。
| ビュー | 内容 |
|---|---|
V$SESSION | 現在のセッション一覧 |
V$SQL | 共有プールに残っている SQL |
V$SQL_PLAN | 実行計画 |
V$LOCK | ロック情報 |
V$DATABASE | DB 基本情報 |
V$INSTANCE | インスタンス情報 |
V$PARAMETER | 初期化パラメータ |
V$LOG | REDO ログ |
V$STATNAME / V$SYSSTAT | 各種統計情報 |
実践クエリ集
自分の所有表を一覧
SELECT table_name, num_rows, last_analyzed
FROM user_tables
ORDER BY table_name;
特定表のカラム定義を見る
SELECT column_name, data_type, data_length, nullable, data_default
FROM user_tab_columns
WHERE table_name = 'EMPLOYEES'
ORDER BY column_id;
外部キー関係を一覧
SELECT a.table_name AS child_table,
a.constraint_name AS fk_name,
a.column_name AS child_column,
b.table_name AS parent_table,
b.column_name AS parent_column
FROM user_cons_columns a
JOIN user_constraints c ON a.constraint_name = c.constraint_name
JOIN user_cons_columns b ON c.r_constraint_name = b.constraint_name
WHERE c.constraint_type = 'R';
インデックスとその構成カラム
SELECT i.table_name, i.index_name, i.uniqueness,
c.column_position, c.column_name
FROM user_indexes i
JOIN user_ind_columns c ON i.index_name = c.index_name
WHERE i.table_name = 'ORDERS'
ORDER BY i.index_name, c.column_position;
無効になっているオブジェクト
SELECT object_name, object_type, status
FROM user_objects
WHERE status <> 'VALID';
DDL を抽出 (DBMS_METADATA)
-- 表の CREATE 文を取得
SELECT DBMS_METADATA.GET_DDL('TABLE', 'EMPLOYEES') FROM dual;
-- インデックスの DDL
SELECT DBMS_METADATA.GET_DDL('INDEX', 'IDX_EMP_DEPT') FROM dual;
-- ユーザー定義
SELECT DBMS_METADATA.GET_DDL('USER', 'SCOTT') FROM dual;
現在のセッションを見る (V$)
SELECT sid, serial#, username, status,
machine, program, sql_id
FROM v$session
WHERE username IS NOT NULL;
DICTIONARY ビューでメタ情報を逆引き
-- 「TABLE」を含むビューを探す
SELECT table_name, comments
FROM dictionary
WHERE table_name LIKE '%TABLE%'
AND ROWNUM <= 20;
DICTIONARY (短縮形 DICT) は「全データディクショナリビューの一覧」を返すメタの中のメタ。「あのビュー名なんだっけ?」のときに便利。
データディクショナリが Oracle 運用で欠かせない理由
Oracle データベースを運用していると、表構造の調査、権限の整理、性能のチューニング、障害発生時の原因切り分けなど、さまざまな場面でデータディクショナリの参照が必要になります。たとえば、開発チームから「ある表の構造を確認したい」という依頼が来た場合、USER_TAB_COLUMNS を SELECT すれば一発で全カラム情報が取得でき、わざわざ DDL ファイルを探したり、過去のドキュメントを掘り起こす必要はありません。
運用フェーズでは、夜間バッチで失敗した SQL の調査、長時間ロックを保持している犯人セッションの特定、容量不足の表領域の確認など、データディクショナリと V$ ビューを組み合わせて調査するのが日常的に行われます。「Oracle 上でいま何が起きているか」を完全に可視化できるのが、Oracle が伝統的に強いと言われるポイントの一つで、その源泉がまさにこのディクショナリビュー群です。
データディクショナリを安全に使うための注意点
強力で便利な反面、データディクショナリの使い方を誤ると本番環境に悪影響を及ぼすことがあります。例えば、DBA_OBJECTS のように全オブジェクトを返すビューを WHERE 句なしで SELECT すると、数万件〜数十万件の結果が返ってきて共有プールやネットワークに負荷をかけます。実運用では必ず適切な WHERE 句で絞り込み、必要なカラムだけ SELECT するようにしましょう。
また、データディクショナリビューの中にはライブのインスタンス状態を反映するもの (V$ 系) と、ディスクのメタデータを反映するもの (DBA_/ALL_/USER_) が混在しています。V$ ビューはインスタンス再起動でカウンタがリセットされたり、長期的なトレンド分析には適さなかったりするため、定常監視に使う場合は AWR や Statspack のような時系列スナップショット機能と組み合わせるのが推奨されます。さらに、データディクショナリビューの一部は権限を持つユーザーしかアクセスできないため、運用ロールには SELECT_CATALOG_ROLE を付与しておくとトラブル調査時に役立ちます。
FAQ
Q: USER_ と ALL_ の違いは?
A: USER_ は自分が所有するもの、ALL_ は自分が SELECT 権限を持つすべて。他人のスキーマで権限を付与された表も ALL_ に出る。
Q: DBA_ ビューにアクセスできない
A: DBA ロール、または SELECT_CATALOG_ROLE / SELECT ANY DICTIONARY 権限が必要。一般ユーザーには付かない。
Q: 表名が大文字なのはなぜ?
A: Oracle は引用符なしの識別子をすべて大文字化するため。WHERE 句では 'EMPLOYEES' のように大文字で書く。
Q: V$ と DBA_ の違いは?
A: V$ はメモリ(インスタンス)の今を反映、DBA_ はディスク上のメタデータ。再起動すると V$ は消える/リセット、DBA_ は残る。
Q: 一般ユーザーが SYS.* を直接見られる?
A: 直接の所有者は SYS だが、各ユーザーにはパブリックシノニムが貼られていて USER_TABLES のように接頭辞なしで使える。
関連記事
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- DDL
- DML
- トランザクション制御 (SQL)
- データディクショナリ
- 動的パフォーマンスビュー (V$ビュー)
- 関数
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?