Lk Db Name

コメント:
よくlkSID lk<SID>とネットの掲示板で見られるが、実はlk<db_nameとなっている。
理由はSIDとDB_NAMEの違いを参考してください。

SIDはインスタンス管理のため、設けられたIDで、
つまり共有メモリ、サーバプロセス、バックグランドプロセスを識別するためで、この単位で一意する。
DB_NAMEはデータベース(格納)に設けられたIDで、
つまりデータファイルセットを識別するため、一意する。

よって、今回のDBファイルセットを重複にマウントさせないため、
DBファイルセット単位のIDを利用すべきである。

概要 $ORACLE_HOME/dbs ディレクトリにある、lk<db_name> ファイルについて
内容:

Oracle 7.3.3 以降では、インスタンスがマウントされると、$ORACLE_HOME/dbs
ディレクトリに lk<db_name> といったファイル名のファイルが作成されます。
このファイルはロックファイルであり、非OPS環境にて、
別のインスタンスが同じ db_name パラメータを持つデータベースをマウント
しないように、作られます。

インスタンスを落としても、ファイルがディレクトリに残っていることが
あります。ロックの状態は、ファイルの存在ではなく、ファイルが
Oracleバックグラウンドプロセスによりロックされているかどうかで判断されます。

このファイルの動作は、バージョン 7.3, 8.0.x, 8.1 にて微妙に異なります。

★ Oracle 7.3 - Oracle 8.0.5

Oracle 7.3.x - 8.0.5.x では、lk<db_name> ファイルはDBWRプロセスにより
作成されます。このファイルはプライマリDBWRもしくはその他の dbwriter
プロセスによりロックされます。Oracle 7.3.x では、メインのDBWRプロセスと、
spawn された複数の db writer によりファイルがロックされます。
つまり、db_writers=2 が init<SID>.ora に指定されていれば、lk<db_name>
ファイルのロックを、3つのプロセスが所有することになります。

Oracle 8.0.x においては、新しい初期化パラメータ dbwr_io_slaves が
紹介され、ロックファイルはプライマリ DBWR 及びその slave により
ロックされます。dbwr_io_slaves=3 が init<SID>.ora に指定されて
いれば、ファイルは4つのプロセスによりロックされていることになります。

以下のようにして、それを確かめることができます:

$fuser lk805
lk805: 26996o 26998o 26978o 26994o

$ps -fu oracle
oracle 26992 1 0 15:55:22 ? 0:03 ora_snp1_805
oracle 26976 1 0 15:55:13 ? 0:00 ora_pmon_805
oracle 26984 1 0 15:55:17 ? 0:00 ora_ckpt_805
oracle 26982 1 0 15:55:15 ? 0:01 ora_lgwr_805
oracle 26996 1 0 15:55:33 ? 0:00 ora_i102_805
oracle 26998 1 0 15:55:34 ? 0:00 ora_i103_805
oracle 26988 1 0 15:55:19 ? 0:00 ora_reco_805
oracle 26986 1 0 15:55:18 ? 0:00 ora_smon_805
oracle 26978 1 0 15:55:14 ? 0:00 ora_dbw0_805
oracle 26990 1 0 15:55:20 ? 0:03 ora_snp0_805
oracle 26994 1 0 15:55:32 ? 0:01 ora_i101_805

以上のコマンドで、DBWRとその I/O slave により、ファイルがロックされて
いることが分かります。

★ Oracle 8.1.x

Oracle 8.1 以降では、lk<db_name> ファイルは全てのバックグランドプロセスに
よりロックされます。(ファイルの機能は変わりません)

$ fuser lkV815
lkV815: 9345o 9341o 9337o 9333o 9329o 9325o:

$ ps -fu oracle8i
oracle8i 9325 1 0 04:40:48 ? 0:01 ora_pmon_v815
oracle8i 9329 1 0 04:40:49 ? 0:00 ora_dbw0_v815
oracle8i 9337 1 0 04:40:50 ? 0:01 ora_ckpt_v815
oracle8i 9333 1 0 04:40:50 ? 0:00 ora_lgwr_v815
oracle8i 9341 1 0 04:40:50 ? 0:02 ora_smon_v815
oracle8i 9345 1 0 04:40:51 ? 0:00 ora_reco_v815

また、truss コマンドでも、ファイルが各バックグラウンドプロセスに
よりロックされることが確認できます:

9345: open("/bigdisk/oracle8i/dbs/lkV815", O_RDWR) = 11
9345: fcntl(11, F_SETLK, 0xEFFFE80C) = 0

キーワード:

LOCKFILE ロックファイル

Reference:
KRWON-11896