TSTARTコマンドは、トランザクションまたはサブトランザクションの始まりをマークし、$TLEVELをインクリメントします。TSTARTがトランザクション($TLEVEL=1)の始まりをマークすると、その引数は、トランザクションがRESTARTするかどうか、そして、起動されることがありますかどうか、直列化可能性を強制しているかどうかを、判別します。もしトランザクションがRESTARTする可能性がある場合は、TSTART引数は、どのローカル変数がRESTART時に復元されているのかを判別します。もしSERIALキーワードが指定されている場合は、直列化可能性は、LOCKコマンドまたはGT.Mによって強制されます。
TSTARTコマンドのフォーマットは:
TS[TART][:tvexpr] [([lvn...])|lvn|*|][:keyword|(keyword...)]
オプションでコマンド直後に続く真理値の式は、GT.Mがコマンドを実行するかどうかをコントロールする後置コマンドです。
もし$TLEVELがTSTARTの前に0の場合は、TSTARTはトランザクションを開始します、それ以外の場合は、サブトランザクションを開始します。
もしTSTARTがトランザクションを初期化し、コロン(:) デリミタより前の引数の部分が空の場合、トランザクションは、RESTARTの対象ではありません。もしTSTARTがトランザクション($TLEVEL=0)を開始し、コロン(:) より前の引数の部分が空でない場合、トランザクションは、RESTARTの対象です。もしTSTARTが(サブトランザクションを開始する)ネストされている場合、その引数は、トランザクションのRESTART対象であるかどうかには、影響を与えません。
もしコロンより前の引数の部分がアスタリスク(*)の場合は、後続のRESTARTは、TSTARTが実行された時に、それらが持っていた値にすべてのローカル変数を復元します。
もし、コロンの前の引数の部分が、添字なしのローカル変数名、または、括弧で囲まれた名前のようなリストである場合は、RESTARTは、TSTARTが実行されたときに、それらが持っていた値に名前付き変数を復元します。
もしコロンの前の引数の部分が、空の括弧 () のセットである場合は、RESTARTは、任意のローカル変数を復元しません。
コロンの後の引数のオプションの部分は、トランザクション特性を指定するキーワードであるそのキーワード、または、括弧で囲まれたキーワードをコロンで区切られたリストです。
間接指定演算子とTSTARTの引数に評価される原子式(expression atom)は、TSTARTのための正当な引数を構成します。
適切なトランザクションのリスタートをサポートするコードのリポジトリが存在しないため、ダイレクトモードでTSTARTを使用すると、期待通りに動作しないことがあります。
トランザクション内でTSTARTは、サブトランザクションを開始します。このようなTSTARTへの引数は、既存のトランザクションがRESTARTするかどうかについて、または、トランザクションのシリアル化可能性が強制されているかどうかについては、効果がありません。 TSTARTのこのタイプは、RESTARTが有効であることを持っているトランザクションで復元されるローカル変数を追加することがあります。
それは、トランザクションのすべてのレベルでTSTART上でRESTARTを可能にする同期化するための、適切なコーディング習慣です。トランザクションが行う場所でRESTARTを許可していないネストになっているTSTARTは、サブトランザクションが正常にRESTARTを処理するようにコーディングされていないことを示す場合もあります。
サブトランザクションは、トランザクションから独立してCOMMITできません、また、それらが独立してRESTARTもできません。サブトランザクションは、コードの編成で、モジュール形式で、インクリメンタルROLLBACKを可能にするための追加で、柔軟性を可能にするために、プログラミングの便宜として主に存在しています。
ジャーナリングの時に、TransactionID=expr を指定している引数を持つ最初のTSTARTでのトランザクションは、( expr はキーワード(大文字と小文字を区別しない)BA[TCH] を評価する式です)、アプリケーションに制御を返すより前に、成功するTCOMMITより後に書き込まれるジャーナルアップデートを待機していません。この機能の目的は、ジャーナリング以外の手段によって再作成または回復できるトランザクションの任意のサブセット上で、ジャーナリングの性能に影響をあたえるアプリケーションの制御を許可することです。
TSTARTコマンドの使用例については、第5章:“Mの一般的な言語特徴” を参照してください。
次のキーワードは、TSTART引数で現れることがあります:
SERIALキーワードは、GT.Mがトランザクションの直列化可能性を確保する必要があることを示します。 GT.Mは常にSERIALキーワードに関係なく、トランザクションを直列化することに注意してください。ネストになったTSTARTでは、引数のこの部分は無関係です。
TRANSACTIONIDキーワードは、任意のトランザクションの識別を宣言します。
もしトランザクションの完了時にTRANSACTIONID="BATCH" または "BA" ならば、プロセスは直ちに実行を継続します。プロセスがトランザクションのために [最後の]TCOMMIT を発行しかつジャーナリングがアクティブである時、次のコマンドを実行する前に、トランザクション全体がジャーナルファイルに書き込まれるまで、デフォルトではプロセスは待機します。これは、プロセスが次のステップに移動する前に、すべてのトランザクションが永続性のあることが保証されます。 "BATCH" としてフラグ付けられたトランザクションは、低レイテンシと高スループットを持ちますが、しかし、耐久性の低い保証は持ちます。運用手順(バックアップなど)やアプリケーションコード(チェックポイントアルゴリズムなど)が、耐久性の確保を許容できる代替手段を提供するとき、通常は、このフラグが使用されます。