[Database] SPFILE Parameter: max_pdbs - a must for Single Tenant

原文はこちら。
https://blogs.oracle.com/UPGRADE/entry/spfile_parameter_max_pdbs_a

時として、私の仕事は一日の最後に笑顔にする側面があります。
オスロからキールへ向かう船上でのOUGN Conferenceの講演の中で、Johannes Ahrendsと同席しました。
CarajanDB - Blog Johannes Ahrends
http://www.carajandb.com/en/blogs/blog-jahrends-en
その後、シングルテナントを指向するお客様に不可欠なPDBの個数を制限する公式の方法がなぜ存在しないのかを議論していました。ハンズオン環境を立ち上げ、休憩の間ちょっと試してみましたが、DROP PLUGGABLE DATABASEを実行しない限り、unplug/plugオペレーションでCONTAINER$中に残ってしまうため、CONTAINER$の制限は正しいソリューションではないことがわかりました。たとえ残りを削除したとしても、COTAINER$への制約をつける方法は上手くいきません。
翌朝の朝食でヨハネスはトリガーについて言及し、すぐにトリガーを発行しました。しかしながら、データ・ディクショナリを使いこなす場合にデータベースのサポートを維持することはよい考えではありません。
そのため、私は社内に問合せ、はっきりと「これを望んでいない人がいる」というメッセージを受け取りました。
オラクルで長く働いているので、この意味がわかります、物事をさらに議論したくないときは、「誰か」を責めるのが一般的です。 「誰か」の背後に完全に隠れることができますからね。
Oracle Database 12.2のテストおよび試用を開始し、リリースラベル間のinit.oraパラメータを収集し、変更点や追加箇所を検出していたときに大きな驚きがありました。そして明らかに、その驚きがここに現れたのです。
MAX_PDBS
http://docs.oracle.com/database/122/REFRN/MAX_PDBS.htm#REFRN-GUID-55526BAC-DCB2-4C76-9ACF-1E3D2047E267
つまり、パラメータの説明によると、CDBやApplication ROOTで許容するPDBの最大個数という意味です。
私は驚き、うれしくなり、そして自分の環境ですぐに試さなくては、と思いました。既に自身の環境には3個のPDB(PDB$SEEDは含めていません)がありました。
SQL> alter system set max_pdbs=3;
System altered.

SQL> show pdbs

CON_ID CON_NAME               OPEN MODE  RESTRICTED
------ ---------------------- ---------- ----------
2      PDB$SEED               READ ONLY  NO
3      PDB1                   READ WRITE NO
4      PDB2                   READ WRITE NO
5      CLONE_PDB              MOUNTED

SQL> alter system set max_pdbs=2;
alter system set max_pdbs=2
*
ERROR at line 1:
ORA-32017: failure in updating SPFILE
ORA-65331: DDL on a data link table is outside an application action.
そんなわけで、(少なくとも私の環境では)エラーメッセージが少々粗いですが、このパラメータは求めていたことを実現してくれています。シングルテナント環境では、この値を1に設定し、このコンテナデータベースに対し、2個目のPDBの作成やプラグインをさせないようにしましょう。
まっさらのコンテナデータベースを使い別のテストを実施しました。
SQL> show pdbs

CON_ID CON_NAME      OPEN MODE  RESTRICTED
------ ------------- ---------- ----------
2      PDB$SEED      READ ONLY  NO

SQL> alter system set max_pdbs=1;
System altered.

SQL> show parameter max_pdbs

NAME                     TYPE     VALUE
------------------------ -------- ----- 
max_pdbs                 integer      1

SQL>  create pluggable database pdb1 admin user adm identified by adm  file_name_convert=('/u02/oradata/CDB2/pdbseed','/u02/oradata/CDB2/pdb1');
Pluggable database created.

SQL>  create pluggable database pdb2 admin user adm identified by adm  file_name_convert=('/u02/oradata/CDB2/pdbseed','/u02/oradata/CDB2/pdb2');

create  pluggable database pdb2 admin user adm identified by adm  file_name_convert=('/u02/oradata/CDB2/pdbseed','/u02/oradata/CDB2/pdb2')
*
ERROR at line 1:
ORA-65010: maximum number of pluggable databases created


SQL> drop pluggable database pdb1 including datafiles;
Pluggable database dropped.

SQL>  create pluggable database pdb2 admin user adm identified by adm  file_name_convert=('/u02/oradata/CDB2/pdbseed','/u02/oradata/CDB2/pdb2');
Pluggable database created.
確かなソリューションのように見えます。

しかしながら、Oracle ACE DirectorFranck Pachotのエントリもご覧ください。このパラメータによって発生する問題について記載しています。
Oracle 12cR2: MAX_PDBS
http://blog.dbi-services.com/oracle-12cr2-max_pdbs/

0 件のコメント:

コメントを投稿