NOT LOGGED INITIALLY パラメーターによるロギングの低減
アプリケーションでマスター表から作業表を作成してその中にデータを入れる場合、CREATE TABLE ステートメントで NOT LOGGED INITIALLY パラメーターを指定して作業表を作成できます。 このオプションは、作業表はマスター表から簡単に再作成できるという理由でリカバリー可能性について心配する必要がない場合に、役立ちます。 NOT LOGGED INITIALLY パラメーターを指定すると、ロギングが低減され、パフォーマンスが向上します。
NOT LOGGED INITIALLY パラメーターを使用する利点は、
表が作成された作業単位と同じ作業単位で表に対し行われた変更 (挿入、
削除、更新、または索引作成操作を含む) をロギングしなくてもよい点です。 これにより、実行されるロギングが低減されるだけでなく、アプリケーションのパフォーマンスも向上させることができます。 NOT LOGGED INITIALLY パラメーターを指定した ALTER TABLE ステートメントを使用して、
既存の表について同じ結果を確保できます。
注:
- 同じ作業単位で NOT LOGGED INITIALLY パラメーターを使用し複数の表を作成できます。
- カタログ表および他のユーザー表に対する変更は、ロギングの対象になります。
表に対する変更がロギングされないため、
NOT LOGGED INITIALLY 表属性の使用を決定するときには次の点を考慮する必要があります。
- 表に対するすべての 変更項目は、コミット時にディスクに書き出されます。 つまり、コミットには時間がかかることがあります。
- NOT LOGGED INITIALLY 属性がアクティブになっており、ログに記録されないアクティビティーが発生した場合、 ステートメントが失敗したり、ROLLBACK TO SAVEPOINT が実行された場合には、作業単位全体はロールバックされます (SQL1476N)。
- 高可用性災害時リカバリー (HADR) を使用している場合、NOT LOGGED INITIALLY 表属性を使用すべきではありません。 NOT LOGGED INITIALLY オプションを指定して 1 次データベースに作成された表は、スタンバイ・データベースに複製されません。 アクティブ・スタンバイ・データベース上、またはテークオーバー操作の結果スタンバイ・データベースから 1 次データベースになったデータベース上にある、 このような表にアクセスしようとすると、 エラー (SQL1477N) が発生します。
- ロールフォワード時には、これらの表をリカバリーできません。 ロールフォワード操作実行時に NOT LOGGED INITIALLY オプションにより作成または変更された表が検出されると、
この表には使用不可のマークが付けられます。 データベースのリカバリー後にこの表にアクセスしようとすると、
SQL1477N が戻されます。注: 表が作成されると、COMMIT が実行されるまで、カタログ表の行ロックが保持されます。 ロギングが行われないことを利用するためには、表を作成した作業単位と同じ作業単位で表にデータを入れる必要があります。 これは、並行操作に影響を与えます。
宣言済み一時表によるロギングの低減
宣言済み一時表を作業表として使用することを計画している場合は、
次の点に注意してください。
- 宣言済み一時表はカタログには記録されません。したがって、ロックは保持されません。
- 宣言済み一時表に対しては、 最初の COMMIT の後でもロギングは実行されません。
- COMMIT の後に表の行を維持するため、 ON COMMIT PRESERVE オプションを使用してください。 これを行わないと、すべての行が削除されます。
- 宣言済み一時表を作成したアプリケーションだけが、 その表のインスタンスにアクセスできます。
- データベースのアプリケーション接続がドロップされるときに、 宣言済み一時表は暗黙的にドロップされます。
- アクティブ・スタンバイ・データベースでは、 作成済み一時表 (CGTT) および宣言済み一時表 (DGTT) を作成またはアクセスすることはできません。
- 宣言済み一時表を使用する作業単位の途中で操作にエラーが生じると、 作業単位が完全にはロールバックされなくなります。 ただし、宣言済み一時表の内容を変更するステートメントで操作にエラーが生じると、 表の行がすべて削除されます。 作業単位 (またはセーブポイント) のロールバックでは、 その作業単位 (またはセーブポイント) で変更された宣言済み一時表にあるすべての行が削除されます。