SQL Serverデータベースと連携したジャーナル取得側業務の運用中の注意事項について説明します。
TJNLのジャーナル取得機能を停止する場合は、すべてのアプリケーションがTJNL動作環境定義で指定したSQL Serverデータベースから切断していることを確認した後に行ってください。SQL Serverデータベースに接続したアプリケーションが実行中である場合にはジャーナル取得機能は通常停止できません。ただし、強制停止オプションを使用することで取得機能を停止することができます。
SQL Serverデータベースに接続したアプリケーション名を確認する場合は、TJNLが提供するSQLスクリプトとバッチファイルのひな型を複写し修正して行います。その際、SQLスクリプトのファイル名は".sql"で終わるようにしてください。また、バッチファイルとSQLスクリプトは同じフォルダに格納してください。
ひな型は以下のファイルで提供しています。
SQLスクリプト ------------------------------------------------------------------------ インストールフォルダ\TJNL\sample\sqlserver\TJNLGETPROCESS.sql ------------------------------------------------------------------------
バッチファイル ------------------------------------------------------------------------ インストールフォルダ\TJNL\sample\sqlserver\TJNLGETPROCESS.bat ------------------------------------------------------------------------
ひな型は以下の内容に設定されています。
コンピュータ名: SERVER
インスタンス名: INSTANCE
環境に合わせてひな型を複写し修正します。修正に必要な値はSQL Serverデータベースの管理者に確認してください。SQLスクリプトは修正不要です。
ひな型の修正内容について、以下に説明します。
バッチファイルを修正する
バッチファイルに設定されているインスタンス名を修正します。
以下に修正の入力例を示します。斜体の部分が修正箇所です。
例.インスタンス名を変更する
コンピュータ名:SERVER1
インスタンス名:DBINSTANCE
------------------------------------------------------------------------
set INSTANCE_NAME=SERVER1\DBINSTANCE
------------------------------------------------------------------------
規定のインスタンスの場合は、コンピュータ名のみ(SERVER1)を指定してください。
SQL Serverデータベースに接続中のアプリケーション名を取得する
バッチファイルを実行して、SQL Serverデータベースに接続中のアプリケーション名を取得します。修正したバッチファイルとSQLスクリプトを同じフォルダに格納してください。
なお、バッチファイルは、SQL Serverデータベースに接続するため、バッチファイルを含むアプリケーション名とプロトコル名を表示します。
以下に入力例を示します。
例.バッチファイルの実行例
------------------------------------------------------------------------ TJNLGETPROCESS.bat ------------------------------------------------------------------------
例.実行結果
接続中のアプリケーション名とプロトコル名を表示します。アプリケーション名が空白の場合、プロトコル名のみを表示します。
----------------------------------------------------------------------------- program_name,client_interface_name ------------,--------------------- tjnldst,ODBC SQLCMD,OLEDB Microsoft SQL Server Management Studio - クエリ,.Net SqlClient Data Provider Microsoft SQL Server Management Studio,.Net SqlClient Data Provider ,ODBC (5 行処理されました) -----------------------------------------------------------------------------
TJNLのジャーナル取得機能が起動済みの状態でTRMを強制停止した場合、アプリケーションがジャーナル取得対象の表を更新するとSQL Serverから例外が通知されることがあります。その際にSQL Serverから通知されるエラー番号はTJNL環境定義の[TJNLDefinition]セクションのExCodeで指定した値です。
また、イベントログにTJNL5682またはTJNL5683のメッセージが出力されます。このエラー番号がSQL Serverから通知された場合にはトランザクションをROLLBACKするようアプリケーションを設計してください。
以下の手順により、TJNLがSQL Serverに登録したトリガーを無効化することで、SQLを異常終了させずにジャーナル取得対象の表を更新できるようになります。
TJNLが登録したトリガーの一覧情報を取得する
TJNLが登録したトリガーを無効化する
TJNLが登録したトリガーの一覧情報の取得は、TJNLが提供するSQLスクリプトとバッチファイルのひな型を修正して行います。
ひな型は以下のファイルで提供しています。
SQLスクリプト ------------------------------------------------------------------------ インストールフォルダ\TJNL\sample\sqlserver\TJNLTRGLIST.sql ------------------------------------------------------------------------
バッチファイル ------------------------------------------------------------------------ インストールフォルダ\TJNL\sample\sqlserver\TJNLTRGLIST.bat ------------------------------------------------------------------------
ひな型は以下の内容に設定されています。
コンピュータ名: SERVER
インスタンス名: INSTANCE
環境に合わせてひな型を複写し修正します。修正に必要な値はSQL Serverデータベースの管理者に確認してください。SQLスクリプトは修正不要です。
また、バッチファイルとSQLスクリプトは同じフォルダに格納してください。
例.インスタンス名を変更する
コンピュータ名:SERVER1
インスタンス名:DBINSTANCE
------------------------------------------------------------------------ set INSTANCE_NAME=SERVER1\DBINSTANCE ------------------------------------------------------------------------
規定のインスタンスの場合は、コンピュータ名のみ(SERVER1)を指定してください。
バッチファイルを実行して、TJNLが登録したトリガーの一覧情報を取得します。このバッチファイルは、-nオプション(未反映の定義を反映してから起動する)を指定してTJNLを起動した後であればいつでも実行することができます。修正したバッチファイルとSQLスクリプトを同じフォルダに格納してください。
例.バッチファイルの実行例
------------------------------------------------------------------------ TJNLTRGLIST.bat ------------------------------------------------------------------------
例.実行結果
------------------------------------------------------------------------ DBName,TableName,TriggerName ------,---------,----------- MQDJDB_TRM001,TJNLSCH.TJNLTEMPTABLE,TJNLSCH.TJNLTMPTRG (1 行処理されました) DBName,TableName,TriggerName ------,---------,----------- 販促,関東地区.家電区分1,関東地区.TJNLTRG_1 販促,関東地区.家電区分2,関東地区.TJNLTRG_2 (2 行処理されました) ------------------------------------------------------------------------
なお、TJNLがSQL Serverに登録するトリガーの名称は以下の通りです
アプリケーションがデータベースを更新した際に動作するトリガー
TJNLTRG_n (nはシーケンス番号)
tjnlckptコマンドを実行した際に動作するトリガー
TJNLTMPTRG
TJNLが登録したトリガーの無効化は、TJNLが提供するSQLスクリプトとバッチファイルのひな型を修正して行います。
ひな型は以下のファイルで提供しています。
SQLスクリプト ------------------------------------------------------------------------ インストールフォルダ\TJNL\sample\sqlserver\TJNLDISABLETRG.sql ------------------------------------------------------------------------
バッチファイル ------------------------------------------------------------------------ インストールフォルダ\TJNL\sample\sqlserver\TJNLDISABLETRG.bat ------------------------------------------------------------------------
ひな型は以下の内容に設定されています。
コンピュータ名: SERVER
インスタンス名: INSTANCE
データベース名: %MQDJDB_TRM001、%USERDB
スキーマ名: %TJNLSCH、%SCM01
テーブル名: %TJNLTEMPTABLE、%TBL01
トリガー名: %TJNLTMPTRG、%TJNLTRG_1、%TJNLTRG_2
環境に合わせてひな型を複写し修正します。修正に必要な値はSQL Serverデータベースの管理者に確認してください。
また、バッチファイルとSQLスクリプトは同じフォルダに格納してください。
取得したトリガーの一覧情報を元に、SQLスクリプトにトリガーを無効化するSQL文を記述します。トリガーを無効化するSQL文は以下の通りです。
DISABLE TRIGGER スキーマ名.トリガー名 ON スキーマ名.テーブル名;
以下にSQLスクリプトに記述するSQL文の例を示します。斜体の部分が修正箇所です。
例.トリガーを無効化する
トリガー名:TJNLSCH.TJNLTMPTRG
データベース名: MQDJDB_TRM001、スキーマ名: TJNLSCH、テーブル名: TJNLTEMPTABLE
トリガー名:TJNLTRG_1、TJNLTRG_2
データベース名: 販促、スキーマ名: 関東地区、テーブル名: 家電区分1、家電区分2
------------------------------------------------------------------------ USE MQDJDB_TRM001; GO DISABLE TRIGGER TJNLSCH.TJNLTMPTRG ON TJNLSCH.TJNLTEMPTABLE; GO USE 販促; DISABLE TRIGGER 関東地区.TJNLTRG_1 ON 関東地区.家電区分1; DISABLE TRIGGER 関東地区.TJNLTRG_2 ON 関東地区.家電区分2; ------------------------------------------------------------------------
バッチファイルに設定されているINSTANCE_NAMEを修正します。
以下に修正の入力例を示します。斜体の部分が修正箇所です。
例.インスタンス名を変更する
コンピュータ名:SERVER1
インスタンス名:DBINSTANCE
------------------------------------------------------------------------
set INSTANCE_NAME=SERVER1\DBINSTANCE
------------------------------------------------------------------------
規定のインスタンスの場合は、コンピュータ名のみ(SERVER1)を指定してください。
バッチファイルを実行して、TJNLが登録したトリガーを無効化します。以下にバッチファイルを実行する際の入力例を示します。
例.バッチファイルの実行例
------------------------------------------------------------------------ TJNLDISABLETRG.bat ------------------------------------------------------------------------
ジャーナル取得機能の停止でトリガーの無効化に失敗した場合、アプリケーションが引き続きジャーナル取得対象の表を更新するとSQL Serverから例外が通知されることがあります。この場合には、"13.6.5.2 ジャーナル取得中にTRMを強制停止した場合"を参照し、対処を行ってください。