一杯になった表領域のリカバリ

デフォルトでは、Oracleキャッシュ管理ユーザーの表領域が一杯になったときに、特定のキャッシュされたOracle Database表に対してUPDATE文、INSERT文またはDELETE文などのDML処理を試行すると、アプリケーションにエラーが返されます。

Oracleキャッシュ管理ユーザーの表領域が一杯になったときにTimesTenがOracle Databaseアプリケーションにエラーを返すのではなく、更新処理が特定のキャッシュされたOracle Database表に発行されたときに変更ログ表から既存の行を削除して、新規の行のための領域を確保するようにTimesTenを構成できます。変更ログ表から削除した行の一部がキャッシュ表に適用されていない場合、次回の自動リフレッシュ・サイクルにおいて、そのキャッシュ表が含まれる各TimesTenデータベースのキャッシュ表に完全自動リフレッシュ処理が実行されます。

Oracleデータベースの表をキャッシュする任意のTimesTenデータベースから、TimesTenキャッシュ管理ユーザーとしてttCacheConfig組込みプロシージャをコールします。TblSpaceFullRecovery文字列をParamパラメータに渡し、Oracleキャッシュ管理ユーザーの表領域が一杯になった場合に実行するアクションを構成するキャッシュされたOracle Database表の所有者および名前をtblOwnerパラメータおよびtblNameパラメータにそれぞれ渡し、さらに、そのアクション自体を文字列としてValueパラメータに渡します。

有効なアクションは次のとおりです。

  • None: キャッシュされたOracle Database表に更新処理が発行されたときに、アプリケーションにOracle Databaseエラーを返します。これがデフォルトのアクションです。

  • Reload: キャッシュされたOracle Database表に更新処理が発行されると、次回の自動リフレッシュ・サイクルにおいて、変更ログ表から行を削除し、キャッシュ表に対して完全自動リフレッシュ処理を実行します。

次の例では、Oracleキャッシュ管理ユーザーの表領域が一杯になった場合のアクションを構成します。この例では、キャッシュされたOracle Database表sales.customerに更新処理が発行されたときにOracleキャッシュ管理ユーザーの表領域が一杯である場合、次回の自動リフレッシュ・サイクルにおいて、変更ログ表から行が削除され、キャッシュ表に対して完全自動リフレッシュ処理が実行されます:

% ttIsql "DSN=cache1;UID=cacheadmin;PwdWallet=/wallets/cacheadminwallet"
Command> CALL ttCacheConfig('TblSpaceFullRecovery','sales','customer','Reload');

Oracleキャッシュ管理ユーザーの表領域が一杯である場合に、特定のキャッシュされたOracle Database表に対して更新処理を発行すると実行される現在のアクションを確認するには、TblSpaceFullRecovery文字列のみをParamパラメータに、キャッシュされたOracle Database表の所有者および名前をtblOwnerパラメータおよびtblNameパラメータにそれぞれ渡してttCacheConfigをコールします:

Command> CALL ttCacheConfig('TblSpaceFullRecovery','sales','customer');
< TblSpaceFullRecovery, SALES, CUSTOMER, reload >

Oracleキャッシュ管理ユーザーの表領域が一杯である場合に、キャッシュされたOracle Database表に対して更新処理を発行すると実行されるアクションは、同じOracleデータベースから表をキャッシュし、かつ同じOracleキャッシュ管理ユーザー名が設定されているすべてのTimesTenデータベースに適用されます。

『Oracle TimesTen In-Memory Databaseリファレンス』「ttCacheConfig」を参照してください。