トランザクションのライフサイクル全体には、通常、トランザクションの開始、クエリや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は、システム内の現在のすべてのアクティブなトランザクションを照会するために使用できます。アクティブなトランザクションの詳細については、アクティブなトランザクションを参照してください。