表領域が一杯になった場合の考慮事項
TimesTenデータベースにキャッシュされたOracle Database表を使用する場合は、増分自動リフレッシュを使用するようにOracle Database表を構成できます。これらの表では、キャッシュ管理ユーザーの表領域が一杯になった場合に発生する状況を次のいずれかに指定できます。
-
DMLを実行したアプリケーションが失敗する。これがデフォルトです。
表領域の完全リカバリがNoneに設定される。アプリケーションは、表領域が一杯になるとOracle Databaseから「
Out of Tablespace」エラーを受信します。その時点で、アプリケーションは、トランザクションをロールバックする必要があります。ttCacheConfig組込みプロシージャでParamパラメータをTblSpaceFullRecovery、ValueパラメータをNoneに設定すると、表領域の完全リカバリがNoneに設定されます。たとえば、次の例では、terryが所有するemployees表のParamをTblSpaceFullRecovery、ValueをNoneに設定します。call ttCacheConfig('TblSpaceFullRecovery','terry', 'employees','None'); -
変更ログ表を切り捨てて領域を解放すると、完全自動リフレッシュが実行されます。
キャッシュ管理ユーザーの表領域が一杯になっても、自動リフレッシュによってキャッシュされたOracle Database表でDML文を実行しているすべてのアプリケーションが続行されます。トリガーが実行され、既存の変更ログ・レコードを削除して、新しい変更ログ・レコード用に領域を開放します。これによって、増分自動リフレッシュ・モードが構成されたキャッシュ・グループに対して完全自動リフレッシュを実行できます。ただし、Oracle Database表が増分自動リフレッシュ用に構成されていない場合、トリガーは実行されません。
アプリケーションを続行し、アプリケーションで自動リフレッシュを実行できるようにする操作を設定するには、
ttCacheConfigプロシージャでParamパラメータをTblSpaceFullRecovery、ValueパラメータをReloadに設定します。ユーザーには、自動リフレッシュが完了するまで失効データが表示されます。ただし、ユーザーが値
Reloadを指定してキャッシュ構成パラメータTblSpaceFullRecoveryを設定しても、索引が増大している場合はその索引を処理するための十分な空きを表領域に用意できないことがあります。変更ログ表から行を削除することでは、変更ログ表の索引用に十分な領域が開放されない場合があります。索引の増大が急激なため、表領域全体が索引に使用され、変更ログ表をパージしても効果がない状況になると、ユーザーのアプリケーションは次のエラーを受信する可能性があります。ORA-01654: unable to extend index <index> by 128 in tablespace <tblspace>
ttCacheConfig組込みプロシージャの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』の「ttCacheConfig」を参照してください。