ウォレットの使用

Oracle Database 21c以降、分散データベース用に作成されたOracleウォレットは、任意のデプロイの重要な部分です。分散データベース構成内のすべてのプライマリ・データベースとそのレプリカには、適切な動作を保証するために、シャーディング固有のウォレット・ファイルが存在する必要があります。

これらのウォレットは、分散データベースのデプロイ中に作成され、暗号化されたデータをシャード・カタログと個々のシャード間で送信できるようにします。ウォレットを作成するプロセスにより、分散データベース・デプロイメントの様々なコンポーネント間で信頼関係が確立され、シャードでの不正な操作の発生が防止されます。

ウォレット自体は、GDSCTLコマンドCREATE SHARDCATALOGが発行されるとシャード・カタログおよびシャード・カタログ・レプリカに作成され、GDSCTLコマンドDEPLOYが発行されると、ウォレットはシャードに作成されます。

デプロイメントが正常に終了すると、ウォレット・ファイルには、シャード・カタログおよびシャードが相互に接続して、DDL処理、ユーザー・コンテキスト伝播、その他の機密データの引渡しなどの操作を実行するために必要な情報が格納されています。ウォレットに格納されている情報には、シャーディング固有の暗号化および復号化キー、接続文字列および暗号化されたパスワードがあります。このデータを変更するGDSCTLまたはSQL*Plusから発行されたコマンドにより、ウォレットは自動的に新しい情報で更新されます。

Oracle Database 19cからの互換性と移行

旧Oracle Databaseリリースからアップグレードされる既存のOracle Globally Distributed Database構成の場合、データベースのアップグレード後にOracle Globally Distributed Database 21cのアップグレード後のステップのステップを実行します。

ウォレットの検索

ウォレット・ファイルの場所は、wallet_rootデータベース初期化パラメータで指定されたディレクトリ下です。CREATE SHARDCATALOGまたはDEPLOYの発行前にwallet_rootが設定されていない場合、シャード・カタログまたはシャードでそれぞれwallet_root$ORACLE_BASE/admin/db_unique_nameに設定されます。

たとえば、シャード・カタログまたはシャードにログインした後は、次のとおりとします。

SQL> select guid from v$pdbs where con_id = sys_context('userenv','con_id');

GUID
--------------------------------
C23E7C78D5B77D50E0537517C40ACE4A

SQL> select value from v$parameter where name='wallet_root';

VALUE
--------------------------------------------------------------------------------
your-path-to-keystore

これらの値を指定すると、シャーディング固有のウォレット・ファイル名はyour-path-to-keystore/C23E7C78D5B77D50E0537517C40ACE4A/shard/cwallet.ssoになります。

シャード・カタログ・レプリカでのウォレット

スタンバイ・データベースがシャード・カタログのレプリカとして作成される場合、カタログのシャード・ウォレットをプライマリ・シャード・カタログ・ウォレットから手動でコピーする必要があります。前述の方法を使用してプライマリ・ウォレットの場所を見つけ、スタンバイ・シャード・カタログ・データベースの正しい場所にコピーを作成します。

ノート:

wallet_rootの値は、スタンバイ・シャード・カタログでは異なる可能性があるため、設定されていないことがあります。ウォレットをスタンバイの場所にコピーする前に、wallet_rootの値を設定することを忘れないでください

ウォレットは、GDSCTL create shardcatalogコマンドの実行後、プライマリ・シャード・カタログにのみ存在します。create shardcatalogを実行する前にスタンバイ・シャード・カタログ・データベースが作成されている場合、まずcreate shardcatalogを実行してプライマリ・シャード・カタログにシャード・ウォレットを作成し、そのウォレットをスタンバイ・シャード・カタログにコピーします。

シャード・カタログ・データベースには、CDB$ROOTのウォレットも必要です。シャード・カタログ・データベースのシャード・ウォレットをコピーしてバックアップする場合は、シャード・カタログに使用されているPDBに関係なく、CDB$ROOTのシャード・ウォレットもコピーする必要があります。

ウォレットのライフサイクル管理

分散データベースがデプロイされると、シャード・カタログ、シャードおよびそのレプリカのライフ・サイクル全体を通してシャード・ウォレットを維持することが非常に重要です。具体的には、データベース・データ・ファイルであるかのように、各データベースのすべてのバックアップおよびリストア操作にシャード・ウォレットを含める必要があります。

同様に、PDBのクローニング、再配置、または移動が行われた場合、シャード・ウォレットはそのPDBとともに新しい場所に移動する必要があります。特にPDBのクローニングの場合、クローニング操作時にPDBのGUIDが変更されるため、ウォレットへのパスが前述のとおり変更されます。

ウォレットの更新

シャード・ウォレットが失われた場合、古い場合、またはアクセスできなくなった場合は、次のGDSCTLコマンドを使用して新しく移入されたウォレットを作成できます。

gdsctl sync database -database shard_name

ウォレットが存在しないか、その内容が古い場合に特定の操作を実行しようとすると、次のエラーが1つ以上発生します。

ORA-03873: unable to encrypt DDL statement with error ...

ORA-03874: unable to encrypt GSMUSER password with error ...

ORA-03876: error ... when attempting to generate a temporary key to add new shards

ORA-03894: "Failed to send keys to shard %s with error ...."

ORA-03896: Unable to load the sharding wallet successfully.

ORA-00600: internal error code, arguments: [gwsec_get_latest_key]