🦔

ORACLE MASTER Silver DBA 取得に必要な知識のまとめ~制約とキー編~

2024/06/30に公開

はじめに

本記事はORACLE MASTER Silver DBA取得に必要な知識の個人的まとめになります。

ORACLE MASTERとは

Oracle Databaseの管理スキルを証明するOracle社の資格です。

Bronze, Silver, Gold, Platinumの4ランクあります。

制約

データベースに格納されたデータは長期間保管され、様々な用途で使用されます。このため、データベースに不適切なデータが格納されることを防ぐ必要があります。

制約(整合性制約)は表の列、または複数の列の組み合わせに対して設定したルールであり、ルールに違反するデータが格納されることを禁止できます。

制約を適切に設定すると、データベースに不適切なデータが格納されることを防ぎ、データの内容の整合性を維持できます。

Oracle Databaseには以下の5種類の制約があります。

制約 説明
NOT NULL制約 列にNULLが設定されることを禁止する
チェック制約 列または列の組み合わせに指定されたチェック条件を満たさない値が設定されることを禁止する
一意制約 列または列の組み合わせに重複値が設定されることを禁止する
主キー制約 列または列の組み合わせに重複値またはNULLが設定されることを禁止する。1つのテーブルに大師って1つのみ設定可能
外部キー制約 列または列の組み合わせの値が、関連する表の一意キーまたは主キーの値と一致することを保証する

表で制約を指定するには列レベルと表レベルの2つの方法があります。

列レベルの指定は 列名 データ型 制約 という風に列のデータ方に続けて、制約を指定します。

表レベルの指定は表のすべての列を指定した後に、 制約1, 制約2, ... という風にカンマで区切って指定します。

複数の列に対する制約の場合は表レベルで制約を指定する必要があります。

また、 CONSTRAINT を指定すると制約に名前を付けることができます。 CONSTRAINT を省略すると制約には自動的に SYS_C数字 という名前が付けられます。

制約の留意点は以下の通りです。

  • 5つある制約のうち、NOT NULL制約だけは列レベルで指定する必要があります
    • 表レベルではNOT NULL制約を指定できません
  • NOT NULL制約以外の制約は列レベル及び表レベルで指定できます
  • 複数の列に対する制約の場合は表レベルで制約を指定する必要があります

制約を無効化するには ALTER TABLE DISABLE CONSTRAINT を利用します。

無効化する制約に依存している別の制約がある場合は CASCADE を指定して、依存している別の制約も併せて無効化する必要があります。

無効化した制約は ALTER TABLE ENABLE CONSTRAINT で有効化できます。ただし、制約に違反するデータが存在しないことが条件です。

一時表

一時表はデータを一時的に保管するための表です。一時表にINSERTしたデータは、そのセッションからのみ参照可能で、使用終了したら自動的に削除されます。

一時表を使う利点は以下の通りです。

  • データをプライベートにでき、データがほかのセッションから参照されることはありません
  • 複数セッションの同時利用が可能です
    • 複数セッションが同時に一時表にデータをINSERTした場合でも、他のセッションのデータと混在することはありません
  • REDO生成量を減らし、I/O不可を削減することが可能です
    • 一時表領域に格納したデータの変更についてはREDOが生成されないため

一時表にはグローバル一時表とプライベート一時表があり、表の定義情報が永続化されるか、表の定義がデータベース全体で共有されるかどうかが異なります。

グローバル一時表の定義情報はデータディクショナリに永続化されます。このため、一度、グローバル一時表を作成したらそれ以降はいつでも一時表を使用できます。
また、表の定義はデータベース全体で共通です。

プライベート一時表の定義情報は永続化されません。一時表を使用するたびにプライベート一時表を作成する必要があります。使用終了すると、プライベート一時表は自動的に削除されます。
また、表の定義はセッションごとに独立です。セッションごとに、異なる定義を持つ同じ名前のプライベート一時表を作成できます。

一時表が通常の表と異なる点は以下の通りです。

  • 一時表は一時表領域に格納されます
  • 常に最初のデータをINSERTしたときにセグメントが割り当てられます
  • TRUNCATEを除くDDLは一時表を使用していないときのみ実行可能です

一時表の作成時に、グローバル一時表であればデータ保持期間、プライベート一時表であれば定義の存続期間を設定できます。

グローバル一時表のデータ保持期間を指定するオプション

オプション 説明
ON COMMIT DELETE ROWS トランザクション終了時に自動的にデータが削除される
ON COMMIT PRESERVE ROWS セッション終了時に自動的にデータが削除される

プライベート一時表の定義の存続期間を指定するオプション

オプション 説明
ON COMMIT DROP DEFINITION トランザクション終了時に自動的に一時表の定義及びデータが削除される
ON COMMIT PRESERVE DEFINITION セッション終了時に自動的に一時表の定義及びデータが削除される

おわり

制約とキー編はここまで。

次はタイムゾーンと期間について説明していきます。

Discussion