ページの先頭行へ戻る
HA Database Ready 業務開発ガイド(Native SQL編)
FUJITSU Integrated System

4.1.3 データベースの更新

データベースの更新方法には、以下の方法があります。

データベースの更新方法の選択は、以下のことを考慮し、業務の運用内容によって適切な更新方法を選択してください。

以下に、それぞれの更新方法の選択基準を説明します。

rdbsaloaderコマンドによるデータの追加

データベースにデータを追加する場合に使用します。

ただし、データベースにインデックスが定義されている場合は、データの追加によりインデックスを再創成するため、対象となるDSIのレコード件数が1%未満もしくは数千件の場合は、rdbuptコマンドを使用してください。

rdbsuloaderコマンドによるデータベースの更新

更新データが他の業務で生成される場合に使用します。また、更新するデータ件数が多い場合に使用します。

rdbuptコマンドによるデータベースの更新

更新データが他の業務で生成される場合に使用します。また、更新するデータ件数が少ない場合に使用します。

データ件数の目安は、対象となるDSIのレコード件数の1%未満もしくは数千件の更新データ件数を推奨します。

rdbuptコマンドは、SQL文(INSERT文、UPDATE文、DELETE文)を発行して処理しています。1回の実行で更新するレコードのサイズの総計が大きすぎると、エラーが発生します。総計が小さくなるよう、複数に分けて実行してください。

アプリケーションを作成して更新する方法

データベース中にあるデータに対して、ある値で集合更新を行う場合または少量データを更新する場合に利用します。

なお、アプリケーションで入力ファイルのデータとデータベースのデータの突き合わせを実施して、複数のSQL文でデータベースの更新を行うケースでは、データベースのデータをいったん外部ファイルに出力して、更新後のデータを作成し、rdbsuloaderコマンドでデータを更新する方法を推奨します。

本項では、更新データを入力ファイルに作成し、RDBコマンドを使用して更新する方法について説明します。

参照

アプリケーションを作成して更新する方法については、“Symfoware Server アプリケーション開発ガイド(共通編)”を参照してください。

rdbsaloaderコマンド、rdbsuloaderコマンド、rdbuptコマンドおよびアプリケーションにより、データベースの更新を行ったあとには、“4.1.2 最適化情報の更新”を参照し、必要であれば最適化情報の設定を行ってください。

4.1.3.1 rdbsaloaderコマンドによるデータの追加

創成済みの表に対しデータの追加を行う場合、目的に応じたアプリケーションを作成しなくても、rdbsaloaderコマンドにより、外部ファイルからDSIに対してデータを追加することができます。

外部ファイルの形式の詳細は、“4.1.1.1 外部ファイルの形式”を参照してください。

注意

  • rdbsaloaderコマンドは、DSO定義でORDER(1)が指定されたSEQUENTIAL構造の場合でも、新規ページのみを使用します。そのため、削除を繰り返し行っている場合や大量件数のデータを削除した場合には、rdbsaloaderコマンドの実行前に容量監視を行い、必要に応じてデータベースの再配置を行ってください。

  • rdbsaloaderコマンドを実行する前に、rdbunlコマンドによりDSIの退避データを取得してください。コマンドが異常終了した場合の退避データとなります。詳細は“rdbsaloaderコマンドの異常時の対処”を参照してください。

  • rdbsaloaderコマンド実行中にログファイルが満杯になると、rdbsaloaderコマンドはログが満杯の状態が解除されるまで処理待ちとなるため注意が必要です。処理待ちとなった場合、Appliance Managerでリカバリーを実施することにより処理待ちを解除できます。

ポイント

rdbsaloaderコマンドは、分割格納が定義された表のDSIを処理するとき、入力ファイル内に分割値範囲外のデータが含まれている場合、該当データを処理対象とせずに処理を続行し、正常終了します。分割範囲外のデータをエラーとし、入力ファイルの作成ミスや指定ミスによるデータ抜けを検出するためには、Eオプションを使用します。

参照

各コマンドの指定方法の詳細については、“Symfoware Server コマンドリファレンス”を参照してください。

データの追加

外部ファイルのデータを追加します。表の一意性制約に違反するデータを追加しようとした場合は異常終了となります。

$ rdbsaloader -ma -i 在庫管理DB.在庫表DSI
              -s /disk3/rdb/data/work /disk3/rdb/data/saloader.data

rdbsaloaderコマンドの異常時の対処

rdbsaloaderコマンドの実行が異常終了した場合は、指定された表のDSIと、関連するインデックスのDSIを、アクセス禁止にします。この場合は、出力されるメッセージにより異常原因を取り除いた後、rdbinfコマンドでアクセス禁止の原因を調べ、以下の対処を行ってください。

運用情報の設定原因

対処

ALD : 追記処理の異常

rdbsaloaderコマンドを再実行

TIH : ロールバックの異常

  1. 取得した退避データを使用して、rdbsloaderコマンドによりDSIをリカバリする

  2. rdbsaloaderコマンドを再実行する

4.1.3.2 rdbsuloaderコマンドによるデータベースの更新

創成済みの表に対しデータの追加、置換、更新および削除を行う場合、目的に応じたアプリケーションを作成しなくても、rdbsuloaderコマンドにより、外部ファイルからDSIに対するデータ追加、置換、更新および削除をすることができます。rdbsuloaderコマンドには、以下の機能があります。

外部ファイルの形式の詳細は、“4.1.1.1 外部ファイルの形式”を参照してください。

注意

  • rdbsuloaderコマンドを実行する前に、rdbunlコマンドによりDSIの退避データを取得してください。コマンドが異常終了した場合の退避データとなります。詳細は“rdbsuloaderコマンドの異常時の対処”を参照してください。

  • rdbsuloaderコマンド実行中にログファイルが満杯になると、rdbsuloaderコマンドはログが満杯の状態が解除されるまで処理待ちとなるため注意が必要です。処理待ちとなった場合、Appliance Managerでリカバリーを実施することにより処理待ちを解除できます。

ポイント

rdbsuloaderコマンドは、分割格納が定義された表のDSIを処理するとき、入力ファイル内に分割値範囲外のデータが含まれている場合、該当データを処理対象とせずに処理を続行し、正常終了します。分割範囲外のデータをエラーとし、入力ファイルの作成ミスや指定ミスによるデータ抜けを検出するためには、Eオプションを使用します。

参照

各コマンドの指定方法の詳細については、“Symfoware Server コマンドリファレンス”を参照してください。

行の追加および置換

外部ファイルのデータを表に追加します。その際、外部ファイルのデータとmarオプションで指定したキーの値が一致する行がある場合、その行を外部ファイルのデータと置き換えます。

$ rdbsuloader  -mar,製品番号  -i 在庫管理DB.在庫表DSI
                (1)
               -s /disk3/rdb/data/work
               /disk3/rdb/data/suloader1.data

(1) 追加および置換指定

備考.外部ファイルのデータに対して、キーの値が一致する行が複数ある場合には、一致するすべての行が置換されます。外部ファイル中にキーの値が同じデータが複数ある場合には、外部ファイル中でのデータの出現順序にしたがって追加または置換されます。

列の更新

外部ファイルのデータとmuオプションで指定したキーの値が一致する行について、cオプションで指定された列を外部ファイルで指定された値に更新します。

$ rdbsuloader  -mu,製品番号  -c 製品番号,棚番号
                (1) 
               -i 在庫管理DB.在庫表DSI
               -s /disk3/rdb/data/work
               /disk3/rdb/data/suloader2.data

(1) 更新指定

備考.外部ファイルのデータに対して、キーの値が一致する行が複数ある場合には、一致するすべての行が更新されます。外部ファイル中にキーの値が同じデータが複数ある場合には、外部ファイル中でのデータの出現順序にしたがって更新されます。

行の削除

外部ファイルのデータとmdオプションで指定したキーの値が一致する行を削除します。

$ rdbsuloader  -md,製品番号  -i 在庫管理DB.在庫表DSI
                (1)
               -c 製品番号
               -s /disk3/rdb/data/work
               /disk3/rdb/data/suloader3.data

(1) 削除指定

備考.外部ファイルのデータに対して、キーの値が一致する行が複数ある場合には、一致するすべての行が削除されます。

操作を外部ファイルの各レコードで指定

外部ファイルの各レコードの先頭に、操作種別を設定することにより、1つのコマンド操作で、追加、置換、更新および削除の操作を混在して実行することができます。

外部ファイルの形式は、“4.1.1.1 外部ファイルの形式”に記載してあるレコード形式の先頭に、操作を識別するコードを付加した形式です。

バイナリ形式およびテキスト形式のデータ形式を以下に示します。

バイナリ形式

操作種別は、該当レコードに対し、置換、更新または削除のうち、どの操作を行うかを表します。操作種別は2バイトの符号付2進数の領域です。

操作種別に設定する値と意味を以下に示します。

設定する値

意味

備考

1
(16進数で0001)

追加するレコードを表します

―――

2
(16進数で0002)

更新するレコードを表します

muオプションに対応します

3
(16進数で0003)

削除するレコードを表します

mdオプションに対応します

4
(16進数で0004)

追加または置換するレコードを表します

marオプションに対応します

備考. 操作種別に上記以外の値を設定するとエラーになります。

テキスト形式

操作種別は、該当レコードに対し、置換、更新または削除のうち、どの操作を行うかを表します。操作種別は1文字の文字で設定します。

操作種別に設定する文字と意味を以下に示します。

設定する文字

意味

備考

a

追加するレコードを表します

―――

u

更新するレコードを表します

muオプションに対応します

d

削除するレコードを表します

mdオプションに対応します

r

追加または置換するレコードを表します

marオプションに対応します

備考.操作種別に上記以外の値を設定するとエラーになります。

操作を外部ファイルの各レコードで指定する例を以下に示します。

$ rdbsuloader  -mc,製品番号  -i 在庫管理DB.在庫表DSI
                (1)
               -s /disk3/rdb/data/work
               /disk3/rdb/data/suloader4.data

(1) 入力ファイルの各レコード指定

備考.外部ファイルのデータに対して、キーの値が一致する行が複数ある場合には、一致するすべての行が操作の対象になります。外部ファイル中にキーの値が同じデータが複数ある場合には、外部ファイル中でのデータの出現順序に従って操作されます。

rdbsuloaderコマンドの異常時の対処

rdbsuloaderコマンドの実行が異常終了した場合は、指定された表のDSIと、関連するインデックスのDSIを、アクセス禁止にします。

この場合は、コマンド投入前にrdbunlコマンドによって取得した退避データを使用し、rdbsloaderコマンドによりDSIをリカバリしてください。

その後、出力されたメッセージにより異常原因を取り除き、rdbsuloaderコマンドを再実行してください。

4.1.3.3 rdbuptコマンドによるデータベースの更新

創成済みの表に対しデータの追加、更新および削除を行う場合、目的に応じたプログラムを作成しなくても、rdbuptコマンドにより、外部ファイルから表に対するデータの追加、更新および削除をすることができます。rdbuptコマンドには、以下の機能があります。

外部ファイルの形式の詳細は、“4.1.1.1 外部ファイルの形式”を参照してください。

参照

rdbuptコマンドの指定方法の詳細については、“Symfoware Server コマンドリファレンス”を参照してください。

注意

rdbuptコマンドで指定可能な入力ファイルサイズは2ギガバイト未満となります。

行の追加

外部ファイルのデータを表に追加します。

$ rdbupt  -ma  -b 在庫管理DB.在庫スキーマ.在庫表  /disk3/rdb/data/upt1.data
          (1)                                                  (2)

(1) 追加指定

(2) 入力ファイル名

行の追加および置換

外部ファイルのデータを表に追加します。その際、一意性制約の列のデータと一致するデータがある場合、外部ファイルのデータと置き換えます。

$ rdbupt -mar,製品番号  -b 在庫管理DB.在庫スキーマ.在庫表
         (1)
         /disk3/rdb/data/upt2.data

(1) 追加および置換指定

列の更新

外部ファイルで指定された一意性制約の列のデータに該当する行について、cオプションで指定された列を外部ファイルで指定された値に更新します。

$ rdbupt  -mu,製品番号  -c 製品番号,棚番号
          (1)
          -b 在庫管理DB.在庫スキーマ.在庫表1  
          /disk3/rdb/data/upt3.data

(1) 更新指定

行の削除

外部ファイルで指定された一意性制約の列のデータに該当する行を削除します。

$ rdbupt -md,製品番号  -c 製品番号  -b 在庫管理DB.在庫スキーマ.在庫表
          (1)
         /disk3/rdb/data/upt4.data

(1) 削除指定