C.1 エラー: ORA-28374: 入力されたマスター・キーが見つかりません

キーが欠落しているか正しくないと、データベースで「ORA- 28374: 入力したスター・キーがウォレットに見つかりません」というエラーが発生することがあります。暗号化された表領域またはREDOログへのアクセスにはマスター・キーが必要であるため、マスター・キーが欠落しているとデータベースの可用性に影響を与える可能性があります。

このエラーを解決するには、次の手順を実行します。

  1. 欠落しているキーを特定します:
    • 非RACデータベースでは、次のコマンドを実行します:
      select MASTERKEYID as REQUIRED_KEYS from v$encrypted_tablespaces MINUS select
              HEXTORAW(substr(utl_encode.base64_decode(utl_raw.cast_to_raw(enckeys.key_id)), 3,32)) as
              AVAILABLE_KEYS from v$encryption_keys enckeys;
    • RACデータベースでは、次のコマンドを実行します:
      select inst_id, MASTERKEYID as REQUIRED_KEYS from gv$encrypted_tablespaces MINUS select
              inst_id, HEXTORAW(substr(utl_encode.base64_decode(utl_raw.cast_to_raw(enckeys.key_id)),
              3,32)) as AVAILABLE_KEYS from gv$encryption_keys enckeys;
    出力は次のようになります:
    REQUIRED_KEYS
    --------------------------------
    4859998402964F35BFF830640BE7E384 

    これは、欠落しているキーのキーIDを示します。行が返されない場合、データベースには必要なすべてのキーがあります。

  2. TDEキーが格納されているウォレット・パスを識別します。
    select WRL_TYPE, WRL_PARAMETER from v$encryption_wallet;
    出力は次のようになります:
    WRL_TYPE  WRL_PARAMETER
    --------------------------------------------------
    FILE.     /scratch/user/master23ai/tde/
  3. 現在のウォレットおよびバックアップされているウォレットのすべてからorapkiユーティリティを実行して、欠落しているキーを確認します。
    orapki wallet display -wallet <wallet-file>

    <wallet-file>は、前のステップのコマンドの結果です。

    このコマンドは、.ssoファイルと.p12ファイルの両方に対して実行する必要があります。

    たとえば、/scratch/user/master23ai/tde/ewallet.p12/scratch/user/master23ai/tde/cwallet.ssoおよび/scratch/user/master23aibkp/ewallet_2025032607100793.p12 (バックアップ・ファイル)をすべてチェックする必要があります。

    出力は次のようになります:
    orapki wallet display -wallet /scratch/user/master23aibkp/ewallet_2025032607100793.p12
    Oracle PKI Tool Release 23.0.0.0.0 - Production
    Version 23.0.0.0.0
    Copyright (c) 2004, 2025, Oracle and/or its affiliates. All rights reserved.
    
    Enter wallet password:
    Requested Certificates:
    Subject:        CN=oracle
    User Certificates:
    Oracle Secret Store entries:
    ORACLE.SECURITY.DB.ENCRYPTION.AUhZmYQClk81v/gwZAvn44QAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    ORACLE.SECURITY.ID.ENCRYPTION.
    ORACLE.SECURITY.KB.ENCRYPTION.
    ORACLE.SECURITY.KM.ENCRYPTION.AUhZmYQClk81v/gwZAvn44QAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    Trusted Certificates:
    
  4. ステップ1の欠落しているキーをベース64形式に変換します。
    select
    utl_raw.cast_to_varchar2(utl_encode.base64_encode('01'||substr('<key from step 1>',1,4)))||
    utl_raw.cast_to_varchar2(utl_encode.base64_encode(substr('<key from step 1>',5,length('<key from step 1>')))) masterkeyid_base64
    FROM dual;
    出力は次のようになります。
    MASTERKEYID_BASE64
    --------------------------------------------------------------------------------
    AUhZmYQClk81v/gwZAvn44Q=
  5. ステップ4の出力とステップ3の出力のOracle Secret Store entries:セクションの内容を比較して、キーが欠落しているファイルを特定します。

    この例では、欠落しているキーがewallet_2025032607100793.p12バックアップ・ファイルの1つにあります。

  6. 変更する前に、現在のewallet.p12およびcwallet.ssoのバックアップを取得します。
  7. 欠落しているキーを現在のキーストアにマージします。
    ADMINISTER KEY MANAGEMENT MERGE KEYSTORE '<keystore_location1>' [IDENTIFIED BY
            <keystore1_password>] INTO EXISTING KEYSTORE '<keystore_location2>' IDENTIFIED BY
            <keystore2_password> WITH BACKUP [USING '<backup_identifier>'];
  8. orapkiユーティリティを実行して、マージが成功したことを確認します。
    orapki wallet display -wallet <wallet-file>
    ウォレットがASMファイル・システムに格納されている場合、orapkiまたはmkstoreユーティリティを直接使用することはできません。かわりに、非ASMの場所に一時ウォレットを作成し、orapkiを使用してウォレットの内容を表示する必要があります。
    1. キーストアをローカルに作成します:
      ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '<non_ASM_keystore_location>' IDENTIFIED BY <new_keystore_password>;
    2. AKM移行コマンドを使用して、ASMパスからウォレットをコピーし、ローカル・キーストアを作成し、orapkiまたはmkstoreを使用してウォレットを検証します:
      ADMINISTER KEY MANAGEMENT MERGE KEYSTORE '<keystore1_location>' [IDENTIFIED BY <software_keystore1_password>] INTO NEW KEYSTORE '<non_ASM_keystore_location>' IDENTIFIED BY <new_keystore_password> WITH BACKUP [USING '<backup_identifier>'];