RAMポリシーの指定
TimesTen Classicでは、TimesTen Classicデータベースをメイン・メモリーにロードまたはアンロードするタイミングを決定するRAMポリシーを指定できます。また、共有メモリー・セグメントをアンロードせずにデタッチしてメモリー内に残すことができるRAMポリシーもあります。
TimesTen Classicデータベースごとに異なるRAMポリシーを設定できます。
ノート:
TimesTen Scaleoutでは、システム管理者によるttGridAdmin
ユーティリティを使用したデータベースの手動ロードおよびアンロードがサポートされています。
RAMポリシーのオプションは次のとおりです。
-
「manual」: データベースはシステム管理者によって手動でロードおよびアンロードされます。ロードされると、管理者がデータベースをアンロードする(
ttAdmin -ramUnload
を使用)まで、またはリカバリ不能なエラー条件が発生しないかぎり、TimesTenによってデータベースはロードされたままになります。データベースは、管理者のみがシステムRAMに明示的にロードできます(ttAdmin -ramLoad
オプションを使用)。これは、データベースの不要なロードまたはアンロードを回避できるため、推奨されるRAMポリシーです。ttAdmin -ramLoad
オプションおよび-ramUnload
オプションの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のRAM操作の実行を参照してください。データベース・エラー・リカバリの詳細は、「自動リカバリ失敗後のRAMポリシーの変更」を参照してください。 -
enduring: このオプションは、高速アップグレードを実行する場合に使用します。
manual RAMポリシーの場合と同様に、システム管理者が手動でデータベースをロードおよびアンロードできます。
さらに、enduringのRAMポリシーによって、データベースをクローズする前に、共有メモリー・セグメントからデタッチできます。データベースを開く準備ができたら、この同じ共有メモリー・セグメントにアタッチし、メイン・サブデーモンを起動してデータベースを再起動できます。また、エラーのためにデータベースで障害が発生した場合は、共有メモリー・セグメントを解放してチェックポイント・ファイルからデータベースをリカバリできます。「共有メモリー・セグメントのデタッチ、アタッチおよび解放」を参照してください。
これは、アップグレードの実行時に役立ちます。
ttAdmin -ramLoad
オプションおよび-ramUnload
オプションの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のRAM操作の実行を参照してください。データベース・エラー・リカバリの詳細は、「自動リカバリ失敗後のRAMポリシーの変更」を参照してください。 -
inUse: データベースは、データベースへの最初の接続をオープンするとメモリーにロードされ、1つ以上の接続がオープンしているかぎり、メモリーに常駐したままになります。データベースへの最後の接続をクローズすると、データベースはメモリーからアンロードされます。これがデフォルトのポリシーです。
-
inUse with RamGrace: データベースは、データベースへの最初の接続をオープンするとメモリーにロードされ、1つ以上の接続がオープンしているかぎり、メモリーに常駐したままになります。データベースへの最後の接続をクローズしても、猶予期間の間は、そのデータベースがメモリーに残ります。データベースは、猶予期間中データベースに接続されているプロセスがない場合にのみメモリーからアンロードされます。猶予期間は、随時設定および再設定できます。猶予期間は、次に猶予期間が変更されるまでのみ有効です。
ノート:
アプリケーションで、TimesTenデータベースが最初の接続で自動的にロードされ、最後の切断で自動的にアンロードされる必要がある場合は、RAMポリシーをinUseまたはinUse with RamGraceに設定します。ただし、大規模なデータベースを使用する本番システムでRAMポリシーをinUseに設定すると、データベースが予期せずにアンロードおよびリロードされるというパフォーマンスの問題が発生する可能性があります。
-
always: データベースはメモリーに常駐したままになります。TimesTenデーモンは再起動すると、データベースを自動的に再ロードします。リカバリ不能なエラー条件が発生しないかぎり、必ずデータベースは自動的に再ロードされます。
alwaysのRAMポリシーは注意して使用する必要があります。障害が発生した場合、データベースを自動的にリロードすることは有益ではありません。また、システムの起動時にすべてのデータベースが同時にロードされると、システムの起動パフォーマンスに影響を与える場合があります。エラー・リカバリについては「自動リカバリ失敗後のRAMポリシーの変更」、およびデータベースをリロードしようとしたときに発生する可能性があることについては「障害発生後のデータベース自動リロードの防止」を参照してください。
システム管理者は、RAMポリシーを設定するか、ttAdmin
ユーティリティまたはC API RAMポリシー・ユーティリティを使用してTimesTen Classic内のデータベースを手動でロードまたはアンロードします。『Oracle TimesTen In-Memory Databaseリファレンス』のttAdminまたは『Oracle TimesTen In-Memory Database C開発者ガイド』のTimesTenユーティリティAPIの章を参照してください。
ノート:
デフォルトでは、致命的なエラー後のデータベースの自動リカバリが失敗した場合、TimesTen Classicはalways
およびmanual
RAMポリシーをInUse
に変更して、失敗の再発を防止します。RAMポリシーの変更を防止する方法の詳細は、「自動リカバリ失敗後のRAMポリシーの変更」を参照してください。
次の例では、ttdata
DSNで識別されるデータベースについてRAMポリシーをmanual
に設定します。
ノート:
1行目で、RAMレジデント・ポリシーがmanual
に設定されています。その他の出力には、ttAdmin
ユーティリティで設定できる他のポリシーも示されています。『Oracle TimesTen In-Memory Databaseリファレンス』の「ttAdmin」を参照してください。
% ttAdmin –ramPolicy manual ttdata RAM Residence Policy : manual Replication Agent Policy : manual Replication Manually Started : False Cache Agent Policy : manual Cache Agent Manually Started : False Database state : open
次の例では、TimesTenデータベースのRAMポリシーをenduringに設定します。
$ ttAdmin -ramPolicy enduring 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 : open
自動リカバリ失敗後のRAMポリシーの変更
致命的なエラーによってデータベースが無効になり、TimesTen Classicで実行された自動データベース・リカバリが失敗すると、デフォルトでは、特定の手順が自動的に発生します。
-
manual
、enduring
およびalways
のRAMポリシーには変更はありません。 -
レプリケーション・エージェントとキャッシュ・エージェントは再起動されません。
-
データベースのリロードが数回失敗すると、TimesTen Classicは
policyInactive
モードを設定し、データベースのロードがそれ以上試行されないようにします。
ノート:
無効なデータベースがメモリーにまだ存在している間に大きなデータベースをメモリーにリロードすると、使用可能RAMが一杯になることがあります。データベースの自動リロードを防止する方法については、「障害発生後のデータベース自動リロードの防止」を参照してください。
障害発生後のデータベース自動リロードの防止
致命的なエラーが原因でデータベースが無効化された後、TimesTen Classicは、データベースがRAMポリシー、キャッシュ・エージェントのポリシーおよびレプリケーション・エージェントのポリシーの設定と一貫性を維持しているかぎり、データベースのリロードとリカバリを試みます。
ただし、ユーザー・プロセスは、データベースの無効化を認識していない場合に引き続きデータベースに接続されていることがあります。この場合、すべてのユーザー・プロセスが接続を閉じるまで、無効化されたデータベースがメモリー上に存在します。したがって、無効化されたデータベースと新しくリロードされたデータベースの両方がメモリーに共存することがあります。データベースが大きい場合、これが問題になることがあります。
ノート:
データベースのリロードとリカバリを実行するかどうかはRAMポリシーによって決定されるだけでなく、キャッシュ・エージェントとレプリケーション・エージェントも無効化後にデータベースをリロードするかどうかの要素になります。障害の後にデーモンがエージェントを自動的に再起動するようにキャッシュ・エージェントとレプリケーション・エージェントのポリシーを設定すると、エージェントはデータベースへの接続を開始します。これが初めての接続であれば、デーモンはデータベースをリロードし、リカバリを実行します。
キャッシュ・エージェントおよびレプリケーション・エージェントのポリシーの詳細は、『Oracle TimesTen In-Memory Databaseレプリケーション・ガイド』のレプリケーション・エージェントの起動および停止、『Oracle TimesTen In-Memory Databaseキャッシュ・ガイド』のTimesTen Classicでのキャッシュ・エージェント起動ポリシーの設定、および『Oracle TimesTen In-Memory Databaseリファレンス』のttAdminを参照してください。
無効化の後にデータベースが自動的にリロードすることを防止するには、ttAdmin -noautoreload
コマンドを使用します。デフォルトの自動データベース・リロード動作に戻すには、ttAdmin -autoreload
コマンドを使用します。Oracle TimesTen In-Memory DatabaseリファレンスのttAdminを参照してください。
ノート:
ttRamPolicyAutoReloadSet
組込みプロシージャは、ttAdmin -noautoreload
およびttAdmin -autoreload
と同じ処理を実行します。Oracle TimesTen In-Memory DatabaseリファレンスのttRamPolicyAutoReloadSetを参照してください。
次のいずれかによってデータベースの初期化とリカバリが開始し、標準の動作に戻ります。
-
TimesTenデーモンが再起動する。
-
プロセスが正常に接続される。
-
管理者がデータベースの
ttAdmin
コマンドを実行し、RAMポリシーの変更、RAMロードの実施、キャッシュまたはレプリケーション・エージェントの開始のいずれかを行う。
データベースの自動リロードを防止する動作を設定した場合、リロードされていないデータベースに接続しようとすると次のエラーメッセージが表示されることがあります。
Error 707, "Attempt to connect to a data store that has been manually unloaded from RAM"