普段プログラミングを主としている側からすると、DML( SELECT, INSERT, UPDATE, DELETE )、DML( CREATE, ALTER, DROP )はコードの中で書くことはあるので気にすることはないと思いますが、テーブルを作成したりして、「テーブル定義の設定はどうだったかな?」「あの索引は、どういう定義で作成されたんだろう?」となることが、たまに発生したりします。
実際、私なんかの場合ですと、あまり見たことないテーブルのネーミングを見かけたりすると、今回のテーマでもあるデータディクショナリビューを参照して、類似のネーミングが存在したりするのかを確認することがあります。
本稿では、データディクショナリビューの概要を踏みつつ、実際に操作しながら、どういったものなのかを紹介した記事となります。
本稿では、Oracle Live SQL 23ai の利用を前提としています。
Oracle Database におけるデータディクショナリビューとは、データベースに関するさまざまなメタデータ(構造情報、ユーザー情報、権限情報など)を格納しているデータディクショナリ表から、ユーザーが扱いやすい形式で情報を参照できるように提供されているビューのことです。
データディクショナリ表には、データベースの内部的な情報が格納されており、通常ユーザーが直接アクセスすることはありません。そこで、Oracle Databaseは、これらの情報をユーザーが理解しやすいようにデコードし、必要な情報だけを抽出・結合してビューとして公開しています。
V$
で始まる)も存在します。これらは、データベースがオープンされ、使用されている間に継続的に更新されます。データディクショナリビューには、参照できる情報の範囲によって主に以下の3種類のプレフィックス(接頭辞)があります。
SELECT ANY DICTIONARY
権限(またはDBA
ロールに付与されている)が必要です。DBA_TABLES
(データベース内のすべてのテーブル情報)、DBA_USERS
(すべてのユーザー情報)など。ALL_TABLES
(アクセス可能なすべてのテーブル情報)、ALL_TAB_PRIVS
(アクセス可能なオブジェクトの権限情報)など。USER_TABLES
(自身のスキーマ内のテーブル情報)、USER_OBJECTS
(自身のスキーマ内のオブジェクト情報)など。これらのビューは、ほとんどの場合、列構成が共通しており、プレフィックスによって参照範囲が異なるという特性を持っています。
データディクショナリビューは、通常のテーブルと同様にSQLのSELECT
文を使って参照します。
例えば、自身のスキーマ内のテーブル一覧を確認したい場合は、次のようにクエリを実行します。
SELECT TABLE_NAME, STATUS, LAST_ANALYZED
FROM USER_TABLES
データベース管理者(DBA)であれば、データベース全体のテーブル一覧を確認するためにDBA_TABLES
を使用します。
SELECT OWNER, TABLE_NAME, STATUS
FROM DBA_TABLES
利用可能なデータディクショナリビューの一覧を確認するには、DICTIONARY
ビューを参照します。
SELECT *
FROM DICTIONARY
データディクショナリビューは、Oracle Databaseの運用、管理、開発において非常に重要な役割を果たします。データベースの構成、オブジェクト、権限、パフォーマンスなどを理解するために不可欠な情報源となります。
上述では、実行結果までは確認しませんでしたが、ここでは例を挙げて、実際の結果の確認までを示します。
実施する内容としては、Oracle Live SQL を利用して、作成したテーブルが実際にUSER_TABLES
で確認できるかを実施しています。
まずは、現状のテーブルを確認するクエリを実行します。
SELECT *
FROM USER_TABLES
実行結果
結果を確認すると、「No items to display」と表示されており、テーブルが何も存在しないことが確認出来ます。
では、適当にMEMBERS
テーブルを作成してみます。
CREATE TABLE MEMBERS (
ID CHAR(4) NOT NULL,
NAME VARCHAR2(30) ,
ADDRESS VARCHAR2(100) ,
PHONE VARCHAR2(11) ,
EMAIL VARCHAR2(100)
)
実行結果
問題なく、MEMBERS
テーブルが作成されました。ついでに、索引も作成します。
ALTER TABLE MEMBERS ADD
CONSTRAINT PK_MEMBERS PRIMARY KEY (
ID
) USING INDEX
実行結果
索引も問題なく、作成出来ました。
先ほど作成したテーブルが、データディクショナリに反映されているのかを確認します。
SELECT *
FROM USER_TABLES
実行結果
先ほど確認が出来なかった情報が、更新されていることが確認出来ました。
USER_TAB_COLUMNS
を参照すると、テーブル内の定義情報も確認することが出来ます。
SELECT *
FROM USER_TAB_COLUMNS
実行結果
きちんと定義した内容が表示されていることが確認出来ます。
それでは、索引の情報も確認します。
SELECT *
FROM USER_INDEXES
実行結果
索引もデータディクショナリに更新されていることが確認出来ました。
以上、実際のデータディクショナリに更新された情報を、データディクショナリビューで確認する方法を紹介しました。
最後まで、お読みいただきありがとうございます。
今回紹介したデータディクショナリビューは、いわゆる静的データディクショナリと呼ばれるものだけでした。現場では、どちらかというと動的パフォーマンスビュー (V$)を確認することが多かったりするのですが、データベースで障害が発生した場合は、かなりの確率でこのデータディクショナリビューにお世話になります。
何かの際に役に立てれば幸いです。
カジュアル面談では、会社の雰囲気や仕事内容についてざっくばらんにお話ししています。
履歴書は不要、服装自由、原則オンラインです。興味を持っていただけた方は、
ぜひ以下からお申し込みください。
皆さんにお会いできることをサクラグメンバー一同、心より楽しみにしております!
カジュアル面談応募フォーム