一杯になった表領域のリカバリ
デフォルトでは、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」を参照してください。