共有メモリー・セグメントのデタッチ、アタッチおよび解放

enduringのRAMポリシーにより、共有メモリー・セグメントからデタッチして、共有メモリー・セグメントをメモリー内に残すことができます。データベースを開く準備ができたら、この同じ共有メモリー・セグメントにアタッチできます。

ノート:

これは、高速アップグレードを実行する場合にのみ使用してください。『Oracle TimesTen In-Memory Databaseインストレーション、移行およびアップグレード・ガイド』高速パッチ・アップグレードの実行についてを参照してください。

共有メモリー・セグメントのアタッチおよびデタッチは、データベースのロードおよびアンロードよりも大幅に高速です。データベースをアンロードすると、共有メモリー・セグメントが破棄されます。データベースをロードすると、新しい共有メモリー・セグメントが作成され、チェックポイント・ファイルからロードされます。enduringのRAMポリシーを指定すると、共有メモリー・セグメントをアタッチ、デタッチおよび解放できます。デタッチしても、共有メモリー・セグメントは引き続き存在し、アタッチするときに再利用できます。

次のttAdminコマンドを使用して、共有メモリー・セグメントに対してアタッチ、デタッチおよび解放を行います。これらの機能は、RAMポリシーがenduringに設定されている場合にのみ使用できます。

  • ttAdmin –shmDetach [-ckpt | -noCkpt]: 共有メモリー・セグメントをデタッチし、管理サブデーモンを停止します。共有メモリー・セグメントは、サブデーモンの終了後もメモリーに残ります。

    共有メモリー・セグメントから切断する前に、サブデーモンが静的チェックポイントを実行するかどうかを指定できます。デフォルトでは、最終チェックポイントは–ckptオプションを使用して実行されます。この最終チェックポイントでは、データベースの起動でリカバリ・プロセスを実行する必要がなくなります。–noCkptオプションを指定すると、最終チェックポイントを回避し、デタッチ・プロセスとアタッチ・プロセスのパフォーマンスが向上します。ただし、データベースが以前にデタッチされた共有メモリー・セグメントにアタッチできず、チェックポイント・ファイルからロードする必要がある場合、このチェックポイントを実行しないときは、データ損失を回避するためにロード中にリカバリ・プロセスを実行する必要があります。

  • ttAdmin –shmAttach: ttAdmin –shmDetach操作で正常にデタッチされた既存の共有メモリー・セグメントにアタッチします。データベースに対してこの共有メモリー・セグメントを管理するためのサブデーモンを作成します。

  • ttAdmin –shmFree: メモリーに残っている共有メモリー・セグメントを明示的に破棄します。共有メモリー・セグメントは、正常にデタッチされた後、デタッチに失敗した後、またはデータベース・クラッシュ後に解放できます。デタッチ操作の失敗またはデータベースのクラッシュが発生した場合、データベースをリカバリする前に、共有メモリー・セグメントを解放する必要があります。データベースをリロードおよびリカバリするには、チェックポイント・ファイルを使用してリカバリするttAdmin –ramLoadコマンドを実行します。

次の例は、ttAdmin -shmDetachを使用して共有メモリー・セグメントをデタッチしてメモリー内に保持する方法を示しています。次に、ttAdmin –shmAttachコマンドを使用して、既存の共有メモリー・セグメントにアタッチします。

  1. ttAdmin -shmDetachコマンドを使用して共有メモリー・セグメントをデタッチする前に、database1をクローズします。

    $ ttAdmin -close database1
    RAM Residence Policy            : enduring
    Manually Loaded In RAM          : True
    Replication Agent Policy        : manual
    Replication Manually Started    : False
    Cache Agent Policy              : manual
    Cache Agent Manually Started    : False
    Database State                  : Closed
  2. 共有メモリー・セグメントをデタッチし、database1の管理サブデーモンを停止します。共有メモリー・セグメントは、「Manually loaded in RAM」の出力がFalseとして表示され、デタッチされていることがわかります。ttStatusユーティリティでは、サブデーモンがデータベースからデタッチされていることが示されます。

    $ ttAdmin -shmDetach database1
    RAM Residence Policy            : enduring
    Manually Loaded In RAM          : False
    Replication Agent Policy        : manual
    Replication Manually Started    : False
    Cache Agent Policy              : manual
    Cache Agent Manually Started    : False
    Database State                  : Closed
    
    $ ttStatus
    TimesTen status report as of Wed Aug 18 01:45:55 2021
    
    Daemon pid 27561 port 6626 instance instance1
    TimesTen server pid 27568 started on port 6628
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    Data store /tmp/databases/database1
    Daemon pid 27561 port 6626 instance instance1
    TimesTen server pid 27568 started on port 6628
    There are no connections to the data store
    …
    Closed to user connections
    RAM residence policy: Enduring
    Subdaemon is manually detached from data store (Shared Memory Key 0x07108a02 ID 745504801)
    Replication policy  : Manual
    Cache Agent policy  : Manual
    PL/SQL enabled.
    ------------------------------------------------------------------------
    Accessible by group g900
    End of report
  3. 準備ができたら、ttAdmin –shmAttachコマンドを実行して管理サブデーモンを作成し、database1データベースの管理サブデーモンを起動して共有メモリー・セグメントにアタッチします。「Manually loaded in RAM」の出力はTrueとして表示されて、共有セグメントが再度アタッチされることが示されます。ttStatusユーティリティでは、データベースがRAMにロードされることが示されます。

    $ ttAdmin -shmAttach database1
    RAM Residence Policy            : enduring
    Manually Loaded In RAM          : True
    Replication Agent Policy        : manual
    Replication Manually Started    : False
    Cache Agent Policy              : manual
    Cache Agent Manually Started    : False
    Database State                  : Closed
    
    $ ttStatus
    TimesTen status report as of Wed Aug 18 01:46:08 2021
    
    Daemon pid 27561 port 6626 instance instance1
    TimesTen server pid 27568 started on port 6628
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    Data store /tmp/databases/ database1
    Daemon pid 27561 port 6626 instance instance1
    TimesTen server pid 27568 started on port 6628
    There are 12 connections to the data store
    …
    Closed to user connections
    RAM residence policy: Enduring
    Data store is manually loaded into RAM
    Replication policy  : Manual
    Cache Agent policy  : Manual
    PL/SQL enabled.
    ------------------------------------------------------------------------
    Accessible by group g900
    End of report
  4. そのデータベースをオープンします。

    $ ttAdmin -open sampledb
    RAM Residence Policy            : enduring
    Manually Loaded In RAM          : True
    Replication Agent Policy        : manual
    Replication Manually Started    : False
    Cache Agent Policy              : manual
    Cache Agent Manually Started    : False
    Database State                  : Open

ノート:

共有メモリーセグメントをデタッチおよびアタッチできるようにすると、アップグレードを高速化できます。Oracle TimesTen In-Memory Databaseインストレーション、移行およびアップグレード・ガイドTimesTen Classicのアップグレードを参照してください。

データベースが突然停止する障害(サブデーモンのクラッシュやアサーションの失敗など)がある場合、共有メモリー・セグメントはトランザクション上一貫性がない可能性があるため、破棄してからデータベースをリロードして新しい共有メモリー・セグメントを作成する必要があります。

次の例では、ttAdmin –shmFreeコマンドで共有メモリー・セグメントを解放します。その後、この例ではttAdmin –ramLoadを実行してチェックポイント・ファイルからデータベースをリカバリし、新しい共有メモリー・セグメントを作成します。

  1. データベース・クラッシュ後に共有メモリー・セグメントを解放します。

    $ ttAdmin -shmFree database1
    RAM Residence Policy            : enduring
    Manually Loaded In RAM          : False
    Replication Agent Policy        : manual
    Replication Manually Started    : False
    Cache Agent Policy              : manual
    Cache Agent Manually Started    : False
    Database State                  : Closed
    
    $ ttStatus
    TimesTen status report as of Wed Aug 18 02:12:27 2021
    
    Daemon pid 6168 port 6626 instance instance1
    TimesTen server pid 6175 started on port 6628
    ------------------------------------------------------------------------
    ------------------------------------------------------------------------
    Data store /tmp/databases/database1
    Daemon pid 27561 port 6626 instance instance1
    TimesTen server pid 27568 started on port 6628
    There are no connections to the data store
    Closed to user connections
    RAM residence policy: Enduring
    Data store is manually unloaded from RAM
    Replication policy  : Manual
    Cache Agent policy  : Manual
    PL/SQL enabled.
    ------------------------------------------------------------------------
    Accessible by group g900
    End of report
  2. チェックポイント・ファイルからリカバリする、新しい共有メモリー・セグメントがあるdatabase1データベースをロードしオープンします。

    $ ttAdmin -ramLoad -open database1
    RAM Residence Policy            : enduring
    Manually Loaded In RAM          : True
    Replication Agent Policy        : manual
    Replication Manually Started    : False
    Cache Agent Policy              : manual
    Cache Agent Manually Started    : False
    Database State                  : Open