from electron 2 web

インターネットのリソースを無駄遣いして検索におけるUXを下げてごめんなさい

圧倒的文章力のNASAでゴミみたいなチラ裏のようなメモを量産してしまい全ての"Web開発者"にごめんなさい

DB2にかなり詳しくなちゃった話(db2のデバッグ等)

自社システムのアップデートを全て俺が担当していてその中でdb2使ってるんですが謎のバグに襲われてひたすらdb2の挙動をanalyzeしていた。

ちゅらい。

発生した事象

db2インストール後rebootするとsqlコマンドが実行できない。

再起動前はdb2 "select * from HOGE_TABLE"でちゃんと結果が返ってくるのに再起動後はSQL1024N データベース接続が存在しません。 SQLSTATE=08003とか言われる。

お願い

この事象の解決方法知っている人いたら助けてくれ頼む。寿司ビールおごるから。(それはmysql) 良い子のみんななら解決方法知ってるんでしょ?頼む・・・辛すぎて猫になりそう。

db2デバッグについて

db2はでかいだけあっていろんなコンポーネントから出来ているしその分いろんなデバッグ方法もある。db2db2 udbというrdbmsを含めた一連のシステム群になっている

デバッグコマンド関係

  • db2diag 基本のやつ。/home/sqllib/db2dump/db2diag.logを表示する。-lオプションとか使える。

  • db2evmon db2のイベントをモニターする事が出来る。db2evmonはまずイベントファイルを作成してそれを使ってmonitor出力する感じ。イベントモニターファイルにもいろいろある。 表イベントモニターとか。

[db2inst1@test root]$ db2 connect reset
DB20000I  SQL コマンドが正常に完了しました。
[db2inst1@test root]$ db2 connect to XXX

   データベース接続情報

 データベース・サーバー                                   = DB2/LINUXX8664 9.7.4
 SQL 許可 ID                                              = DB2INST1
 ローカル・データベース別名                               = XXX

[db2inst1@test root]$ db2 SELECT EVMONNAME, TARGET_TYPE, TARGET FROM SYSCAT.EVENTMONITORS

EVMONNAME                                                                                                                        TARGET_TYPE TARGET                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
-------------------------------------------------------------------------------------------------------------------------------- ----------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DB2DETAILDEADLOCK                                                                                                                F           db2detaildeadlock                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
SQL_EV                                                                                                                           F           /tmp/sql_ev                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
SQL_EV2                                                                                                                          F           /tmp/sql_ev2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

  3 レコードが選択されました。

[db2inst1@test root]$ db2
(c) Copyright IBM Corporation 1993,2007
DB2 クライアント 9.7.4 コマンド行プロセッサー

db2 => create event monitor learnmon for statements write to file '/tmp/learnmon'
DB20000I  SQL コマンドが正常に完了しました。
db2 => ^C[db2inst1@test root]$
[db2inst1@test root]$ mkdir /tmp/learnmon
[db2inst1@test root]$ exit
exit
[root@test ~]# chmod 777 /tmp/learnmon/
[root@test ~]# su db2inst1
[db2inst1@test root]$ db2 connect to XXX

   データベース接続情報

 データベース・サーバー                                   = DB2/LINUXX8664 9.7.4
 SQL 許可 ID                                              = DB2INST1
 ローカル・データベース別名                               = XXX

[db2inst1@test root]$ db2
(c) Copyright IBM Corporation 1993,2007
DB2 クライアント 9.7.4 コマンド行プロセッサー

db2 => set event monitor learnmon state 1
DB20000I  SQL コマンドが正常に完了しました。
db2 => ^C[db2inst1@test root]$
[db2inst1@test root]$ db2evmon -db XXX -evm learnmon > /tmp/leanmon_txt.txt
  • db2trc db2の動きをトレースできる。 トレースした後dumpしてdumpファイルをdb2trc flowコマンドで変換するという流れ。 dasの動きだからメモリの動向とかパフォーマンスチューニング的なやつ。あまり意味無い。

  • db2audit db2の監査を行う。 ポリシーの定義、ポリシーとユーザーの紐付け、start stop flush、アーカイブ https://www16.atwiki.jp/rinn/pages/71.html db2audit start db2audit stop

    • db2audit describe 現在のポリシーの設定を表示する。bothがベスト。failture、successは失敗、成功したもののみロギング
    • db2audit configure 現在のポリシーの設定を変更する。sqlでも定義できるけどね。 db2audit configure scope all status both 全部つける。
    • db2audit extract 記録したバイナリファイルからテキスト形式で抜き出す。db2trcみたいな。 db2audit extract file "/tmp/owari.txt" from files db2audit.instance.log.0.20180206161739

監査記録って感じ。

timestamp=2018-02-06-16.16.52.498535;
  category=CONTEXT;
  audit event=ATTACH;
  event correlator=1;
  userid=db2inst1;
  authid=DB2INST1;
  application id=*LOCAL.db2inst1.180206112210;
  application name=db2audit;

timestamp=2018-02-06-16.16.52.499429;
  category=VALIDATE;
  audit event=AUTHENTICATION;
  event correlator=1;
  event status=0;
  userid=db2inst1;
  authid=DB2INST1;
  execution id=db2inst1;
  application id=*LOCAL.db2inst1.180206112210;
  application name=db2audit;
  auth type=SERVER;
  plugin name=IBMOSauthserver;
  • db2ps db2trcとあんまかわらん。psのメモリ情報とか取得する感じ。パフォーマンスチューニング系か。

  • asnqcap なぞ。調べたけどよく分からんかった。 asnqcap capture_server=db2inst1

db2のconfig等の確認

db cfgはdbのテーブルレベルで保管される。ちなみにdb cfgで()が付いていないcfgは変更できない db2 get db cfg for TABLES

dbm cfgなんてものもある。これはdb managerが持っているもの。 db managerはメモリとかdiskとかを最適な値に割り振るやつ。 oracle dbでもあったなぁこんなやつ。 db2 get dbm cfg

レジスト変数なんてものもある。windowsレジストリみたいな。実態は/home/sqllib/profile.envにある。 db2set -all

あとは環境変数環境変数レジストリ変数の違いはレジストリ変数はdb2setコマンドを使って設定すればrebootが必要ないのに対し、環境変数の変更を有効にする為にはrebootが必要になる。

環境変数値はdb2instanceとか。

変数系を変更するにはdb2setの他にdb2caとかも使用できる。

db2set -allの実行結果はこんな感じになる。iとかgはinstanceとglobalの略。instance固有の値を持つものとdb2全体で有効になるやつ。

[i] DB2COMM=tcpip
[i] DB2AUTOSTART=YES
[g] DB2_COMPATIBILITY_VECTOR=MYS
[g] DB2SYSTEM=test
[g] DB2INSTDEF=db2inst1
[g] DB2ADMINSERVER=dasusr1

あとdb2 valuesとかも結構使えるな。

ログ関係

ログ一覧:http://www-01.ibm.com/support/docview.wss?uid=swg21632267

  • db2diag.log
  • トランザクションログ 以下のコマンドの場所にある。バイナリだし人間が見てもあんまデバッグには使えない。 S000000.LOGみたいな名前。 db2 get db cfg for LST | grep LOG
  • historyファイル 使えそうな名前だがあんまデバッグには使えない。リカバリー履歴ファイルはdbごとに作成されバックアップの取得やリストア、表スペースの変更やログファイルの取得などが記録される。 db2rhist.ascとか。
  • 管理通知ログ /home/db2inst1/sqllib/db2dump/db2inst1.nty 流石にdb2diag.logよりは情報無いか。
  • daslog database administration server dasなのであんま期待はできないが良さそうなログ。 /home/dasusr1/das/dump/db2dasdiag.logとかにある
  • インスタンス起動ログ /home/db2inst1/sqllib/log/にある。かなり良さそう。エラーなければ特に出ない。
  • db2eventlog db2diag logと何が違うのか大して分からん。

他にもコマンド叩いたときに初めて有効になるログとかいろいろある。

おまけ(db2のプロセスとか)

db2fmpについて

db2fmp は fenced ストアード・プロシージャーおよびユーザー定義関数を実行するプロセスです。

http://www-01.ibm.com/support/docview.wss?uid=swg21589183

直前のdb2stopによって出力されたやつなのでdb2fmpやdb2acdのエラーは問題なし。

db2fs

db2 first stepの略

db2sampl(https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_9.7.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001934.html) などと合わせて使うとよさそう。入門者的には嬉しいコマンド。

db2sync

db2シンクロナイザー。configu guiも持っていたりする。

おまけ2(入門時に調べた小ネタとかざっくばらんに書いておく)

全般

db2 udb...ユニバーサルデータベースのこと。 db2db2 udbというrdbmsを含めた一連のシステム群になっている

db2のベストハイエンドはDWE

db2のconfig

db2のconfigは構成パラメーターという。ググる場合はこの言葉を使うとよし。

構成パラメーターファイルはdb2systmファイル、SQLDBCONFファイルに入っているが どちらのファイルも直接編集することは出来ない。

レジストリ変数を確認するならdb2set -allを使う。

キーワードを持たないフィールドは、データベース・マネージャーが保守します。 そのようなフィールドを更新することはできません。

lstをインストールすると/home/TMP/LST/SQL00001.TDAというのが出来る。

TDAについて

https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_9.7.0/com.ibm.db2.luw.admin.perf.doc/doc/c0024781.html

表再編成のときのソート(表をクローンして再度構成するときにするソート)で使う。

db2XXXXというコマンド各位について

あれはdb2inst1/sqllib/bin/以下に入ってる。

db2fmcuについて

db2fmcuは落ちた(バグで落ちた、rebootした)後db2インスタンスの自動再起動を行うプロセス的なの

udf

user define function ユーザー定義関数

dasprofile

db2profileはkorn shell用の設定なのでbashには関係ない。

DB2_COMPATIVIRITY_VECTOR

db2set -allで表示できるレジスタ変数の一部 MYSはmysqlの値となる。他にもoraとか設定できる。

express-cだと効かない。一応効くけど微妙

http://www-01.ibm.com/support/docview.wss?uid=swg21503288

db2 connect to XXX using YYY

using yyyはパスワード。

db2(odbc)(programから使用するとき)

odbcsqlを実行するときには必ずcursorが使用される。

http://sql55.com/t-sql/t-sql-cursor-example.php http://www.atmarkit.co.jp/ait/articles/0801/21/news117.html

cursorはオラクルとかms serverとか他の鯖にも結構ある。 selectしたものをforするときのポインタみたいなやつ、謎。

http://www005.upp.so-net.ne.jp/khayashi/db2da/tracing.html

db2setupでrspするとき

nlpackディレクトリはdb2ディレクトリのと同じフォルダに置くこと。