SQL データディクショナリ・ビュー

データディクショナリ・ビューとは?

ユーザー、権限、領域、制約などの 根幹的な情報を保持する読み取り専用の表とビュー
データディクショナリ表は、DDLなどが実行されスキーマ構造が変更されるなどの行為によって自動的に更新される。
静的ディクショナリともよばれる ⇔ 動的パフォーマンス・ビュー
ディクショナリ表へは、直接アクセスできない。以下のビューを経由してアクセスを行う。
ALL_~
ユーザーがアクセスできる情報(他のスキーマ含む)
USER_~
ユーザーのスキーマ(ユーザー)の情報
DBA_~
データベース全体に関連する情報(SELECT ANY TABLE、SELECT ANY DICTIONARY権限が必要:DBAロール)
SYSTEM表領域に格納されている。
一般ユーザーはSYSTEM表領域がOPENされるまでデータベースにアクセスできない。
管理ユーザー(SYSDBA、SYSOPER保持ユーザー)は○

一覧

select * from dictionary;

テーブル情報

USER_COL_COMMENTS

SELECT
 TABLE_NAME テーブル名
 COLUMN_NAME 列名
 COMMENTS 列コメント
FROM
 USER_COL_COMMENTS;

USER_TAB_COLUMNS

SELECT
 TABLE_NAME テーブル名
 COLUMN_NAME 列名
 DATA_TYPE 項目の型。VARCHAR2やNUMBERなど
 DATA_LENGTH 項目長。文字項目の場合想定した値がそのまま。NUMBER型の22固定。
 DATA_PRECISION 数値の精度(NUMBER(8,3)とかの8の部分)
 DATA_SCALE 数値の小数部(NUMBER(8,3)とかの3の部分)
 NULLABLE NULL値を許可するかどうか。NULLを許容する場合、Y
 COLUMN_ID テーブル内での項目の位置
FROM
 USER_TAB_COLUMNS

ビュー情報

SELECT
 VIEW_NAME VIEW名
 TEXT VIEWの定義に使用したSQL
FROM
 USER_VIEWS

インデックス情報

SELECT * FROM USER_IND_COLUMNS WHERE TABLENAME LIKE = '%~%'

シーケンス情報

一覧
SELECT * FROM USER_SEQUENCES;
現在値
SELECT LAST_NUMBER FROM ALL_SEQUENCES WHERE SEQUENCE_NAME = 'シーケンス名';

表領域情報

SELECT * FROM USER_TABLES ORDER BY TABLESPACE_NAME;

ユーザー情報

SELECT * FROM DBA_USERS;

所有者情報

ALL_COL_COMMENTS

USER_COL_COMMENTSの各列
所有者
OWNER

SELECT
 OWNER
 TABLE_NAME
 COLUMN_NAME
 COMMENTS
FROM
 ALL_COL_COMMENTS;

ALL_DIRECTORIES

OWNER
DIRECTORY_NAME
DIRECTORY_PATH
ORIGIN_CON_ID

インスタンス情報

インスタンス

インスタンスの状態
SELECT status FROM v$instance;

ステータス コマンド
OPEN STARTUP または ALTER DATABASE OPEN後
OPEN MIGRATE ALTER DATABASE OPEN { UPGRADE | DOWNGRADE }後
MOUNTED STARTUP MOUNT または ALTER DATABASE CLOSE後
STARTED STARTUP NOMOUNT後

セッション情報

SELECT SID, SERIAL# FROM v$session WHERE USERNAME = ~;
※結果
100 200
101 201

セッションを削除
ALTER SYSTEM KILL SESSION '100, 200'

キャッシュ

共有プールクリア
※ディクショナリのキャッシュ、SQL文、パッケージ、実行計画
ALTER SYSTEM FLUSH BUFFER_CACHE;

データベース・バッファ・キャッシュクリア
※データブロック
ALTER SYSTEM FLUSH BUFFER_CACHE;

文字コード

SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';
SELECT character_set_name FROM information_schema.character_sets;

DUAL表

全ユーザが参照できるシステム表
1列(DUMMY列)、1行(値='X')で構成される
SELECT * FROM DUAL;
テストに便利
SELECT INITCAP('AAA') FROM DUAL;
→Aaa
※DUAL表に格納されている値と関係ない列を自分で指定して出力する