0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CDB/PDBのユースケースとセキュリティ・AWRの確認

Posted at

はじめに

Oracle DatabaseのCDB(コンテナデータベース)とPDB(プラガブルデータベース)の概要について説明し、それらがどのように活用されているかを、ユースケースを基にまとめています。

CDB/PDBの概要

まず、CDBとPDBの基本的な概念を確認し、企業での具体的な活用例を紹介します。

CDB/PDBの基本概要

  • CDB(コンテナデータベース): 複数のPDBを格納する大きなコンテナの役割を果たすデータベース
  • PDB(プラガブルデータベース): CDB内に格納される個別の小さなデータベース。各PDBは独立して動作し、CDBから切り離して移動できる柔軟性を持ちます

プラガブルとは「plug + available」の組み合わせで、電源プラグのように取り外し可能であることを意味します。CDBが大きな箱であり、PDBはその中に収まる個別の小さな箱です。
コンテナ側の方が大きいので、dockerなどでコンテナ使ってるインフラエンジニアからしたら、少し違和感ありますね。

項目 CDB(コンテナデータベース) PDB(プラガブルデータベース)
役割 複数のPDBを格納し、リソースを共有 CDB内で独立して動作するデータベース
主な用途 企業全体のデータベースインフラ管理 個別のアプリケーションやサービスごとのデータ管理
管理者 CDB管理者が全体を管理 PDB管理者が個別のPDBを管理
セキュリティ グローバルセキュリティポリシーを適用 PDBごとに個別のセキュリティ設定が可能
リソース管理 リソースの効率的な共有と分配 各PDBが独立してリソースを消費

ユースケース: 大手飲食(プリン屋)店チェーンでの活用

企業背景:

  • 大手飲食店チェーンは、全国に多数の店舗を展開し、各店舗で独自に運営されている
  • オンライン予約、デリバリーサービス、社内の経理や人事の管理など、さまざまなビジネス機能がある
  • これらの機能を効率的に管理し、リソースを最大限に活用するため、全社的なデータベースインフラの一元管理したい。(1つデータベースのみの管理だと運用コストもメリットある)

「プリンは栄養たっぷりん。言うてな!!!」

CDBによる管理:

  • CDBの役割 : 企業全体のデータベースインフラを統括するために、1つのCDBを導入。このCDBには、共通のシステム設定、全社的なデータ、セキュリティポリシーが含まれる

PDBによる店舗ごとのデータ管理:

  • PDBの役割 : 各店舗やサービスに対して個別のPDBを割り当て、そのPDB内で店舗固有のデータを管理。これにより、データの独立性が確保される

店舗ごとのPDBの作成

①東京店と大阪店用のPDBの作成

-- 東京店舗専用のPDBを作成するSQL
SQLCREATE PLUGGABLE DATABASE tokyo_store_pdb
  ADMIN USER pdb_admin IDENTIFIED BY Welcome123
  FILE_NAME_CONVERT = ('/u02/oradata/CDB1/pdbseed/', '/u02/oradata/CDB1/tokyo_store_pdb/');

-- 大阪店舗専用のPDBを作成する
CREATE PLUGGABLE DATABASE osaka_store_pdb
  ADMIN USER pdb_admin IDENTIFIED BY Welcome123
  FILE_NAME_CONVERT = ('/u02/oradata/CDB1/pdbseed/', '/u02/oradata/CDB1/osaka_store_pdb/');

このコマンド実行後に以下のようにPDBが作成されます。
・/u02/oradata/CDB1/osaka_store_pdb
・/u02/oradata/CDB1/tokyo_store_pdb

[oracle@ip-10-1-10-221 CDB1]$ pwd
/u02/oradata/CDB1
[oracle@ip-10-1-10-221 CDB1]$ ll
total 2677484
-rw-r-----. 1 oracle oinstall   18923520 Aug 11 06:16 control01.ctl
-rw-r-----. 1 oracle oinstall   18923520 Aug 11 06:16 control02.ctl
drwxr-x---. 2 oracle oinstall          6 Jul  7 09:36 onlinelog
drwxr-x---. 2 oracle oinstall        111 Aug 11 06:15 osaka_store_pdb ←ここ
drwxr-x---. 2 oracle oinstall        104 Feb 12  2021 pdb1
drwxr-x---. 2 oracle oinstall        111 Feb 12  2021 pdbseed
-rw-r--r--. 1 oracle oinstall   52429312 Aug 11 06:16 redo01.log
-rw-r--r--. 1 oracle oinstall   52429312 Aug 11 05:57 redo02.log
-rw-r--r--. 1 oracle oinstall   52429312 Aug 11 06:00 redo03.log
-rw-r-----. 1 oracle oinstall  880812032 Aug 11 06:12 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 1017126912 Aug 11 06:15 system01.dbf
-rw-r-----. 1 oracle oinstall  113254400 Aug 11 06:00 temp01.dbf
drwxr-x---. 2 oracle oinstall        111 Aug 11 06:11 tokyo_store_pdb ←ここ
-rw-r-----. 1 oracle oinstall  639639552 Aug 11 06:12 undotbs01.dbf
-rw-r-----. 1 oracle oinstall    5251072 Aug 11 06:05 users01.dbf
[oracle@ip-10-1-10-221 CDB1]$

②それぞれのPDBのオープン

-- 東京PDBをオープンする
ALTER PLUGGABLE DATABASE tokyo_store_pdb OPEN;

-- 大阪PDBをオープンする
ALTER PLUGGABLE DATABASE osaka_store_pdb OPEN;

各PDBのセキュリティ確認

次に、各PDBでのセキュリティ設定を確認し、特定のユーザーが他のPDBにアクセスしようとした際に発生するエラーについて説明します。
最初の表に記載したセキュリティの箇所の実機確認です。

以下のSQLの手順で、tokyo_store_pdb に接続し、tokyo_user を作成しましす。tokyo_user には、CONNECT と RESOURCE の権限を付与します。

-- tokyo_store_pdbに接続
ALTER SESSION SET CONTAINER = tokyo_store_pdb;

-- 現在のPDB(データベース)を確認
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') AS CURRENT_PDB FROM DUAL;

-- 現在の接続ユーザーを確認
SELECT USER FROM DUAL;

-- 東京PDBでユーザーを作成
CREATE USER tokyo_user IDENTIFIED BY password;
GRANT CONNECT, RESOURCE TO tokyo_user;

次に、この tokyo_user が大阪のPDBである osaka_store_pdb にアクセスしようとすると、権限が不足しているためエラーが発生します。

-- 東京PDBに接続しているユーザーで大阪PDBにアクセスしようとする
ALTER SESSION SET CONTAINER = osaka_store_pdb;
エラー・レポート -
ORA-01031: 権限が不足しています
01031. 00000 -  "insufficient privileges"
*Cause:    An attempt was made to perform a database operation without
           the necessary privileges.
*Action:   Ask your database administrator or designated security
           administrator to grant you the necessary privileges

※SQL Developerの画面だと以下のようになります。

001.png

各PDBのリソース消費とAWRを活用したパフォーマンス確認

ここでは、AWR(Automatic Workload Repository)を活用して、各PDBのパフォーマンスを確認する手順を示します。今回は、ユーザ権限の設定を簡単にするため、sys ユーザを使用しています。

① 東京PDBのAWRスナップショット作成と確認

-- 東京PDBのAWRスナップショットを作成
ALTER SESSION SET CONTAINER = tokyo_store_pdb;
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;

-- スナップショットIDを確認
SELECT SNAP_ID, DBID, INSTANCE_NUMBER, BEGIN_INTERVAL_TIME, END_INTERVAL_TIME 
FROM DBA_HIST_SNAPSHOT 
ORDER BY DBID, SNAP_ID;

後続のレポート生成に必要な SNAP_ID, DBID, INSTANCE_NUMBER を取得しています。
SQL Developerだと以下のような画面になります。

005.png

② 東京PDBのAWRレポート生成

SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT(
    l_dbid      => 452263435,
    l_inst_num  => 1,
    l_bid       => 1,  -- スナップショット開始ID
    l_eid       => 2   -- スナップショット終了ID
    ));

002.png

③ 大阪PDBのAWRスナップショット作成と確認
後続のレポート生成に必要な SNAP_ID, DBID, INSTANCE_NUMBER を取得しています。
SQL Developerだと以下のような画面になります。(②の東京の時と同じですね。)

-- 大阪PDBのAWRスナップショットを作成
ALTER SESSION SET CONTAINER = osaka_store_pdb;
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;

-- スナップショットIDを確認
SELECT SNAP_ID, DBID, INSTANCE_NUMBER, BEGIN_INTERVAL_TIME, END_INTERVAL_TIME 
FROM DBA_HIST_SNAPSHOT 
ORDER BY DBID, SNAP_ID;

004.png

④ 大阪PDBのAWRレポート生成

-- 大阪PDBのAWRレポートを生成
SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT(
    l_dbid      => 69103283,
    l_inst_num  => 1,
    l_bid       => 1,  -- スナップショット開始ID
    l_eid       => 2   -- スナップショット終了ID
    ));

003.png

東京店舗と大阪店舗のPDBのパフォーマンス比較
これらの手順を通じて、東京店舗と大阪店舗のPDBそれぞれのパフォーマンスを確認し、比較することが可能です。AWRレポートには、CPU使用率やSQLパフォーマンスなど、さまざまなパフォーマンス指標が含まれています。

これにより、どちらの店舗がリソースをより効率的に使用しているか、またはチューニングが必要かを判断することができます。

おわりに

おわりです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?