http://publib.boulder.ibm.com/infocenter/db2luw/v8//index.jsp?topic=/com.ibm.db2.udb.doc/core/r0008712.htm
2009年10月23日
[DB2]使用メモリの表示
パフォーマンス問題が発生したときに使えるかもしれない。
http://publib.boulder.ibm.com/infocenter/db2luw/v8//index.jsp?topic=/com.ibm.db2.udb.doc/core/r0008712.htm
http://publib.boulder.ibm.com/infocenter/db2luw/v8//index.jsp?topic=/com.ibm.db2.udb.doc/core/r0008712.htm
2009年10月21日
[DB2]インストールログ
サイレントインストールした場合のログ保存先
http://www.ibm.com/developerworks/jp/data/library/dataserver/techdoc/installtranspa.html#6_2
インストールのロギング
ログ・ファイルのパスと名前は、DB2セットアップ・プログラムのオプショナル・パラメーターです。ログ・ファイルのパスと名前を指定しない場合は、デフォルトのディレクトリーにデフォルトのログ・ファイルが作成されます。
* Windowsでは、デフォルトのファイルは、DB2インストールが実行されたユーザーIDの下のMy Documents\DB2LOGディレクトリー内のdb2.logです。
* LinuxおよびUNIXプラットフォームでは、デフォルトのファイルは/tmp/db2setup.logです。
これらのログ・ファイル以外に、他の補助ログ・ファイルおよびダンプまたはトレース・ファイルが、デフォルトのディレクトリーに作成されます。
* Windowsでは、指定したパスまたは上記のデフォルトのパスに、db2wi.logという名前の別のログ・ファイルがWindowsインストーラーから作成されます。インストールの間に、現在のインストールのログ・エントリーがdb2wi.logファイルに記録されます。db2.logファイルには、 Windowsの現在および過去のインストールに関する情報が保管されます。この情報は、DB2インストールの終了時に更新されます。
* Linux およびUNIXシステムでは、ほかにもDB2生成ファイルが/tmpディレクトリーに作成される場合があります。db2setup.hisログ・ファイルには、現在および過去のインストールの履歴情報が維持されます。db2setup.errログ・ファイルには、すべてのエラー・エントリーが保管されます。
サイレントのコマンドも環境によって異なる。
(これぐらい合わせられないものか・・(´-ω-`))
win setup.exe /u resp.file
unix db2setup -r resp.file
http://www.ibm.com/developerworks/jp/data/library/dataserver/techdoc/installtranspa.html#6_2
インストールのロギング
ログ・ファイルのパスと名前は、DB2セットアップ・プログラムのオプショナル・パラメーターです。ログ・ファイルのパスと名前を指定しない場合は、デフォルトのディレクトリーにデフォルトのログ・ファイルが作成されます。
* Windowsでは、デフォルトのファイルは、DB2インストールが実行されたユーザーIDの下のMy Documents\DB2LOGディレクトリー内のdb2.logです。
* LinuxおよびUNIXプラットフォームでは、デフォルトのファイルは/tmp/db2setup.logです。
これらのログ・ファイル以外に、他の補助ログ・ファイルおよびダンプまたはトレース・ファイルが、デフォルトのディレクトリーに作成されます。
* Windowsでは、指定したパスまたは上記のデフォルトのパスに、db2wi.logという名前の別のログ・ファイルがWindowsインストーラーから作成されます。インストールの間に、現在のインストールのログ・エントリーがdb2wi.logファイルに記録されます。db2.logファイルには、 Windowsの現在および過去のインストールに関する情報が保管されます。この情報は、DB2インストールの終了時に更新されます。
* Linux およびUNIXシステムでは、ほかにもDB2生成ファイルが/tmpディレクトリーに作成される場合があります。db2setup.hisログ・ファイルには、現在および過去のインストールの履歴情報が維持されます。db2setup.errログ・ファイルには、すべてのエラー・エントリーが保管されます。
サイレントのコマンドも環境によって異なる。
(これぐらい合わせられないものか・・(´-ω-`))
win setup.exe /u resp.file
unix db2setup -r resp.file
2009年06月24日
[DB2]runstatsがメモリ不足
db2にて大量のレコード(1000万件以上)あるテーブルを
普通にrunstatsすると
SQL2310N The utility could not generate statistics. Error "-930" was returned
diagにはOSERR : ENOMEM (12) "Not enough space"とかあるし。
物理メモリは笑える数字ぐらい積んでるのにね。何十GBだぜ。
空きも一杯ある。
いろいろ調べてはみたんだが、
・ulimitのOS制限じゃね?
→ 全て-1の無制限
・4ktempの容量じゃね?
→何百GB空いてる
sampledを付けて実行すれば問題無く完了するので、それで急場は
凌いだのだけれども。
原因がわからんとモヤットボールが貯まる。
DB2の設定の何かの制限にはまってそう。
考えられるものはUTIL_HEAP。しかし、これだとメッセージが違うはず。
海外のBBSやblogからstat_heap_szだよって記事はあったけど
これだとSQL2312N じゃないの?(´-ω-`)
sampledで実行したあとはもう出なくなるし検証できん。
更新する内容が変わったのかな。
再現しなくなったし、もうヽ(`Д´)ノ モヤットモヤットモヤットモヤット
http://db2forum.jp/viewtopic.php?p=6414&sid=f6f928f7ad23ae1308001206909264ba
http://www-01.ibm.com/support/docview.wss?uid=std35119d73eeac791d6492573440004742c
http://www.channeldb2.com/profiles/blogs/runstats-sql2310n-the-utility
http://database.ittoolbox.com/groups/technical-functional/db2-l/runstats-problems-2455931?cv=expanded
http://www.lazydba.com/db2/2__16785.html
普通にrunstatsすると
SQL2310N The utility could not generate statistics. Error "-930" was returned
diagにはOSERR : ENOMEM (12) "Not enough space"とかあるし。
物理メモリは笑える数字ぐらい積んでるのにね。何十GBだぜ。
空きも一杯ある。
いろいろ調べてはみたんだが、
・ulimitのOS制限じゃね?
→ 全て-1の無制限
・4ktempの容量じゃね?
→何百GB空いてる
sampledを付けて実行すれば問題無く完了するので、それで急場は
凌いだのだけれども。
原因がわからんとモヤットボールが貯まる。
DB2の設定の何かの制限にはまってそう。
考えられるものはUTIL_HEAP。しかし、これだとメッセージが違うはず。
海外のBBSやblogからstat_heap_szだよって記事はあったけど
これだとSQL2312N じゃないの?(´-ω-`)
sampledで実行したあとはもう出なくなるし検証できん。
更新する内容が変わったのかな。
再現しなくなったし、もうヽ(`Д´)ノ モヤットモヤットモヤットモヤット
http://db2forum.jp/viewtopic.php?p=6414&sid=f6f928f7ad23ae1308001206909264ba
http://www-01.ibm.com/support/docview.wss?uid=std35119d73eeac791d6492573440004742c
http://www.channeldb2.com/profiles/blogs/runstats-sql2310n-the-utility
http://database.ittoolbox.com/groups/technical-functional/db2-l/runstats-problems-2455931?cv=expanded
http://www.lazydba.com/db2/2__16785.html
2009年03月19日
[DB2]db2look
lookは意図してみること、see は視界に入るようなものを指す。
と中学とかで習った記憶がよみがえったりしませんか。
lookチョコレートの方ですか?そうですか、すみません。
開発や、DB保守などで
「このVIEW定義、本当にこの仕様書と合ってるんだろうな・・?」
とか
「仕様書?( ゚Д゚)ハァ?それ食い物?うまい?」
みたいな時に役に立つツール、それがdb2look。
http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/core/r0002051.htm?resultof=%22%64%62%32%6c%6f%6f%6b%22%20
DB名 hoge スキーマ名 fuga view名 hage だとすると、
db2look -d hoge -e -z fuga -v hage -o out.file
とすれば、カレントディレクトリにout.fileというテキストが作成され、
その中身にcreate view 文がある。
一括でだしたり、複数指定もできるので、詳しくはリンク先の
マニュアル参照。
ちなみに私は不二家事件ではカントリーマァムよりLOOKチョコレートが心配だった派だ。
あれでウイスキー呑むと( ゚д゚)ウマーだよな。
と中学とかで習った記憶がよみがえったりしませんか。
lookチョコレートの方ですか?そうですか、すみません。
開発や、DB保守などで
「このVIEW定義、本当にこの仕様書と合ってるんだろうな・・?」
とか
「仕様書?( ゚Д゚)ハァ?それ食い物?うまい?」
みたいな時に役に立つツール、それがdb2look。
http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/core/r0002051.htm?resultof=%22%64%62%32%6c%6f%6f%6b%22%20
DB名 hoge スキーマ名 fuga view名 hage だとすると、
db2look -d hoge -e -z fuga -v hage -o out.file
とすれば、カレントディレクトリにout.fileというテキストが作成され、
その中身にcreate view 文がある。
一括でだしたり、複数指定もできるので、詳しくはリンク先の
マニュアル参照。
ちなみに私は不二家事件ではカントリーマァムよりLOOKチョコレートが心配だった派だ。
あれでウイスキー呑むと( ゚д゚)ウマーだよな。
2009年02月17日
[DB2]現在日時の取得
oracleのdualがsysibm.sysdummy1
db2 "select current date from sysibm.sysdummy1"
こういう使い方もできる。
30日以上前のレコードを取得する。
select * from sample_table where (days(current date) - days(hoge)) >= 30
余談だが、間違っても日付操作のためだけにSQL投入なんてのはNGな。APPサーバー側でやるべき。ConnectionPoolであれどうであれ、
コストが甚大じゃないぜ。
db2 "select current date from sysibm.sysdummy1"
こういう使い方もできる。
30日以上前のレコードを取得する。
select * from sample_table where (days(current date) - days(hoge)) >= 30
余談だが、間違っても日付操作のためだけにSQL投入なんてのはNGな。APPサーバー側でやるべき。ConnectionPoolであれどうであれ、
コストが甚大じゃないぜ。
2008年12月25日
[DB2]コマンドメモ(1)
いちいち調べるの面倒なので、ここにメモ
テーブルスペース一覧
db2 "list tablespaces show detail"
テーブルスペースコンテナ列挙
db2 "list tablespace containers for [TBS_ID]"
TBSサイズ変更
db2 "alter tablespace [TBS_NAME] resize ( FILE '/hoge/fuga.dat' [Page数])"
TBSコンテナ追加
db2 "alter tablespace [TBS_NAME] add (FILE '/hage/hoge.dat' [Page数])"
----
再編の要否をチェック+runstats
REORGCHK UPDATE STATISTICS ON TABLE ALL
再編の要否をチェックのみ
REORGCHK CURRENT STATISTICS ON TABLE ALL
テーブルを再編
REORG TABLE [TABLE名]
あるテーブルに属するindexを全て再編
REORG INDEXES ALL FOR TABLE [TABLE名]
あるテーブルのデータを特定のindex順に再編する
REORG TABLE [TABLE名] INDEX [INDEX名]
あるテーブルに対して統計情報更新
RUNSTATS ON TABLE [TABLE名]
→ データが100万件以上の場合は
RUNSTATS ON TABLE [TABLE名] AND SAMPLED DETAILED INDEXES ALL
データベースをリバインド
db2rbind [DB名] -l [ログファイル名] ALL
※runstats後、静的SQLがある環境なら(ストアドなどがあるのなら)
実施しないと更新された統計情報が更新されない。
-----
作成すべきインデックスについてアドバイスを得る
db2advis -d [DB名]-s "SQL文"
or
db2advis -d [DB名]-i ワークロードファイル
※ワークロードファイルは複数SQL+重みづけの情報を持つ
テキストファイル。複数のSQLの相関を考慮したIndex指南が
欲しい場合に使用
テーブルスペース一覧
db2 "list tablespaces show detail"
テーブルスペースコンテナ列挙
db2 "list tablespace containers for [TBS_ID]"
TBSサイズ変更
db2 "alter tablespace [TBS_NAME] resize ( FILE '/hoge/fuga.dat' [Page数])"
TBSコンテナ追加
db2 "alter tablespace [TBS_NAME] add (FILE '/hage/hoge.dat' [Page数])"
----
再編の要否をチェック+runstats
REORGCHK UPDATE STATISTICS ON TABLE ALL
再編の要否をチェックのみ
REORGCHK CURRENT STATISTICS ON TABLE ALL
テーブルを再編
REORG TABLE [TABLE名]
あるテーブルに属するindexを全て再編
REORG INDEXES ALL FOR TABLE [TABLE名]
あるテーブルのデータを特定のindex順に再編する
REORG TABLE [TABLE名] INDEX [INDEX名]
あるテーブルに対して統計情報更新
RUNSTATS ON TABLE [TABLE名]
→ データが100万件以上の場合は
RUNSTATS ON TABLE [TABLE名] AND SAMPLED DETAILED INDEXES ALL
データベースをリバインド
db2rbind [DB名] -l [ログファイル名] ALL
※runstats後、静的SQLがある環境なら(ストアドなどがあるのなら)
実施しないと更新された統計情報が更新されない。
-----
作成すべきインデックスについてアドバイスを得る
db2advis -d [DB名]-s "SQL文"
or
db2advis -d [DB名]-i ワークロードファイル
※ワークロードファイルは複数SQL+重みづけの情報を持つ
テキストファイル。複数のSQLの相関を考慮したIndex指南が
欲しい場合に使用
[DB2]db2exfmt
実行計画を取得しようとして、
DB2 Universal Database Version 9.1, 5622-044 (c) Copyright IBM Corp. 1991, 2006
Licensed Material - Program Property of IBM
IBM DATABASE 2 Explain Table Format Tool
Enter Database Name ==> mydb
Connecting to the Database.
Connect to Database Successful.
Binding package - Error during Bind, near line 1412.
Error Message =
SQL0035N ファイル "db2exfmt.msg" がオープンできません。
SQLCA
Size = 136
SQLCODE = -35
Tokens = db2exfmt.msg
Function= sqlabndx
RC = 0x0000 = 0
Reason = 0x0000 = 0
Reason2 = 0x0000 = 0
Warning flags =
Press ENTER to Continue ...
Error during bind.
Bind messages can be found in db2exfmt.msg
と、わけのわからんメッセージが出た場合、
一旦インスタンスオーナーから抜けて、
もう一度オーナーへsuするとうまくいく。
EXPLAIN.DDLを流した直後に出やすい。しかもV9でしか出たことない。
DB2 Universal Database Version 9.1, 5622-044 (c) Copyright IBM Corp. 1991, 2006
Licensed Material - Program Property of IBM
IBM DATABASE 2 Explain Table Format Tool
Enter Database Name ==> mydb
Connecting to the Database.
Connect to Database Successful.
Binding package - Error during Bind, near line 1412.
Error Message =
SQL0035N ファイル "db2exfmt.msg" がオープンできません。
SQLCA
Size = 136
SQLCODE = -35
Tokens = db2exfmt.msg
Function= sqlabndx
RC = 0x0000 = 0
Reason = 0x0000 = 0
Reason2 = 0x0000 = 0
Warning flags =
Press ENTER to Continue ...
Error during bind.
Bind messages can be found in db2exfmt.msg
と、わけのわからんメッセージが出た場合、
一旦インスタンスオーナーから抜けて、
もう一度オーナーへsuするとうまくいく。
EXPLAIN.DDLを流した直後に出やすい。しかもV9でしか出たことない。
2008年12月16日
[DB2]テーブルスペースがいっぱいです
もう見飽きたよ。289。
http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/core/rsql0200.htm
┐(´д`)┌ ハイハイ
ALTER TABLESPACE userdms00 RESIZE ( FILE '/hoge/fugaga' 20480 )
こうやって、定義書などは形骸化していくわけだ。(キリッ
http://db2watch.com/wiki/index.php/%E8%A1%A8%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%83%BC%E3%81%AE%E3%82%B5%E3%82%A4%E3%82%BA%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF
http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/core/rsql0200.htm
┐(´д`)┌ ハイハイ
ALTER TABLESPACE userdms00 RESIZE ( FILE '/hoge/fugaga' 20480 )
こうやって、定義書などは形骸化していくわけだ。(キリッ
http://db2watch.com/wiki/index.php/%E8%A1%A8%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%83%BC%E3%81%AE%E3%82%B5%E3%82%A4%E3%82%BA%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF
[DB2]続・ログがいっぱい
このDB見積もったヤツ出てこい。(゚Д゚ )ゴルァ!!
そのSQLCODE覚えたぞ・・・!!とアヌビスのスタンドが出そうだ。
アーカイブログなら動かせばいいんだが、アクティブが溢れたときが
やばい。マニュアルの対策がはっきり言って意味フ。
http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/core/rsql1700.htm
(SQL1762を検索)
合っているかわからんけど、こうなった場合のアクション
・archivelog コマンドでアクティブログをクローズする
→ http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/core/r0004476.htm?resultof=%22%41%72%63%68%69%76%65%22%20%22%61%72%63%68%69%76%65%22%20
・archivelog コマンドのための接続すらできない場合
空き容量を広げる
・空き容量を広げられない場合(HA停止できないなど)は
のこりの容量に収まるようにログの設定を変える。(小さくする)
しかし、これは最後の手段である。
(LOGPRIMARY または LOGFILSIZ を変える)
・ログの設定を変更した時点でログが初期化されるので、diagで確認する
・オフラインバックアップを取得し、データを保全
・LIST HISTORYコマンドでバックアップ時のアクティブログを確認する
→ http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/core/r0001991.htm?resultof=%22%4c%49%53%54%e3%80%80%48%49%53%54%4f%52%59%22%20
( Earliest Log からCurrent Logのこと)
・db2stopし、不要なアクティブログを捨てる
・db2startし、diagにエラーが無いことを確認する。
・ログの設定を戻す(LOGPRIMARY または LOGFILSIZ)
・db2stop & db2start
アーカイブが溢れた時、LOGPRIMARY の数を超えて容量いっぱいまで
アクティブが溢れるのは何故だろうな。なんか設定あるんだろうか。
参考リンク
http://db2watch.com/wiki/index.php/%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%95%E3%82%A9%E3%83%AF%E3%83%BC%E3%83%89%E5%9B%9E%E5%BE%A9%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF
http://coredump.news-site.net/tech/db2/recovery/db2_recovery_contents.html
そのSQLCODE覚えたぞ・・・!!とアヌビスのスタンドが出そうだ。
アーカイブログなら動かせばいいんだが、アクティブが溢れたときが
やばい。マニュアルの対策がはっきり言って意味フ。
http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/core/rsql1700.htm
(SQL1762を検索)
合っているかわからんけど、こうなった場合のアクション
・archivelog コマンドでアクティブログをクローズする
→ http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/core/r0004476.htm?resultof=%22%41%72%63%68%69%76%65%22%20%22%61%72%63%68%69%76%65%22%20
・archivelog コマンドのための接続すらできない場合
空き容量を広げる
・空き容量を広げられない場合(HA停止できないなど)は
のこりの容量に収まるようにログの設定を変える。(小さくする)
しかし、これは最後の手段である。
(LOGPRIMARY または LOGFILSIZ を変える)
・ログの設定を変更した時点でログが初期化されるので、diagで確認する
・オフラインバックアップを取得し、データを保全
・LIST HISTORYコマンドでバックアップ時のアクティブログを確認する
→ http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/core/r0001991.htm?resultof=%22%4c%49%53%54%e3%80%80%48%49%53%54%4f%52%59%22%20
( Earliest Log からCurrent Logのこと)
・db2stopし、不要なアクティブログを捨てる
・db2startし、diagにエラーが無いことを確認する。
・ログの設定を戻す(LOGPRIMARY または LOGFILSIZ)
・db2stop & db2start
アーカイブが溢れた時、LOGPRIMARY の数を超えて容量いっぱいまで
アクティブが溢れるのは何故だろうな。なんか設定あるんだろうか。
参考リンク
http://db2watch.com/wiki/index.php/%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%95%E3%82%A9%E3%83%AF%E3%83%BC%E3%83%89%E5%9B%9E%E5%BE%A9%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF
http://coredump.news-site.net/tech/db2/recovery/db2_recovery_contents.html
[DB2]小技メモ
小力じゃないぞ。(最近、みないね。)
ストアドなど「;」がコマンド区切りに使われると都合が
悪い場合のddl実行するとき
「@」などのあまり使わない文字を区切り文字として作成し、
実行時には db2 -td@ -vf hoge.ddl と実行
参考リンク
http://www16.atwiki.jp/rinn/pages/55.html
http://okwave.jp/qa1890125.html
http://blog.goo.ne.jp/nokonoko2006/e/cd1cc2bedbe3975e4e8d9fa0bf815e73
ストアドなど「;」がコマンド区切りに使われると都合が
悪い場合のddl実行するとき
「@」などのあまり使わない文字を区切り文字として作成し、
実行時には db2 -td@ -vf hoge.ddl と実行
参考リンク
http://www16.atwiki.jp/rinn/pages/55.html
http://okwave.jp/qa1890125.html
http://blog.goo.ne.jp/nokonoko2006/e/cd1cc2bedbe3975e4e8d9fa0bf815e73
2008年11月25日
[DB2]停止手順
DB2の止め方
db2stop
db2gcf -d
db2stop force
db2_kill ( WSE の場合は db2nkill V7以前は db2stop -kill)
kill -9 [PID] (PIDはdb2agent db2sysc などの番号を指定)
上の方が安全。下に行けば行くほど、整合性破壊などの危険がある。
停止効力は下の方が強い。
バックアップ無ければ、killとかもう((((;゚Д゚)))ガクガクブルブルで
エンター押すしかない。
このハンドブックとか この破壊体験☆ とか見て
予行練習しておけばちょっとは震えが止まるかもしれない。
まぁ、それでもdiagに Crash Recovery faildとかでたら
泣きそうになるんだけどねッ!
11/26 SIMさん、情報提供感謝します。
db2stop
db2gcf -d
db2stop force
db2_kill ( WSE の場合は db2nkill V7以前は db2stop -kill)
kill -9 [PID] (PIDはdb2agent db2sysc などの番号を指定)
上の方が安全。下に行けば行くほど、整合性破壊などの危険がある。
停止効力は下の方が強い。
バックアップ無ければ、killとかもう((((;゚Д゚)))ガクガクブルブルで
エンター押すしかない。
このハンドブックとか この破壊体験☆ とか見て
予行練習しておけばちょっとは震えが止まるかもしれない。
まぁ、それでもdiagに Crash Recovery faildとかでたら
泣きそうになるんだけどねッ!
11/26 SIMさん、情報提供感謝します。
2008年11月21日
[DB2]ログが溢れる件
そりゃ、BLOBとかログとればあっという間に溢れるわな。
SQLSTATEでいうと、SQL0968とかSQL964、SQL1004とか。
ロールフォワードとかシラネなら、アーカイブログとアクティブログを
別の場所に逃がせばなんとかなる。
12/02修正
アクティブを逃がすをdiagにえらい怒りのログがでてクラッシュすることが
稀によくあるので、逃がすのはアーカイブだけが安全。
完全バックアップリストアも辞さない覚悟なら
アクティブも逃がしても動くことは動くけどね。
USEREXITを作って自動に逃がすとか循環ログに設定を代えるとかが
安全策ではあるか。姑息法には違いないがね。
原因は基本的にログ容量の見積もり不備
参考
http://www-06.ibm.com/jp/domino01/mkt/dminfo.nsf/499721c3388537bd49256b1a001aab28/49256dcd002669c7492570ec00580090/$FILE/%E4%BB%98%E5%B1%9Elogging.pdf
SQLSTATEでいうと、SQL0968とかSQL964、SQL1004とか。
別の場所に逃がせばなんとかなる。
12/02修正
アクティブを逃がすをdiagにえらい怒りのログがでてクラッシュすることが
稀によくあるので、逃がすのはアーカイブだけが安全。
完全バックアップリストアも辞さない覚悟なら
アクティブも逃がしても動くことは動くけどね。
USEREXITを作って自動に逃がすとか循環ログに設定を代えるとかが
安全策ではあるか。姑息法には違いないがね。
原因は基本的にログ容量の見積もり不備
参考
http://www-06.ibm.com/jp/domino01/mkt/dminfo.nsf/499721c3388537bd49256b1a001aab28/49256dcd002669c7492570ec00580090/$FILE/%E4%BB%98%E5%B1%9Elogging.pdf
2008年10月31日
[DB2]DIA8555C とか SQLO_OUE_BAD_HANDOLEとか
|‘ε ’)ノィョゥ
db2 CLI 9.xxあたりからだったか忘れたが、diagに
こんなのが出る場合、大概はdb2のcliコマンド結果を
中途半端にパイプに食わせている。(headとか)
×"db2 list tablespaces show detail | head -81"
○"db2 list tablespaces show detail | awk '{print $0}' | head -81 "
であるから、アプリケーションがエラーを吐いたり、
変な挙動が確認されない場合は、あまり気にする必要はない。
http://www-01.ibm.com/support/docview.wss?uid=swg21259051
db2 CLI 9.xxあたりからだったか忘れたが、diagに
FUNCTION: DB2 UDB, oper system services, sqlowqueInternal, probe:40
MESSAGE : ZRC=0x870F003E=-2029060034=SQLO_QUE_BAD_HANDLE "Bad Queue Handle"
DIA8555C An invalid message queue handle was encountered.
CALLED : OS, -, write
OSERR : EINVAL (22) "Invalid argument"
DATA #1 : system V message queue identifier., PD_TYPE_SYSV_QUEUE_ID, 4 bytes
0x1DD001B8
DATA #2 : Pointer, 8 bytes
0x0000000110035760
DATA #3 : unsigned integer, 8 bytes
こんなのが出る場合、大概はdb2のcliコマンド結果を
中途半端にパイプに食わせている。(headとか)
×"db2 list tablespaces show detail | head -81"
○"db2 list tablespaces show detail | awk '{print $0}' | head -81 "
であるから、アプリケーションがエラーを吐いたり、
変な挙動が確認されない場合は、あまり気にする必要はない。
http://www-01.ibm.com/support/docview.wss?uid=swg21259051
2008年10月20日
[DB2]バイトカウント
テーブルの行長見積もりについて
http://www-01.ibm.com/support/docview.wss?uid=std370cc841d8725fb05492573b500073008
http://www.itmedia.co.jp/enterprise/0308/24/epn02_4.html
もっと詳しくは、DBのマニュアル(create table)
http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/admin/r0000927.htm?resultof=%22%63%72%65%61%74%65%e3%80%80%74%61%62%6c%65%22%20
http://www-01.ibm.com/support/docview.wss?uid=std370cc841d8725fb05492573b500073008
http://www.itmedia.co.jp/enterprise/0308/24/epn02_4.html
もっと詳しくは、DBのマニュアル(create table)
http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/admin/r0000927.htm?resultof=%22%63%72%65%61%74%65%e3%80%80%74%61%62%6c%65%22%20
[DB2] シーケンスの確認・削除
シーケンス一覧の列挙
SELECT SEQSCHEMA, SEQNAME FROM SYSCAT.SEQUENCES WHERE SEQSCHEMA='YOUR SCHEMA'
シーケンスの削除
DROP SEQUENCE YOURSEQUENCE
selectの表示が横に間延びして(´Α`)ウザイときは、
substr(seqschema,1,30) とかにしておくと幸せかも。
SELECT SEQSCHEMA, SEQNAME FROM SYSCAT.SEQUENCES WHERE SEQSCHEMA='YOUR SCHEMA'
シーケンスの削除
DROP SEQUENCE YOURSEQUENCE
selectの表示が横に間延びして(´Α`)ウザイときは、
substr(seqschema,1,30) とかにしておくと幸せかも。
2008年09月04日
[DB2]UniversalDriver でのJDBCトレース
|‘ε ’)ノィョゥ
Type2のCLIだと、db2cli.iniにごにょごにょ書けば良かった。
例
TRACE=1
TRACEFILENAME=/TRACE/clitrc/db2cli.trc
TRACECOMM=1
TRACEFLUSH=1
TRACETIMESTAMP=1
TRACESCRIPT=1
JDBCTRACE=1
JDBCTRACEPATHNAME=/TRACE/jdbctrc
JDBCTRACEFLUSH=1
http://www-06.ibm.com/jp/software/data/developer/library/techdoc/db2traces.html
http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/ad/c0007959.htm
JCCドライバ(TYPE4)の場合は、この設定は読まないので
プログラマブルに対応する。
接続文字列に入れたり
String databaseUrl = "jdbc:db2://localhost:50000/sample"
+ ":traceDirectory=c:\\temp"
+ ";traceFile=trace"
+ ";traceFileAppend=false"
+ ";traceLevel="
+ com.ibm.db2.jcc.DB2BaseDataSource.TRACE_ALL
+ ";";
DataSourceの設定値で行う
// set trace properties
ds.setTraceDirectory("c:\\temp");
ds.setTraceFile("trace");
ds.setTraceFileAppend(false);
ds.setTraceLevel(com.ibm.db2.jcc.DB2BaseDataSource.TRACE_ALL);
WebSphereからConnectionPool経由で利用の場合、
DataSourceがJCCなクラスじゃなく、WebSphereなクラスで
ラップされている為、このようなメソッドは受け付けない。
親子関係も無いので強引なキャストしても例外になるだけである。
(DataSourceのsetLogWriter()で多少は取れるかもしれないが)
よって、WebSphereの場合、データソースのカスタムプロパティで
設定する方法しかない。
(あればコメントしてヽ(`Д´)ノクレヨ)
http://www-06.ibm.com/jp/services/its/support/svcdoc/db2/jdbc_jcc.html
http://www-06.ibm.com/jp/software/data/developer/library/techdoc/db2traces.html
http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0506fechner/index.html
http://db2watch.com/wiki/index.php/JDBC_%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B9%E3%82%92%E3%81%A8%E3%82%8B%E3%81%AB%E3%81%AF
http://www-01.ibm.com/support/docview.wss?rs=71&context=SSEPGG&q1=DRDA&uid=swg21181878&loc=en_US&cs=utf-8&lang=en
Type2のCLIだと、db2cli.iniにごにょごにょ書けば良かった。
例
TRACE=1
TRACEFILENAME=/TRACE/clitrc/db2cli.trc
TRACECOMM=1
TRACEFLUSH=1
TRACETIMESTAMP=1
TRACESCRIPT=1
JDBCTRACE=1
JDBCTRACEPATHNAME=/TRACE/jdbctrc
JDBCTRACEFLUSH=1
http://www-06.ibm.com/jp/software/data/developer/library/techdoc/db2traces.html
http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/ad/c0007959.htm
JCCドライバ(TYPE4)の場合は、この設定は読まないので
プログラマブルに対応する。
接続文字列に入れたり
String databaseUrl = "jdbc:db2://localhost:50000/sample"
+ ":traceDirectory=c:\\temp"
+ ";traceFile=trace"
+ ";traceFileAppend=false"
+ ";traceLevel="
+ com.ibm.db2.jcc.DB2BaseDataSource.TRACE_ALL
+ ";";
DataSourceの設定値で行う
// set trace properties
ds.setTraceDirectory("c:\\temp");
ds.setTraceFile("trace");
ds.setTraceFileAppend(false);
ds.setTraceLevel(com.ibm.db2.jcc.DB2BaseDataSource.TRACE_ALL);
WebSphereからConnectionPool経由で利用の場合、
DataSourceがJCCなクラスじゃなく、WebSphereなクラスで
ラップされている為、このようなメソッドは受け付けない。
親子関係も無いので強引なキャストしても例外になるだけである。
(DataSourceのsetLogWriter()で多少は取れるかもしれないが)
よって、WebSphereの場合、データソースのカスタムプロパティで
設定する方法しかない。
(あればコメントしてヽ(`Д´)ノクレヨ)
http://www-06.ibm.com/jp/services/its/support/svcdoc/db2/jdbc_jcc.html
http://www-06.ibm.com/jp/software/data/developer/library/techdoc/db2traces.html
http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0506fechner/index.html
http://db2watch.com/wiki/index.php/JDBC_%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B9%E3%82%92%E3%81%A8%E3%82%8B%E3%81%AB%E3%81%AF
http://www-01.ibm.com/support/docview.wss?rs=71&context=SSEPGG&q1=DRDA&uid=swg21181878&loc=en_US&cs=utf-8&lang=en
2008年08月07日
[DB2]行長の見積もりについて
単純に見積もった長さの合計ではない事を念頭に置く必要がある。
4kページだから、4096までデータが詰め込めるかというとそうではない。
サイズプランニングについてはこのPDF がわかりやすい。
また、InfoCenter-SQL解説-create table の項に
各データ型がデータ以外で使用する領域情報について詳しく載っている。
読むの('A`)マンドクセって人用にショートカット情報
Total Columns * 8 + Number of LOB Columns * 12 +
Number of Datalink Columns * 28 <= row size limit for page size.
バイトカウント(例外も有り)
データ長さ+Null可の場合は(+1)。
可変長の場合は(+4 長さ情報)
参考リンク
4kページだから、4096までデータが詰め込めるかというとそうではない。
サイズプランニングについてはこのPDF がわかりやすい。
また、InfoCenter-SQL解説-create table の項に
各データ型がデータ以外で使用する領域情報について詳しく載っている。
読むの('A`)マンドクセって人用にショートカット情報
| ページ・サイズ | 行サイズの制限 | 列数の制限 |
| 4K | 4005 | 500 |
| 8K | 8101 | 1012 |
| 16K | 16293 | 1012 |
| 32K | 32677 | 1012 |
Total Columns * 8 + Number of LOB Columns * 12 +
Number of Datalink Columns * 28 <= row size limit for page size.
バイトカウント(例外も有り)
データ長さ+Null可の場合は(+1)。
可変長の場合は(+4 長さ情報)
参考リンク
2008年08月06日
[DB2]データ消去について
だから、データベースは嫌いなのだぁあ!
(東方不敗のように叫ぶ)
高速にデータを削除する方法
truncateはoracleでしかできないので、/dev/null をreplace load / import
例
import from /dev/null of del replace into tbl
import だとログを書くから、でかいテーブルは溢れる。
そんときはloadで。制約があるときはチェックする。
このロードはバックアップペンディングにしないようにしている。
バックアップしたい場合は最後のnonrecoverable を外す。
load from /dev/null of del replace into tbl nonrecoverable
set integrity for tbl immediate checked
http://www-1.ibm.com/support/docview.wss?uid=std3564fcf4026b534b1492570d5000a2785
(東方不敗のように叫ぶ)
高速にデータを削除する方法
truncateはoracleでしかできないので、/dev/null をreplace load / import
例
import from /dev/null of del replace into tbl
import だとログを書くから、でかいテーブルは溢れる。
そんときはloadで。制約があるときはチェックする。
このロードはバックアップペンディングにしないようにしている。
バックアップしたい場合は最後のnonrecoverable を外す。
load from /dev/null of del replace into tbl nonrecoverable
set integrity for tbl immediate checked
http://www-1.ibm.com/support/docview.wss?uid=std3564fcf4026b534b1492570d5000a2785
2008年07月11日
[DB2]Loadペンディングの解除
(゚Д゚ )アラヤダ!!
Load中に俺のシェルが暴走したとおもって、Ctrl+Cしちゃったら
順調にロード中だったじゃねぇか! てな場合、そのテーブルは
Load中断状態になり、アクセスできなくなる。
これを解除するには、そのLoadを再開するか、terminateするか。
再開は同じLoadをもう一回流せばよろしい、terminateは
db2 load from tbl1.del of del terminate into tbl1
強制ロールバックになり前回のSAVEポイントまで戻るらしいぜ。
詳しくはここ↓読んでくれ。
http://www-1.ibm.com/support/docview.wss?uid=std36e0f7346dc97c71049256f1c0013ec74
俺は今からそのシェルのバグを取らねばならん。
有識者()笑 に確認したのに、やっぱset integrityの順番は
全部LOADしたあとに親子関係の順番にで合ってるじゃねーかo(`ω´*)o
LOAD毎にやっても同じとか嘘いうな、コストばっかりとりやがって。
( ´ー`)フゥー...つべこべ言う前にさっさと直そう。
何、こんなの大した問題じゃない。このあとのドキュメント修正とか
UTケースのやり直しとかが(´Α`)ウゼーヨ
Load中に俺のシェルが暴走したとおもって、Ctrl+Cしちゃったら
順調にロード中だったじゃねぇか! てな場合、そのテーブルは
Load中断状態になり、アクセスできなくなる。
これを解除するには、そのLoadを再開するか、terminateするか。
再開は同じLoadをもう一回流せばよろしい、terminateは
db2 load from tbl1.del of del terminate into tbl1
強制ロールバックになり前回のSAVEポイントまで戻るらしいぜ。
詳しくはここ↓読んでくれ。
http://www-1.ibm.com/support/docview.wss?uid=std36e0f7346dc97c71049256f1c0013ec74
俺は今からそのシェルのバグを取らねばならん。
有識者()笑 に確認したのに、やっぱset integrityの順番は
全部LOADしたあとに親子関係の順番にで合ってるじゃねーかo(`ω´*)o
LOAD毎にやっても同じとか嘘いうな、コストばっかりとりやがって。
( ´ー`)フゥー...つべこべ言う前にさっさと直そう。
何、こんなの大した問題じゃない。このあとのドキュメント修正とか
UTケースのやり直しとかが(´Α`)ウゼーヨ
2008年07月10日
[DB2]属しているテーブルスペースの確認
なんの設計資料もないとか、紙と実物が合っていないカオスな時には
実機から資料を起こすという謎な作業もあるでしょう。
設計がそんなに工数を積む意味に悩むこともあるでしょう。
しかし、技術者たるもの、そんな細かいことでめげてはならない。
愛と勇気と知識と愚痴で突破するのだ。ワケワカラン。
あるテーブルが、どのテーブルスペースを利用しているのか
わからぬ場合、システムテーブルから取り出すことができる。
SELECT TBSPACE FROM SYSCAT.TABLES
WHERE TABSCHEMA='スキーマ' AND TABNAME='テーブル'
インデックスの場合はテーブルがSYSCAT.INDEXES
カラムがINDNAME TBSPACEで結合してね。
あー、テーブルスペース名一覧は
db2 list tablespaces show detail な。
しかし、なんだこのマイナスの仕事をゼロに戻している感の
作業・・。不毛だ・・。
銀河英雄伝説の名セリフ
「無害だけならまだしも有害とあっては・・」
言いたい。超言いたい('A`)続きを読む
実機から資料を起こすという謎な作業もあるでしょう。
設計がそんなに工数を積む意味に悩むこともあるでしょう。
しかし、技術者たるもの、そんな細かいことでめげてはならない。
愛と勇気と知識と愚痴で突破するのだ。ワケワカラン。
あるテーブルが、どのテーブルスペースを利用しているのか
わからぬ場合、システムテーブルから取り出すことができる。
SELECT TBSPACE FROM SYSCAT.TABLES
WHERE TABSCHEMA='スキーマ' AND TABNAME='テーブル'
インデックスの場合はテーブルがSYSCAT.INDEXES
カラムがINDNAME TBSPACEで結合してね。
あー、テーブルスペース名一覧は
db2 list tablespaces show detail な。
しかし、なんだこのマイナスの仕事をゼロに戻している感の
作業・・。不毛だ・・。
銀河英雄伝説の名セリフ
「無害だけならまだしも有害とあっては・・」
言いたい。超言いたい('A`)続きを読む


