トランザクションのライフサイクル全体には、通常、トランザクションの開始、クエリやDMLステートメントの実行、トランザクションの終了などのプロセスが含まれます。トランザクションの開始は、BEGINやSTART TRANSACTIONなどのステートメントで明示的に行うことも、DMLステートメントによって暗黙的に行うこともできます。トランザクションの終了には通常、2つの方法があります。COMMITステートメントでトランザクションをコミットするか、ROLLBACKステートメントでトランザクションをロールバックします。さらに、アクティブなトランザクション内でDDLステートメントを実行すると、トランザクションが暗黙的にコミットされることもあります。
トランザクション内部ではセーブポイントを作成できます。これはトランザクション内の特定のポイントをマークするもので、後の実行プロセスで ROLLBACK TO SAVEPOINT ステートメントを使用してそのポイントまでロールバックすることが可能です。詳細については、Savepointを参照してください。
トランザクションサイズ
OceanBaseデータベースV2.x系では、単一トランザクションのサイズには制限があり、通常は100MBです。トランザクションのサイズは、テナントレベルのパラメータ _tenant_max_trx_size とクラスタレベルのパラメータ _max_trx_size の2つに関連しており、_tenant_max_trx_size の方が優先的に適用されます。
OceanBaseデータベースV3.x系では大規模トランザクションをサポートしているため、この制限はなくなりました。
ステートメントのタイムアウトとトランザクションのタイムアウト
システム変数 ob_query_timeout はステートメント実行時間の上限を制御します。ステートメントの実行時間がこの値を超えると、アプリケーションにステートメントタイムアウトのエラー(エラーコード:-6212)が返され、ステートメントはロールバックされます。この値は通常、デフォルトで 10s です。
システム変数 ob_trx_timeout はトランザクションのタイムアウト時間を制御します。トランザクションの実行時間がこの値を超えると、アプリケーションにトランザクションタイムアウトのエラー(エラーコード:-6210)が返され、その際はアプリケーションが ROLLBACK ステートメントを発行してトランザクションをロールバックする必要があります。
システム変数 ob_trx_idle_timeout は、セッション内のトランザクションが IDLE 状態にある最大時間を表します。つまり、長時間にわたってDMLステートメントがない場合や、そのトランザクションを終了する場合、この時間値を超えるとトランザクションは自動的にロールバックされます。その後、DMLステートメントを実行すると、アプリケーションにエラーコード -6224 が返されます。アプリケーションは ROLLBACK ステートメントを発行してセッション状態をクリーンアップする必要があります。
トランザクションのクエリ
仮想テーブル __all_virtual_trans_stat は、システム内の現在のすべてのアクティブトランザクションを照会するために使用できます。アクティブトランザクションの詳細については、アクティブトランザクションを参照してください。