Oracleデータベースと連携したジャーナル取得側業務の運用中の注意事項について説明します。
TJNLのジャーナル取得機能を停止する場合は、すべてのアプリケーションがTJNL動作環境定義で指定したOracleデータベースから切断していることを確認した後に行ってください。Oracleデータベースに接続したアプリケーションが実行中である場合にはジャーナル取得機能は通常停止できません。ただし、強制停止オプションを使用することで取得機能を停止することができます。
TJNLのジャーナル取得機能が起動済みの状態でTRMを強制停止した場合、アプリケーションがジャーナル取得対象の表を更新するとOracleから例外が通知されます。その際にOracleから通知される例外コードはTJNL環境定義の[TJNLDefinition]セクションのExCodeで指定した値です。また、コンソールにTJNL5682またはTJNL5683のメッセージが出力されます。この例外コードがOracleから通知された場合にはトランザクションをROLLBACKするようアプリケーションを設計してください。
以下の手順により、TJNLがOracleに登録したトリガーを無効化することで、SQLを異常終了させずにジャーナル取得対象の表を更新できるようになります。
TJNLが登録したトリガーの一覧情報を取得する
TJNLが登録したトリガーを無効化する
TJNLが登録したトリガーの一覧情報の取得は、TJNLが提供するSQLスクリプトとシェルスクリプト(Windowsではバッチファイル)のひな型を修正して行います。
ひな型を修正する
ひな型は以下のファイルで提供しています。
SQLスクリプト
--------------------------------------------------------
/opt/FJSVtjnl/sample/oracle/TJNLTRGLIST.sql
--------------------------------------------------------
シェルスクリプト -------------------------------------------------------- /opt/FJSVtjnl/sample/oracle/TJNLTRGLIST.sh --------------------------------------------------------
SQLスクリプト
--------------------------------------------------------
インストールフォルダ\TJNL\sample\oracle\TJNLTRGLIST.sql
--------------------------------------------------------
バッチファイル -------------------------------------------------------- インストールフォルダ\TJNL\sample\oracle\TJNLTRGLIST.bat --------------------------------------------------------
ひな型は以下の内容に設定されています。
ORACLE_HOME: /opt/oracle/product/11.2.0(Windowsではc:\oracle\product\11.2.0)
ORACLE_SID: TJNL1
TJNLスーパバイザのユーザ名: tjnlspv
TJNLスーパバイザのパスワード: tspv001
環境に合わせてひな型を複写し修正します。修正に必要な値はOracleデータベースの管理者に確認してください。
また、シェルスクリプト(Windowsではバッチファイル)とSQLスクリプトは同じディレクトリに格納してください。
シェルスクリプトに設定されているORACLE_HOMEを修正します。以下に修正の入力例を示します。
例.ORACLE_HOMEが/app/db/oracle/product/11.2.0の場合
---------------------------------------------------------------
ORACLE_HOME=/opt/oracle/product/11.2.0
↓
ORACLE_HOME=/app/db/oracle/product/11.2.0
---------------------------------------------------------------
TJNL環境定義で指定したOracleデータベースのシステム識別子を指定します。
シェルスクリプトに設定されているORACLE_SIDを修正します。以下に修正の入力例を示します。
例.ORACLE_SIDがORADB1の場合
---------------------------------------------------------------
ORACLE_SID=TJNL1
↓
ORACLE_SID=ORADB1
---------------------------------------------------------------
TJNLスーパバイザのアカウントを指定します。
シェルスクリプトに設定されているTJNLスーパバイザのユーザ名とパスワードを修正します。以下に修正の入力例を示します。
例.TJNLスーパバイザのユーザ名がspvisor、パスワードがspvpswdの場合
---------------------------------------------------------------
TJNL_ID=tjnlspv
TJNL_PASS=tspv001
↓
TJNL_ID=spvisor
TJNL_PASS=spvpswd
---------------------------------------------------------------
ひな型を複写してSQLスクリプトのファイル名を変更した場合は、シェルスクリプトに設定されているSQLスクリプトのファイル名を修正します。以下に修正の入力例を示します。
例.SQLスクリプトのファイル名がTJNLTRGLIST2.sqlの場合
-----------------------------------------------------------------------------
$ORACLE_HOME/bin/sqlplus $TJNL_ID/$TJNL_PASS @TJNLTRGLIST.sql
↓
$ORACLE_HOME/bin/sqlplus $TJNL_ID/$TJNL_PASS @TJNLTRGLIST2.sql
-----------------------------------------------------------------------------
バッチファイルに設定されているORACLE_HOMEを修正します。以下に修正の入力例を示します。
例.ORACLE_HOMEがd:\oracle\product\11.2.0の場合
---------------------------------------------------------------
set ORACLE_HOME=c:\oracle\product\11.2.0
↓
set ORACLE_HOME=d:\oracle\product\11.2.0
---------------------------------------------------------------
TJNL環境定義で指定したOracleデータベースのシステム識別子を指定します。
バッチファイルに設定されているORACLE_SIDを修正します。以下に修正の入力例を示します。
例.ORACLE_SIDがORADB1の場合
---------------------------------------------------------------
set ORACLE_SID=TJNL1
↓
set ORACLE_SID=ORADB1
---------------------------------------------------------------
TJNLスーパバイザのアカウントを指定します。
バッチファイルに設定されているTJNLスーパバイザのユーザ名とパスワードを修正します。以下に修正の入力例を示します。
例.TJNLスーパバイザのユーザ名がspvisor、パスワードがspvpswdの場合
---------------------------------------------------------------
set TJNL_ID=tjnlspv
set TJNL_PASS=tspv001
↓
set TJNL_ID=spvisor
set TJNL_PASS=spvpswd
---------------------------------------------------------------
ひな型を複写してSQLスクリプトのファイル名を変更した場合は、バッチファイルに設定されているSQLスクリプトのファイル名を修正します。以下に修正の入力例を示します。
例.SQLスクリプトのファイル名がTJNLTRGLIST2.sqlの場合
------------------------------------------------------------------------------------------
%ORACLE_HOME%\bin\sqlplus %TJNL_ID%/%TJNL_PASS% @TJNLTRGLIST.sql
↓
%ORACLE_HOME%\bin\sqlplus %TJNL_ID%/%TJNL_PASS% @TJNLTRGLIST2.sql
------------------------------------------------------------------------------------------
トリガーの一覧情報を取得する
シェルスクリプト(Windowsではバッチファイル)を実行して、TJNLが登録したトリガーの一覧情報を取得します。このシェルスクリプト(Windowsではバッチファイル)は、-nオプション(未反映の定義を反映してから起動する)を指定してTJNLを起動した後であればいつでも実行することができます。修正したシェルスクリプト(Windowsではバッチファイル)とSQLスクリプトを同じディレクトリに格納しておきます。
例.シェルスクリプトの実行例
---------------------------------------------------------------
./TJNLTRGLIST.sh
---------------------------------------------------------------
例.実行結果
-----------------------------------------------------------------------------
TRIGGER_NAME
----------------------
TJNLTMPTRG
TJNLTRG_1
TJNLTRG_2
3行が選択されました。
-----------------------------------------------------------------------------
なお、TJNLがOracleに登録するトリガーの名称は以下の通りです。
アプリケーションがデータベースを更新した際に動作するトリガー
TJNLTRG_n (nはシーケンス番号)
tjnlckptコマンドを実行した際に動作するトリガー
TJNLTMPTRG
TJNLが登録したトリガーの無効化は、TJNLが提供するSQLスクリプトとシェルスクリプト(Windowsではバッチファイル)のひな型を修正して行います。
ひな型を修正する
ひな型は以下のファイルで提供しています。
SQLスクリプト
------------------------------------------------------------ /opt/FJSVtjnl/sample/oracle/TJNLDISABLETRG.sql ------------------------------------------------------------
シェルスクリプト
------------------------------------------------------------ /opt/FJSVtjnl/sample/oracle/TJNLDISABLETRG.sh ------------------------------------------------------------
SQLスクリプト
------------------------------------------------------------ インストールフォルダ\TJNL\sample\oracle\TJNLDISABLETRG.sql ------------------------------------------------------------
バッチファイル
------------------------------------------------------------ インストールフォルダ\TJNL\sample\oracle\TJNLDISABLETRG.bat ------------------------------------------------------------
ひな型は以下の内容に設定されています。
ORACLE_HOME: /opt/oracle/product/11.2.0(Windowsではc:\oracle\product\11.2.0)
ORACLE_SID: TJNL1
TJNLスーパバイザのユーザ名: tjnlspv
TJNLスーパバイザのパスワード: tspv001
環境に合わせてひな型を複写し修正します。修正に必要な値はOracleデータベースの管理者に確認してください。
また、シェルスクリプト(Windowsではバッチファイル)とSQLスクリプトは同じディレクトリに格納してください。
SQLスクリプトを修正する
1)トリガーを無効化するSQL文を作成する
取得したトリガーの一覧情報を元に、SQLスクリプトにトリガーを無効化するSQL文を記述します。トリガーを無効化するSQL文は以下の通りです。
ALTER TRIGGER トリガ名 DISABLE;
以下にSQLスクリプトに記述するSQL文の例を示します。
例.無効化するトリガーがTJNLTMPTRG、TJNLTRG_1、TJNLTRG_2の場合
---------------------------------------------------------------
ALTER TRIGGER TJNLTMPTRG DISABLE;
ALTER TRIGGER TJNLTRG_1 DISABLE;
ALTER TRIGGER TJNLTRG_2 DISABLE;
---------------------------------------------------------------
シェルスクリプトを修正する
1)ORACLE_HOMEを修正する
シェルスクリプトに設定されているORACLE_HOMEを修正します。以下に修正の入力例を示します。
例.ORACLE_HOMEが/app/db/oracle/product/11.2.0の場合
---------------------------------------------------------------
ORACLE_HOME=/opt/oracle/product/11.2.0
↓
ORACLE_HOME=/app/db/oracle/product/11.2.0
---------------------------------------------------------------
2)ORACLE_SIDを修正する
TJNL環境定義で指定したOracleデータベースのシステム識別子を指定します。
シェルスクリプトに設定されているORACLE_SIDを修正します。以下に修正の入力例を示します。
例.ORACLE_SIDがORADB1の場合
---------------------------------------------------------------
ORACLE_SID=TJNL1
↓
ORACLE_SID=ORADB1
---------------------------------------------------------------
3)TJNLスーパバイザのユーザ名とパスワードを修正する
TJNLスーパバイザのアカウントを指定します。
シェルスクリプトに設定されているTJNLスーパバイザのユーザ名とパスワードを修正します。以下に修正の入力例を示します。
例.TJNLスーパバイザのユーザ名がspvisor、パスワードがspvpswdの場合
---------------------------------------------------------------
TJNL_ID=tjnlspv
TJNL_PASS=tspv001
↓
TJNL_ID=spvisor
TJNL_PASS=spvpswd
---------------------------------------------------------------
4)SQLスクリプトのファイル名を修正する
ひな型を複写してSQLスクリプトのファイル名を変更した場合は、シェルスクリプトに設定されているSQLスクリプトのファイル名を修正します。以下に修正の入力例を示します。
例.SQLスクリプトのファイル名がTJNLDISABLETRG2.sqlの場合
-----------------------------------------------------------------------------
$ORACLE_HOME/bin/sqlplus $TJNL_ID/$TJNL_PASS @TJNLDISABLETRG.sql
↓
$ORACLE_HOME/bin/sqlplus $TJNL_ID/$TJNL_PASS @TJNLDISABLETRG2.sql
-----------------------------------------------------------------------------
バッチファイルを修正する
1)ORACLE_HOMEを修正する
バッチファイルに設定されているORACLE_HOMEを修正します。以下に修正の入力例を示します。
例.ORACLE_HOMEがd:\oracle\product\11.2.0の場合
---------------------------------------------------------------
set ORACLE_HOME=c:\oracle\product\11.2.0
↓
set ORACLE_HOME=d:\oracle\product\11.2.0
---------------------------------------------------------------
2)ORACLE_SIDを修正する
TJNL環境定義で指定したOracleデータベースのシステム識別子を指定します。
バッチファイルに設定されているORACLE_SIDを修正します。以下に修正の入力例を示します。
例.ORACLE_SIDがORADB1の場合
---------------------------------------------------------------
set ORACLE_SID=TJNL1
↓
set ORACLE_SID=ORADB1
---------------------------------------------------------------
3)TJNLスーパバイザのユーザ名とパスワードを修正する
TJNLスーパバイザのアカウントを指定します。
バッチファイルに設定されているTJNLスーパバイザのユーザ名とパスワードを修正します。以下に修正の入力例を示します。
例.TJNLスーパバイザのユーザ名がspvisor、パスワードがspvpswdの場合
---------------------------------------------------------------
set TJNL_ID=tjnlspv
set TJNL_PASS=tspv001
↓
set TJNL_ID=spvisor
set TJNL_PASS=spvpswd
---------------------------------------------------------------
4)SQLスクリプトのファイル名を修正する
ひな型を複写してSQLスクリプトのファイル名を変更した場合は、バッチファイルに設定されているSQLスクリプトのファイル名を修正します。以下に修正の入力例を示します。
例.SQLスクリプトのファイル名がTJNLDISABLETRG2.sqlの場合
------------------------------------------------------------------------------------------
%ORACLE_HOME%\bin\sqlplus %TJNL_ID%/%TJNL_PASS% @TJNLDISABLETRG.sql
↓
%ORACLE_HOME%\bin\sqlplus %TJNL_ID%/%TJNL_PASS% @TJNLDISABLETRG2.sql
------------------------------------------------------------------------------------------
トリガーを無効化する
シェルスクリプト(Windowsではバッチファイル)を実行して、TJNLが登録したトリガーを無効化します。以下にシェルスクリプト(Windowsではバッチファイル)を実行する際の入力例を示します。
例.シェルスクリプトの実行例
---------------------------------------------------------------
./TJNLDISABLETRG.sh
---------------------------------------------------------------
ジャーナル取得機能の停止でトリガーの無効化に失敗した場合、アプリケーションが引き続きジャーナル取得対象の表を更新するとOracleから例外が通知されることがあります。この場合には、"12.6.5.2 ジャーナル取得中にTRMを強制停止した場合"を参照し、対処を行ってください。
ジャーナル取得対象の表の定義を更新する場合、TJNLを停止した後に行ってください。また、表の定義を更新した後は、ジャーナル取得対象の列とは直接関係のない変更を行った場合も含めて、定義反映オプションを指定してTJNLを再起動してください。
ジャーナル取得対象の表定義の更新を行うと、TJNLがOracleに登録したトリガーが、Oracleによって削除されます。そのため、定義反映オプションを指定したTJNLの再起動を行わなかった場合には、更新した表についてはジャーナルの取得が行われません。