ウォレットの使用
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]