ワークロード管理のデータベース(CASHDB)の保守について

Document created by shunsuke_katakura Employee on Jul 30, 2015
Version 1Show Document
  • View in full screen mode

文書番号:            JTEC002226

製品名:                NSM

バージョン:           -

OS:                     -


Question

ワークロード管理のデータベース(CASHDB)の保守について

 

Answer

CASHDBとは、Unicenter TNGのUnixマネージャーで使用されるワークロード管理のデータベース名です。CASHDBはジョブセット・ジョブ・先行条件・トリガ等の定義情報の 他にジョブ実行履歴やジョブトラッキング情報が書き込まれジョブスケジューリングの都度、追加・更新・削除が発生します。

 

インデックスの保守

CASHDBのインデックスを保守する為のスクリプトとしてcashrcvrスクリプトが用意されています。
実行される内容としては、CASHDBのインデックスを削除し再作成します。CASHDBのインデックスに関すると思われるトラブルが発生した時にエラーメッセージ等の現象から必要性を判断します。

$CAIGLBL0000/sche/scripts/cashrcvr

rootユーザIDで実行する必要があります。パラメーターは不要です。cashrcvrは既存のインデックスを削除して、同インデックスを再作成します。削除すべきインデックスがないとアボートします。
cashrcvr内のSQL文の最初に次のコマンドを追加することにより、このアボートを防ぐことができます。

コマンド: “SET ABORT OFF;\n” \

[cashrcvrの編集例]

echo \
"$STARTCMD\n" \
"SET ABORT OFF;\n" \   →→→  追加
"BEGIN ARCHIVE;\n" \
"COMMIT ARCHIVE;\n" \
"ROLLBACK ARCHIVE SET ARCHIVE OFF;\n" \
"drop index genindex from ca7.genecord;\n" \

 

 

空き容量のチェックと拡張

●空き容量不足の場合

CASHDBの容量が不足しているとオートスキャン時等に以下のようなエラーが発生します。

.CASH_E_0055 JTRT I/O error has occurred
.CASH_I_0056 Rtncd = 12, Func = 64, Opt1 = 0
.CASH_I_0057 Ecd1 = 0, Ecd2 = -500020, Keylen = 53
.CASH_I_0058 Bufl = 808, Crtncd = 12, Cpllno = 895
.CASH_I_0052 SQL message = ERROR 210J: No space available in tablespace CAICA7DB

最初のメッセージCASH_E_0055は、CASHDBへのトランザクション処理が失敗したことを意味しています。それに続くメッセージはその詳 細および理由を示しています。ここで重要なのは最後のメッセージCASH_I_0052です。SQLからのメッセージであり、トランザクション失敗の理由 を示しています。この場合はテーブルスペースの容量不足です。

CASHDBは2つのテーブルスペース、CAICA7DBとSYSTEMから成ります。
CASH_I_0052のメッセージの上記例はテーブルスペースCAICA7DBが足りない事を意味します。 この部分はSYSTEMと出力される場合もあり、テーブルスペースSYSTEM容量不足を意味します。

CASH_E_0055に続く文字列(上記の場合はJTRT)はCASHDBのテーブル名を表しています。 つまり、そのテーブルに対するトランザクション処理中に何か異常が起きたことになります。
したがってこの部分の文字列はエラー発生時に実行されたSQLによって異なります。


 

●対応方法

容量不足のテーブルスペースを拡張して復旧させますが、この拡張のオペレーションの為にジャーナルがフルになって拡張に失敗する可能性があります。拡張に 失敗するとCASHDBを破壊してしまう恐れがあります。最初にジャーナルをクリアします。必ずCASHDBのバックアップを取得下さい。テーブルスペー スが本当にフルになっていることを確認し、最後に拡張を行います。拡張方法は、メッセージ中のテーブルスペースがCAICA7DBの場合とSYSTEMの 場合とで異なりますので注意して下さい。rootのユーザIDで操作して下さい。

  1. ジャーナルのクリア
    TNGをshutdownしてからCASHDBのみをスタートさせジャーナルクリアコマンドを発行します。

    # unishutdown all
    # unifstat   →→→  TNGが停止したことを確認する
    # caidb start cashdb
    # caidb cleararch cashdb
    Clear of journal for database cashdb successful.
    Journal blocks before 3050, after 3975.

    [その他のジャーナルクリアコマンド]
    ジャーナルクリアコマンドとしてdb_jutコマンドも用意されています。
    # db_jut cashdb

    JOURNAL FILE NAME : /TNG/sche/bin/CASHDB.JOUR1
    TOTAL BLOCKS: 4000
    FREE BLOCKS: 3975
    USED (%): 0

    このコマンドはアーカイブの条件を超えていた場合ジャーナルのバックアップとクリアを行います。


     
  2. CASHDBのバックアップ
    拡張に失敗したときに備えてCASHDBのバックアップを取ります。
    # LANG=C
    # export LANG
    # $CAIGLBL0000/db/scripts/unidbbackup -t -d cashdb -f <ディレクトリ名>
    # LANG=<元の値>
    # export LANG
    # cp -p $CAIGLBL0000/cadb/manager/calnm/cadb <コピー先> 

    上記<ディレクトリ>上にcaidbback.<MMMDD>.<PID>というファイルが作成されます。
    作成されたファイルがバックアップです。MMMDDは今日の日付を表します(例: Sep23)。
    どのDBでもバックアップのファイル名は同一日であれば同じになるので注意して下さい。
    このファイルを使ってリストアする場合はUnixのtar コマンドを使用します。また、上記のcpコマンドはCADBの論理名定義のファイルcadbをバックアップするもので、リストアする場合はこのcadbファイル も戻す必要があります。


     
  3. CASHDBの容量の確認
    以下のコマンドでCASHDBの容量を確認します。

    # $CAIGLBL0000/cadb/system/sql
    SQL: connect to cashdb;
    SQL: update all statistics for caica7db;
    SQL: update all statistics for system;
    SQL: release;
    SQL: quit;
    # caidbck cashdb 

    最後のcaidbckコマンドはCASHDBの詳細情報を表示します。問題となっているテーブルスペースの使用率(Used pages)のパーセント表示が100%近い値であることを確認します。

    以下にcaidbck cashdbコマンドの表示例を示します。この例ではテーブルスペースCAICA7DBの使用率が99%に達していますので、確かにCASHDBの容量が不足していることがわかります。
    この例ではテーブルスペースSYSTEMのほうはまだ余裕があります。

      # caidbck cashdb
    CA_Node: casun01
    Node: casun01 Sysname: SunOS Machine: sun4u Release: 5.5 Version: Generic
    DBname: CASHDB User mode: MULTI Archive mode OFF Production mode: OFF
    Data buffers 30 Journal buffers: 50 Maximum transactions: 16
    Data pages 200 Journal pages: 4000 Startup mode: WARM Journals: 1
    Transactions begun: 9 Transactions ended: 8 Transactions aborted: 0
    Deadlocks: 0 Deadlocked transaction pct: 0% Dbserverid: 12908
    Page acceses: 226 Page reads: 18 Cache read pct: 92% Page Writes 0
    DB i/o's: 20 I/o wait time: 00:00:00.020 Avg wait time: 1 (millisecs)
    Shared latch waits: 0 Shared latch wait time: 00:00:00.000 Avg wait time: 0
    Exclsv latch waits: 0 Exclsv latch wait time: 00:00:00.000 Avg wait time: 0
    Lock waits: 0 Lock wait time: 00:00:00.000 Avg wait time: 0

     
    Table space name: CAICA7DB Owner:
    Files: 1 Pages: 1000 Used pages 996 (99%) Pagetables: 4
    Table name: ACTECORD Owner: CA7
    Npages: 1 Nrows: 2 Avg row len: 152
         Index name: ACTINDEX ( ) Index Columns: 1
         Index pages: 1 Levels: 0 Leaf pages: 1
          :     :
          :     :
         Distinct keys: 1 Dist. first col. key values: 1
         Cluster count: 1 Avg pages accessed per key: 1
    Table name: TRGECORD Owner: CA7
    Npages: 1 Nrows: 2 Avg row len: 684
         Index name: TRGINDEX ( ) Index Columns: 1
         Index pages: 1 Levels: 0 Leaf pages: 1
         Distinct keys: 2 Dist. first col. key values: 2
         Cluster count: 1 Avg pages accessed per key: 1
    File name: CASHFIL1 (mixed) Osfilename: CASHFIL1
    Filepages: 1000 Used filepages: 996 (99%)

    Table space name: SYSTEM Owner:
    Files: 1 Pages: 200 Used pages 122 (61%) Pagetables: 1
    Table name: EXTEND Owner: SYSDBA
    Npages: 1 Nrows: 6 Avg row len: 143
    Table name: EXTENDPARAM Owner: SYSDBA
    Npages: 1 Nrows: 6 Avg row len: 26
    File name: ROOT (mixed) Osfilename: /usr/CA_UNI/sche/bin/CASHDB.ROOT
    Filepages: 200 Used filepages: 122 (61%)
    *** **********************************
    *** For the most up to date statistics,
    *** run updstats.sql using interactive SQL.
    *** **********************************

    User: ROOT Program: CADBVAX Session: 0000326C 00390001
    Pid: 12908 Cmd: dbserver
    Parent Pid: 12907 User: root Cmd: caidbck
    Trans id: f5090500 Priority 127 (0=highest)

 

●テーブルスペースの拡張方法

CASHDBが間違いなく容量不足であることを確認したらCASHDBの拡張を行います。
テーブルスペースCAICA7DBを拡張する場合とテーブルスペースSYSTEMを拡張する場合とで異なります。

  1. テーブルスペースCAICA7DBの拡張手順
    テーブルスペースCAICA7DBが容量不足である場合、以下の手順を実行して下さい。 # unishutdown sche
    cadbのユーザIDでログオン
    # su - cadb
    $ $CAIGLBL0000/sche/scripts/cash.addspace
    $ exit
    rootのユーザIDでログオン
    # $CAIGLBL0000/sche/scripts/cashrcvr

     
  2. テーブルスペースSYSTEMの拡張手順
    テーブルスペースSYSTEMが容量不足である場合、以下の手順を実行して下さい。 # unishutdown all
    一度db_sutに失敗した場合には以下を行う。
    # db_fshm -c cashdb
    # caidb start cashdb
    # db_sut cashdb -ALL

     
    このコマンドの結果として
    UPDATE PAGE STATISTICS FOR SYSTEM
    UPDATE PAGE STATISTICS FOR CAICA7DB
    が表示された後に
    CREATE FILE DBXxxxxxxxx
    等が表示されます。
    # $CAIGLBL0000/db/scripts/cr_extend_tab cashdb
    # db_sut cashdb -ALL
    このコマンドの結果として
    UPDATE PAGE STATISTICS FOR SYSTEM;
    UPDATE PAGE STATISTICS FOR CAICA7DB;
    のみが表示されれば完了です。

    # unistart all →→→ TNGを起動

 

 

ジャーナルの保守

●空き容量不足の場合
ジャーナルが一杯になると、次のようなメッセージを表示します。
.CAI_F_DB_045 The Database Journal File is Full

●対応方法
ジャーナルをクリアしたあと、再発を防止するためにarchiveモードをOFFにします。

  1. ジャーナルのクリア
    caidbコマンドcleararchパラメーター現在のジャーナルファイルがクリアされます。
    # unishutdown all
    # unifstat →→→  TNGが停止したことを確認する
    # caidb start cashdb
    # caidb cleararch cashdb

  2. archiveモードをOFFにする
    archiveモードがOFFになっていれば、ジャーナルが一杯になったとき、エラーを起こさずにジャーナルの最初から書き始めます。
  ●archiveモードの調べ方
cashdbが動作しているときに、"caidbck cashdb" を実行すると、2行目に"Archive mode OFF"、または"Archive mode ON"という表示があります。これを見てください。
# caidbck cashdb|more
Node: tswun04 Sysname: SunOS Machine: sun4u Release: 5.8 Version: Generic_108528-07
DBname: CASHDB User mode: MULTI Archive mode OFF Production mode: ON
....

●archiveモードをOFFにする方法は2通りあります。

  1. sqlを使用
    # caidb start cashdb
    # sql
    SQL: connect to cashdb;
    SQL: rollback archive set archive off;
    SQL: release;
    SQL: quit;
    #

  2. ワークロードを起動
    "unistart sche" と "unistart all" が呼び出す$CAIGLBL0000/sche/scripts/rc の中で、上記のsql文を実行するようになっています。
  ●archiveモードがONになってしまう原因
  1. 古いunidbbackupを実行するとarchiveモードがONに変わります。
  2. 古いcashrcvrを実行するとarchiveモードがONに変わります。

 

 

CASHDBのバックアップとリストア

CASHDBの保守作業をする際は必ず事前にバックアップ取得下さい。

●バックアップするファイル
$CAIGLBL0000/sche/bin/CASH*
$CAIGLBL0000/sche/bin/DBX*
$CAIGLBL0000/cadb/manager/calnm/cadb

これらを、tar(ワークロードをシャットダウンしたあと) やunidbbackup(ワークロードが稼動している時)を使ってバックアップ。

●unidbbackupのコマンドライン
TNG2.1EとTNG2.2Jの場合は以下のように英語環境で実行させます。TNG2.4.2JはLANGの設定の必要はありません。

# LANG=C
# export LANG
# unidbbackup -d cashdb -f<バックアップを格納するdirectory> -t

tar 形式でバックアップが取られます。
このほかに$CAIGLBL0000/cadb/manager/calnm/cadb もバックアップしてください。

●リストア時の典型的なエラー例と対処方法
[エラー例1]
error 432J: journal has version 785 root has version 787;unable to
start database

[対処方法]
cadb_fcons -r $CAIGLBL0000/sche/bin/CASHDB.ROOT \
-j $CAIGLBL0000/sche/bin/CASHDB.JOUR1

[エラー例2]
error 431J:File CASHFIL1 has version 751, root has version 774

[対処方法]
cadb_fcons -r $CAIGLBL0000/sche/bin/CASHDB.ROOT \
-f $CAIGLBL0000/sche/bin/CASHFIL1

 

 

共有リソースの解放

TNGプロセスのデータベースアクセスを行う場合OSのIPCリソースを使用しています。TNGプロセスが不正な終了した場合リソースを使用したままになります。

●unidbclrスクリプト
TNGプロセス(cau8trk.exe, cau9lcs.exeなど)はdbserver経由でCASHDBにアクセスします。
プロセス-dbserver間、dbserver-cashdb間の通信には、共有メモリを使用します。

"ps -ef"コマンドで見ると次のような親子関係が見られます。
root 358 1 0 Mar 08 ? 6:09 /tng/TNG21E/sche/bin/cau9lcs.exe 9004
cadb 365 358 0 Mar 08 ? 4:26 /system/dbserver 12013 3010 root
12013, 3010は、それぞれdbserverが確保したセマフォと共有セグメントのIDです。
# ipcs -a | grep 12013
s 12013 0x43410166 --ra-ra-ra- root other root other 2 17:12:54 16:53:30
# ipcs -a|grep 3010
m 3010 0x43410166 -Crw-rw-rw- root other root other 1 4100 358 358 16:53:30 19:50:46 16:53:30

この時にcau9lcs.exe がアボートすると、"ps -ef"で見ると次のようにdbserverだけが残ります。

cadb 365 1 0 Mar 08 ? 4:26 /system/dbserver 12013 3010 root

セマフォ12013, 共有セグメント3010が解放されません。
unifstatで、CA-DB Servers の行に(1 orphaned, run unidbclr)のように表示されます。
unidbclrを実行すると、このようなdbserverをkillし、共有リソースを解放します。

●cadb_fshm
cadb_fshm -l : 各cadbが確保した共有メモリの情報を見ることができます。

[例]
****************************************************
Share Memory ID : 17009
Shared memory length : 1671168
Created by user : cadb
Start time : 2000-3-8-16.52.49.310000
Database Name : CASHDB
Started by : cadb
Path : /tng/TNG21E/sche/bin/CASHDB.ROOT
****************************************************

この例では、17009が共有メモリのIDです。
# ipcs -a |grep 17009
m 17009 0x00028de3 _Crw- - - - - cadb sys cadb sys 3 16 71168 117
5571 19:51:28 19:51:28 16:52:49

CASHDBを停止させるとこの共有メモリが解放されます。しかしCASHDBがエラーで停止した場合等に残る事があります。CASHDBが起動しない、等の問題が発生することがあります。

CASHDBが停止している状態で"cadb_fshm -l"で参照してCASHDBの共有メモリが残っている場合は cadb_fshmコマンドで解放できます。

cadb_fshm -clean cashdb

このコマンドは、unidbclr の中でも実行されています。

●ipcs, ipcrmコマンド
unidbclrと"cadb_fshm -clean" でも解放されないリソースがある場合ipcrmコマンドを使って解放します。
cashdbが確保した共有リソースはownerがcadbです。

ipcs -a |grep cadb で探すことができます。

cciが確保した共有リソースは、KEYが0x0000000d です。

Attachments

    Outcomes