🪣

Oracleデータベース関連技術調査

2024/06/20に公開

調査内容

絶対に調査する項目

  1. CDB(コンテナデータベース)とPDB(プラガブルデータベース)とは何か
  2. データベースリンクとは何か
  3. スキーマとは何か

調査結果

1. CDB(コンテナデータベース)とPDB(プラガブルデータベース)とは何か

CDB(コンテナデータベース)

  • CDBの概念についてOracle公式のページ[1]を読んでみました。
  • 概要は以下のように書かれていました。

CDBのコンテナについて
コンテナは、マルチテナント・コンテナ・データベース(CDB) 内のスキーマ、オブジェクトおよび関連構造の集合です。CDB内では、各コンテナは一意のIDと名前を持ちます。
CDBには、顧客が作成した0個以上のプラガブル・データベース(PDB)およびアプリケーション・コンテナが含まれています。

CDBについて、自分なりに一言でまとめると、CDBはデータベースを構成する基盤 なのかなと感じました。
理解を進めるために、マルチテナントアーキテクチャアプリケーションコンテナについても調査する必要がありそうです。

PDB(プラガブルデータベース)

  • PDBの概念についてOracle公式のページ[1:1]を読んでみました。
  • 概要は以下のように書かれていました。

PDBは、ユーザーが作成したスキーマ、オブジェクトおよび関連構造体のセットで、論理的にクライアント・アプリケーションでは個別のデータベースとして表示されます。
あらゆるPDBは、PDBを作成したユーザーに関係なくSYSによって所有されます。 SYSはCDB内の共通ユーザーで、rootおよびCDB内の既存と将来のすべてのPDBにおいて同じIDを持つこのユーザーです。

概要のみを読んでいると、以下の2つがポイントでPDBの役割自体は、通常のDBとあまり変わらないのかなと感じました。しかし、PDBには目的が存在しているみたいです。

  1. PDBは、CDBによって管理されている
  2. PDBの所有者は、CDB内の共通ユーザーである
PDBの目的

アプリケーションの観点では、PDBは自己完結した完全に機能するOracleデータベースです。PDBを1つのCDBに統合することで、PDBの分離を維持しながら規模の経済性が得られます。
PDBを使用して、次の特定の目的を達成できます。

  1. アプリケーション固有のデータの格納
    たとえば、販売アプリケーションは独自の専用PDBを持ち、人事管理アプリケーションも独自の専用PDBを持つことができます。もう1つの方法として、アプリケーション・コンテナ(PDBの名前付きコレクション)を作成して、共通のデータおよびメタデータが含まれるアプリケーション・バックエンドを格納できます。
  2. 異なるCDBへのデータの移動
    データベースがプラガブルなのは、それを自己完結型のユニットとしてパッケージ化(切断されたPDBと呼ばれる)し、別のCDBに移動できるからです。
  3. 迅速なアップグレードの実行
    旧リリースのOracle DatabaseのCDBからPDBを切断してから、新リリースのCDBにそのPDBを接続できます。
  4. 可用性を維持しながらも迅速なデータのコピー
    テストおよび開発のために、PDBを開いている状態のままでクローニングして、そのクローンを同じまたは別のCDB内に格納できます。オプションで、リフレッシュ可能クローンPDBとしてPDBを指定できます。また、Oracle提供のシードPDBまたはユーザー作成アプリケーション・シードを使用して新しいPDBをコピーすることもできます。
  5. 異なるCDB内の参照データ
    同じCDBまたは別のCDB内のいずれかで、異なるPDBを参照するプロキシPDBを作成できます。プロキシPDBで文を発行すると、その文は参照先PDB内で実行されます。
  6. PDB内での付与の分離
    適切な権限を持つローカルまたは共通ユーザーは、スキーマ・オブジェクトのEXECUTE権限を個々のPDB内のPUBLICに付与できます。

PDBの目的を見ていると、データベースがコンテナ仮想化技術を利用していることによるメリットがそのまま、PDBでも享受できるのかなと感じました。

2. データベースリンクとは何か

  • CDBの概念についてOracle公式のページ[2]を読んでみました。
  • 概要は以下のように書かれていました。

分散データベース・システムの中心的な概念となるのが、データベース・リンクです。データベース・リンクは2つの物理データベース・サーバー間の接続であり、データベース・リンクを使用すると、クライアントから1つの論理データベースとしてこれらのサーバーにアクセスできます。
データベース・リンクは、あるOracle Databaseサーバーから別のデータベース・サーバーへの一方向の通信経路を定義するポインタです。

データベースリンクについて、自分なりに一言でまとめると、複数のデータベースを接続する機能 なのかなと感じました。
理解を進めるために、分散データベースについても調査する必要がありそうです。

3. スキーマとは何か

  • CDBの概念についてOracle公式のページ[3]を読んでみました。
  • 概要は以下のように書かれていました。

スキーマはデータベース・オブジェクトの集合です。スキーマはデータベース・ユーザーによって所有され、ユーザー名と同じ名前を共有します。スキーマ・オブジェクトは、ユーザーによって作成される論理構造です。表や索引などのいくつかのオブジェクトはデータを保持します。ビューやシノニムなどのその他のオブジェクトは定義のみで構成されます。

スキーマについて、自分なりに一言でまとめると、データベースオブジェクトの管理者 なのかなと感じました。また、データベースオブジェクト作成時に以下のような制約があるようです。

データベース・オブジェクトを作成するときには、必ず任意のスキーマ内に作成する必要があります。

まとめ

Oracleについては、「ドキュメントが複雑で理解しにくい」「用語が専門的過ぎて使いにくい」という勝手なイメージを持っていました。
しかし、今回の調査では特に公式のドキュメントにも読みにくさは感じませんでした。
Oracleのデータベースがコンテナを活用していることが分かったので、自分もより深くコンテナ技術について調査しようというモチベーションにもつながりました。

参考資料

脚注
  1. https://docs.oracle.com/cd/F32587_01/cncpt/CDBs-and-PDBs.html ↩︎ ↩︎

  2. https://docs.oracle.com/cd/E57425_01/121/ADMIN/ds_concepts.htm ↩︎

  3. https://docs.oracle.com/cd/F32587_01/admqs/managing-schema-objects.html ↩︎

Discussion