7 Oracle ACFSの高度なトピックの理解

Oracle ACFSの高度なトピックには、さらに複雑な管理の問題に関する説明が含まれています。

この付録では、Oracle Advanced Cluster File System (Oracle ACFS)の制限事項、高度な管理、トラブルシューティングおよびパッチ適用などの高度なトピックについて説明します。

関連項目:

Oracle ACFSおよびOracle ADVMの詳細は、My Oracle Support(https://support.oracle.com)の記事を参照してください。

この付録の内容は次のとおりです。

Oracle ACFSの概要は、「Oracle ACFSおよびOracle ADVMの概要」を参照してください。

Oracle ACFSの制限事項

この項では、Oracle ACFSの制限事項について説明します。

この項の内容は次のとおりです。

ノート:

Oracle ACFSでは、ディレクトリのハード・リンクをサポートしません。

Oracle ACFSディスク領域使用量

Oracle ACFSでは、64ビットのシステム上に256のマウントをサポートします。十分なメモリーがある場合はそれ以上のファイル・システムをマウントできます。

Oracle ACFSは、ファイル・システム内の2^40 (1兆)ファイルをサポートします。40億以上のファイルがテストされました。ファイル・システム内のディレクトリ数に絶対的な制限はありません。制限はハードウェア・リソースに基づきます。

Oracle ACFSでは、データを書き込む際、パフォーマンスを高めるために大規模なユーザー・ファイルを事前に割り当てます。この記憶域は、ファイルが閉じられても戻されませんが、ファイルを削除すると戻されます。ノードでファイル・システムが初めてマウントされるときには、Oracle ACFSによりローカル・メタデータ・ファイルも割り当てられます。この記憶域は、1ノード当たり約64から128MBです。

空き領域を探すときに、グローバル記憶域ビットマップ上での競合を減らすために、Oracle ACFSはローカル・ビットマップも使用できるようにしておきます。このディスク領域は、一部の領域が実際にまだ割り当てられていない場合でも、Linux dfコマンドなどのツールによってin useとしてレポートされます。このローカルの記憶域プールは、ノードごとに128 MBと同じ大きさにでき、dfなどのようなコマンドでもスペース割当てを可能にし、割り当てられているよりも少ない領域でレポートできます。

Oracle ACFSファイル・システムに割り当てることができる最大サイズを表7-1に示します。Oracle ACFSおよびOracle ASMに対するストレージ制限は、ディスク・グループ互換性属性によって決まります。

表7-1 Oracle ACFSファイル・システムまたはOracle ADVMボリュームの最大ファイル・サイズ

冗長性 COMPATIBLE.ASM < 12.2.0.1のディスク・グループ COMPATIBLE.ASM >= 12.2.0.1のディスク・グループ

外部

128 TB

128 TB

標準

64 TB

128 TB

42.6 TB

128 TB

ノート:

Compatible.ASM >= 19.0で1PB ADVMボリュームが必要なお客様は、次のディスク・グループ属性を’64’に設定できます。このパラメータは、新しく作成されたボリュームにのみ影響します:

SQL> alter diskgroup my_dg set attribute 'advm_extent_size_mb'='64';

関連項目:

Oracle ACFSのエラー処理

Oracle ACFSまたは別のファイル・システムがOracle ADVMボリュームを使用しているときにOracle ASMインスタンスに障害が発生したり強制終了となると、I/O障害が発生します。そのボリュームに再びアクセスするには、ボリュームを閉じてから、開きなおす必要があります。これには、ローカルOracle ASMインスタンスの障害発生時にマウントされていたすべてのファイル・システムをディスマウントします。インスタンスの再起動後に、対応するディスク・グループを有効なボリュームでマウントしてから、ファイル・システムを再マウントすることも必要です。ボリュームおよびOracle ACFSファイル・システムの登録解除、ディスマウント、無効化を参照してください。

ファイル・システムがOracle ADVMボリューム・ファイルに現在マウントされている場合は、それらのファイル・システムを先にディスマウントせずにOracle ASMインスタンスを終了するのに、SHUTDOWN ABORTコマンドを使用しないでください。使用すると、アプリケーションでI/Oエラーが発生し、Oracle ASMストレージの隔離前に、終了時点で書き込まれるOracle ACFSのユーザー・データおよびメタデータがストレージにフラッシュされない可能性があります。ファイル・システムをディスマウントする時間がない場合は、SHUTDOWN ABORT操作を発行する前に、2つのsync (1)コマンドを実行してキャッシュ済のファイル・システム・データおよびメタデータを永続ストレージにフラッシュする必要があります。

メタデータの書込みが失敗した場合、その原因がOracle ASMインスタンスの障害であろうと記憶域の障害であろうと、Oracle ACFSはオペレーティング・システム環境を中断しません。かわりに、Oracle ACFSはエラーを特定のファイル・システムにまで隔離し、ファイル・システムをオフライン・エラー状態にします。それ以降、そのファイル・システムのそのノードで成功する唯一の操作は、ディスマウント操作です。もう1つのノードでは(記憶域にメタデータを書き込めると仮定して)、未処理のメタデータ・トランザクションがリカバリされます。I/Oの異常が解決したら、オフラインにしたノードにファイル・システムを再びマウントできます。

ファイル・システムのディレクトリがプロセスの現在の作業ディレクトリであるなど、ファイル・システムを参照するプロセスが存在する場合、管理者がオフライン・エラー状態にあるファイル・システムをディスマウントすることはできません。この場合、ファイル・システムをディスマウントするには、ファイル・システムのファイルおよびディレクトリを参照するそのノード上のすべてのプロセスを識別して、それらを終了させる必要があります。Linuxのfuserコマンドまたはlsofコマンドは、プロセスおよびオープン・ファイルに関する情報を一覧表示します。

Oracle ACFSは、チェックサムまたは想定されるタイプの比較に基づいて、読取り操作から戻されたファイル・メタデータで不整合を検出すると、適切な処理を実行して、影響を受けるファイル・システム・コンポーネントを隔離し、fsckをできるだけ早く実行する必要があることを示す通知を生成します。fsckが実行されるまで、ファイル・システムがマウントされるたびに、システム・イベント・ログ出力メッセージを含む通知が生成されます。

Oracle ACFSとNFS

Linux上のNFSを介してファイル・システムをエクスポートするときには、-fsid=numエクスポート・オプションを使用します。このオプションは、NFSクライアントとの通信に使用されるファイル・ハンドルのファイル・システム識別子の部分を、ファイル・システムがマウントされているブロック・デバイスのメジャー番号およびマイナー番号から導出された数値のかわりに、強制的に指定した値にします。numには32ビットの番号であれば使用できますが、エクスポートされたすべてのファイル・システムの間で一意であることが必要です。また、numは、クラスタのメンバー間で一意であり、特定のファイル・システムのクラスタの各メンバーで同じnumであることが必要です。これが必要なのは、Oracle ADVMブロック・デバイスのメジャー番号が、同じノードのすべての再起動で、またはクラスタ内の様々なノードで、同じであると保証されないためです。

ノート:

Oracle ASM Dynamic Volume Manager (Oracle ADVM)ボリュームおよびOracle Advanced Cluster File System (Oracle ACFS)ファイル・システムは、NFSまたは共通インターネット・ファイル・システム(CIFS)ファイルから作成されたディスク・グループでは、現在サポートされていません。ただし、場合によっては、Oracle ACFSファイル・システムを、NFSまたはCIFSファイル・システムとしてネットワーク・クライアントにエクスポートすることはできます。Oracle ACFS LinuxまたはSolarisサーバーと接続している場合、Windows上のSamba/CIFSクライアントはACLを使用できません。

Gridホーム・クラスタ用の高可用性NFS (HANFS)を使用している場合、HANFSでは、前の段落で記述されている状況を自動的に処理します。HANFSの詳細は、Oracle Grid Infrastructure用の高可用性Network File Storageを参照してください。

Oracle ADVMの制限事項

このトピックでは、Oracle ADVMの制限事項について説明します。

Oracle ADVMボリュームのデフォルトの構成は、8列、ストライプ幅が1MBです。デフォルトのボリューム・エクステント・サイズは64MBです。

Oracle ADVM動的ボリュームで列数を1に設定すると、Oracle ADVMボリュームのストライプ化は事実上終了します。データベース・データ・ファイルおよびその他のファイルを使用して最適なパフォーマンスを実現するには、列を8(デフォルト)に設定することをお薦めします。

Linuxプラットフォームでは、Oracle ASM動的ボリューム・マネージャ(Oracle ADVM)ボリューム・デバイスは、Oracle ASMディスク・グループ内の基礎となるストレージの構成に関係なく、ブロック・デバイスとして作成されます。Oracle ADVMボリューム・ブロック・デバイスのRAWボリューム・デバイスへのマップにRAW (8)を使用しないでください。

Oracle ADVMボリュームを管理するASMCMDコマンドの詳細は、ASMCMDによるOracle ADVMの管理を参照してください。

ACFSスナップショットを使用した全データベース(非CDBまたはCDB)のクローニング方法

ACFSスナップショットは、ファイル・システムのスパースなPoint-in-Timeコピーであり、これを使用すると、DBがACFS上にある場合に、PDBスナップショット・クローニングを使用してPDBのクローンと同様にフルDBクローンも作成できます(PDBクローニングのユーザー・インタフェース)。ACFSスナップショットをテスト環境および開発環境で使用して、テスト・マスターの高速で領域効率の高いクローンを作成できます。この項では、ACFSスナップを使用してフルDBクローンを作成するために必要なステップを例とともに説明します。

テスト設定: クローニングされるSOURCEという単一のテスト・マスターCDBがあります。このCDBにはsourcepdb[1-10]という名前で10個のPDBがあり、それぞれOLTPスキーマとともにロードされます。これはReal Application Clusterデータベース(RAC)で、インスタンスは両方のノードで実行されています。データファイル、REDOログおよび制御ファイルは、"/mnt/dbvol"にマウントされたACFSに格納されます。このファイル・システムは、DATAディスク・グループに作成されます。リカバリ・ログおよびアーカイブ・ログは、RECOディスク・グループの最上位に作成される、"/mnt/rvol"にマウントされたファイル・システムに格納されます。ACFSスナップはファイル・システム内に格納され、同じマウントポイントを介してアクセスできます。

問題が発生した場合にリカバリ方法を提供するために、テスト・マスター・データベースのバックアップを定期的に作成することをお薦めします。

ExadataでのACFSスナップショットの構成の詳細は、Oracle Exadataストレージ・スナップショットの設定を参照してください

様々なACFSスナップショットのユースケースの詳細は、My Oracle Support (MOS)のノート「Oracle ACFS Snapshot Use Cases on Exadata」(文書ID 2761360.1)を参照してください。

クローンを作成および使用するステップ

  1. データベースがアーカイブ・ログ・モードであることを確認します。
    SQL> archive log list
    Database log mode              Archive Mode
    Automatic archival             Enabled
    Archive destination            /mnt/rvol/archive
    Oldest online log sequence     488
    Next log sequence to archive   489
    Current log sequence           489
    SQL>
  2. テスト・マスター・データベースの制御ファイルのSQLトレース・バックアップを取得します。生成されたスクリプトは、このテスト・マスターのスナップショットごとに制御ファイルを作成するための基礎として使用されます。このバックアップは、AS句で指定された場所に作成されます。RESETLOGS引数を指定すると、create controlfile文のRESETLOGSバージョンのみがトレース・ファイルに生成されます。
    SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/tmp/source1_ctlfile_bkup.sql' RESETLOGS;
    Database altered.
    
    [oracle@machine ~]$ ls -lrt /tmp/source1_ctlfile_bkup.sql
    -rw-r----- 1 oracle oinstall 32874 Jun 16 04:01 /tmp/source1_ctlfile_bkup.sql
  3. DBインスタンスがspfileを現在使用している場合は、spfileからpfileを作成します。
    SQL> CREATE PFILE=’/tmp/clone_pfile.ora’ FROM SPFILE;
     
    File created.
     
    SQL>

    pfileは、PFILE=句で指定された場所に保存されます。

  4. テスト・マスター・データベースを停止し、データファイル・ファイルシステムのRWスナップを作成します。
    [oracle@machine ~]$ srvctl stop database -db source
    [oracle@machine ~]$ /sbin/acfsutil  snap create -w clone /mnt/dbvol/
    acfsutil snap create: Snapshot operation is complete.
    [oracle@machine ~]$ /sbin/acfsutil snap info clone /mnt/dbvol/
    snapshot name:               clone
    snapshot location:           /mnt/dbvol/.ACFS/snaps/clone
    RO snapshot or RW snapshot:  RW
    parent name:                 /mnt/dbvol/
    snapshot creation time:      Tue Jun 16 04:09:10 2020
    file entry table allocation: 17170432   (  16.38 MB )
    storage added to snapshot:   17170432   (  16.38 MB )
    $
  5. ステップ2で生成したトレース・ファイルを変更します。

    バックアップされたトレース・ファイル内の次のブロックは、

    STARTUP NOMOUNT
    CREATE CONTROLFILE REUSE DATABASE "SOURCE" RESETLOGS  ARCHIVELOG
        MAXLOGFILES 192
        MAXLOGMEMBERS 3
        MAXDATAFILES 1024
        MAXINSTANCES 32
        MAXLOGHISTORY 2254
    LOGFILE
      GROUP 5 (
        '/mnt/dbvol/oradata/SOURCE/onlinelog/o1_mf_5_hfh27gq1_.log',
        '/mnt/rvol/fast_recovery_area/SOURCE/onlinelog/o1_mf_5_hfh27jgv_.log'
      ) SIZE 2048M BLOCKSIZE 512,
      GROUP 6 (
        '/mnt/dbvol/oradata/SOURCE/onlinelog/o1_mf_6_hfh27ymp_.log',
        '/mnt/rvol/fast_recovery_area/SOURCE/onlinelog/o1_mf_6_hfh280cb_.log'
      ) SIZE 2048M BLOCKSIZE 512

    次のように変更する必要があります。

    CREATE CONTROLFILE  DATABASE "SOURCE" RESETLOGS ARCHIVELOG
        MAXLOGFILES 192
        MAXLOGMEMBERS 3
        MAXDATAFILES 1024
        MAXINSTANCES 32
        MAXLOGHISTORY 2254
    LOGFILE
      GROUP 5  SIZE 2048M BLOCKSIZE 512,
      GROUP 6  SIZE 2048M BLOCKSIZE 512

    新しいREDOログ・ファイルを作成するので、ターゲット・ファイルを作成するためにDBインスタンスによってdb_create_online_log_dest_1パラメータが選択されることに注意してください。前述の文で指定して、OracleでOracle Managed Files (OMF)を使用して名前を付ける必要はありません。

    CREATE CONTROLFILE文で指定されているDATABASE名は、テスト・マスターのデータベース名と一致する必要があります。DB_UNIQUE_NAMEパラメータは、これをテスト・マスターとは異なるデータベースにするために使用されます。

    DATAFILEブロックのファイル名では、スナップショットで作成されたファイルを指すようにディレクトリ構造を変更する必要があります。

    ノート: これらのファイル名の変更に失敗すると、スナップショットが、その親ファイルを破損して直接使用するようになる可能性があります。スナップショットの場所を指すようにすべてのデータファイル名が変更されていることを確認してください。

    次の名前のファイル

    /mnt/dbvol/oradata/source/datafile/o1_mf_system_hkp8q4l0_.dbf

    は、次のように名前を変更する必要があります

    /mnt/dbvol/.ACFS/snaps/clone/oradata/source/datafile/o1_mf_system_hkp8q4l0_.dbf

    制御ファイルの作成を試行する前に、すべてのスナップショット・データファイルが存在することを確認してください。

    TEMPファイルはすべて新規作成されるため、対応する文を変更する必要があります。

    • 古いTEMPファイルの句:
      ALTER TABLESPACE TEMP ADD TEMPFILE '/mnt/dbvol/oradata/SOURCE/datafile/o1_mf_temp_hf9ck61d_.tmp'
           SIZE 1377M REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
      ALTER SESSION SET CONTAINER = "PDB$SEED";
      ALTER TABLESPACE TEMP ADD TEMPFILE '/mnt/dbvol/oradata/SOURCE/datafile/temp012020-06-01_03-40-57-522-AM.dbf'
           SIZE 37748736  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
      ALTER SESSION SET CONTAINER = "SOURCEPDB1";
      ALTER TABLESPACE TEMP ADD TEMPFILE '/mnt/dbvol/oradata/SOURCE/A70228A28B4EB481E053DFB2980A90DF/datafile/o1_mf_temp_hf9f8yxz_.dbf'
           SIZE 37748736  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
      ALTER SESSION SET CONTAINER = "SOURCEPDB2";
      ALTER TABLESPACE TEMP ADD TEMPFILE '/mnt/dbvol/oradata/SOURCE/A70229825B448EF3E053E0B2980AA4D4/datafile/o1_mf_temp_hf9f9goq_.dbf'
           SIZE 37748736  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
      ...........................................
      ...........................................
      ...........................................
    • 新しいTEMPファイルの句:
      ALTER TABLESPACE TEMP ADD TEMPFILE SIZE 1377M AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
      ALTER SESSION SET CONTAINER = "PDB$SEED";
      ALTER TABLESPACE TEMP ADD TEMPFILE SIZE 37748736   AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
      ALTER SESSION SET CONTAINER = "SOURCEPDB1";
      ALTER TABLESPACE TEMP ADD TEMPFILE SIZE 37748736   AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
      ALTER SESSION SET CONTAINER = "SOURCEPDB2";
      ALTER TABLESPACE TEMP ADD TEMPFILE SIZE 37748736   AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
      ...........................................
      ...........................................
      ...........................................

    ノート:

    OMFは一時ファイルの命名に使用されており、ファイル名を指定する必要はありません。
    • その他の変更点:
      • 全体でREUSE文を削除します。
      • RECOVER DATABASEコマンドを削除します。
      • ブロック変更トラッキングを有効にするコマンドを削除します。

    次に、完全なcreate controlfile文の例を示します。

    STARTUP NOMOUNT
    CREATE CONTROLFILE  DATABASE "SOURCE" RESETLOGS  ARCHIVELOG
        MAXLOGFILES 1024
        MAXLOGMEMBERS 5
        MAXDATAFILES 32767
        MAXINSTANCES 32
        MAXLOGHISTORY 33012
    LOGFILE
    GROUP 1 SIZE 4096M BLOCKSIZE 512, 
    GROUP 2 SIZE 4096M BLOCKSIZE 512, 
    GROUP 5 SIZE 4096M BLOCKSIZE 512, 
    GROUP 6 SIZE 4096M BLOCKSIZE 512 
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/datafile/o1_mf_system_hkpjm4lh_.dbf',
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AAFDB0C85C03151AE053FE5E1F0AA61D/datafile/o1_mf_system_hkpjm4rf_.dbf',
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/datafile/o1_mf_sysaux_hkpjm56t_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AAFDB0C85C03151AE053FE5E1F0AA61D/datafile/o1_mf_sysaux_hkpjm6x4_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/datafile/o1_mf_undotbs1_hkpjm6x0_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AAFDB0C85C03151AE053FE5E1F0AA61D/datafile/o1_mf_undotbs1_hkpjm6w5_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/datafile/o1_mf_undotbs2_hkpjm6tx_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/datafile/o1_mf_users_hkpjm722_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AAFE1E09C8245CC2E053FE5E1F0A5632/datafile/o1_mf_system_hkpjmqds_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AAFE1E09C8245CC2E053FE5E1F0A5632/datafile/o1_mf_sysaux_hkpjmqoc_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AAFE1E09C8245CC2E053FE5E1F0A5632/datafile/o1_mf_undotbs1_hkpjmtl7_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AAFE1E09C8245CC2E053FE5E1F0A5632/datafile/o1_mf_undo_2_hkpjn03d_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AAFE1E09C8245CC2E053FE5E1F0A5632/datafile/o1_mf_users_hkpjn16b_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AAFE1E09C8245CC2E053FE5E1F0A5632/datafile/o1_mf_soe_hkpjn1ft_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AB1122BDE19EF370E053FE5E1F0A4E77/datafile/o1_mf_system_hkpjn8h4_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AB1122BDE19EF370E053FE5E1F0A4E77/datafile/o1_mf_sysaux_hkpjn8nt_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AB1122BDE19EF370E053FE5E1F0A4E77/datafile/o1_mf_undotbs1_hkpjn8qq_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AB1122BDE19EF370E053FE5E1F0A4E77/datafile/o1_mf_undo_2_hkpjnf2p_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AB1122BDE19EF370E053FE5E1F0A4E77/datafile/o1_mf_users_hkpjnglw_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AB1122BDE19EF370E053FE5E1F0A4E77/datafile/o1_mf_soe_hkpjnkm6_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AB112685643A0B77E053FE5E1F0A7BDD/datafile/o1_mf_system_hkpjnl8v_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AB112685643A0B77E053FE5E1F0A7BDD/datafile/o1_mf_sysaux_hkpjnmfm_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AB112685643A0B77E053FE5E1F0A7BDD/datafile/o1_mf_undotbs1_hkpjnqjz_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AB112685643A0B77E053FE5E1F0A7BDD/datafile/o1_mf_undo_2_hkpjnqk7_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AB112685643A0B77E053FE5E1F0A7BDD/datafile/o1_mf_users_hkpjnygh_.dbf',  
    '/mnt/dbvol/.ACFS/snaps/clone/oradata/AB112685643A0B77E053FE5E1F0A7BDD/datafile/o1_mf_soe_hkpjnyv6_.dbf'
    CHARACTER SET AL32UTF8;
    
    -- 
    -- 
    -- Create log files for threads other than thread one.
    ALTER DATABASE ADD LOGFILE THREAD 2
    GROUP 3 SIZE 4096M BLOCKSIZE 512 ,
    GROUP 4 SIZE 4096M BLOCKSIZE 512 ,
    GROUP 7 SIZE 4096M BLOCKSIZE 512 ,
    GROUP 8 SIZE 4096M BLOCKSIZE 512 ;
    -- Database can now be opened zeroing the online logs.
    ALTER DATABASE OPEN RESETLOGS;
    -- Open all the PDBs.
    ALTER PLUGGABLE DATABASE ALL OPEN;
    -- Commands to add tempfiles to temporary tablespaces.
    -- Online tempfiles have complete space information.
    -- Other tempfiles may require adjustment.
    ALTER TABLESPACE TEMP ADD TEMPFILE
         SIZE 32768M  AUTOEXTEND ON NEXT 16384M MAXSIZE 524288M;
    ALTER SESSION SET CONTAINER = PDB$SEED;
    ALTER TABLESPACE TEMP ADD TEMPFILE
         SIZE 32767M  AUTOEXTEND OFF;
    ALTER SESSION SET CONTAINER = PDB201;
    ALTER TABLESPACE TEMP ADD TEMPFILE
         SIZE 32768M  AUTOEXTEND ON NEXT 16384M MAXSIZE 524288M;
    ALTER SESSION SET CONTAINER = PDB202;
    ALTER TABLESPACE TEMP ADD TEMPFILE
         SIZE 32768M  AUTOEXTEND ON NEXT 16384M MAXSIZE 524288M;
    ALTER SESSION SET CONTAINER = PDB203;
    ALTER TABLESPACE TEMP ADD TEMPFILE
         SIZE 32768M  AUTOEXTEND ON NEXT 16384M MAXSIZE 524288M;
    ALTER SESSION SET CONTAINER = CDB$ROOT;
    -- End of tempfile additions.
    shutdown immediate
    exit
    
  6. 前述のステップ3でバックアップしたPFILEを編集します。データベース・クローンについてもdb_nameは同じままですが、db_unique_nameは異なる必要があることに注意してください。RACインスタンスもdb_unique_nameから名前を導出する必要があります。ファイル・パスがスナップ内の対応する場所を指していることを確認します。必要な変更を次にまとめます。
    • 追加される新しいパラメータ。
      *.db_unique_name='clone'
    • 既存のインスタンス名を新しいインスタンス名に変更します。
      • 変更前:
            source1.instance_number=1
            source2.instance_number=2
            source1.thread=1
            source2.thread=2
            source1.undo_tablespace='UNDOTBS1'
            source2.undo_tablespace='UNDOTBS2'
      • 変更後:
            clone1.instance_number=1
            clone2.instance_number=2
            clone1.thread=1
            clone2.thread=2
            clone1.undo_tablespace='UNDOTBS1'
            clone2.undo_tablespace='UNDOTBS2'

    インスタンス名の出現箇所すべてに同様の変更を加えます。

    RACデータベースの場合、クローン・インスタンスはまず排他モードで起動し、次にクローンの作成後にクラスタ・モードで再起動する必要があることに注意してください。このような場合は、PFILEのCLUSTER_DATABASEパラメータをコメント・アウトします。
    *.cluster_database=true
    pfile内のパラメータを変更して、スナップショット内の新しいデータファイル、アーカイブ・ログおよび制御ファイルの場所を反映します。
    • 変更前:
          *.db_create_file_dest='/mnt/dbvol/oradata'
          *.log_archive_dest_1='LOCATION=/mnt/rvol/archive1'
          *.control_files='/mnt/dbvol/oradata/SOURCE/controlfile/o1_mf_hf9cjtv0_.ctl','/mnt/rvol/fast_recovery_area/SOURCE/controlfile/o1_mf_hf9cjtxr_.ctl'
    • 変更後:
          *.db_create_file_dest='/mnt/dbvol/.ACFS/snaps/clone/oradata'
          *.log_archive_dest_1='LOCATION=/mnt/rvol/archive1'
          *.control_files='/mnt/dbvol/.ACFS/snaps/clone/oradata1/ctrl_1_.ctl'
       
    クローンの監査トレース・ファイルの新しい場所を指定します。
        *.audit_file_dest='/u01/app/oracle/admin/clone/adump'

    前述のディレクトリが存在しない場合は作成します。

    $ mkdir –p /u01/app/oracle/admin/clone/adump
  7. 変更されたPFILEを$ORACLE_HOME/dbsディレクトリからコピーし、ローカル・クローン・データベース・インスタンス名と一致するように名前をinit.oraファイルとして変更します。たとえば: $ cp /tmp/clone_pfile.ora $ORACLE_HOME/dbs/initclone1.ora
  8. ソース・データベースからクローンの新しいファイル名にパスワード・ファイルをコピーします。
    $ cp <Directory where password file is stored>/orapwsource /mnt/dbvol/.ACFS/snaps/clone/orapwclone
  9. 新しいSIDを指すようにORACLE_SIDを設定し、ステップ5で生成したSQLスクリプトを実行します。
    [oracle@machine dbclone]$ export ORACLE_SID=clone1
    [oracle@machine dbclone]$ sqlplus / as sysdba
     
    SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jun 16 04:50:21 2020
    Version 19.7.0.0.0
     
    Copyright (c) 1982, 2020, Oracle.  All rights reserved.
     
    Connected to an idle instance.
     
    SQL> spool startup.log
    SQL> @ctlfile
    ORACLE instance started.
     
    Total System Global Area 8.1068E+10 bytes
    Fixed Size                 30383424 bytes
    Variable Size            1.1006E+10 bytes
    Database Buffers         6.9793E+10 bytes
    Redo Buffers              238051328 bytes
     
    Control file created.
    System altered.
    Database altered.
    Pluggable database altered.
    Tablespace altered.
    Session altered.
    Tablespace altered.
    Session altered.
    Tablespace altered.
    Session altered.
    Tablespace altered.
    .........................
    .........................
    .........................
    .........................
  10. これで、DBは最初のノードに排他モードでマウントされます。テスト・マスター・データベースがRACデータベースで、スナップショットでRACを有効にする場合は、データベースを停止し、pfileで"cluster_database=true"パラメータを設定してインスタンスを再起動します。spfileを作成し、ACFSデータベース・ファイル・システムに格納します。これが完了したら、両方のRACインスタンスを起動し、すべてのノードでDBを稼働させます。
    SQL> create spfile=’/mnt/dbvol/.ACFS/snaps/clone/oradata/spfileclone.ora’ from pfile=”<ORACLE_HOME>/dbs/initclone1.ora’

    データベースとそのプロパティをCluster Ready Services (CRS)に追加します

    $ srvctl add database -db clone -oraclehome $ORACLE_HOME -dbtype RAC -spfile /mnt/dbvol/.ACFS/snaps/clone/oradata/spfileclone.ora -pwfile /mnt/dbvol/.ACFS/snaps/clone/orapwclone -dbname source -acfspath "/mnt/dbvol,/mnt/rvol" -policy AUTOMATIC -role PRIMARY

    クラスタのノード/インスタンスごとにインスタンスを追加します。

    $ srvctl add instance -db clone -instance clone -node <node hostname>
  11. アーカイブ・ログが新しい宛先を使用していることを確認します。
    SQL> archive log list
    Database log mode              Archive Mode
    Automatic archival             Enabled
    Archive destination            /mnt/rvol/archive1
    Oldest online log sequence     489
    Next log sequence to archive   490
    Current log sequence           490
    SQL>

    クラスタ・データベース・モードが使用されているかどうかを確認します。

    SQL> SHOW PARAMETER cluster_database
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    cluster_database                     boolean     TRUE
    cluster_database_instances           integer     2
    SQL>

    RAC環境では、データベースが正しく構成されるように、必要に応じてsrvctl start databaseおよびstop databaseコマンドを使用してください。

  12. クローン内のすべてのPDBをオープンして使用できることを確認します。
    SQL> SELECT open_mode FROM v$pdbs;
     
    OPEN_MODE
    ----------
    READ ONLY
    READ WRITE
    READ WRITE
    READ WRITE
    READ WRITE
    READ WRITE
    READ WRITE
    READ WRITE
    READ WRITE
    READ WRITE
    READ WRITE
     
    11 rows selected.
     
     
    SQL> ALTER SESSION SET CONTAINER=SOURCEPDB1;
     
    Session altered.
     
    SQL> SELECT name FROM v$tablespace;
     
    NAME
    ------------------------------
    SYSTEM
    SYSAUX
    UNDOTBS1
    UNDO_2
    USERS
    USER_TBS
    LOB_TBS
    FLASHBACK_TBS
    TEMP
    USER_TEMP
     
    10 rows selected.
     
    SQL>
これでDBクローンの準備が完了し、テストの実行に使用できます。クローンが稼働している間は、そのクローンまたはテスト・マスターから追加のクローンを作成できます。これにより、ACFSスナップショット・テクノロジを使用して任意の数のDBクローンを簡単に作成できます。
また、これらの新しいDBクローンのサービスを、親に使用されるものと同様に(またはアプリケーションでの必要に応じて)追加することもお薦めします。

ACFS fshareを使用してPDBのRMAN疎バックアップおよびリストアを実行するステップ

  1. SOURCEとCLONEの2つのPDBがあるとします。CLONEはSOURCEのスナップショット・コピーです。スナップショット・コピーは、ACFS fshareを使用するシン・クローンです。
    SQL> create pluggable database SOURCE admin user foo identified by bar;
    
    Pluggable database created.
    
    SQL> select d.con_id, p.name pdb_name, p.open_mode, d.file#, d.name file_name from v$dbfile d, v$pdbs p where d.con_id=p.con_id order by d.con_id,p.name,d.file#,d.name;
    
        CON_ID PDB_NAME             OPEN_MODE       FILE# FILE_NAME
    ---------- -------------------- ---------- ---------- --------------------------------------------------------------------------------
             3 SOURCE               MOUNTED            23 /acfs/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_system_k8qtdbnj_.dbf
             3 SOURCE               MOUNTED            24 /acfs/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_sysaux_k8qtdbny_.dbf
             3 SOURCE               MOUNTED            25 /acfs/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_sysext_k8qtdbo3_.dbf
             3 SOURCE               MOUNTED            26 /acfs/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_cdb1_pdb_k8qtdbo7_.dbf
    
    SQL> alter session set container = SOURCE;
    
    Session altered.
    
    SQL> alter pluggable database open;
    
    Pluggable database altered.
    
    SQL> create table tab1 (x number, y number, z number);
    
    Table created.
    
    SQL> insert into tab1 values (1, 2, 3);
    
    1 row created.
    
    SQL> commit;
    
    Commit complete.
    
    SQL> alter session set container = cdb$root;
    
    Session altered.
    
    SQL> alter pluggable database SOURCE close;
    
    Pluggable database altered.
    
    SQL> alter pluggable database SOURCE open read only;
    
    Pluggable database altered.
    
    SQL> create pluggable database CLONE from SOURCE snapshot copy;
    
    Pluggable database created.
    
    SQL> select d.con_id, p.name pdb_name, p.open_mode, d.file#, d.name file_name from v$dbfile d, v$pdbs p where d.con_id=p.con_id order by d.con_id,p.name,d.file#,d.name;
    
        CON_ID PDB_NAME             OPEN_MODE       FILE# FILE_NAME
    ---------- -------------------- ---------- ---------- -----------------------------------------------------------------------------------
             3 SOURCE               READ ONLY          23 /acfs/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_system_k8qtdbnj_.dbf
             3 SOURCE               READ ONLY          24 /acfs/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_sysaux_k8qtdbny_.dbf
             3 SOURCE               READ ONLY          25 /acfs/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_sysext_k8qtdbo3_.dbf
             3 SOURCE               READ ONLY          26 /acfs/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_cdb1_pdb_k8qtdbo7_.dbf
             4 CLONE                MOUNTED            35 /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_k8stg6b9_.dbf
             4 CLONE                MOUNTED            36 /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysaux_k8stg6c5_.dbf
             4 CLONE                MOUNTED            37 /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysext_k8stg6cc_.dbf
             4 CLONE                MOUNTED            38 /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_cdb1_pdb_k8stg6cj_.dbf
    
    $ ls -l /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_k8stg6b9_.dbf
    -rw-rw---- 1 oracle dba 259M May 24 10:22 /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_k8stg6b9_.dbf
    
    $ /sbin/acfsutil info file -f /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_k8stg6b9_.dbf
    ...
        fshare:       Yes
        fshare parent identifier:       49
        fshare parent _genum:       1
    ...
             extent count: 79
             owned extent count: 41
             shared extent count: 38
    
    $ /sbin/acfsutil info file -f /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysaux_k8stg6c5_.dbf
    ...
        fshare:       Yes
        fshare parent identifier:       48
        fshare parent _genum:       1
    ...
             extent count: 17
             owned extent count: 12
             shared extent count: 5
    
    $ /sbin/acfsutil info file -f /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysext_k8stg6cc_.dbf
    ...
        fshare:       Yes
        fshare parent identifier:       45
        fshare parent _genum:       0
    ...
             extent count: 3
             owned extent count: 1
             shared extent count: 2
    
    
    $ /sbin/acfsutil info file -f /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_cdb1_pdb_k8stg6cj_.dbf
    /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_cdb1_pdb_k8stg6cj_.dbf
        fshare:       Yes
        fshare parent identifier:       47
        fshare parent _genum:       1
    ...
             extent count: 7
             owned extent count: 7
             shared extent count: 0
    
    SQL> alter pluggable database CLONE open;
    
    Pluggable database altered.
    
    SQL> alter session set container = CLONE;
    
    Session altered.
    
    SQL> select x,y,z from tab1;
    
             X          Y          Z
    ---------- ---------- ----------
             1          2          3
    
    SQL> update tab1 set x = 2*x, y = 10 * y, z = 100 * z;
    
    1 row updated.
    
    SQL> insert into tab1 values (97, 98, 99);
    
    1 row created.
    
    SQL> select x,y,z from tab1;
    
             X          Y          Z
    ---------- ---------- ----------
             2         20        300
            97         98         99
    
    SQL> commit;
    
    Commit complete.
    
    SQL> alter pluggable database CLONE close;
    
    Pluggable database altered.
    
    SQL>
  2. RMANを使用して、SOURCEの完全バックアップおよびCLONEの疎バックアップを実行します。
    RMAN> backup as copy pluggable database 'SOURCE'to destination '/backup';
    
    Starting backup at 24-MAY-22 
    using channel ORA_DISK_1 
    channel ORA_DISK_1: starting datafile copy 
    input datafile file number=00023 name=/acfs/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_system_k8qtdbnj_.dbf
    output file name=/backup/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_system_k8sv37z7_.dbf
    tag=TAG20220524T103207 RECID=5 STAMP=1105525929 
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
    channel ORA_DISK_1: starting datafile copy 
    input datafile file number=00024 name=/acfs/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_sysaux_k8qtdbny_.dbf
    output file name=/backup/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_sysaux_k8sv3c49_.dbf
    tag=TAG20220524T103207 RECID=6 STAMP=1105525931 
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
    channel ORA_DISK_1: starting datafile copy 
    input datafile file number=00026 name=/acfs/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_cdb1_pdb_k8qtdbo7_.dbf
    output file name=/backup/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_cdb1_pdb_k8sv3d8y_.dbf
    tag=TAG20220524T103207 RECID=7 STAMP=1105525932 
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
    channel ORA_DISK_1: starting datafile copy 
    input datafile file number=00025 name=/acfs/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_sysext_k8qtdbo3_.dbf
    output file name=/backup/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_sysext_k8sv3ff4_.dbf
    tag=TAG20220524T103207 RECID=8 STAMP=1105525933 c
    hannel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
    
    Finished backup at 24-MAY-22 
    Starting Control File Autobackup at 24-MAY-22 
    piece handle=/ade/b/1779015158/oracle/dbs/c-2109129204-20220524-02
    comment=NONE 
    Finished Control File Autobackup at 24-MAY-22 
    
    RMAN> backup as sparse copy pluggable database 'CLONE' to destination '/backup';
     
    Starting backup at 24-MAY-22 using channel ORA_DISK_1 
    channel ORA_DISK_1: starting datafile copy input datafile file number=00035
    name=/acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_k8stg6b9_.dbf
    output file name=/backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_k8sv578m_.dbf
    tag=TAG20220524T103310 RECID=9 STAMP=1105525991 
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
    channel ORA_DISK_1: starting datafile copy 
    input datafile file number=00036 name=/acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysaux_k8stg6c5_.dbf
    output file name=/backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysaux_k8sv58dm_.dbf
    tag=TAG20220524T103310 RECID=10 STAMP=1105525992 
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
    channel ORA_DISK_1: starting datafile copy 
    input datafile file number=00038 name=/acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_cdb1_pdb_k8stg6cj_.dbf
    output file name=/backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_cdb1_pdb_k8sv59jc_.dbf
    tag=TAG20220524T103310 RECID=11 STAMP=1105525993 
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
    channel ORA_DISK_1: starting datafile copy 
    input datafile file number=00037 name=/acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysext_k8stg6cc_.dbf
    output file name=/backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysext_k8sv5bnf_.dbf
    tag=TAG20220524T103310 RECID=12 STAMP=1105525994 
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
    
    Finished backup at 24-MAY-22 
    Starting Control File Autobackup at 24-MAY-22 
    piece handle=/ade/b/1779015158/oracle/dbs/c-2109129204-20220524-03
    comment=NONE 
    Finished Control File Autobackup at 24-MAY-22 
  3. 「du」を使用して疎バックアップがスパースであることを確認します。バックアップの割当て済サイズは、プラガブル・データベースのファイルの割当て済サイズより小さいことに注意してください。
    $ ls -l /backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/
    total 191M
    -rw-rw---- 1 oracle dba  96M May 24 10:33 o1_mf_cdb1_pdb_k8sv59jc_.dbf
    -rw-rw---- 1 oracle dba 211M May 24 10:33 o1_mf_sysaux_k8sv58dm_.dbf
    -rw-rw---- 1 oracle dba  40M May 24 10:33 o1_mf_sysext_k8sv5bnf_.dbf
    -rw-rw---- 1 oracle dba 259M May 24 10:33 o1_mf_system_k8sv578m_.dbf
    
    $ du -sch /backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/*
    96M  /backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_cdb1_pdb_k8sv59jc_.dbf
    88M  /backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysaux_k8sv58dm_.dbf
    1.0M  /backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysext_k8sv5bnf_.dbf
    7.3M  /backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_k8sv578m_.dbf
    191M    total
    
    $ du -sch /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/*
    96M  /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_cdb1_pdb_k8stg6cj_.dbf
    213M  /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysaux_k8stg6c5_.dbf
    40M  /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysext_k8stg6cc_.dbf
    264M  /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_k8stg6b9_.dbf
    41M  /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_temp_k8stg6c9_.dbf
    651M    total
     
    SQL>
  4. CLONEプラガブル・データベースのファイルを削除し、メディア障害をシミュレートします。
    $ rm -rf /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/*
    
    $
  5. fshareを再作成しないと、リストアは失敗します。
    RMAN> restore from sparse pluggable database 'CLONE';
    
    Starting restore at 24-MAY-22
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=204 device type=DISK
    
    channel ORA_DISK_1: restoring datafile 00035
    input datafile copy RECID=9 STAMP=1105525991 file name=/backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_k8sv578m_.dbf
    destination for restore of datafile 00035: /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_k8stg6b9_.dbf
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of restore command at 05/24/2022 10:39:23
    ORA-19566: exceeded limit of 0 corrupt blocks for file /backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_k8sv578m_.dbf
    ORA-19600: input file is datafile-copy 9 (/backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_k8sv578m_.dbf)
    ORA-19601: output file is datafile 35 (/acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_%u_.dbf)
    
  6. CLONEプラガブル・データベース内のファイルのfshareを再作成します。ノート: このステップは、これらのファイルが存在しない場合にのみ必要です。CLONE PDBをリストアする理由によっては、fshareを再作成する必要がない場合があります。
    $ /sbin/acfsutil fshare create /acfs/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_system_k8qtdbnj_.dbf /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_k8stg6b9_.dbf
    acfsutil fshare create: File share operation is complete.
    
    $ /sbin/acfsutil fshare create /acfs/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_sysaux_k8qtdbny_.dbf /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysaux_k8stg6c5_.dbf
    acfsutil fshare create: File share operation is complete.
    
    $ /sbin/acfsutil fshare create /acfs/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_sysext_k8qtdbo3_.dbf /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysext_k8stg6cc_.dbf
    acfsutil fshare create: File share operation is complete.
    
    $ /sbin/acfsutil fshare create /acfs/DB/DFB3F96AEBAD910AE0538E5246642001/datafile/o1_mf_cdb1_pdb_k8qtdbo7_.dbf /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_cdb1_pdb_k8stg6cj_.dbf
    acfsutil fshare create: File share operation is complete.
    
  7. CLONEプラガブル・データベースを疎バックアップからリストアします。
    RMAN> restore from sparse pluggable database 'CLONE';
    
    Starting restore at 24-MAY-22
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=57 device type=DISK
    
    channel ORA_DISK_1: restoring datafile 00035
    input datafile copy RECID=9 STAMP=1105525991 file name=/backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_k8sv578m_.dbf
    destination for restore of datafile 00035: /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_k8stg6b9_.dbf
    channel ORA_DISK_1: copied datafile copy of datafile 00035, elapsed time: 00:00:03
    output file name=/acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_system_k8stg6b9_.dbf RECID=0 STAMP=0
    channel ORA_DISK_1: restoring datafile 00036
    input datafile copy RECID=10 STAMP=1105525992 file name=/backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysaux_k8sv58dm_.dbf
    destination for restore of datafile 00036: /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysaux_k8stg6c5_.dbf
    channel ORA_DISK_1: copied datafile copy of datafile 00036, elapsed time: 00:00:03
    output file name=/acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysaux_k8stg6c5_.dbf RECID=0 STAMP=0
    channel ORA_DISK_1: restoring datafile 00037
    input datafile copy RECID=12 STAMP=1105525994 file name=/backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysext_k8sv5bnf_.dbf
    destination for restore of datafile 00037: /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysext_k8stg6cc_.dbf
    channel ORA_DISK_1: copied datafile copy of datafile 00037, elapsed time: 00:00:01
    output file name=/acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_sysext_k8stg6cc_.dbf RECID=0 STAMP=0
    channel ORA_DISK_1: restoring datafile 00038
    input datafile copy RECID=11 STAMP=1105525993 file name=/backup/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_cdb1_pdb_k8sv59jc_.dbf
    destination for restore of datafile 00038: /acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_cdb1_pdb_k8stg6cj_.dbf
    channel ORA_DISK_1: copied datafile copy of datafile 00038, elapsed time: 00:00:03
    output file name=/acfs/DB/DFC3A937C9E449D9E0538E52466425A4/datafile/o1_mf_cdb1_pdb_k8stg6cj_.dbf RECID=0 STAMP=0
    Finished restore at 24-MAY-22
    
  8. CLONEプラガブル・データベースをリカバリします。
    RMAN> recover pluggable database 'CLONE';
    
    Starting recover at 24-MAY-22
    using channel ORA_DISK_1
    
    starting media recovery
    media recovery complete, elapsed time: 00:00:01
    
    Finished recover at 24-MAY-22
    
  9. CLONEプラガブル・データベースが使用可能であることを確認します。表には、リカバリ後に予想される内容が含まれていることに注意してください。
    SQL> alter pluggable database CLONE open;
    
    Pluggable database altered.
    
    SQL> alter session set container = CLONE;
    
    Session altered.
    
    SQL> select x,y,z from tab1;
    
         X        Y           Z
    ---------- ---------- ----------
         2       20         300
        97       98          99
    SQL>

ACFSスナップショットを使用してPDBのRMANの疎バックアップおよびリストアを実行するステップ

  1. SOURCEとCLONEの2つのPDBがあるとします。CLONEはSOURCEのスナップショット・コピーです。ACFSの互換性は19.0.0.0であるため、スナップショット・コピーはACFSスナップショットを使用するシン・クローンです。CLONE PDB内のファイルは、ACFSスナップショットを参照するsymlinkであることに注意してください。
    $ /sbin/acfsutil info fs
        on-disk version:       49.0
        ACFS compatibility:    19.0.0.0.0
    
    SQL> create pluggable database SOURCE admin user foo identified by bar;
    
    Pluggable database created.
    
    SQL> select d.con_id, p.name pdb_name, p.open_mode, d.file#, d.name file_name from v$dbfile d, v$pdbs p where d.con_id=p.con_id order by d.con_id,p.name,d.file#,d.name;
    
        CON_ID PDB_NAME             OPEN_MODE       FILE# FILE_NAME
    ---------- -------------------- ---------- ---------- ------------------------------------------------------------------------------------
             3 SOURCE               MOUNTED            39 /acfs/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_system_k8swj6ms_.dbf
             3 SOURCE               MOUNTED            40 /acfs/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_sysaux_k8swj6my_.dbf
             3 SOURCE               MOUNTED            41 /acfs/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_sysext_k8swj6n4_.dbf
             3 SOURCE               MOUNTED            42 /acfs/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8swj6n7_.dbf
    
    SQL> alter session set container = SOURCE;
    
    Session altered.
    
    SQL> alter pluggable database open;
    
    Pluggable database altered.
    
    SQL> create table tab1 (x number, y number, z number);
    
    Table created.
    
    SQL> insert into tab1 values (1, 2, 3);
    
    1 row created.
    
    SQL> commit;
    
    Commit complete.
    
    SQL> alter session set container = cdb$root;
    
    Session altered.
    
    SQL> alter pluggable database SOURCE close;
    
    Pluggable database altered.
    
    SQL> alter pluggable database SOURCE open read only;
    
    Pluggable database altered.
    
    SQL> create pluggable database CLONE from SOURCE snapshot copy;
    
    Pluggable database created.
    
        CON_ID PDB_NAME             OPEN_MODE       FILE# FILE_NAME
    ---------- -------------------- ---------- ---------- ------------------------------------------------------------------------------------
             3 SOURCE               READ ONLY          39 /acfs/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_system_k8swj6ms_.dbf
             3 SOURCE               READ ONLY          40 /acfs/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_sysaux_k8swj6my_.dbf
             3 SOURCE               READ ONLY          41 /acfs/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_sysext_k8swj6n4_.dbf
             3 SOURCE               READ ONLY          42 /acfs/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8swj6n7_.dbf
             4 CLONE                MOUNTED            43 /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_system_k8swptmp_.dbf
             4 CLONE                MOUNTED            44 /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysaux_k8swptmz_.dbf
             4 CLONE                MOUNTED            45 /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysext_k8swptn5_.dbf
             4 CLONE                MOUNTED            46 /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8swptn8_.dbf
    
    $ ls -l /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/*
    lrwxrwxrwx 1 oracle dba 124 May 24 10:59 /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8swptn8_.dbf -> /acfs/.ACFS/snaps/DFC427F513EA6F24E0538E5246647E42/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8swj6n7_.dbf
    lrwxrwxrwx 1 oracle dba 122 May 24 10:59 /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysaux_k8swptmz_.dbf -> /acfs/.ACFS/snaps/DFC427F513EA6F24E0538E5246647E42/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_sysaux_k8swj6my_.dbf
    lrwxrwxrwx 1 oracle dba 122 May 24 10:59 /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysext_k8swptn5_.dbf -> /acfs/.ACFS/snaps/DFC427F513EA6F24E0538E5246647E42/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_sysext_k8swj6n4_.dbf
    lrwxrwxrwx 1 oracle dba 122 May 24 10:59 /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_system_k8swptmp_.dbf -> /acfs/.ACFS/snaps/DFC427F513EA6F24E0538E5246647E42/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_system_k8swj6ms_.dbf
    -rw-rw---- 1 oracle dba 41M May 24 10:59 /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_temp_k8swptn2_.dbf
    
    $ /sbin/acfsutil info file -f /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8swptn8_.dbf
        fshare:       No
    
    $ /sbin/acfsutil snap info /acfs
    snapshot name:               DFC427F513EA6F24E0538E5246647E42
    snapshot location:           /acfs/.ACFS/snaps/DFC427F513EA6F24E0538E5246647E42
    RO snapshot or RW snapshot:  RW
    storage interest tracking:   Disabled
    parent name:                 /acfs
    snapshot creation time:      Tue May 24 10:59:38 2022
    file entry table allocation: 262144   ( 256.00 KB ) ( 64 entries )
    storage added to snapshot:   38981632   (  37.18 MB )
    
    
        number of snapshots:  1
        kilosnap state:       Enabled
        storage interest tracking: Disabled
        snapshot space usage: 39034880  (  37.23 MB )
    
    
    SQL> alter pluggable database CLONE open;
    
    Pluggable database altered.
    
    SQL> alter session set container = CLONE;
    
    Session altered.
    
    SQL> select x,y,z from tab1;
    
             X          Y          Z
    ---------- ---------- ----------
             1          2          3
    
    SQL> update tab1 set x = 2*x, y = 10 * y, z = 100 * z;
    
    1 row updated.
    
    SQL> insert into tab1 values (97, 98, 99);
    
    1 row created.
    
    SQL> select x,y,z from tab1;
    
             X          Y          Z
    ---------- ---------- ----------
             2         20        300
            97         98         99
    
    SQL> commit;
    
    Commit complete.
    
    SQL> alter pluggable database CLONE close;
    
    Pluggable database altered.
    SQL>
  2. RMANを使用して、SOURCEの完全バックアップおよびCLONEの疎バックアップを実行します。
    RMAN> backup as copy pluggable database 'SOURCE' to destination '/backup';
    
    Starting backup at 24-MAY-22
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=51 device type=DISK
    channel ORA_DISK_1: starting datafile copy
    input datafile file number=00039 name=/acfs/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_system_k8swj6ms_.dbf
    output file name=/backup/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_system_k8sxgx4x_.dbf tag=TAG20220524T111228 RECID=13 STAMP=1105528350
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
    channel ORA_DISK_1: starting datafile copy
    input datafile file number=00040 name=/acfs/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_sysaux_k8swj6my_.dbf
    output file name=/backup/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_sysaux_k8sxh06x_.dbf tag=TAG20220524T111228 RECID=14 STAMP=1105528352
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
    channel ORA_DISK_1: starting datafile copy
    input datafile file number=00042 name=/acfs/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8swj6n7_.dbf
    output file name=/backup/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8sxh1c9_.dbf tag=TAG20220524T111228 RECID=15 STAMP=1105528353
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
    channel ORA_DISK_1: starting datafile copy
    input datafile file number=00041 name=/acfs/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_sysext_k8swj6n4_.dbf
    output file name=/backup/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_sysext_k8sxh2j0_.dbf tag=TAG20220524T111228 RECID=16 STAMP=1105528354
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
    Finished backup at 24-MAY-22
    
    Starting Control File Autobackup at 24-MAY-22
    piece handle=/ade/b/1779015158/oracle/dbs/c-2109129204-20220524-05 comment=NONE
    Finished Control File Autobackup at 24-MAY-22
    
    RMAN> backup as sparse copy pluggable database 'CLONE' to destination '/backup';
    
    Starting backup at 24-MAY-22
    using channel ORA_DISK_1
    channel ORA_DISK_1: starting datafile copy
    input datafile file number=00043 name=/acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_system_k8swptmp_.dbf
    output file name=/backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_system_k8sxj9x5_.dbf tag=TAG20220524T111313 RECID=17 STAMP=1105528394
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
    channel ORA_DISK_1: starting datafile copy
    input datafile file number=00044 name=/acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysaux_k8swptmz_.dbf
    output file name=/backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysaux_k8sxjc2h_.dbf tag=TAG20220524T111313 RECID=18 STAMP=1105528395
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
    channel ORA_DISK_1: starting datafile copy
    input datafile file number=00046 name=/acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8swptn8_.dbf
    output file name=/backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8sxjd70_.dbf tag=TAG20220524T111313 RECID=19 STAMP=1105528396
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
    channel ORA_DISK_1: starting datafile copy
    input datafile file number=00045 name=/acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysext_k8swptn5_.dbf
    output file name=/backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysext_k8sxjfcp_.dbf tag=TAG20220524T111313 RECID=20 STAMP=1105528397
    channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
    Finished backup at 24-MAY-22
    
    Starting Control File Autobackup at 24-MAY-22
    piece handle=/ade/b/1779015158/oracle/dbs/c-2109129204-20220524-06 comment=NONE
    Finished Control File Autobackup at 24-MAY-22
    
  3. 「du」を使用して疎バックアップがスパースであることを確認します。バックアップの割当て済サイズは、プラガブル・データベースのファイルの割当て済サイズより小さいことに注意してください。
    $ ls -l /backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/*
    -rw-rw---- 1 oracle dba  96M May 24 11:13 /backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8sxjd70_.dbf
    -rw-rw---- 1 oracle dba 211M May 24 11:13 /backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysaux_k8sxjc2h_.dbf
    -rw-rw---- 1 oracle dba  40M May 24 11:13 /backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysext_k8sxjfcp_.dbf
    -rw-rw---- 1 oracle dba 259M May 24 11:13 /backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_system_k8sxj9x5_.dbf
    
    $ du -sch /backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/*
    4.3M    /backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8sxjd70_.dbf
    19M    /backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysaux_k8sxjc2h_.dbf
    1.0M    /backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysext_k8sxjfcp_.dbf
    8.3M    /backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_system_k8sxj9x5_.dbf
    32M    total
    
    $ du -schH /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/*
    96M    /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8swptn8_.dbf
    213M    /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysaux_k8swptmz_.dbf
    40M    /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysext_k8swptn5_.dbf
    264M    /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_system_k8swptmp_.dbf
    41M    /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_temp_k8swptn2_.dbf
    651M    total
     
    SQL>

    pfileは、$ORACLE_HOME/dbsディレクトリのデフォルトの場所に保存されます。

  4. CLONEプラガブル・データベースのファイルおよびACFSスナップショットを削除し、メディア障害をシミュレートします。
    $ rm -rf /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/*
    
    $ /sbin/acfsutil snap delete DFC427F513EA6F24E0538E5246647E42 /acfs
    acfsutil snap delete: Snapshot operation is complete.
    $
  5. スナップショットを再作成しないと、リストアは失敗します。
    RMAN> restore from sparse pluggable database 'CLONE';
    
    Starting restore at 24-MAY-22
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=51 device type=DISK
    
    channel ORA_DISK_1: restoring datafile 00043
    input datafile copy RECID=17 STAMP=1105528394 file name=/backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_system_k8sxj9x5_.dbf
    destination for restore of datafile 00043: /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_system_k8swptmp_.dbf
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of restore command at 05/24/2022 11:19:05
    ORA-19566: exceeded limit of 0 corrupt blocks for file /backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_system_k8sxj9x5_.dbf
    ORA-19600: input file is datafile-copy 17 (/backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_system_k8sxj9x5_.dbf)
    ORA-19601: output file is datafile 43 (/acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_system_%u_.dbf)
    
  6. CLONEプラガブル・データベースのACFSスナップショットを再作成します。スナップショットを指すsymlinkを再作成します。ノート: このステップは、これらのスナップショットまたはファイル(あるいはその両方)が存在しない場合にのみ必要です。CLONE PDBをリストアする理由によっては、スナップショットまたはsymlink (あるいはその両方)を再作成する必要がない場合があります。
    $ /sbin/acfsutil snap create -w DFC427F513EA6F24E0538E5246647E42 /acfs
    acfsutil snap create: Snapshot operation is complete.
    
    $ ln -s /acfs/.ACFS/snaps/DFC427F513EA6F24E0538E5246647E42/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8swj6n7_.dbf /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8swptn8_.dbf
    
    $ ln -s /acfs/.ACFS/snaps/DFC427F513EA6F24E0538E5246647E42/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_sysaux_k8swj6my_.dbf /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysaux_k8swptmz_.dbf
    
    $ ln -s /acfs/.ACFS/snaps/DFC427F513EA6F24E0538E5246647E42/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_sysext_k8swj6n4_.dbf /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysext_k8swptn5_.dbf
    
    $ ln -s /acfs/.ACFS/snaps/DFC427F513EA6F24E0538E5246647E42/DB/DFC427F513E56F24E0538E5246647E42/datafile/o1_mf_system_k8swj6ms_.dbf /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_system_k8swptmp_.dbf
    
  7. CLONEプラガブル・データベースを疎バックアップからリストアします。
    RMAN> restore from sparse pluggable database 'CLONE';
    
    Starting restore at 24-MAY-22
    using channel ORA_DISK_1
    
    channel ORA_DISK_1: restoring datafile 00043
    input datafile copy RECID=17 STAMP=1105528394 file name=/backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_system_k8sxj9x5_.dbf
    destination for restore of datafile 00043: /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_system_k8swptmp_.dbf
    channel ORA_DISK_1: copied datafile copy of datafile 00043, elapsed time: 00:00:01
    output file name=/acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_system_k8swptmp_.dbf RECID=0 STAMP=0
    channel ORA_DISK_1: restoring datafile 00044
    input datafile copy RECID=18 STAMP=1105528395 file name=/backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysaux_k8sxjc2h_.dbf
    destination for restore of datafile 00044: /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysaux_k8swptmz_.dbf
    channel ORA_DISK_1: copied datafile copy of datafile 00044, elapsed time: 00:00:01
    output file name=/acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysaux_k8swptmz_.dbf RECID=0 STAMP=0
    channel ORA_DISK_1: restoring datafile 00045
    input datafile copy RECID=20 STAMP=1105528397 file name=/backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysext_k8sxjfcp_.dbf
    destination for restore of datafile 00045: /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysext_k8swptn5_.dbf
    channel ORA_DISK_1: copied datafile copy of datafile 00045, elapsed time: 00:00:01
    output file name=/acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_sysext_k8swptn5_.dbf RECID=0 STAMP=0
    channel ORA_DISK_1: restoring datafile 00046
    input datafile copy RECID=19 STAMP=1105528396 file name=/backup/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8sxjd70_.dbf
    destination for restore of datafile 00046: /acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8swptn8_.dbf
    channel ORA_DISK_1: copied datafile copy of datafile 00046, elapsed time: 00:00:01
    output file name=/acfs/DB/DFC427F513EA6F24E0538E5246647E42/datafile/o1_mf_cdb1_pdb_k8swptn8_.dbf RECID=0 STAMP=0
    Finished restore at 24-MAY-22
    
  8. CLONEプラガブル・データベースをリカバリします。
    RMAN> recover pluggable database 'CLONE';
    
    Starting recover at 24-MAY-22
    using channel ORA_DISK_1
    
    starting media recovery
    media recovery complete, elapsed time: 00:00:01
    
    Finished recover at 24-MAY-22
    
  9. CLONEプラガブル・データベースが使用可能であることを確認します。表には、リカバリ後に予想される内容が含まれていることに注意してください。
    SQL> alter pluggable database CLONE open;
    
    Pluggable database altered.
    
    SQL> alter session set container = CLONE;
    
    Session altered.
    
    SQL> select x,y,z from tab1;
    
         X        Y           Z
    ---------- ---------- ----------
         2       20         300
        97       98          99
    SQL>

Oracle ACFSループバックのサポート

Oracle ACFSでは、Linuxオペレーティング・システムでループバック機能がサポートされているため、Oracle ACFSファイルにデバイスとしてアクセスできます。

Oracle ACFSループバック・デバイスは、Oracle ACFSファイルにブロック・デバイスとしてアクセスできる、オペレーティング・システムの疑似デバイスです。この機能は、Oracle ACFSファイル・システムで作成され、Oracle ACFSループバック・デバイスによって提供されるOVMのイメージ、テンプレートおよび仮想ディスク(vdisk)をサポートするOracle Virtual Machines (OVM)とともに使用できます。

Oracle ACFSループバック機能により、NFS経由のパフォーマンスが向上します。ファイルは、疎ファイルでも非疎ファイルでもかまいません。

一般的なループバック・サポートに加えて、Oracle ACFSでは、疎イメージに対するループバック直接I/O (DIO)もサポートされています。

Oracle ACFSドライバ・リソース管理

Oracle ACFS、Oracle ADVMおよびOKSドライバは、Oracle Restart構成を除いて、Oracle Grid Infrastructureスタックの起動時にロードされます。システムが再起動されるまでドライバはロードされたままですが、その時点で、Oracle Grid Infrastructureスタックを再起動すると、ドライバは再びロードされます。

Oracle ACFS、Oracle ADVMおよびOKSドライバを管理するコマンドの詳細は、Oracle ACFSドライバのコマンドを参照してください。

Oracle ACFSレジストリ・リソース管理

Oracle ACFSレジストリ・リソースは、Oracle Grid Infrastructureクラスタ構成でのみサポートされます。Oracle Restart構成ではサポートされません。Oracle ACFSとOracle Restartを参照してください。

Oracle ASM 12cリリース1 (12.1)の場合、Oracle ACFSレジストリでは、SRVCTLファイル・システム・インタフェースを介して使用可能な、標準的で単一のファイル・システム・リソースを使用します。詳細は、Oracle ACFSファイル・システム・リソース管理を参照してください。SRVCTLを使用すると、アプリケーションを、登録済のファイルシステムに依存するようにできます(srvctl filesystemを使用して、登録済のファイルシステムを管理するなど)。デフォルトでは、acfsutil registryは、AUTO_START属性がalwaysに設定され、常にマウントするように設定されたファイル・システムのみを表示します。

Oracle ACFSレジストリは、ファイル・システムを登録および削除するroot権限が必要ですが、userオプションを使用すると、他のユーザーに、ファイル・システムを起動および停止(マウントおよびアンマウント)する権限が付与されます。

Oracle ACFSファイル・システム・リソース管理

Oracle ACFSファイル・システム・リソースは、Oracle Grid Infrastructureクラスタ構成でのみサポートされます。Oracle Restart構成ではサポートされません。Oracle ACFSとOracle Restartを参照してください。

Oracle ASMコンフィギュレーション・アシスタント(ASMCA)により、Oracle ACFSファイル・システム・リソース(ora.diskgroup.volume.acfs)の作成が容易になります。Database Configuration Assistant(DBCA)を使用したデータベースの作成中に、Oracle ACFSファイル・システム・リソースは、関連付けられたディスク・グループの依存性リストに加えられるため、ディスク・グループを停止すると、依存するOracle ACFSファイル・システムも停止されるようになります。

Oracle ACFSファイル・システム・リソースは通常、アプリケーション・リソースの依存性リストで使用するために作成されます。たとえば、Oracle Databaseホームとして使用するためにOracle ACFSファイル・システムが構成されている場合、ファイル・システム用に作成されたリソースは、Oracle Databaseアプリケーションのリソース依存性リストに含まれます。この依存性により、データベース・アプリケーションの起動アクションの結果、ファイル・システムとスタックは自動的にマウントされます。

Oracle ACFSファイル・システム・リソースの起動アクションは、ファイル・システムのマウントです。このOracle ACFSファイル・システム・リソース・アクションには、関連付けられたファイル・システム・ストレージ・スタックがアクティブであることの確認とディスク・グループのマウント、ボリューム・ファイルの有効化、マウント操作の完了に必要な場合のマウント・ポイントの作成が含まれます。ファイル・システムのマウントに成功した場合、リソースの状態はonlineに、失敗した場合はofflineに設定されます。

Oracle ACFSファイル・システム・リソースのチェック・アクションでは、ファイル・システムがマウントされていることを検証します。マウントされていれば、リソースの状態をonlineステータスに設定し、マウントされていなければ、offlineに設定します。

Oracle ACFSファイル・システム・リソースの停止アクションでは、ファイル・システムのディスマウントが試みられます。使用中の参照のためにファイル・システムをディスマウントできない場合、停止アクションは、参照を持つプロセスのプロセスIDを表示して記録します。

Oracle ACFSファイル・システム・リソースを管理するためにsrvctl startおよびstopアクションを使用すると、それらの正しいリソースの状態が維持されます。

Oracle ACFSとOracle Restart

このリリースでは、Oracle RestartはrootベースのOracle ACFSリソースをサポートしません。その結果、次の操作は自動的に実行されません。

  • Oracle ACFSドライバのロード

    Linuxでは、システム・ブート時とシステム停止時に、ドライバが自動的にロードおよびアンロードされます。システムが実行中、またはシステムが他のオペレーティング・システム(OS)バージョンで実行中にアクションが必要な場合は、acfsloadコマンドを使用して、ドライバを手動でロードまたはアンロードできます。ただし、ドライバを手動でロードする場合は、Oracle Restartスタックを起動する前にOracle ACFSドライバをロードする必要があります。

    詳細は、「acfsload」を参照してください。

  • Oracle ACFSマウント・レジストリにリストされたOracle ACFSファイル・システムのマウント

    Oracle ACFSマウント・レジストリは、Oracle Restartでサポートされていません。ただし、有効なOracle ASMデバイスの/etc/fstabファイル内のLinuxのエントリでは、関連付けられたボリュームが有効になっており、これらのエントリはシステム起動時に自動的にマウントされ、システム停止時にアンマウントされます。ファイル・システムがマウントされた後は高可用性(HA)リカバリが適用されないことに注意してください。この機能は1回のみのアクションです。

    有効なfstabエントリの形式は次のとおりです。

    device mount_point acfs noauto 0 0
    

    たとえば:

    /dev/asm/dev1-123 /mntpoint acfs noauto 0 0

    前述の例の最後の3つのフィールドは、Linuxがデバイスを自動的にマウントしようとすること、およびデバイス上で他のシステム・ツールを実行しようとすることを防止ます。このアクションは、システム起動時にOracle ASMインスタンスが使用できない場合のエラーを防止します。ファイル・システム・マウントのための追加の標準fstab構文オプションを追加できます。

    他のOSバージョンで、またはシステムの起動後にマウントまたはアンマウント操作が必要な場合は、mountコマンドを使用して、Oracle ACFSファイル・システムを手動でマウントできます。詳細は、「コマンドライン・ツールによるOracle ACFSの管理」を参照してください。

  • リソースベースのOracle ACFSデータベース・ホーム・ファイル・システムのマウント

    Oracle Restart構成の場合、これらのアクションに関連するOracle ACFSリソースは作成されません。Oracle Grid Infrastructure構成では、Oracle ACFSリソース管理が完全サポートされる一方、Oracle Restart構成では、Oracle ACFSリソースベースの管理アクションを代替操作(場合によっては手動)に置き換える必要があります。Oracle Restart構成にrootベースのリソースを登録する、srvctlなどのコマンドを使用しようとすると、適切なエラーが表示されます。

Oracle ACFSドライバのコマンド

この項では、Oracle ACFS、Oracle ADVMおよびOracle Kernel Services Driver (OKS)ドライバを管理するためにインストール時に使用されるOracle ACFSドライバのコマンドについて説明します。これらのコマンドは、Oracle Grid Infrastructureホームの/binディレクトリにあります。

acfsload

目的

acfsloadは、Oracle ACFS、Oracle ADVMおよびOracle Kernel Services Driver (OKS)ドライバをロードまたはアンロードします。

構文

acfsload { start | stop  } [ -s ]

acfsload —hはヘルプ・テキストを表示して終了します。

表7-2に、acfsloadコマンドで使用可能なオプションを示します。

表7-2 acfsloadコマンドのオプション

オプション 説明

start

Oracle ACFS、Oracle ADVMおよびOKSドライバをロードします。

stop

Oracle ACFS、Oracle ADVMおよびOKSドライバをアンロードします。

-s

サイレント・モードで動作します。

説明

acfsloadを使用して、Oracle ACFS、Oracle ADVMおよびOKSドライバを手動でロードまたはアンロードできます。

stopオプションでドライバをアンロードする前に、Oracle ACFSファイル・システムをディスマウントし、Oracle ASMを停止する必要があります。Oracle ACFSファイル・システムのディスマウントの詳細は、「ボリュームおよびOracle ACFSファイル・システムの登録解除、ディスマウント、無効化」を参照してください。

acfsloadを実行するには、rootまたは管理者権限が必要です。

次に、すべてのドライバを停止(アンロード)するacfsloadコマンドの使用例を示します。

# acfsload stop

acfsdriverstate

目的

acfsdriverstateは、Oracle ACFS、Oracle ADVMおよびOracle Kernel Services Driver (OKS)ドライバの現在の状態に関する情報を提供します。

構文

acfsdriverstate [-orahome ORACLE_HOME ] 
    { installed | loaded | version [-v] | 
    supported [-v] [-k <kernel_rpm_file_path> | <installed_kernel_rpm_package>} [-s]
    

acfsdriverstate —hはヘルプ・テキストを表示して終了します。

表7-3に、acfsdriverstateコマンドで使用可能なオプションを示します。

表7-3 acfsdriverstateコマンドのオプション

オプション 説明

-orahome ORACLE_HOME

acfsdriverstateコマンド実行権限がそのユーザーに与えられているOracle Grid Infrastructureホームを指定します。

installed

Oracle ACFSがシステムにインストールされているかどうかを決定します。

loaded

Oracle ADVM、Oracle ACFSおよびOKSドライバがメモリーにロードされているかどうかを決定します。

version

現在インストールされているOracle ACFSシステム・ソフトウェアのバージョンをレポートします。

supported

システムがOracle ACFSでサポートされているカーネルであるかどうかをレポートします。

supported -k

このコマンド・オプションでは、任意のカーネルrpm (ファイル、またはシステムにすでにインストールされているもの)を指定でき、指定したカーネルで現在のACFSインストールがサポートされているかどうかが判別されます。

インストール済のカーネルrpmパッケージを指定するには、ファイル"/boot/vmlinuz-<kernel_version>"に読取り権限があることを確認します。適切なシンボルを提供するインストール済rpmを収集するには、rpm -qf /boot/vmlinuz-<kernel_version>を使用してrpmパッケージ名を収集します。

カーネルrpmファイルを指定するには、そのファイルに読取り権限があり、そのrpmでkernel(symbolfoo) = 0xvaluefooという形式で適切なシンボルが提供されていることを確認します。それらのシンボルは、rpm -qip --provides <path_to_rpm_file>を使用して検証できます。

-v

詳細は、冗長モードを指定してください。

説明

acfsdriverstateを使用して、Oracle ACFS、Oracle ADVMおよびOKSドライバの現在の状態に関する詳細情報を表示できます。

次に、acfsdriverstateコマンドの使用例を示します。

$ acfsdriverstate version
ACFS-9325:     Driver OS kernel version = 3.8.13-13.el6uek.x86_64.
ACFS-9326:     Driver build number = 171126.
ACFS-9212:     Driver build version = 18.1.0.0 ()..
ACFS-9547:     Driver available build number = 171126.
ACFS-9548:     Driver available build version = 18.1.0.0 ()..

Oracle ACFSプラグインの汎用アプリケーション・プログラミング・インタフェース

Oracle ACFSプラグイン操作は、共通で、オペレーティング・システム(OS)に依存しないファイル・プラグイン(Cライブラリ)のアプリケーション・プログラミング・インタフェース(API)によってサポートされます。

この項の内容は次のとおりです。

Oracle ACFSプラグインの詳細は、Oracle ACFSプラグインを参照してください。

Oracle ACFSの事前定義済のメトリック・タイプ

Oracle ACFSでは、事前定義済メトリック・タイプのACFSMETRIC1_TおよびACFSMETRIC2_Tが用意されています。

ACFSMETRIC1_Tメトリック・セットは、ストレージ仮想化モデル用に定義されます。メトリックは、選択したタグ付けファイルのセットまたはファイル・システム内のすべてのファイルのいずれかのサマリー・レコードとして維持されます。Oracle ACFSファイル・メトリックには、読取り数、書込み数、平均読取りサイズ、平均書込みサイズ、最小および最大読取りサイズ、最小および最大書込みサイズ、読取りキャッシュ(VMページ・キャッシュ)のヒットおよびミスがあります。

例:

typedef struct _ACFS_METRIC1 {
    ub2      acfs_version;
    ub2      acfs_type;
    ub4      acfs_seqno;
    ub8      acfs_nreads;
    ub8      acfs_nwrites;
    ub8      acfs_rcachehits;
    ub4      acfs_avgrsize;
    ub4      acfs_avgwsize;
    ub4      acfs_minrsize;
    ub4      acfs_maxrsize;
    ub4      acfs_minwsize;
    ub4      acfs_maxwsize;
    ub4      acfs_rbytes_per_sec;
    ub4      acfs_wbytes_per_sec;
    ub8      acfs_timestamp;
    ub8      acfs_elapsed_secs;
} ACFS_METRIC1;

ACFSMETRIC2_Tは、fileID、開始オフセット、サイズおよび各書込みの順序番号が含まれるOracle ACFS書込み説明レコードのリストです。順序番号により、プラグイン・ドライバによって保持されたとおりにOracle ACFS書込みレコード順は維持されます。順序番号は、アプリケーションでAPIから戻された複数のメッセージ・バッファを順序付ける手段となります。アプリケーションでメッセージ・バッファをAPIを通じて十分な速度で空にできないために削除された書込みレコードを検出することもできます。

書込みレコードは、複数のインメモリー配列に格納されます。レコードの各配列は、バッファ・サイズが現在1 Mに設定されているAPIを使用してフェッチできます。フェッチされたioctlバッファの先頭には、格納されているレコードの番号など、配列を表すstructがあります。カーネル・バッファでは、バッファが十分な速度で読み込まれていないためにバッファが満杯である場合、最も古い書込みレコードが削除されます。

例:

typedef struct _ACFS_METRIC2 {
  ub2              acfs_version;
  ub2              acfs_type;
  ub4              acfs_num_recs;
  ub8              acfs_timestamp;
  ACFS_METRIC2_REC acfs_recs[1];
} ACFS_METRIC2;

typedef struct _ACFS_FILE_ID {
  ub8              acfs_fenum;
  ub4              acfs_genum;
  ub4              acfs_reserved1;
}

typedef struct _ACFS_METRIC2_REC {
  ACFS_FILE_ID     acfs_file_id;
  ub8              acfs_start_offset;
  ub8              acfs_size;
  ub8              acfs_seq_num;
} ACFS_METRIC2_rec;

Oracle ACFSプラグインAPI

目的

Oracle ACFSプラグイン・アプリケーション・プログラミング・インタフェース(API)は、アプリケーション・プラグイン・モジュールのローカル・プラグイン対応のOracle ACFSドライバに対してメッセージを送受信します。

構文

sb8 acfsplugin_metrics(ub4 metric_type,
  ub1 *metrics,
  ub4 metric_buf_len,
  oratext *mountp );
sb8 acfsfileid_lookup(ACFS_FILEID file_id,
  oratext *full_path,
  oratext *mountp );

説明

acfsplugin_metrics APIは、Oracle ACFSドライバからメトリックを受信するために、Oracle ACFSアプリケーション・プラグイン・モジュールによって使用されます。acfsutil plugin enableコマンドを使用して、プラグイン通信のためにまずOracle ACFSドライバを有効にする必要があります。選択したアプリケーション・プラグイン・メトリック・タイプ・モデルは、Oracle ACFSのプラグイン有効化コマンドで定義されたプラグイン構成と一致する必要があります。acfsutil plugin enableコマンドの詳細は、「acfsutil plugin enable」を参照してください。アプリケーションには、Oracle ACFSの事前定義済のメトリック・タイプで説明しているメトリック構造を格納するのに十分なバッファのサイズが提供される必要があります。

指定されたバッファがNULLで、metric_buf_len = 0の場合、戻り値は、現在収集されたすべてのメトリックを保持するために必要なサイズになります。アプリケーションは、まずOracle ACFSに問い合せて、必要なバッファの大きさを参照してから、Oracle ACFSに戻すのに必要なサイズのバッファを割り当てることができます。

参照するプラグインが有効なOracle ACFSファイル・システムを特定するには、マウント・パスをAPIに指定する必要があります。

成功すると、負ではない値が戻されます。収集するメトリックがない状態で成功した場合は0、使用可能なメトリックがあることを示す場合は1、間隔の間に収集された新しいメトリックがないことを示す場合は2が戻されます。エラーの場合は、負の値が戻され、Linux環境ではerrnoが設定されます。

メトリック・タイプ#2を使用すると、戻されたメトリックには、fenumとgenumのペアが含まれるACFS_FILE_IDがあります。fenumとgenumのペアからファイル・パスに変換するために、アプリケーションでacfsfileid_lookupを使用できます。アプリケーションでは、パスを保持するために長さがACFS_FILEID_MAX_PATH_LENのバッファを指定する必要があります。1つのファイルに対して複数のハード・リンクがある場合、戻されるパスは最初のパスです。これは、acfsutil info idの使用時と同じ動作です。

プラグインが有効なOracle ACFSファイル・システム・ドライバに対してメッセージを送受信するには、システム管理者またはOracle ASM管理者の権限が必要です。

アプリケーションの書込み

プラグインAPIを使用するには、APIファンクションおよび構造を定義するCヘッダー・ファイルacfslib.hをアプリケーションに含める必要があります。

#include <acfslib.h>

アプリケーションの実行可能ファイルを作成する場合、アプリケーションは、acfs12ライブラリにリンクされている必要があります。定義する必要がある環境変数の詳細は、プラットフォーム固有のドキュメントを参照してください。たとえば:

export LD_LIBRARY_PATH=${ORACLE_HOME}/lib:$
{LD_LIBRARY_PATH}

リンクを行う場合、-lacfs12フラグを追加します。

例7-1では、コマンドは、プラグイン・サービス用に/humanresourcesにマウントされたOracle ACFSファイル・システムを有効にします。

例7-1 ストレージの可視性のためのアプリケーション・プラグイン: ポーリング・モデル

$ /sbin/acfsutil plugin enable -m acfsmetric1 -t HRDATA /humanresources

このコマンドの場合、アプリケーション・プラグインは、HRDATAでタグ付けされたファイルに関連付けられたサマリー・メトリックの、Oracle ACFSプラグインが有効なドライバをポーリングします。アプリケーション・コードは次のようになります。

#include <acfslib.h>
...
/* allocate message buffers */
ACFS_METRIC1 *metrics = malloc (sizeof(ACFS_METRIC1));
/* poll for metric1 data */
while (condition) {
  /* read next summary message from ACFS driver */
   if ((rc = acfsplugin_metrics(ACFS_METRIC_TYPE1,(ub1*)metrics,sizeof(*metrics),
        mountp)) < 0) {
        perror("….Receive failure … ");
        break;
   }
   /* print message data */
   printf ("reads %8llu ", metrics->acfs_nreads);
   printf("writes %8llu ", metrics->acfs_nwrites);
   printf("avg read size %8u ", metrics->acfs_avgrsize);
   printf("avg write size %8u ", metrics->acfs_avgwsize);
   printf("min read size %8u ", metrics->acfs_minrsize);
   printf("max read size %8u ", metrics->acfs_maxrsize);
   ...
   sleep (timebeforenextpoll);
}

例7-2では、コマンドは、プラグイン・サービス用に/humanresourcesにマウントされたOracle ACFSファイル・システムを有効にします。

例7-2 ファイル・コンテンツのためのアプリケーション・プラグイン: ポスト・モデル

$ /sbin/acfsutil plugin enable -m acfsmetric1 -t HRDATA -i 5m /humanresources

このコマンドの場合、5分ごとに、Oracle ACFSプラグインが有効なドライバは、HRDATAでタグ付けされたファイルに関連付けられたファイル・コンテンツ・メトリックをポストします。アプリケーション・コードでは、メトリックがポストされるまで、acfsplugin_metrics()へのコールはブロックされます。アプリケーション・コードは次のようになります。

#include <acfslib.h>
...
 ACFS_METRIC1 *metrics = malloc (sizeof(ACFS_METRIC1));
 
 /* Wait for metric Data */
  while (condition) {
    /* Wait for next file content posting from ACFS driver */
    rc = ACFS_PLUGIN_MORE_AVAIL;
    /* A return code of 1 indicates that more metrics are available
    * in the current set of metrics.
    */
    while( rc == ACFS_PLUGIN_MORE_AVAIL) {
      /* This call blocks until metrics are available. */
      rc = acfsplugin_metrics(ACFS_METRIC_TYPE1,(ub1*)metrics,sizeof(*metrics),
           mountp);
      if (rc < 0) {
        perror("….Receive failure … ");
        break;
      } else if (rc == ACFS_PLUGIN_NO_NEW_METRICS) {
        printf("No new metrics available.");
        break;
     }
     if (last_seqno != metrics->acfs_seqno-1 ) {
       printf("Warning: Unable to keep up with metrics collection.");
       printf("Missed %d sets of posted metrics.",
              (metrics->acfs_seqno-1)-last_seqno);
     }

      /* print message data */ 
      printf ("reads %8llu ", metrics->acfs_nreads);
      printf("writes %8llu ", metrics->acfs_nwrites);
      printf("avg read size %8u ", metrics->acfs_avgrsize);
      printf("avg write size %8u ", metrics->acfs_avgwsize);
      printf("min read size %8u ", metrics->acfs_minrsize);
      printf("max read size %8u ", metrics->acfs_maxrsize);
      ...
 
      last_seqno = metrics->acfs_seqno;
    }
  }
 
  free(metrics);

例7-3 FenumとGenumのペアからファイル・パスを解決するためのアプリケーション

Oracle ACFSタグ付けの汎用アプリケーション・プログラミング・インタフェース

Oracle ACFSタグ付け操作は、共通で、オペレーティング・システム(OS)に依存しないファイル・タグ(Cライブラリ)のアプリケーション・プログラミング・インタフェース(API)によってサポートされます。

Oracle ACFSタグ付けのAPIデモンストレーション・ユーティリティが提供されます。デモでは、サポートされたプラットフォームごとに、makefileを使用してユーティリティを作成する手順が示されます。

Solarisでは、Oracle ACFSタグ付けのAPIは、シンボリック・リンク・ファイルでタグ名を設定できますが、バックアップおよびリストア・ユーティリティは、シンボリック・リンク・ファイルで明示的に設定されるタグ名を保存しません。また、シンボリック・リンク・ファイルは、移動、コピー、tarの使用またはpaxの使用が行われると、明示的に設定されたタグ名が失われます。

次のファイルがあります。

  • $ORACLE_HOME/usm/public/acfslib.h

  • $ORACLE_HOME/usm/demo/acfstagsdemo.c

  • $ORACLE_HOME/usm/demo/Makefile

    デモ・ユーティリティを作成するためのLinuxまたはSolarisのmakefile。

この項の内容は次のとおりです。

Oracle ACFSタグ名の指定

Oracle ACFSタグ名は、1文字から32文字までの長さで、次の一連の文字の組合せのみで構成されます。

  • 大文字と小文字のアルファベット文字(A-Z、a-z)

  • 数字(0-9)

  • ハイフン(-)

  • アンダースコア(_)

  • 空白(スペース)

Oracle ACFSタグ付けのエラー値

次に、失敗した場合のLinuxまたはSolarisのerrnoの値を示します。

  • EINVAL - タグ名の構文が無効であるか、長すぎます。

  • ENODATA - このファイルまたはディレクトリに対するタグ名が存在しません。

  • ERANGE - 値のバッファは、戻り値を保持するには小さすぎます。

  • EACCES - パスのパス接頭辞のディレクトリに対する検索権限が拒否されました。または、ファイル上でタグ名を読み取る権限がユーザーにありません。

  • ENAMETOOLONG - ファイル名が長すぎます。

  • ENOENT - パスのコンポーネントが存在しません。

acfsgettag

目的

Oracle ACFSファイルのタグ名に関連付けられた値を取得します。

構文

sb8 acfsgettag(const oratext *path, const oratext *tagname, oratext *value, 
               size_t size, ub4 flags);

表7-4に、acfsgettagコマンドで使用可能なオプションを示します。

表7-4 acfsgettagコマンドのオプション

オプション 説明

path

ファイルまたはディレクトリのパス名へのポインタを指定します。

tagname

通常のファイルまたはディレクトリに対する有効なタグ名の形式で、NULLで終了するOracle ACFSタグ名へのポインタを指定します。

value

Oracle ACFSタグ値を取得するためのメモリー・バッファを指定します。

size

戻されたOracle ACFSタグ値を保持するメモリー・バッファのバイト・サイズを指定します。

flags

将来の使用のために予約されています。0に設定する必要があります。

説明

acfsgettagライブラリ・コールは、Oracle ACFSタグ名の値文字列を取得します。戻り値は、ゼロ以外のバイトの長さの出力で、成功した場合はvalue文字列、失敗した場合はACFS_TAG_FAILです。ACFS_TAG_FAILが戻されたときに取得する、オペレーティング・システム固有の詳細なエラー情報の値の詳細は、Oracle ACFSタグ付けのエラー値を参照してください。

Oracle ACFSタグ名には、固定値文字列の0 (長さが1バイトの数字ゼロの文字)が現在使用されているため、valueは、Oracle ACFSタグ名のすべてのエントリで同じです。valueをNULL、size0に設定してacfsgettagをコールすることによって、valueバッファのサイズを決定できます。ライブラリ・コールは、タグ名の値文字列を保持するのに必要なバイト・サイズを戻します。タグ名がファイルで設定されていない場合、acfsgettagは、ENODATAエラーを戻します。

例7-4に、acfsgettagファンクション・コールの使用例を示します。

例7-4 ファイルのタグ値の取得

sb8 rc;
size_t size;
oratext value[2];
const oratext *path = "/mnt/dir1/dir2/file2";
const oratext *tagname = "patch_set_11_1";
size = 1; (byte)
memset((void *)value, 0, 2*sizeof(oratext));
rc = acfsgettag (path, tagname, value, size, 0);
If (rc == ACFS_TAG_FAIL)
  /* check errno or GetLastError() to process error returns /*

acfslisttags

目的

Oracle ACFSファイルに割り当てられたタグ名をリストします。詳細は、acfsutil tag infoを参照してください。

構文

sb8 acfslisttags(const oratext *path, oratext *list, size_t size, ub4 flags);

表7-4に、acfslisttagsコマンドで使用可能なオプションを示します。

表7-5 acfslisttagsコマンドのオプション

オプション 説明

path

ファイルまたはディレクトリのパス名へのポインタを指定します。

list

Oracle ACFSタグ名のリストを含むメモリー・バッファへのポインタを指定します。

size

戻されたOracle ACFSタグ名リストを保持するメモリー・バッファのサイズ(バイト)を指定します。

flags

将来の使用のために予約されています。0に設定する必要があります。

説明

acfslisttagsライブラリ・コールは、Oracle ACFSファイルに割り当てられたすべてのタグ名を取得します。acfslisttagsは、listメモリー・バッファにタグ名のリストを戻します。リスト内の各タグ名は、NULLで終了します。ファイルにタグ名がない場合、リフトは空になります。メモリー・バッファは、Oracle ACFSファイルに割り当てられたすべてのタグ名を保持するのに十分な大きさにする必要があります。

アプリケーションは、バッファを割り当て、Oracle ACFSファイルに割り当てられたすべてのタグ名を保持するのに十分なリスト・サイズの大きさを指定する必要があります。acfslisttagsを、バッファ・サイズをゼロ値、リスト・バッファをNULLで最初にコールすることによって、アプリケーションは、必要なリスト・バッファ・サイズを必要に応じて取得できます。アプリケーションは、ゼロ以外の正のリスト・サイズの戻り値をチェックして、リスト・バッファを割り当て、acfslisttagsをコールして、実際のタグ名リストを取得します。

成功すると、戻り値は、タグ名リストの正のバイト・サイズとなり、ファイルにタグ名がない場合は0になります。失敗した場合、戻り値はACFS_TAG_FAILです。ACFS_TAG_FAILが戻されたときに取得する、オペレーティング・システム固有の詳細なエラー情報の値の詳細は、Oracle ACFSタグ付けのエラー値を参照してください。

例7-5に、acfslisttagsファンクション・コールの使用例を示します。

例7-5 ファイルのタグのリスト

sb8 listsize;
sb8 listsize2;
const oratext *path = "/mnt/dir1/dir2/file2";
oratext *list;
/* Determine size of buffer to store list */
listsize = acfslisttags (path, NULL, 0, 0);
if (listsize == ACFS_TAG_FAIL)
/* retrieve the error code and return */

if (listsize)
{
    list = malloc(listsize)
    /* Retrieve list of tag names */
    listsize2 = acfslisttags (path, list, listsize, 0);
    if (listsize2 == ACFS_TAG_FAIL)
        /* check errno or GetLastError() to process error returns */
    if (listsize2 > 0)
        /* file has a list of tag names to process */
    else
        /* file has no tag names. */
}
else
/* file has no tag names. */

acfsremovetag

目的

Oracle ACFSファイルのタグ名を削除します。

構文

sb8 acfsremovetag(const oratext *path, const oratext *tagname, ub4 flags);

表7-6に、acfsremovetagコマンドで使用可能なオプションを示します。

表7-6 acfsremovetagコマンドのオプション

オプション 説明

path

ファイルまたはディレクトリのパス名へのポインタを指定します。

tagname

通常のファイルまたはディレクトリに対する有効なタグ名の形式で、NULLで終了するOracle ACFSタグ名へのポインタを指定します。

flags

将来の使用のために予約されています。0に設定する必要があります。

説明

acfsremovetagライブラリ・コールは、Oracle ACFSファイルのタグ名を削除します。戻り値は、ACFS_TAG_SUCCESSまたはACFS_TAG_FAILです。ACFS_TAG_FAILが戻されたときに取得する、オペレーティング・システム固有の詳細なエラー情報の値の詳細は、Oracle ACFSタグ付けのエラー値を参照してください。

例7-6に、acfsremovetagファンクション・コールの使用例を示します。

例7-6 ファイルのタグの削除

sb8 rc;
const oratext *path= "/mnt/dir1/dir2/file2";
const oratext *tagname = "patch_set_11_1";
rc = acfsremovetag (path, tagname, 0);
If (rc == ACFS_TAG_FAIL)
  /* check errno or GetLastError() to process error returns */

acfssettag

目的

Oracle ACFSファイルのタグ名を設定します。詳細は、acfsutil tag setを参照してください。

構文

sb8 acfssettag(const oratext *path, const oratext *tagname, oratext *value, 
               size_t size, ub4 flags);

表7-7に、acfssettagコマンドで使用可能なオプションを示します。

表7-7 acfssettagコマンドのオプション

オプション 説明

path

ファイルまたはディレクトリのパス名へのポインタを指定します。

tagname

通常のファイルまたはディレクトリに対する有効なタグ名の形式で、NULLで終了するOracle ACFSタグ名へのポインタを指定します。

value

Oracle ACFSタグ値を設定するためのメモリー・バッファを指定します。

size

Oracle ACFSタグ値のバイト・サイズを指定します。

flags

将来の使用のために予約されています。0に設定する必要があります。

説明

acfssettagライブラリ・コールは、Oracle ACFSファイルのタグ名を設定します。戻り値は、ACFS_TAG_SUCCESSまたはACFS_TAG_FAILです。ACFS_TAG_FAILが戻されたときに取得する、オペレーティング・システム固有の詳細なエラー情報の値の詳細は、Oracle ACFSタグ付けのエラー値を参照してください。

Oracle ACFSタグ名には、固定値文字列の0 (長さが1バイトの数字ゼロの文字)が現在使用されているため、valueは、Oracle ACFSタグ名のすべてのエントリで同じです。

例7-7に、acfssettagファンクション・コールの使用例を示します。

例7-7 ファイルのタグの設定

sb8 rc;
size_t size;
const oratext *value ;
const oratext *path= "/mnt/dir1/dir2/file2";
const oratext *tagname = "patch_set_11_1";
value = "0"; /* zero */
size = 1; (byte)
rc = acfssettag (path, tagname, (oratext *)value, size, 0);
If (rc == ACFS_TAG_FAIL)
  /* check errno and GetLastError() to process error returns */

Oracle ACFS I/O障害コンソール・メッセージの理解

Oracle ACFSでは、オペレーティング・システム固有のシステム・イベント・ログにI/O障害の情報を記録します。

コンソール・メッセージの書式は次のとおりです。

[Oracle ACFS]: I/O failure (error_code) with device device_name during a operation_name op_type.
file_entry_num Starting offset: offset. Length of data transfer: io_length bytes.
Impact: acfs_type   Object: object_type   Oper.Context: operation_context 
Snapshot?: yes_or_no AcfsObjectID: acfs_object_id . Internal ACFS Location: code_location.

コンソール・メッセージ構文のイタリック体の変数は、次のものに対応しています。

  • I/O障害

    Oracle ACFSによって見つかったI/O障害に対するオペレーティング・システム固有のエラー・コード(16進法)。これはハードウェアの問題を示す場合もあれば、他のなんらかの理由によるI/O開始の失敗を示す場合もあります。

  • デバイス

    関連するデバイス(通常はADVMデバイス・ファイル)。しかし、場合によっては、デバイスのマイナー番号を示す文字列である可能性もあります。

  • 操作名

    関連する操作の種類。

    user datametadataまたはpaging

  • 操作タイプ

    関連する操作のタイプ。

    synch readsynch writeasynch readまたはasynch write

  • ファイル・エントリ番号

    関連するファイル・システム・オブジェクトのOracle ACFSファイル・エントリ番号(10進数)。acfsutil info fileidツールにより対応するファイル名を見つけます。

  • オフセット

    I/Oのディスク・オフセット(10進数)。

  • I/Oの長さ

    I/Oの長さ(バイト単位、10進数)。

  • 影響を受けるファイル・システム・オブジェクト

    関連するファイル・システム・オブジェクトがノードローカルか、クラスタ全体でアクセスされるリソースのいずれであるかの表示。たとえば:

    Node or Cluster

  • 影響を受けるオブジェクトのタイプ

    関連するファイル・システム・オブジェクトの種類を示す文字列(可能な場合)。たとえば:

    UnknownUser Dir.User SymlinkUser FileSys.DirSys.FileまたはMetaData

    • Sys.Dir.

      表示可能なネームスペース内でOracle ACFSによって管理されるディレクトリ

    • sys.File

      表示可能なネームスペース内でOracle ACFSによって管理されるファイル

    • MetaData

      表示可能なネームスペース外でOracle ACFSに管理されるリソース

  • 操作のコンテキスト

    I/Oを発行しているコード・コンテキストを示すよりレベルの高いビュー。これはOracleサポート・サービスで使用されます。たとえば:

    UnknownReadWriteGrowShrinkCommitまたはRecovery

  • スナップショット

    判断できる場合は、関連するデータがスナップショットのものであったかどうかの表示。たとえば:

    YesNoまたは?

  • ファイル・システムのオブジェクト・タイプ

    ファイル・システム・オブジェクトのタイプの内部識別子。Oracleサポート・サービスで使用。

  • コードの場所

    このメッセージを発行している場所のコードの内部識別子。Oracleサポート・サービスで使用。

次に、Linux環境での/var/log/messagesの例を示します。

[Oracle ACFS]: I/O failure (0xc0000001) with device /dev/sdb during a metadata synch write .
Fenum Unknown. Starting offset: 67113984. Length of data transfer: 2560 bytes.
Impact: Node   Object: MetaData   Oper.Context: Write
Snapshot?: ?  AcfsObjectID: 8  . Internal ACFS Location: 5 . 

Oracle ACFSスナップショットベースのレプリケーションの構成

Oracle ACFSスナップショットベースのレプリケーションの要件については、この項で説明しています。

この項では、リリース12.2以上で使用可能なOracle ACFSスナップショットベースのレプリケーションを構成する方法について説明します。リリース12.2より前のOracle ACFSレプリケーションのインストールと同様に、スナップショットベースのレプリケーションの全体的な機能上の目標は、プライマリ・クラスタの更新がスタンバイ・クラスタにレプリケートされるようにすることです。ただし、スナップショットベースのレプリケーション・テクノロジは、プライマリ・ストレージ・ロケーションのスナップショットを使用し、連続するスナップショットの差分を、標準のsshコマンドを使用してスタンバイ・ストレージ・ロケーションに転送します。リリース12.2より前のOracle ACFSレプリケーション機能では、プライマリ・クラスタとスタンバイ・クラスタ間の接続性を確保するために、Network Foundation Technologies (NFT)を中心としてOracleネットワーキング・テクノロジを基に、絶えず変更をレプリケートしました。

Oracle ACFSレプリケーションの設計および実装におけるこの変更により、レプリケーションの構成および使用方法に若干の相違が発生しています。たとえば、sshを使用するには、レプリケーションを実行するプライマリ・ノードとスタンバイ・ノードでホスト・キーおよびユーザー・キーを適切に設定する必要があります。

Oracle ACFSレプリケーションには、ロール・リバーサルおよびフェイルオーバー機能が用意されています。この機能は、プライマリ・クラスタとスタンバイ・クラスタの両方が必要に応じて相互に通信できるようにすることで構成できます。ロール・リバーサルでは、スタンバイがプライマリのロールを引き受け、プライマリがスタンバイになります。フェイルオーバーには、ロール・リバーサルまたは新しいプライマリが使用する新しいスタンバイの確立が含まれる場合があります。

この項では、次の項目について説明します。

関連項目:

Oracle ACFSレプリケーション・ユーザーの選択

レプリケーションの実行元のユーザーID (repluser)は、慎重に管理する必要があります。これは、レプリケートするファイルを探すためにプライマリをスキャンするユーザーであり、レプリケートされたファイルをスタンバイ上で作成、更新または削除するユーザーとなります。sshを使用している場合、sshは、レプリケーションに関与するスタンバイ・ノードでこのユーザーとしてログインします。

repluserとして選択したユーザーには、Oracle ASM管理権限が必要です。Oracleソフトウェアの初回インストール時にOracleインストーラに指定したユーザーは、通常は、必要なグループに属しているため、このユーザーをレプリケーション・ユーザーとして選択すると便利です。ここでの説明では、レプリケーション・ユーザーをrepluserとして識別しますが、選択した実際のユーザー名でrepluserを置き換えます。Oracle ACFS acfsutilコマンドの実行の詳細は、「Oracle ACFSコマンドライン・ツールの使用について」を参照してください。

ノート:

プライマリ・クラスタとスタンバイ・クラスタの両方で、repluserに同じユーザーとグループのアイデンティティを指定する必要があります。また、ユーザー名と数値のuids、およびグループ名と数値のgidsとの間のマッピングは、プライマリ・クラスタとスタンバイ・クラスタの両方で同一である必要があります。 レプリケーションでの数値の転送はプライマリからスタンバイに対してのみ行われるため、両方のクラスタで数値が同じように使用されるようにするためにはこれが必須です。

Oracle ACFSレプリケーションでの転送方式の選択

Oracle Grid Infrastructureソフトウェアのバージョン23ai以降では、プライマリ・レプリケーション・サイトとスタンバイ・レプリケーション・サイトの間の通信用に新しい転送方式が導入されています。新しい転送方式は、セキュア・シェル(ssh)ではなくSecure Sockets Layer (SSL)に基づいています。

OL8/X64プラットフォームでは、ユーザーが、SSLベースのレプリケーションを使用するか、引き続きsshベースのレプリケーションを使用するかを選択できるようになりました。sshの使用は、引き続き十分にサポートされています。OL8/X64以外のプラットフォームでは、提供される転送方式はsshのみです。

使用する転送方式は、通常は、レプリケーションの開始時に選択します。ただし、既存のレプリケーション関係をsshベースからSSLベースに更新するためのサポートが提供されています。

SSLベースのレプリケーション

SSLベースのレプリケーションでは、新しい認証メカニズムおよびセキュアな転送メカニズムが提供されます。sshを使用したネットワークは、Posixソケットに置き換わります。sshのホスト・キーおよびユーザー・キーを使用した認証は、OpenSSLおよびOracleウォレットに置き換わります。暗号化およびメッセージ認証(HMAC)コードは、Intel IPPS暗号化プリミティブに置き換わります(それらを使用可能なプラットフォームの場合)。

ユーザーの観点から述べると、SSLベースのレプリケーションを使用する最大の利点は、簡略化された構成です。SSLベースのレプリケーションは、レプリケーションに使用するマシンごとにホスト・キーとユーザー・キーを設定し配布する必要はなく、かわりに、プライマリ・サイトとスタンバイ・サイトの間で共有される単一の資格証明セットを確立することによって実現されます。これは、コマンドライン・オプションを使用して簡単に実行でき、必要な場合は、手動でサイト資格証明をやり取りすることでも実現できます。

SSLベースのレプリケーションは、ほとんどのコンテキストにおいて、sshベースのレプリケーションよりもパフォーマンスが高くなります。

SSHベースのレプリケーション

23aiでのssh転送は、以前のすべてのリリースのスナップショットベース・レプリケーションで提供されていたのと同じ転送方式です。23aiでの機能拡張としてはキー設定アシスタントacfsreplsshがあり、これは、レプリケーションに使用するマシンのホスト・キーおよびユーザー・キーの構成を容易にするために使用できます。acfsreplsshの使用をお薦めしますが、必須ではありません。

SSLベースのOracle ACFSレプリケーションの構成

SSLベースのOracle ACFSレプリケーションの構成

このトピックでは、リリース23ai以上で、OL8/X64プラットフォーム上でSSLベースのレプリケーションを構成する方法を説明します。必要な構成手順は、次に説明するように、2つのレプリケーション・サイトで1つの資格証明のセットが共有されるようにすることのみです。

レプリケーションの開始

SSLベースのレプリケーションの使用を指定するには、両方のacfsutil repl initコマンドにオプション-T sslを付けます。付随するオプション-T sshにより、sshベースのレプリケーションの使用を指定します。sshの使用はデフォルトであるため、この後者のオプションは通常は必要ありません。

資格証明の定義および配布

SSLベースのレプリケーションを使用するには、ユーザーが、プライマリ・レプリケーション・サイトとスタンバイ・レプリケーション・サイトの間で共有される資格証明を配布する必要があります。これは、sshベースのレプリケーションを構成する際にホスト・キーとユーザー・キーを設定することに似ています(ただし、はるかに簡単です)。

それらの資格証明は、X.509証明書と公開/秘密キー・ペアからなります。資格証明は、2つのレプリケーション・サイトうちの一方かで確立された後、もう一方のサイトにセキュアにコピーされます。したがって、SSLベースのレプリケーションでは認証に共有シークレット・モデルが使用され、レプリケーション関係の両側(つまり、プライマリ・サイトとスタンバイ・サイト)で、同じ資格証明が使用されます。資格証明はサイト全体が対象になるため、特定のサイト上のアクティブなすべてのレプリケーション・インスタンスで、同じ資格証明が使用されます。資格証明は、ローカル・サイトに資格証明がすでに存在する場合を除き、次のいずれかのコマンドで作成します:

  • acfsutil repl update -o sslCreateCredentialsを使用した明示的な作成
  • acfsutil repl init standby -T sslによる暗黙的な作成
  • cfsutil repl init primary -T sslによる暗黙的な作成
  • acfsutil repl update -T sslの使用による、sshベースのレプリケーションをSSLベースに更新する一環での暗黙的作成
資格証明の作成は、次のacfsutil repl init standbyコマンドの例で示すように、スタンバイ・サイトで行うことをお薦めします:
$ acfsutil repl init standby -T ssl -u repluser /standbyFS
このコマンドでは、資格証明がスタンバイ・サイトに存在しない場合は資格証明が確立され、すでに存在する場合はその資格証明が再使用されます。資格証明が存在する場合にそれらをプライマリ・サイトに配布する方法としては次の3つがあります:
  • 最大限にセキュア - サイトAでエクスポートし、サイトBにセキュアにコピーし、サイトBでインポートする
  • 非常にセキュア - コマンドラインで手動で資格証明の同期を開始する
  • 非常にセキュア - 認証失敗時に自動で資格証明を同期する

エクスポート/インポートは、資格証明を配布するための最もセキュアな方法です。これがデフォルトです。管理者が資格証明をローカル・サイト上のエクスポート・ファイルにエクスポートし、選択したセキュアな方法("スニーカ・ネット"、scpなど)でそのファイルをリモート・サイトにコピーしてから、リモート・サイトでその資格証明をインポート(インストール)します。

手動での資格証明の同期は非常にセキュアです。資格証明の転送はOpenSSLによって暗号化されますが、認証はされません。管理者が両方のレプリケーション・サイトで次のコマンドを使用して、両サイトで資格証明の同期を有効にします:
$ acfsutil repl update -o sslPermitCredentialSync
その後、プライマリ・サイトで次のコマンドを使用します:
$ acfsutil repl update -o sslSyncCredentials -s standby_address
これにより、スタンバイ・サイトからそれらの資格証明をフェッチし、プライマリ・サイトでそれらをインポートします。

なお、前述のように資格証明の同期が有効になっている場合は、レプリケーションにおいてレプリケーション操作中に認証エラーが発生すると、自動資格証明同期が発生する可能性があります。これは、基本的には手動資格証明同期と同じですが、自動的かつシームレスに実行されます。

デフォルトでは、資格証明の同期は無効になっており、管理者が両方のサイトでそれを明示的に有効にした場合のみ発生します。資格証明の同期が許可されており、資格証明の同期が発生した場合は、同期が正常に完了すると資格証明の同期が自動的に無効になります。これは、"出入り自由"になり意図しない同期が起こる可能性を防ぐためです。

例: インポート/エクスポートの使用による最初の資格証明の配布

この例では、管理者が資格証明の転送に最大限にセキュアな方法(この場合は"スニーカ・ネット")を選び、リモート・サイトでそれらを手動でインストールします。boston-cluがスタンバイ・クラスタ、nashua-cluがプライマリ・クラスタであると仮定します。

クラスタboston-cluで、管理者が、次のコマンドを使用してレプリケーションを開始します:
$ acfsutil repl init standby -T ssl -u repluser /standbyFS 
$ acfsutil repl update -o sslExportCredentials=/mySecureThumbDrive/mycredentials
その後、管理者が自分の手で、セキュアなサム・ドライブをBostonからNashuaに移動します。クラスタnashua-cluで、管理者が、次のようなコマンドを使用してレプリケーションを開始します:
$ acfsutil repl update -o sslImportCredentials=/mySecureThumbDrive/mycredentials 
$ acfsutil repl init primary -T ssl -i 10m -s repluser@boston-clu -m /standbyFS /primaryFS
例: 手動による最初の資格証明の配布

この例では、手動で明示的に要求することで、レプリケーション初期化時にスタンバイ・サイト上の資格証明をプライマリ・サイトにコピーしインストールします。資格証明の転送が正常に完了すると、資格証明の同期が自動的に無効になり、後続のすべてのやり取りが、インストールした資格証明を使用して認証されるようになります。

クラスタboston-cluで、管理者が、次のようなコマンドを使用して資格証明の配布を許可します:
$ acfsutil repl update -o sslPermitCredentialSync
クラスタnashua-cluで、管理者が、次のようなコマンドを使用して資格証明を同期させます:
$ acfsutil repl update -o sslPermitCredentialSync 
$ acfsutil repl update -o sslSyncCredentials -s boston-clu
このシナリオでは、nashua-cluでの2番目のacfsutil repl updateコマンドにより、boston-cluから資格証明が同期されます。資格証明が同期されると、資格証明の同期が自動的に無効になります。これ以降のすべてのacfsutil repl initコマンドでは、各サイトにインストールされた、それらの資格証明が使用されます。
したがって、-T sslの追加により転送方式を指定して、通常どおりにレプリケーションを初期化できます。それは、まずスタンバイ上で初期化されます:
$ acfsutil repl init standby -T ssl -u repluser /standbyFS
次にプライマリ上で行われます:
$ acfsutil repl init primary -T ssl -i 10m -s repluser@boston-clu -m /standbyFS /primaryFS
例: 自動での最初の資格証明の配布

この例では、acfsutil repl initコマンドによって暗黙的に、レプリケーション初期化時にスタンバイ・サイト上の資格証明をプライマリ・サイトにコピーしインストールします。資格証明の転送が正常に完了すると、資格証明の同期が自動的に無効になり、後続のすべてのやり取りが、インストールした資格証明を使用して認証されるようになります。

クラスタboston-cluで、管理者が、次のようなコマンドを使用してレプリケーションを開始します:
 $ acfsutil repl init standby -T ssl -o sslPermitCredentialSync -u repluser /standbyFS
クラスタnashua-cluで、管理者が、次のようなコマンドを使用してレプリケーションを開始します:
$ acfsutil repl init primary -T ssl -o sslPermitCredentialSync -i 10m -s repluser@boston-clu -m /standbyFS /primaryFS
このシナリオでは、acfsutil repl init primaryコマンドにより、認証エラーが内部で検出され、ユーザーによる操作を必要とせずに自動的に資格証明がboston-cluサイトと同期されます。資格証明が同期されると、資格証明の同期が自動的に無効になります。

なお、この例では、必要な場合はacfsutil repl initコマンドラインに-o sslPermitCredentialSyncオプションを指定できることも示しています。これは、別個のacfsutil repl updateコマンドを使用してそのオプションを指定するのと同じです。

資格証明の更新

レプリケーションで使用されている資格証明が更新された場合は、前述のどの方法でも、更新された資格証明をリモート・サイトに配布できます。

例: インポート/エクスポートの使用による資格証明の更新
更新された資格証明は、次のように、資格証明をエクスポートしてからインポートすることで配布できます。更新された資格証明があるレプリケーション・サイトで、管理者が次のようなコマンドを発行します:
$ acfsutil repl update -o sslExportCredentials=/mySecureThumbDrive/mycredentials
これにより、ファイル内の資格証明を取得します。その後、リモート・サイトで、次のようなコマンドでそのファイルを使用します。
$ acfsutil repl update -o sslImportCredentials=/mySecureThumbDrive/mycredentials
これにより、その資格証明をインポートします。
例: 手動による資格証明の更新
資格証明の更新は、次のように、手動で実行できます。両方のレプリケーション・サイトで、管理者が次のコマンドを発行します:
$ acfsutil repl update -o sslPermitCredentialSync
その後、ローカル・サイトで次のコマンドを使用します:
$ acfsutil repl update -o sslSyncCredentials -s remote-address
これにより、リモート・サイトからそれらの資格証明をフェッチし、ローカル・サイトでそれらをインポートします。この操作が完了すると、資格証明の同期が自動的に無効になります。
例: 自動での資格証明の更新
資格証明の更新は、次のように、自動で実行できます。両方のレプリケーション・サイトで、管理者が次のコマンドを発行します:
$ acfsutil repl update -o sslPermitCredentialSync
その後は、ローカル・サイトで、レプリケーションで更新が検出される(つまり、認証エラーの受信)まで待つだけです。検出された時点で、資格証明が同期されます。この操作が完了すると、それ以降の同期は無効になります。
SSHベースのレプリケーションからの更新

レプリケーションの既存のsshベース・インスタンスを、その転送方式としてSSLを使用するように更新できます。SSLを使用するように更新した後は、レプリケーションのそのインスタンスを、sshを使用するように戻すことができません。この更新は、acfsutil repl updateコマンドを使用して、プライマリ・クラスタとスタンバイ・クラスタの両方で実行します。

まずスタンバイ・クラスタ、次にプライマリ・クラスタを更新する必要があります。SSLベースのレプリケーションを指定しacfsutil repl initを使用してレプリケーションを初期化するときと同じように、インポート/エクスポートを使用して、手動または自動で資格証明を作成し配布できます。

どの場合でも、資格証明が同期されると、かわりにSSLがそのレプリケーション・インスタンスの転送方式となります。その時点までは、転送方式としてsshが使用されたままです。

例: 資格証明のインポート/エクスポートの使用によるSSLへの更新
まず、スタンバイ・クラスタboston-cluで、ユーザーが次のコマンドを使用して、資格証明を作成し、SSLベースのレプリケーションに更新してから、先ほど作成した資格証明をエクスポートします:
$ acfsutil repl update -T ssl /standbyFS 
$ acfsutil repl update -o sslExportCredentials=/mySecureThumbDrive/mycredentials
次に、プライマリ・クラスタnashua-cluで、ユーザーがそれらの資格証明をインポートし、SSLベースのレプリケーションに更新します:
$ acfsutil repl update -o sslImportCredentials=/mySecureThumbDrive/mycredentials 
$ acfsutil repl update -T ssl /primaryFS
例: 手動資格証明同期の使用によるSSLへの更新
ここでは、手動での配布の例を示します。これは、プライマリ・サイトとスタンバイ・サイトの両方で資格証明の同期を許可することによって実現されます。まず、スタンバイ・クラスタboston-cluで、ユーザーが次のコマンドを使用して、資格証明を作成し、SSLベースのレプリケーションに更新します:
$ acfsutil repl update -o sslPermitCredentialSync 
$ acfsutil repl update -T ssl /standbyFS
次に、プライマリ・クラスタnashua-cluで、ユーザーがそれらの資格証明の同期を有効にし、SSLベースのレプリケーションに更新し、最後に、資格証明の同期を実行します:
$ acfsutil repl update -o sslPermitCredentialSync 
$ acfsutil repl update -o sslSyncCredentials -s boston-clu 
$ acfsutil repl update -T ssl /primaryFS
例: 自動資格証明同期の使用によるSSLへの更新
まず、スタンバイ・クラスタboston-cluで、ユーザーが次のコマンドを使用して、資格証明を作成し、SSLベースのレプリケーションに更新します:
$ acfsutil repl update -o sslPermitCredentialSync 
$ acfsutil repl update -T ssl /standbyFS
次に、プライマリ・クラスタnashua-cluで、ユーザーがそれらの資格証明の同期を有効にし、SSLベースのレプリケーションに更新します:
$ acfsutil repl update -o sslPermitCredentialSync 
$ acfsutil repl update -T ssl /primaryFS
この場合は、レプリケーションで、資格証明を同期する必要性が検出され、自動的にその操作が実行されます。

Oracle ACFSレプリケーションで使用するためのsshの構成

このトピックでは、リリース12.2以上で使用可能なOracle ACFSスナップショットベースのレプリケーションを使用するためにsshを構成する方法について説明します。構成は、次の2つの方法のどちらかで実行できます:

  • キー設定アシスタントacfsreplsshを使用すると、必要なユーザー・キーおよびホスト・キーを簡単に設定できます
  • または、必要なキーを手動で構成することもできます
転送方式としてsshを使用する場合にレプリケーションの全機能をサポートするには、クラスタ間のどちらの方向(プライマリ・クラスタからスタンバイ・クラスタ、およびスタンバイからプライマリ)でもsshを使用可能である必要があります。これは、sshのパスワード不要操作を両方向で有効にする必要があるということです。つまり、sshで手動操作なしでローカルからリモート・クラスタに接続できるように、ホスト・キーとユーザー・キーを定義する必要があります。レプリケーションを使用する前に構成する必要があるsshキーを次に示します:
  • ローカル・クラスタの各ノード(プライマリとスタンバイの両方)で定義されている、repluser用公開キーが、リモート・クラスタ(スタンバイとプライマリの両方)の各ノード上のrepluserauthorized_keys2ファイル内に存在する必要があります。
  • 厳密なホスト・キー・チェックを無効にしてレプリケーションが構成されている場合を除き、リモート・クラスタの各ノードのホスト・キーが、ローカル・クラスタの各ノード上のknown_hostsファイル内に存在する必要があります。

キー設定アシスタントの使用によるsshの構成

sshキー設定アシスタントacfsreplsshを使用すると、Oracle ACFSスナップショットベース・レプリケーションの転送方式としてsshを使用する場合に必要な、ホスト・キーとユーザー・キーを構成、検証または削除できます。このトピックでは、acfsreplsshを使用して一方向(プライマリからスタンバイ)のレプリケーション用にsshを構成する方法について説明します。sshの構成を完成させるには、これらの手順を、2回目はプライマリとスタンバイのロールを逆にして実行する必要があります。

簡潔に示すために、ローカル・クラスタとリモート・クラスタの観点から説明します。このコマンドを、1回目はプライマリをローカル・クラスタとして使用して実行し、2回目はスタンバイをローカル・クラスタとして使用して実行します。

コマンドの概要

acfsreplsshのコマンドライン・インタフェースは次のようになります:
acfsreplssh{ configure | verify | remove } 
    [-v] [-m] 
    [-p remote_password] 
    [-V remote_vip] 
    [-o sshStrictKey=ynvalue] 
    { -c remote_cluster | remote_host1 [remote_hostn...] }
ここでのコマンドライン・オプションには次の意味があります:

-c remote_cluster

ネットワーク・エンドポイントの名前としてremote_clusterを使用してリモート・クラスタに接続し、次に、リモート・クラスタでacfsutil cluster infoコマンドを実行してクラスタ・メンバーを特定します。メンバーとして示された各ホスト名が、その後、コマンドラインで直接remote_hostとして指定されたかのように処理されます。

-m

"モックアップ・モード"で実行します。通常動作の場合にそのコマンドで実行される操作が表示されます。ただし、どの操作も実行はされません。-vとともに使用すると、発生する内容をより詳しく確認できます。

-o sshStrictKey=ynvalue ホスト・キーがすでに存在している必要があるかどうかを指定します。ynvalueは、"y"で始まる場合は"yes"を表し、"n"で始まる値は"no"を表します。configureコマンドの場合、"yes"はホスト・キーがすでに存在している(このコマンドではそれらを構成しない)ことを意味し、"no"は、リモート・ノードによって提示されたホスト・キーをこのコマンドで受け入れる(および構成する)ことを意味します。verifyコマンドの場合は、このオプションは無効であり、すべてのリモート・ノードにホスト・キーがすでに存在している必要があります。(verifyコマンドではキーの追加や変更は実行されません。)このオプションのデフォルト値は"no"です(つまり、configureコマンドでは、提示されたすべてのホスト・キーが構成されます)。ホスト・キー・チェックの詳細は、acfsutil repl initコマンドおよびacfsutil repl updateコマンドの-o sshStrictKeyオプションを参照してください。

-p remote_password

リモート・クラスタでrepluserとしてログインする際に使用するパスワードとして、remote_passwordを指定します。なお、この方法によるコマンドラインでのパスワード指定は、セキュアではないため、セキュリティに関する影響がない場合のみ実行するようにしてください。-pを指定しなかった場合は、acfsreplsshによってリモート・パスワードの入力が求められます(呼び出しごとに1回のみ)。

-v

"冗長モード"で実行します。このコマンドの実行の詳細が表示されます。

-V remote_vip

コマンドラインで指定されたremote_hostsのセットからなる、リモート・クラスタの既存のVIPとして、remote_vipを指定します。これは、remote_vipが、コマンドラインで指定されたremote_hostごとに、ローカルのknown_hostsファイル内の行に追加されるということです。

ノート:

下のすべての例では、-pが指定されていません。つまり、それらでは、コマンドが実行されるたびに、acfsreplsshによってリモート・クラスタのパスワードの入力が求められることになります。

アシスタントは、単一リモート・クラスタのホスト・キーおよびユーザー・キーに対して機能するには、ローカル・クラスタの各ノードで実行する必要があります。これはrepluserとして起動する必要があります。アシスタントにより、確認のために起動元ユーザーのIDが出力され、次に、そのユーザー用のキーが設定されて、アシスタントが実行されているノードと、指定されたリモート・クラスタとの間のレプリケーションが可能になります。

リモート・クラスタ内のホストを特定するには、次のどちらかを実行します:
  • -c remote_clusterを指定してリモート・クラスタ内のネットワーク・エンドポイントを指定します。これは、クラスタ・メンバーを取得するために問い合せられることになります。または、
  • コマンドラインでremote_hostとしてリモート・クラスタ内の各ホストを指定します。

各ローカル・ホストでのsshの構成

acfsreplssh configureコマンドは、レプリケーションに必要になるsshキーを構成するために使用します。このコマンドは、レプリケーションを初めて設定する際に呼び出すか、後のどこかの時点で呼び出すことができます。このコマンドにより、レプリケーションに必要になるすべてのキーが、関係するクラスタに現在も存在するようにします。acfsreplssh configureの各実行では(複数の連続した実行の場合も同様)、必要な場合のみユーザー・キーまたはホスト・キーが追加され、既存のキーは保持されます。

各ホストで、acfsreplsshにより、repluserの現在のキー関連データが、変更される前に保存されます(すでにこれが完了している場合を除く)。つまり、ディレクトリ~repluser/.sshの既存のコピーは、接尾辞.acfsreplssh.backupが付いた名前に変更されます(この接尾辞が付いたバックアップ・ディレクトリがすでに存在する場合を除く)。作成されたディレクトリは、権限0400 (所有者のみが読取り可能)を付与され、repluserが所有します。

次に例を示します。たとえば、n1からn4までの4つのノードがあるプライマリ・クラスタbosc26があるとします。また、n1n2という2つのノードがあるスタンバイ・クラスタchic26があります。クラスタごとにbosc26vipおよびchic26vipというSCAN VIPを定義してあり、各クラスタのSCAN VIPをレプリケーションのネットワーク・エンドポイントとして使用する予定です。コマンドで各リモート・ホスト名を指定する必要がなくなるように、-cを使用し、その値としてそれらのVIP名を指定します。

各クラスタで定義されているVIPを使用して、レプリケーションに必要になる一連のすべてのキーを構成するには、次のようにacfsreplsshを実行します。

まず、bosc26の各ノードで次のコマンドを実行します:
$ acfsreplssh configure -V chic26vip -c chic26vip
次に、chic26の各ノードで次のコマンドを実行します:
$ acfsreplssh configure -V bosc26vip -c bosc26vip
前述の最初のコマンドでは、このコマンドが実行されるbosc26内のホストで現行ユーザー(repluserであると仮定)の公開キーが構成され(キーがまだ存在しない場合)、chic26内の各ホスト上の現行ユーザーのauthorized_keys2ファイルにそのキーが追加されます。その後、bosc26ホスト上の現行ユーザーのknown_hostsファイルに各chic26ホストのホスト・キーが追加されます(-o sshStrictKey=yesを指定した場合を除く)。このオプションを指定する場合は、必要なすべてのホスト・キーがbosc26ホストにすでに存在している必要があります。

これらのコマンドでは、それぞれchic26vipまたはbosc26vipを使用してacfsutil cluster infoが実行されて、リモート・クラスタのメンバーが決定されます。

2番目のコマンドでは、同じ操作が逆方向で実行されます。つまり、このコマンドでは、このコマンドが実行されるchic26内のホストで現行ユーザーの公開キーが構成され(キーがまだ存在しない場合)、bosc26内の各ホスト上の現行ユーザーのauthorized_keys2ファイルにそのキーが追加されます。その後、chic26ホスト上の現行ユーザーのknown_hostsファイルに各bosc26ホストのホスト・キーが追加されます(-o sshStrictKey=yesを指定した場合を除く)。このオプションを指定する場合は、必要なすべてのホスト・キーがchic26ホストにすでに存在している必要があります。

別の例として、前の例と同一の2つのクラスタを使用するが、レプリケーションに使用するVIPが定義されていない場合の対応方法を示します。ここでは、-cを使用し、その値としてリモート・ノード名の1つを指定します。まず、bosc26の各ノードで次のコマンドを実行します:
# acfsreplssh configure -c chic26n1
次に、chic26の各ノードで次のコマンドを実行します:
# acfsreplssh configure -c bosc26n1
これらのコマンドでは、それぞれchic26n1またはbosc26n1acfsutil cluster infoが実行されて、リモート・クラスタのメンバーが決定されます。

各ローカル・ホストでのssh構成の検証

acfsreplssh verifyコマンドを使用すると、既存の一連のキーを検証できます。このコマンドは、キーの追加や変更は実行せず、既存のキーの使用を試みるだけです。レプリケーションの特定のインスタンスをサポートするために存在しているキーを検証するには、これらのキーを構成する際に使用したのと同じ形式のコマンドラインを使用し、それにverifyキーワードを指定します。

各クラスタで定義されているVIPを使用して、レプリケーションに必要になる一連のすべてのキーを検証するには、次のようにacfsreplsshを実行します。

まず、プライマリ・クラスタからスタンバイ・クラスタへのレプリケーションに必要なキーを検証するには、bosc26の各ノードで次のコマンドを実行します:
# acfsreplssh verify -V chic26vip -c chic26vip
次に、将来実行される可能性がある現行のスタンバイから現行のプライマリへのレプリケーションに必要なキーを検証するには、chic26の各ノードで次のコマンドを実行します:
# acfsreplssh verify -V bosc26vip -c bosc26vip
または、VIPを使用せずに、レプリケーションに必要な一連のすべてのキーを検証するには、次のようにacfsreplsshを実行します。まず、プライマリ・クラスタからスタンバイ・クラスタへのレプリケーションに必要なキーを検証するには、bosc26の各ノードで次のコマンドを実行します:
# acfsreplssh verify -c chic26n1
次に、将来実行される可能性がある現行のスタンバイから現行のプライマリへのレプリケーションに必要なキーを検証するには、chic26の各ノードで次のコマンドを実行します:
# acfsreplssh verify -c bosc26n1

各ローカル・ホストでのssh構成情報の削除

たとえばユーザーがacfsutil repl updateコマンドでrepluserの値を更新した場合には、acfsreplssh removeコマンドを使用すると既存の一連のキーを削除できます。acfsreplssh removeコマンドは、キーを削除する各ローカル・ホストで実行する必要があります。このコマンドでは、指定したリモート・クラスタに関連付けられているキーも削除されます。以前のrepluserをサポートするために存在している、特定のローカル・ホスト上のキーを削除するには、そのホスト上のそれらのキーを構成する際に使用したのと同じ形式のコマンドラインを使用し、それに、configureのかわりにremoveキーワードを指定します。

たとえば、前述の、VIPの使用を伴うレプリケーションの例に戻る場合は、次のようにacfsreplsshを実行することで、各クラスタで定義されているVIPを使用して、以前に構成した一連のキーを削除します。

まず、bosc26の各ノードで次のコマンドを実行します:
$ acfsreplssh remove -V chic26vip -c chic26vip
次に、chic26の各ノードで次のコマンドを実行します:
$ acfsreplssh remove -V bosc26vip -c bosc26vip

sshの手動構成

このトピック内の手順では、一方向(プライマリからスタンバイ)のレプリケーション用にsshを構成するために必要な、手動での手順を説明します。sshを完全に構成するには、2回目にプライマリとスタンバイのロールを逆転して手順を実行する必要があります。1回目にステップを実行するときは、プライマリ・クラスタとスタンバイ・クラスタ用に記述されているステップを実行します。2回目には、プライマリ・ロールとスタンバイ・ロールを入れ替えます。プライマリ・クラスタで必要と示されているステップをスタンバイ・クラスタで実行し、スタンバイ・クラスタで必要と示されているステップをプライマリ・クラスタで実行します。2回実行する必要がある手順は、以下で説明しています。

必要なすべての手順を完了したら、「ssh関連のキー構成の検証」の手順を使用して、両方向でsshが正しく構成されていることを確認できます。

Oracle ACFSレプリケーション用のキーの配布

Oracle ACFSレプリケーション用のキーの配布プロセスには、プライマリ・クラスタからの公開キーの取得、スタンバイ・クラスタ用のホスト・キーの取得、ssh関連ファイル用に権限が正しく構成されていることの確認、必要に応じてsshdの構成、そして最後にssh構成の検証が含まれます。

ノート:

ホスト・キーを作成するときは、必ず完全修飾ドメインホスト名とローカル・ホスト名の両方のキーを作成してください。

プライマリ・クラスタからのrepluser用の公開キーの取得

プライマリ・クラスタの各ノードに定義されているrepluser用の公開キーを、スタンバイ・クラスタの各ノードのrepluserが認識している必要があります。

このキーを認識させるには、各スタンバイ・ノードに~repluser/.sshディレクトリが存在する必要があります。このディレクトリが存在しない場合は、repluser専用のアクセス権で作成します。.sshディレクトリに対するlsコマンドの出力が次のようになっていることを確認します。

repluser@standby $ ls -ld ~/.ssh
drwx------ 2 repluser dba 4096 Jan 27 17:01 .ssh

repluserの公開キー・ファイルが特定のプライマリ・ノードに存在する場合は、レプリケーションが実行されるスタンバイの各ノードにrepluserとしてログインすることを認可された一連のキーに、その内容を追加します。各スタンバイ・ノードで、必要に応じて~repluser/.ssh/authorized_keys2ファイルを作成し、その最後にキーを追加します。

公開キー・ファイルが存在しない場合は、repluserとして次のコマンドを実行してプライマリで公開キーと秘密キーのペアを生成します。

$ ssh-keygen -t rsa

コマンドから発行される各プロンプトに応えて、[Enter]キーを押します。結果として生成された.pubファイルを各スタンバイ・ノードにコピーします。

repluser用の同じ公開/秘密キー・ペアをプライマリ・クラスタ内のすべてのノードで共有することも、プライマリ・ノードごとに異なるキー・ペアを設定することもできます。プライマリ・クラスタ内のすべてのノードで同じ公開キーがrepluserに対して有効な場合、スタンバイ・クラスタの各ノードで、~repluser/.ssh/authorized_keys2ファイルにそのキーのみを追加する必要があります。各プライマリ・ノードに独自のrepluser用の公開キーがある場合は、すべての公開キーをそのファイルに追加する必要があります。いずれの場合も、スタンバイの特定のノードで更新したauthorized_keys2ファイルをクラスタの他のノードにコピーすることで、作業を最小化できます。

スタンバイ・クラスタ用のホスト・キーの取得

レプリケーションが実行される各スタンバイ・ノード用のホスト・キーを、レプリケーションが実行される各プライマリ・ノードで認識させる必要があります。適切なキーを生成する方法の1つとして、各プライマリ・ノードから各スタンバイ・ノードに対してrepluserとして手動でsshを実行します。適切なホスト・キーがまだ認識されていない場合は警告が表示され、sshを有効にしてキーを追加できます。

次に、ホスト・キーを取得する例を示します。

[repluser@primary data]$ ssh repluser@standby date
The authenticity of host 'standby (10.137.13.85)' can't be established.
RSA key fingerprint is 1b:a9:c6:68:47:b4:ec:7c:df:3a:f0:2a:6f:cf:a7:0a.
Are you sure you want to continue connecting (yes/no)?

yesと応答すると、sshの設定が完了します。ホスト・スタンバイ用のホスト・キーが、ホスト・プライマリrepluserユーザー用のknown_hostsファイル(~repluser/.ssh/known_hosts)に格納されます。

スタンバイ・ノードに対するホスト・キーの設定が特定のプライマリ・ノードで完了したら、仮想IPアドレス(VIP)を使用してスタンバイ・クラスタと通信する場合は、追加のステップを実行する必要があります。VIP名またはアドレスを、スタンバイ・クラスタ内のホストを参照するknown_hostsファイルの各行の先頭に追加する必要があります。たとえば、名前がstandby12_vipのVIPを使用し、スタンバイを参照する次の2行がknown_hostsファイルに含まれる場合、

standby1,10.242.20.22 ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQC3pM2YTd4UUiEWEoCKDGgaTgsmPkQToDrdtU+JtVIq/96muivU
BaJUK83aqzeNIQkh+hUULsUdgKoKT5bxrWYqhY6AlTEqNgBHjBrJt9C73BbQd9y48jsc2G+WQWyuI/
+s1Q+hIJdBNMxvMBQAfisPWWUcaIx9Y/JzlPgF6lRP2cbfqAzixDot9fqRrAKL3G6A75A/6TbwmEW07d1zqOv
l7ZGyeDYf5zQ72F/V0P9UgMEt/5DmcYTn3kTVGjOTbnRBe4A4lY4rVw5c+nZBDFre66XtORfQgwQB5ztW/Pi
08GYbcIszKoZx2HST9AZxYIAgcrnNYG2Ae0K6QLxxxScP
standby2,10.242.20.23 ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDIszcjzNtKN03SY8Kl846skFTVP1HF/ykswbmkctEjL6KTWTW+NR
U4MGbvkBqqdXxuPCR7aoGO2U3PEOg1UVf3DWUoux8IRvqKU+dJcdTibMFkDAIhTnzb14gZ/lRTjn+GYsuP5
Qz2vgL/U0ki887mZCRjWVL1b5FNH8sXBUV2QcD7bjF98VXF6n4gd5UiIC3jv6l2nVTKDwtNHpUTS1dQAi+1D
tr0AieZTsuxXMaDdUZHgKDotjciMB3mCkKm/u3IFoioDqdZE4+vITX9G7DBN4CVPXawp+b5Kg8X9P+08Eehu
tMlBJ5lafy1bxoVlXUDLVIIFBJNKrsqBvxxxpS7

VIPを使用できるようにするには、次のようにこの2行を変更します。

standby12_vip,standby1,10.242.20.22 ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQC3pM2YTd4UUiEWEoCKDGgaTgsmPkQToDrdtU+JtVIq/96muivU
BaJUK83aqzeNIQkh+hUULsUdgKoKT5bxrWYqhY6AlTEqNgBHjBrJt9C73BbQd9y48jsc2G+WQWyuI/
+s1Q+hIJdBNMxvMBQAfisPWWUcaIx9Y/JzlPgF6lRP2cbfqAzixDot9fqRrAKL3G6A75A/6TbwmEW07d1zqOv
l7ZGyeDYf5zQ72F/V0P9UgMEt/5DmcYTn3kTVGjOTbnRBe4A4lY4rVw5c+nZBDFre66XtORfQgwQB5ztW/Pi
08GYbcIszKoZx2HST9AZxYIAgcrnNYG2Ae0K6QLxxxScP
standby12_vip,standby2,10.242.20.23 ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDIszcjzNtKN03SY8Kl846skFTVP1HF/ykswbmkctEjL6KTWTW+NR
U4MGbvkBqqdXxuPCR7aoGO2U3PEOg1UVf3DWUoux8IRvqKU+dJcdTibMFkDAIhTnzb14gZ/lRTjn+GYsuP5
Qz2vgL/U0ki887mZCRjWVL1b5FNH8sXBUV2QcD7bjF98VXF6n4gd5UiIC3jv6l2nVTKDwtNHpUTS1dQAi+1D
tr0AieZTsuxXMaDdUZHgKDotjciMB3mCkKm/u3IFoioDqdZE4+vITX9G7DBN4CVPXawp+b5Kg8X9P+08Eehu
tMlBJ5lafy1bxoVlXUDLVIIFBJNKrsqBvxxxpS7

最終的に、プライマリ・クラスタのこの1つ目のノードで実行されたホスト・キーの構成は、プライマリ・クラスタ内のすべてのノードで実行する必要があります。前述の手順の結果またはそれに相当するものが各プライマリ・ノードに存在する必要があります。この構成を実現するのに必要な手作業を最小化する方法の1つとして、プライマリ・クラスタのノードの1つでknown_hostsファイルを更新した後、更新後のファイルをクラスタの他のノードにコピーします。

ノート:

デフォルトでは、レプリケーションにより、sshによる厳密なホスト・キー・チェックが有効になり、sshの実行時にプライマリ・ノードが目的のスタンバイ・ノードまたはクラスタに必ず接続されます。しかし、プライマリ・クラスタとスタンバイ・クラスタがプライベート・ネットワークで通信する場合など、このチェックが確実に不要である場合は、sshによる厳密なホスト・キー・チェックの使用を無効にできます。厳密なホスト・キー・チェックの無効化の詳細は、acfsutil repl init primaryコマンドの-o sshStrictKey=noオプションを参照してください。厳密なホスト・キー・チェックが無効になっている場合、ホスト・キーの設定は不要です。acfsutil repl initコマンドの詳細は、「acfsutil repl init」を参照してください。

ssh関連ファイルに対する権限に関するノート

設定したキーでsshが機能するには、repluser.sshディレクトリおよびそのディレクトリ内にある一部のファイルについて、各ノードで権限が適切に設定されていることを確認する必要があります。

.sshディレクトリとそのディレクトリ内のキー・ファイルに付与する必要がある権限の詳細は、ssh(1)マニュアル・ページのFILESに関する項など、ssh実装のドキュメントを参照してください。

sshdの構成に関するノート

レプリケーションの使用を開始すると、sshがレプリケーション操作を実行するために頻繁に起動されます。一部のプラットフォームでは、ssh接続が確立されるたびにsyslogまたは同様の機能を使用してメッセージを記録するように、ssh daemon sshdを構成することもできます。これを回避するには、サーバー構成ファイル/etc/ssh/sshd_configを変更してロギングの頻度を低く指定することができます。ロギングを制御するパラメータは、LogLevelです。接続メッセージは、INFOレベルで発行されます。ERRORなど、頻度がより低いLogLevel設定にすると、それらのメッセージは抑制されます。たとえば、次の行をファイルに追加することで、ログ・メッセージを抑制できます。

LogLevel ERROR

ssh関連のキー構成の検証

プライマリ・クラスタとスタンバイ・クラスタの両方でssh用のホスト・キーおよびユーザー・キーを設定したら、acfsutil repl info -c -uコマンドを使用してキーを検証できます。このコマンドは、それぞれのクラスタの各ノードでrepluserとして実行します。ローカル・クラスタが今後のレプリケーションの実行に使用する可能性があるリモート・クラスタのすべてのホスト名またはアドレスを引数として取ります。

VIPを使用せずにリモート・クラスタに接続している場合は、特定のレプリケーション関係について、リモート・ホスト名またはリモート・アドレスを1つのみacfsutil repl init primaryに指定します。ただし、関係に他のリモート・ホスト・アドレスが今後かかわる可能性がある場合は、acfsutil repl info -c -uコマンドの実行時に、全リモート・アドレスを指定します。

VIPを使用してリモート・クラスタに接続している場合は、VIPがアクティブな全リモート・ホストの名前またはホスト固有のアドレスを指定する必要があります。VIP名、またはVIPに関連付けられているアドレスを指定しないでください。レプリケーションでsshを使用してVIPに接続する場合、戻されるホスト・キーは、VIPが現在アクティブなホストに関連付けられているキーです。この場合のsshでは、個々のリモート・ノードのホスト名またはアドレスのみが使用されます。

プライマリ・クラスタの各ノードで実行する検証コマンドの形式は次のとおりです。

$ acfsutil repl info -c -u repluser standby1 [standby2 ...] [snap_shot@]primary-mountpoint

このコマンドで、standbynにはスタンバイ・クラスタのホスト名またはアドレスを指定します。検証コマンドは、ユーザーreplusersshを使用して、レプリケーションの初期化と同じ方法で、指定された各スタンバイのホスト名またはアドレスに接続できることを確認します。standby12_vipなどのVIPを使用してクラスタに接続している場合は、同じコマンド形式を使用します。VIPの名前を指定しないでください。

厳密なホスト・キー・チェックを無効にする予定の場合は、-o sshStrictKey=noオプションをコマンドラインに追加して、このチェックをスキップできます。

プライマリ・クラスタの各ノードがスタンバイ・クラスタのすべてのノードに接続できることを確認したら、検証コマンドを再実行してください。今度は、スタンバイ・クラスタの各ノードでコマンドを実行します。次の形式を使用して、プライマリ・クラスタのすべてのノードのホスト名またはIPアドレスを指定します。

$ acfsutil repl info -c -u repluser primary1 [primary2 ...] [snap_shot@]standby-mountpoint

このコマンドで、primarynにはプライマリ・クラスタのホスト名またはアドレスを指定します。

Oracleパッチ適用とOracle ACFS

この項では、グリッド・インフラストラクチャ環境でのOracle ACFSを使用したパッチ適用について説明します。

Oracle ACFSパッチ適用の概要

Oracle ACFSは、Oracle Grid Infrastructureの一部としてインストールされます。ただし、Oracle ACFSは、Linux上の/lib/modules/sbinなどの様々なシステムの場所から実行されます。

Oracle ACFSは、Oracle Grid Infrastructureの配信およびパッチ・メカニズム(OUIおよびOPatch)と統合されます。配信メカニズム(Oracleリリース、Oracleパッチセット、Oracleリリース更新またはOracle個別パッチ)に関係なく、Oracle ACFSコンテンツはパッチで配信されます。

Oracleゼロ・ダウンタイムのグリッド・インフラストラクチャ・パッチ適用を使用せずにOracle Grid Infrastructureを更新すると、Oracle ACFSもシステムの場所で更新され、Oracle Gridソフトウェアのシームレスな操作が保証されます。更新時(リリース、リリース更新、パッチセットまたは個別パッチに関係なく)、Oracle Clusterwareスタックはローカル・ノードで停止され、サービスは他のノードに移行されます。その後、Oracle Gridソフトウェアにパッチが適用され、サービスがローカル・ノードで再起動されます。

Oracleゼロ・ダウンタイムのOracle Grid Infrastructureパッチ適用を使用しないパッチ適用

パッチ操作中、まずOracle ACFSソフトウェアはOPatchまたはOUIファイル配置操作によってGridホームで更新され、その後Oracle Clusterwareの停止中に適切なシステムの場所に移動されてメモリーにロードされます。Oracle Clusterwareの再起動には、オペレーティング・システム(OS)カーネルでOracle ACFSを更新できるように、OSカーネル参照を解放するという副作用があります。

ゼロ・ダウンタイムのOracle Grid Infrastructureを使用したパッチ適用

ゼロ・ダウンタイムのOracle Grid Infrastructureパッチ適用を使用すると、Oracle Gridホーム内のOracle Grid Infrastructureユーザー領域バイナリのみにパッチが適用されます。Oracle Gridホームから実行されるコマンドは、すぐに最新バージョンを使用します。ACFS、AFD、OLFS、OKA OSシステム・ソフトウェア(OSカーネル・モジュールおよびシステム・ツール)など、Oracle Gridホーム外にインストールされるOracle Grid Infrastructureコンポーネントは、Gridホームで更新されますが、システムの場所にはインストールされません。パッチ・バージョンより前のバージョンが引き続き実行されます。パッチが適用されると、OPatchインベントリにOPatchインベントリの新しいパッチ番号が表示されます。ただし、実行中のソフトウェアにはこれらの変更は含まれず、Gridホームで使用可能なソフトウェアのみが含まれます。新しく使用可能になったソフトウェアがメモリーにロードされ、付属するユーザー・ツールがシステムの場所にコピーされるまで、Oracle Grid Infrastructureホームにある使用可能な修正は利用されません。

実行およびインストールされているOracle ACFSシステム・ソフトウェアを確認するには、次のコマンドを使用できます。

  • crsctl query driver activeversion -all

    このコマンドは、クラスタのすべてのノード上のOracle ACFSのアクティブ・バージョンを表示します。アクティブ・バージョンは、システムに現在ロードされて実行されているOracle ACFSドライバのバージョンです。これは、ACFSシステム・ツールのバージョンも暗黙的に示します。18c以降で使用可能なcrsctl queryコマンドは、クラスタのすべてのノードのデータを表示します。

    次の例では、19.4がOracleホームで使用可能ですが、19.2が現在実行中のバージョンです。OPatch lsinventoryにより、19.4がパッチ適用済バージョンとしてレポートされます。Oracle Grid Infrastructure OSドライバは19.2のみを実行しています。

    crsctl query driver activeversion -all
    Node Name : node1
    Driver Name : ACFS
    BuildNumber : 200114
    BuildVersion : 19.0.0.0.0 (19.2.0.0.0)
    
  • crsctl query driver softwareversion -all

    このコマンドは、Oracle Gridホームに現在インストールされているOracle Grid Infrastructureソフトウェアの使用可能なソフトウェア・バージョン(および拡張機能別にOracle ACFSソフトウェアの使用可能なソフトウェア・バージョン)を表示します。18c以降で使用可能なcrsctl queryコマンドは、クラスタのすべてのノードのデータを表示します。

    crsctl query driver softwareversion -all
    Node Name : node1
    Driver Name : ACFS
    BuildNumber : 200628
    BuildVersion : 19.0.0.0.0 (19.4.0.0.0)
    
  • acfsdriverstate version -v

    このコマンドは、ローカル・ノードで実行中のOracle ACFSモジュールに関する全情報を表示します。ACFS-9548およびACFS-9547メッセージには、Oracle Grid Infrastructureホームで使用可能なOracle ACFSソフトウェアのバージョンが表示されます。acfsdriverstateは、ローカル・ノードについてのみをレポートします。バグ番号は、個別パッチの実行時にのみ使用可能です。

    acfsdriverstate version -v
    ACFS-9325: Driver OS kernel version = 4.1.12-112.16.4.el7uek.x86_64.
    ACFS-9326: Driver build number = 200114.
    ACFS-9212: Driver build version = 19.0.0.0.0 (19.2.0.0.0).
    ACFS-9547: Driver available build number = 200628.
    ACFS-9548: Driver available build version = 19.0.0.0.0 (19.2.0.0.0)
    ACFS-9549: Kernel and command versions.
    Kernel:
     Build version: 19.0.0.0.0
     Build full version: 19.2.0.0.0
     Build hash: 9256567290
     Bug numbers: NoTransactionInformation
    Commands:
     Build version: 19.0.0.0.0
     Build full version: 19.2.0.0.0
     Build hash: 9256567290
     Bug numbers: NoTransactionInformation
    

Oracle Grid Infrastructureファイルの更新

Oracle Clusterwareスタックが停止し、Oracle ACFSドライバ・モジュールが更新されるまで、Oracle ACFSの修正はメモリーにロードされません。Oracle ACFSの修正をシステム・メモリーにロードするプロセスにより、Oracle ACFS操作に必要なツールもシステムの場所にインストールされます。

次の手順のいずれかを実行できます。

  1. Oracle ACFSの修正をメモリーおよびシステムの場所にロードするには、ノードごとに次のコマンドを発行する必要があります。

    • crsctl stop crs -f

      ローカル・ノード上のCRSスタックおよびすべてのアプリケーションを停止します

    • root.sh -updateosfiles

      システム上のOracle ACFSおよびその他のOracle Grid Infrastructureカーネル・モジュールを最新バージョンに更新します

    • crsctl start crs -wait

      ノードでCRSを再起動します

  2. あるいは、カーネル・バージョンを変更してノードを再起動すると、新しいドライバが自動的にロードされ、新しいシステム・ツールがシステム・ディレクトリにインストールされます。クラスタ内のすべてのノードがカーネル・バージョンを同時に変更するものとします。

これらのイベントのいずれかが発生すると、crsctl query activeversionおよびcrsctl query softwareversionコマンドによって同じ情報がレポートされます。ロード済で実行中のオペレーティング・システム(OS)ソフトウェアは、Oracle Grid Infrastructureホームで使用可能な最新のものと同じです。Oracle ACFSパッチ適用の検証の説明に従って、他のOracle ACFSバージョンのコマンドを実行できます。

Oracle ACFSパッチ適用の検証

標準のOPatchパッチを使用してOracleリリース更新およびOracleパッチを適用する場合、インベントリにはGrid Infrastructureホームおよびシステムにインストールされている内容が正確に反映されます。たとえば:

[grid@racnode1]$ opatch lsinventory
...
..
Oracle Grid Infrastructure 19c                                       19.0.0.0.0
There are 1 products installed in this Oracle Home.

Interim patches (5) :

Patch  30501910: applied on Sat Mar 07 15:42:08 AEDT 2020
Unique Patch ID:  23299902
Patch description:  "Grid Infrastructure Jan 2020 Release Update : 19.4.0.0.200628 (30501910)"
   Created on 28 Dec 2019, 10:44:46 hrs PST8PDT
   Bugs fixed:

lsinventoryの出力例では、OPatch RUおよび適用されるその他のパッチと、バグ番号およびその他の情報をリストしています。これらのパッチはGrid Infrastructureホームに適用されます。通常のパッチ適用操作では、オペレーティング・システム(OS)の場所にも適用され、メモリーにロードされるため、Oracle Grid InfrastructureのOSシステム・ソフトウェアの修正がGrid Infrastructureホームと同期されます。ただし、ゼロ・ダウンタイムのグリッド・インフラストラクチャ・パッチ適用を使用する場合、システムにインストールされているOracle Grid Infrastructureシステム・ソフトウェアの内容(Oracle ACFSなど)は同時に更新されません。

crsctl query driverおよびacfsdriverstateコマンドを使用して、インストールされているOracle Grid Infrastructureシステム・ソフトウェア・レベルがGrid Infrastructureホームのソフトウェア・レベルと同じかどうかを検証できます。Oracle ACFSパッチ適用の概要のゼロ・ダウンタイムのOracle Grid Infrastructureパッチ適用に関する説明を参照してください。

ゼロ・ダウンタイムのOracle Grid Infrastructureパッチ適用を使用せずに適用されたパッチ適用および更新操作の場合、アクティブ・バージョンとソフトウェア・バージョンは常に同じである必要があります。

更新されたOracle Grid Infrastructure OSシステム・ソフトウェアのインストールが必要な場合は、Oracle Grid Infrastructureファイルの更新の手順を参照してください。

すべてのOracle Grid Infrastructure OSシステム・ソフトウェアが更新された後のバージョンは、Grid Infrastructureホームへのパッチまたは更新について表示されるOpatch lsinventoryの出力と同じ(この場合は19.4.0.0.0)である必要があります。また、使用可能でアクティブなOracle Grid Infrastructure OSシステム・ソフトウェアには、同じバージョン番号が表示されている必要があります。たとえば:

Output from the lsinventory command:   
Patch description:  "Grid Infrastructure Jan 2020 Release Update : 19.4.0.0.0.200628 (30501910)"

crsctl query driver activeversion -all
Node Name : node1
Driver Name : ACFS
BuildNumber : 200628
BuildVersion : 19.0.0.0.0 (19.4.0.0.0)

crsctl query driver softwareversion -all
Node Name : node1
Driver Name : ACFS
BuildNumber : 200628
BuildVersion : 19.0.0.0.0 (19.4.0.0.0)

acfsdriverstate versionコマンドを実行すると、コマンドやユーティリティに関する情報など、ローカル・ノード上のOracle ACFSの追加情報を取得できます。たとえば:

acfsdriverstate version 
 ACFS-9325: Driver OS kernel version = 4.1.12-112.16.4.el7uek.x86_64.
 ACFS-9326: Driver build number = 200628.
 ACFS-9212: Driver build version = 19.0.0.0.0 (19.4.0.0.0)
 ACFS-9547: Driver available build number = 200628.
 ACFS-9548: Driver available build version = 19.0.0.0.0 (19.4.0.0.0).