シャード・データベースの作成

シャードとして使用するデータベースは、それぞれのホストで作成する必要があります。

シャード・カタログ・データベースと同様に、シャード・データベースの作成方法やプロビジョニング方法は分散データベースの観点からすると重要ではありません。このデータベースは、Database Configuration Assistant (DBCA)で作成したり、SQL*Plusを使用して手動で作成し、Oracle Cloud Infrastructureツールからプロビジョニングできます。

次の要件を満たす各シェード・ホストでOracle Database Enterprise Editionインスタンスを実行していれば、シャードとして使用できます。

GSMROOTUSERのロック解除

Oracle提供のGSMROOTUSERという名前のユーザー・アカウントは、シャードに指定したデータベースのCDB$ROOT内でロック解除してパスワードを割り当てる必要があります。さらに、このユーザーには、システム権限SYSDGおよびSYSBACKUPを付与する必要があります。

GSMROOTUSERアカウントは、GDSCTLおよびシャード・ディレクタのプロセスがシャード・データベースに接続して、分散データベースのコマンドに応じて管理タスクを実行するために使用されます。指定したパスワードは、分散データベース・トポロジの作成時にGDSCTLによって発行されるADD CDBコマンドで使用されます。また、シャード・ディレクタでシャード・データベースにOracle Data Guardを構成するためにDEPLOYコマンドを実行するときにも使用されます(必要な場合)。ユーザーによる再指定が必要なることはありません。GDSCTLとシャード・ディレクタによってOracleウォレット内に安全に保管され、必要なときにのみ復号化されます。MODIFY CDBコマンドは、その後にシャード・データベースでパスワードが変更されたときに、保管したパスワードを更新するために使用できます。

$ sqlplus / as sysdba

SQL> alter user gsmrootuser account unlock;

User altered.

SQL> alter user gsmrootuser identified by gsmrootuser_password;

User altered.

SQL> grant SYSDG, SYSBACKUP to gsmrootuser;

Grant succeeded.

GSMUSERのロック解除

Oracle提供のGSMUSERという名前のユーザー・アカウントは、シャード・データベースとして指定したPDB内でロック解除してパスワードを割り当てる必要があります。さらに、このユーザーには、システム権限SYSDGおよびSYSBACKUPを付与する必要があります。

GSMUSERは、コンテナ・データベースの共通ユーザーである点に注意してください。そのため、そのパスワードはCDB$ROOTおよびCDB内のすべてのPDBで同じになります。これは、セキュリティ上の問題につながります。これを回避するために、CDBごとにシャードPDBを1つのみホストして、それ以外のPDBではGSMUSERアカウントのロックを解除しないようにします。

このアカウントは、シャード・ディレクタのプロセスがシャード・データベースに接続して、分散データベースのコマンドに応じて管理タスクを実行するために使用されます。指定したパスワードは、この後の分散データベース・トポロジの作成時に発行するADD SHARDコマンドで使用します。このパスワードは、シャード・ディレクタによってOracleウォレットに安全に保管され、必要なときにのみ復号化されるため、再指定が必要になることはありません。その後、シャード・データベースでパスワードが変更された場合、保管したパスワードはMODIFY SHARDコマンドを使用して更新できます。

$ sqlplus / as sysdba

SQL> alter user gsmuser account unlock;

User altered.

SQL> alter user gsmuser identified by gsmuser_password;

User altered.

SQL> alter session set container=shard_pdb_name;
SQL> alter user gsmuser account unlock;

User altered.

SQL> grant SYSDG, SYSBACKUP to gsmuser;

Grant succeeded.

PDBの作成

シャード・データベースとして使用する(PDB)プラガブル・データベースを作成します。コンテナ・データベース(CDB)のルート・コンテナ(CDB$ROOT)をシャードとして使用することは、サポートされていません。

SPFILEの存在の確認

シャード・データベースでは、サーバー・パラメータ・ファイル(SPFILE)を使用する必要があります。

SPFILEが必要になる理由は、分散データベース・インフラストラクチャが内部データベース・パラメータを使用して構成メタデータを保存し、そのデータはデータベースの起動操作と停止操作の間で永続している必要があるためです。

$ sqlplus / as sysdba

SQL> alter session set container=shard_pdb_name;
SQL> show parameter spfile

NAME     TYPE      VALUE
-------- --------- ------------------------------------
spfile   string    /u01/app/oracle/dbs/spfileshard.ora

DB_FILESを適切に計算して設定

DB_FILESデータベース初期化パラメータは、分散データベースに必要なチャンクまたは表領域セット(あるいはその両方)の合計数以上に設定します。

分散データベース構成内の各データ・チャンクは、表領域パーティションとして実装され、専用のオペレーティング・システム・データ・ファイル内に存在します。そのため、データベース初期化パラメータDB_FILESは、システム内のチャンク数(CREATE SHARDCATALOGコマンドまたはADD SHARDSPACEコマンドで指定)や表領域セット数の合計以上にする必要があります。

Raftレプリケーション・シナリオのシャードに存在するチャンクの数は、シャードがリーダーまたはフォロワのいずれかであるすべてのチャンクの合計です。

特定のシャード上の分散データベース・オブジェクトに対して作成されたデータベース・ファイルの数を計算するには:

必要なデータベース・ファイル= (SHARD DDLを使用して実行されたCREATE TABLESPACE SET SQL文の数) * (シャードに存在するチャンクの数+ 1)

DB_FILESは、分散データベース(前述)のPLUS分散データベース・ファイル(system、sysauxなど)で使用されるファイル数以上に設定する必要があり、一般RDBMSコード(5)で必要とされる追加のPLUSです。したがって、次のようになります:

各シャードに必要なDB_FILES = (前述の計算で必要なデータベース・ファイルの数) +デフォルト・データベース・ファイルの数(6) + 5

文字セットのチェック

シャード・データベースのデータベース文字セットと各国語文字セットは、シャード・カタログ・データベースとその他のすべてのシャード・データベースで使用されているものと同じにする必要があります。つまり、シャード・カタログまたはシャードのいずれかに挿入される可能性のある文字がすべて含まれている文字セットを選択する必要があるということです。

この要件は、MOVE CHUNKコマンドの実行時に、トランスポータブル表領域をシャード間で移動するためにOracle Data Pumpが内部的に使用されることから発生します。このメカニズムの要件は、ソースと宛先で文字セットが一致していることです。

$ sqlplus / as sysdba

SQL> alter session set container=shard_pdb_name;
SQL> select * from nls_database_parameters 
  2  where parameter like '%CHARACTERSET';

PARAMETER                                VALUE
---------------------------------------- --------------------
NLS_NCHAR_CHARACTERSET                   AL16UTF16
NLS_CHARACTERSET                         WE8DEC

COMPATIBLE12.2.0以上に設定

COMPATIBLE初期化パラメータを少なくとも12.2.0に設定する必要があります。

$ sqlplus / as sysdba

SQL> alter session set container=shard_pdb_name;
SQL> show parameter compatible

NAME                   TYPE        VALUE
---------------------- ----------- -----------------
compatible             string      21.0.0

DB_CREATE_FILE_DESTの設定

チャンク管理インフラストラクチャで使用されるOracle Managed Filesをサポートするには、DB_CREATE_FILE_DESTデータベース・パラメータに有効な値が設定されている必要があります。

この場所は、チャンクの移動操作(MOVE CHUNKや自動リバランスなど)の実行中に、チャンク・データを保持するトランスポータブル表領域を保存するために使用されます。さらに、『Oracle Database管理者ガイド』のOracle Managed Filesの使用に関する項で説明されているファイルも、Oracle Managed Filesを使用するOracleデータベースの慣例に従って、この場所に保存されます。

$ sqlplus / as sysdba	

SQL> alter session set container=shard_pdb_name;
SQL> show parameter db_create_file_dest

NAME                  TYPE      VALUE
--------------------- --------- -----------------------------
db_create_file_dest   string    /u01/app/oracle/oradata

DATA_PUMP_DIRの作成

DATA_PUMP_DIRというディレクトリ・オブジェクトをPDB内に作成して、GSMADMIN_INTERNALアカウントからアクセスできるようにする必要があります。

GSMADMIN_INTERNALは、すべての分散データベース・メタデータ表とPL/SQLパッケージを所有するOracle提供のアカウントです。ロックしたままにして、対話的なログインに使用されないようにしてください。分散データベース・メタデータとPL/SQLを所有することと、それに対するアクセスを制御することのみを目的としたものです。

$ sqlplus / as sysdba	

SQL> create or replace directory DATA_PUMP_DIR as ‘/u01/app/oracle/oradata’;

Directory created.

SQL> alter session set container=shard_pdb_name;
SQL> grant read, write on directory DATA_PUMP_DIR to gsmadmin_internal;

Grant succeeded.

DB_FILE_NAME_CONVERTの設定

シャード間のファイル移動をサポートするには、データベース・パラメータのDB_FILE_NAME_CONVERTに有効な値が設定されている必要があります。この場所は、一般的な非分散データベースのように、スタンバイ・データベースが使用中のときに使用され、チャンク移動操作中にも使用できます。通常のファイル・システムの場所の場合は、このパラメータの末尾をスラッシュ(/)にすることをお薦めします。

$ sqlplus / as sysdba

SQL> alter session set container=shard_pdb_name;
SQL> show parameter db_file_name_convert

NAME TYPE VALUE
---------------------- --------- -----------------------------
db_file_name_convert   string    /dbs/SHARD1/, /dbs/SHARD1S/

Oracle Net TNSリスナーの設定

Oracle Net TNSリスナーを設定して選択したポート(デフォルトは1521)で実行します。これにより、シャードPDBに対する着信接続リクエストを処理できます。

TNSリスナーは、どのような方法で作成および構成してもかまいません。データベースの作成方法によっては、ALTER SESSION SET CONTAINERを使用する必要のない、PDBへの直接接続リクエストを許可できるデータベース・サービスを明示的に作成することが必要になる場合もあります。

リスナーが正しく構成されていることを確認するには、新しくロック解除したGSMUSERアカウントと適切な接続文字列を使用して、次の操作を実行します。LSNRCTL SERVICESを実行すると、このリスナーを使用して現在利用可能なすべてのサービスが示されます。

$ sqlplus gsmuser/gsmuser_password@shard_connect_string

SQL> show con_name

CON_NAME
-----------------------
shard_pdb_name

接続を確認したら、前述のshard_connect_stringをノートにとっておきます。これは、この後の構成プロセスのGDSCTL ADD SHARDコマンドで使用します。一般に、この接続文字列はhost:port/service_nameの形式になります(たとえば、shardhost.example.com:1521/shard_pdb.example.com)。

スタンバイ・シャード・データベースを使用する場合:

フラッシュバック・データベースの有効化

フラッシュバック・データベースは、分散データベースでData Guardスタンバイ・シャード・データベースを使用する場合に有効にします。

$ sqlplus / as sysdba

SQL> alter session set container=shard_pdb_name;
SQL> select flashback_on from v$database;

FLASHBACK_ON
------------------
YES

FORCE LOGGINGの有効化

FORCE LOGGINGモードは、シャード・データベースがスタンバイ・シャード・データベースを使用する場合に有効にする必要があります。

$ sqlplus / as sysdba

SQL> alter session set container=shard_pdb_name;
SQL> select force_logging from v$database;

FORCE_LOGGING
---------------------------------------
YES

STANDBY_FILE_MANAGEMENTの設定

スタンバイ・シャード・データベースが分散データベース構成の一部である場合、STANDBY_FILE_MANAGEMENTデータベース・パラメータをAUTOに設定して、スタンバイ・シャード・データベースに新しいデータベース・ファイルを自動的に作成する必要があります。

このパラメータがMANUAL (デフォルト)に設定されている場合、たとえばCREATE TABLESPACEコマンドで作成される新しいデータベース・ファイルは、スタンバイには作成されません。これにより、スタンバイがプライマリ・データベースになると、データが使用できなくなり、アプリケーション・エラーが発生します。

$ sqlplus / as sysdba

SQL> alter session set container=shard_pdb_name;
SQL> show parameter standby_file_management

NAME TYPE VALUE
------------------------------------ ----------- ------------
standby_file_management string AUTO

Raftレプリケーションを使用する場合:

次のデータベース初期化パラメータを設定します。

  • FILESYSTEMIO_OPTIONS=setall - 非同期I/Oの有効化

  • UNDO_RETENTION=900 - これはデフォルトであり、自動的にチューニングされますが、このパラメータを明示的に非常に低い値に設定しないことをお薦めします。