うるう秒がDB2に与える影響の解説文章

今年はうるう年ですが、名前が似ているけれど全然関係無い「うるう秒」の挿入が予告されている年でもあります。

- 総務省|「うるう秒」挿入のお知らせ
−今年の7月1日は 1秒 長い日となります−

うるう秒が挿入されると世界中のコンピューターシステムに影響がある等と言われますが、DB2にはどういった影響があるのでしょうか?

その、「うるう秒の挿入がDB2に与える影響」を解説した文章が下記URLで公開されています。(社内Oさんからの情報です。ありがとうございます!)

- [DB2 LUW] うるう秒が DB2 に与える影響

「うるう秒なんて時刻が1秒ズレるだけなのだから、特にDB2には影響無いのでは?」とお思いかもしれませんが、そういう方はぜひ上のリンクを確認してみてください。

もちろん、時刻を手動で設定しているような環境では特に影響は出ないでしょうが、NTPで自動的に時刻を補正している環境では、うるう秒挿入後にDB2サーバの時刻が「1秒戻される」ため、上記リンクに解説されている現象が発生する可能性があります。

これは便利!IBMソフトの対応OSや前提条件が検索できるサイト

大変便利なサイトを見つけました。IBMソフトウェア(ミドルウェア)の対応OS、仮想環境の対応状況、対応ミドルウェアの情報をまとめて得られるサイトです。

- Software Product Compatibility Reports

IBMのミドルウェアは種類が多く、それぞれの製品、バージョンで前提条件や対応OSが異なっています。もちろん各製品のマニュアルには対応状況が記述されているのですが、製品毎にマニュアルを探して前提条件を把握するのはなかなか面倒です。

また、DB2とWebSphere Application Server(WAS)を組み合わせて使いたい場合などは、どのバージョンのDB2とどのバージョンWASの組み合わせがサポートされているのかを調べる事になるのですが、これはさらに大変です。

それらが上記サイトを利用すると大変簡単に解決できます。目的別で色々な機能が用意されているのですが、例えば「Operating systems for a specific product」を使うと、DB2 9.7が対応しているOS一覧を簡単に得ることができます。IBMの多くのミドルウェアの情報がここで一括して入手できるので便利ですね。

さらに便利なのが複数のプロダクトやOSにまたがった情報を得る場合です。「Matrix between specific product(s) and desired prerequisites」を使うと、複数のプロダクト間での対応状況を把握できます。例えば前述のDB2とWASで可能な組み合わせを調べたい場合は「Matrix between specific product(s) and desired prerequisites」からROWSにDB2 9.1/9.5/9.7を指定し、COLUMNにWAS 6.1/7.0/8.0を指定するとその組合わせについてまとめたレポートを出力してくれます(下図)。

検索結果

こんな感じで対応している組み合わせは黒丸、未対応は白丸、条件付のは半分の丸で示されます。結果はPDFにも出力できるので、保存やレポートにも使えます。これは便利ですね!

IBMのソフトを使っている方はぜひブックマークしておいてください。

DB2ライセンスの種類を解説したページ

DB2 9.xのライセンス種別について解説したページが出来ています。

- DB2ライセンス / 選択のヒント - Japan

DB2 9.7になってから新しいエディションのAdvaned Enterprise Editionが追加されたり、課金体系としてソケット毎のライセンスや、仮想環境用のライセンスが追加されたこともあって、複雑になっていました。

そのために上記のようなページが作られたようですね。エディションと課金体系についてコンパクトにまとめられていて、ライセンスの選択時に参考なります。

指定されたスキーマの表をRUNSTATSするストアドプロシージャのサンプル

DB2で統計情報を更新するにはRUNSTATSコマンドを使用します。

- RUNSTATS

このRUNSTATSコマンドは1つの表に対して実行するのですが、業務ではスキーマにある表全部にまとめてRUNSTATSを実行したい場合があります。

こういう場合は簡単なストアドプロシージャを作ることで対応できます。例えば以下のような感じです。

CREATE PROCEDURE runstats_by_schema (IN schema_name VARCHAR(100))
LANGUAGE SQL
BEGIN
DECLARE SQLSTATE CHAR(5);

DECLARE i INT DEFAULT 0;
DECLARE table_name VARCHAR (100);

FOR c AS SELECT TABNAME FROM SYSCAT.TABLES WHERE TABSCHEMA = schema_name AND TYPE = 'T'
DO
SET table_name = c.TABNAME ;
CALL ADMIN_CMD
('RUNSTATS ON TABLE "'||RTRIM(schema_name)||'"."'||RTRIM(table_name)||'" WITH DISTRIBUTION AND DETAILED INDEXES ALL');
SET i = i+1;
END FOR;

RETURN i;
END
@

上記をファイルに保存して、DB2コマンドウィンドウで、

> db2 "CONNECT TO mydb"
> db2 -td@ -vf ファイル名

でプロシージャを作成し、

> db2 "CALL runstats_by_schema('スキーマ名')"

でRUNSTATSを実行できます。戻り値はRUNSTATSを実行した表の数です。

プロシージャの中ではSELECTでSYSCAT.TABLESから表名一覧を出し、それをADMIN_CMDに渡してRUNSTATSを実行しています。ADMIN_CMDはSQLで管理コマンドを実行するためのプロシージャです。

RUNSTATSは表毎にオプションを変えたい場合もあるので、こういう一括した方法は不便な場合もありますが、テストや開発用途では便利だと思います。

またこういうプロシージャの書き方はRUNSTATSだけではなくREORGなど色々応用が効くと思います。

既存の表に自動更新列(自動的に数値が+1される列)を追加するには

値が自動更新(自動インクリメント)される列は、DB2の場合CREATE TABLEで列に GENERATED ALWAYS AS IDENTITYを付けると作成できます。これは以前以下のエントリで紹介しました。

- DB2で自動的に数値が更新される列を作成するには | Unofficial DB2 BLOG

では既存の表に自動更新される列を付けるにはどうすれば良いのでしょうか?
DB2ではALTER TABLEで列の追加(ADD COLUMN)が出来るのでこれを使えばできそうですが、表にデータがすでに入っている場合、ちょっとしたコツが必用になります。
具体的な方法がRadimさんのblogで紹介されています。

- How to add IDENTITY column to existing table - ChannelDB2

具体的にSQL部分だけを抜き出して引用すると以下のような操作が必用です。

alter table public.clicks add column id integer not null default 0
alter table public.clicks alter column id drop default
alter table public.clicks alter column id set generated always as identity
reorg table public.clicks
update public.clicks set id = default
alter table public.clicks add constraint pkey primary key(id)

ALTER TABLEを計4回も実行していてちょっとトリッキーですね。詳しい解説は上記Radimさんのエントリを参照してください。

※2011/04/04追記:コメント欄にとんくまさんより追加情報が寄せられています。

DB2小ネタ - DB2_EVALUNCOMMITTEDの設定は8.xと9.1以降で異なる

大変細かいTipsですが、レジストリ変数DB2_EVALUNCOMMITTEについての情報が(ずいぶん前の情報ですが)掲載されていることに気づきました。

- IBM - The use of DB2_EVALUNCOMMITTED=YES_DEFERISCANFETCH in DB2 LUW

このレジストリ変数DB2_EVALUNCOMMITTEは、DB2 v8.1.4から導入された新機能であるロックの据え置き(Lock Avoidance)を実現するためのスイッチです。簡単に説明するとこのスイッチをONにすると、ロックされる範囲がより小さくなり、並列性が向上するというものです。

このレジストリスイッチを有効にするには、2種類の書き方がありました。

1) db2set DB2_EVALUNCOMMITTE=ON (もしくはYES)
2) db2set DB2_EVALUNCOMMITTE=YES_DEFERISCANFETCH

2)はマニュアルに書かれていなかったのですが、よりロックの据え置きが効く範囲を広くする設定です。
前置きが長くなりましたが、DB2 9.1では2)の書き方が無くなっています。

正確には1)の書き方をしても2)と同じ挙動をするようになりましたので、単純に=ONと書けばOKです。

重要な情報が記録されるdb2diag.logはどこにある?

DB2には、データベースの稼働状況を出力するdb2diag.logというログファイルがあります。

これにはインスタンスが起動した/停止したといった情報から、問題発生時の詳細な情報やデッドロックの情報など沢山の情報が記録されるめ、とても重要なファイルです。

DB2で問題が起きた時に、真っ先に見るべきファイルがこのdb2diag.logと言って良いでしょう。

この重要なdb2diag.logですが、OSやバージョンによって標準の保存場所(ディレクトリ)が異なっています。しかも設定によって場所を変える事が出来るため、常に同じ位置にあるとは限りません。

そのdb2diag.logの場所についてまとめた情報が公開されています。

- db2diag.log や管理通知ログの出力先 (IM-10-0AC)
DB2 診断ログ (db2diag.log) や管理通知ログが出力される診断データ・ディレクトリーのパスを環境ごとに説明します。

最近こういったTipsやFAQ的な情報が良く公開されるようになって、とても良いですね。今回のdb2diag.logもちょっとした情報ですが、とても重要な情報です。知らなかった方はぜひ確認してみてください。

トランザクションログが一杯になったというエラー(SQL-964)が出た時の対処方法

DB2でトランザクションログが一杯になった場合、SQL-964 (SQL0964C)というエラーが返ります。その場合、どうすれば良いでしょうか?以下のURLに解説文章が掲載されています。

- トランザクション・ログがフル (SQL0964C) になったときの対応 (IM-10-00W)
トランザクションのアクティブ・ログがフルになったときの対応として、(1) 最も古い未コミットのトランザクションをコミットまたはロールバックする、(2) ログ領域を拡張する、の 2 つの方法があります。

あるていどデータベースに慣れた人にとってはトランザクションログを消してはいけないというのは当たり前のことなのですが、ログフルエラーが出た時にログを消してしまってトラブルがより深刻になってしまう、という事例は毎年のように聞く話です。

ですのでこういった基本的なことでもしっかりと解説してWEBに出していくのはとても大切ですね。上記は具体的なコマンドまでちゃんと解説してくれています。

Fix Packインストール中に強制停止した場合の注意点

あまり無いケースかもしれませんが、Fix Packインストール中に、それを停止した場合の注意点が公開されています。

- installFixPackコマンドを Ctrl+Cキーで中断した場合のアンインストール方法 (IM-10-00U)
installFixPack コマンドを Ctrl + C キーで中断しその後アンインストールなどができない状況となった場合は、"-f update" オプションを指定した installFixPack コマンドを繰り返し実行して導入を完了させてから、アンインストールなどを実行してください。


中途で強制停止した状態だと、あとから新しいFix Packを導入しようとしてもうまく行かない場合があるため、上記文章に解説されているように、-fオプションで最後で完了させておく事が大切なようです。

[小ネタ]IBMのサポート情報一覧から簡単にDB2やInformixの情報だけに絞り込む方法

IBMソフトウェアの最新のサポート情報や障害情報は以下のページで公開されています。

- IBM ソフトウェア | サポート

色々な製品の情報があるため、自分が必用な情報にたどり着くには検索をする必用があるのですが、この画面で「クイック絞り込み」を使うと、簡単に情報一覧が得られるのはご存じでしょうか?

例えばDB2のテックノートやフラッシュは、[DB2 LUW]やIM-10-xxxといったタイトルが必ず振られるようになっているため、以下のようにクイック絞り込みの欄にDB2と入れると、すぐに結果が現れます。
DB2絞り込み

同様に、例えばInformixの情報が欲しい場合は、IFMで絞り込むと簡単に情報が得られます。ぜひ試してみてください。
Informix絞り込み

著書
「AWSではじめるデータレイク」
データレイクの本を書きました(共著)
DB2cover_small.jpg
DB2の管理方法を解説した本を書きました。
ad
無料のDb2 Community Edition
リンク集
about this site
recommend
プログラマのためのSQL 第4版
プログラマのためのSQL 第4版 (JUGEMレビュー »)
ジョー・セルコ
名著が第4版として、内容拡充されて発売されました。SQLの考え方を基礎からしっかり学習したい方にお勧めです。
recommend
recommend
WebSphere Application Server 構築・運用バイブル 【WAS8.5/8.0/7.0対応】
WebSphere Application Server 構築・運用バイブル 【WAS8.5/8.0/7.0対応】 (JUGEMレビュー »)
串宮 平恭,達見 圭介,田中 孝清,原口 知子,福崎 哲郎,盛林 哲
WebSphere Application Serverの運用管理本が出ました!WAS v7〜v8.5まで幅広いバージョンに対応しています。
recommend
recommend
Effective Java 第2版 (The Java Series)
Effective Java 第2版 (The Java Series) (JUGEMレビュー »)
Joshua Bloch
すべてのJava開発者必読の書が大幅改訂されて第2版になりました!。
文法などは解説していませんが、Java言語でプログラムを書くにはどういう事に気をつけるべきかという事が非常に端的に、かつ明確な理由とともに解説されています。
第2版ではJava SE 6対応がなされ、第1版で提案してJava SEに取り込まれた部分は整理され、新しい機能であるGenericsやアノテーションについての記述が多数追加されています。以前に増してお勧めできる書になりました。
まだ読んだことが無いJava開発者はぜひ読んでみてください。
recommend
 (JUGEMレビュー »)

基礎的なSQLは書けるようになったけど、今ひとつSQLのルールになんとなくしっくりこない、腑に落ちない。そんな人にお勧めの入門書です。SQLの根底に流れる基本的な考え方をやさしく解説してくれています。(レビューはこちら)
recommend
SQLパズル 第2版 プログラミングが変わる書き方/考え方
SQLパズル 第2版 プログラミングが変わる書き方/考え方 (JUGEMレビュー »)
ジョー・セルコ,Joe Celko
SQL入門を終えて、SQL中級/上級者になりたいと考えている方にぴったりのトレーニング本です(レビューはこちら)
recommend
XML-DB開発 実技コース
XML-DB開発 実技コース (JUGEMレビュー »)
下佐粉 昭,野間 愛一郎,久保 俊彦,高橋 賢司
XML-DBのやさしい入門書です。XMLの基礎から、XPath,XQueryの解説、設計の基礎、Javaでのプログラミング等盛りだくさんの内容です。
recommend
データベースパフォーマンスアップの教科書 基本原理編
データベースパフォーマンスアップの教科書 基本原理編 (JUGEMレビュー »)
エンコアコンサルティング
DBMSの基本的な内部構成、動作についての考え方をやさしく解説してくれています。(レビューはこちら)
recommend
メインフレーム実践ハンドブック z/OS(MVS),MSP,VOS3のしくみと使い方
メインフレーム実践ハンドブック z/OS(MVS),MSP,VOS3のしくみと使い方 (JUGEMレビュー »)
神居 俊哉
メインフレームの技術について、基礎概念から、実践的な使い方までを網羅した初めての解説書です。
recommend
 (JUGEMレビュー »)

CSSの概念/基礎をしっかりと解説してくれるCSS入門書。サイトへの実践的な適用方法も解説されています(レビューはこちら)
recent entries
categories
recent comments
  • Db2 11.5 Base Edition の標準サポート提供は2025年9月30日まで (Standard EditionやAdvanced Editionとは別です)
    sim (02/09)
  • Db2 11.5 Base Edition の標準サポート提供は2025年9月30日まで (Standard EditionやAdvanced Editionとは別です)
    oda (02/07)
  • ORDER BYでNULLを最小に持ってくるには
    通りすがり (03/15)
  • Db2をAWS上に構築する際のヒント&TIPS (2021年2月版)
    Jiyong, Jung (12/09)
  • DB2小ネタ - ALLOW REVERSE SCANS
    meijik (06/24)
  • DB2の正式名称が"Db2"に変更。dashDB for TransactionもDb2 on Cloudに名称変更
    Taco (06/24)
  • DB2でインスタンスを追加で作成するには
    SIM (03/18)
  • DB2でインスタンスを追加で作成するには
    晩衛 (03/17)
  • SQLの学習サイト
    SIM (03/26)
  • SQLの学習サイト
    DB (03/25)
recent trackbacks
archives