dbs ディレクトリに作成されるファイル（Oracle Database 19c）

# DBS ディレクトリとは？
　DBS ディレクトリは Oracle Database インスタンスを構成する各種プロセスのカレント・ディレクトリです。Unix/Linux システムでは \\${ORACLE_HOME}/dbs , Microsoft Windows 環境では %ORACLE_HOME%\database ディレクトリがデフォルトの場所です。
  Oracle Database 18c 以降で、読み取り専用 Oracle Home 機能を有効にしている場合には、このディレクトリは ${ORACLE_BASE}/dbs（%ORACLE_BASE%\database）になります。本記事ではこのディレクトリに作成されるいくつかのファイルについて説明しています。

``` SHELL: PMON プロセスのカレント・ディレクトリ
$ ps -ef | grep pmon | grep -v grep
oracle    39116      1  0 17:43 ?        00:00:00 ora_pmon_O19P
$ ls -l /proc/39116/cwd
lrwxrwxrwx 1 oracle oinstall 0 Mar  4 19:00 /proc/39116/cwd -> /u01/app/oracle/product/19.0.0/dbhome_1/dbs
```

一方でリスナーのカレント・ディレクトリは lsnrctl start コマンドを実行したディレクトリになります。

```shell:リスナーのカレント・ディレクトリ
$ pwd
/home/oracle
$ lsnrctl start
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 06-3月 -2024 13:35:46
...
$ ps -ef | grep tns | grep -v grep
oracle    19656      1  0 13:35 ?        00:00:00 /u01/app/oracle/product/19.0.0/dbhome_1/bin/tnslsnr LISTENER -inherit
$ ls -l /proc/19656/cwd
lrwxrwxrwx	1	oracle	oinstall	0	Mar	6	13:36	/proc/19656/cwd	->	/home/oracle
```

# 初期化パラメーター・ファイル
例: initO19P.ora, spfileO19P.ora

初期化パラメーター・ファイルはこのディレクトリに保存される代表的なファイルです。初期化パラメーターの名前と値が格納されます。異なるデータベースで値を使い分けるためにファイル名に環境変数 ORACLE_SID の値が含まれます。

- init${ORACLE_SID}.ora
テキスト形式の初期化パラメーター・ファイルです。インスタンス起動時に参照されます。

- spfile${ORACLE_SID}.ora
バイナリ形式の初期化パラメーター・ファイルです。テキスト形式と両方が存在した場合には SPFILE が優先されて使用されます。インスタンス起動時に参照され、ALTER SYSTEM SET 文実行時や、インスタンス停止時に更新されます。Oracle Grid Infrastructure 環境ではクラスター・リソースとして別のディレクトリを指定されていることがあります。下記の例では ASM ディスクグループ +DATA に SPFILE が格納されています。

```shell: クラスター・リソースのSPFILE確認
$ srvctl config database -d o19p
Database unique name: o19p
Database name: o19p
Oracle home: /u01/app/oracle/product/19.0.0/dbhome_1
Oracle user: oracle
Spfile: +DATA/O19P/PARAMETERFILE/spfile.298.1141948399
Password file: +DATA/O19P/PASSWORD/pwdo19p.315.1141945837
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
...
```
 
# パスワード・ファイル
例: orapwO19P
- orapw${db_unique_name}
 SYS ユーザーや SYSTEM ユーザーのパスワードが格納されたファイルです。Oracle Database のユーザー認証はインスタンスが OPEN 状態にならないと実行できないためにデータベースの外部にパスワードを保存するファイルが使われます。
  Oracle Grid Infrastructure 環境ではクラスター・リソースとして別のディレクトリを指定されていることがあります。下記の例では ASM ディスクグループ +DATA にパスワード・ファイルが格納されています。

```shell: クラスター・リソースのパスワード・ファイル確認
$ srvctl config database -d o19p
Database unique name: o19p
Database name: o19p
Oracle home: /u01/app/oracle/product/19.0.0/dbhome_1
Oracle user: oracle
Spfile: +DATA/O19P/PARAMETERFILE/spfile.298.1141948399
Password file: +DATA/O19P/PASSWORD/pwdo19p.315.1141945837
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
...
```

# Health check monitoring file
例： hc_O19P.dat
- hc_${ORACLE_SID}.dat
インスタンスのヘルス・チェックを行うための小さなバイナリ・ファイルです(Doc ID 390474.1)。

 ```shell: ヘルスチェック・ファイルの内容
$ strings hc_O19P.dat
DO NOT DELETE OR OVERWRITE THIS FILE!!!
O19P
 ```
 
このファイルはバックグラウンド・プロセスが起動時にオープンし、そのままクローズされません。

 ```shell: ヘルスモニター・ファイルのオープン確認
$ lsof | grep hc_O19P.dat
ora_pmon_ 13850               oracle  mem       REG              253,0       1544 109495198 /u01/app/oracle/product/19.0.0/dbhome_1/dbs/hc_O19P.dat
ora_pmon_ 13850               oracle    6u      REG              253,0       1544 109495198 /u01/app/oracle/product/19.0.0/dbhome_1/dbs/hc_O19P.dat
ora_clmn_ 13854               oracle  mem       REG              253,0       1544 109495198 /u01/app/oracle/product/19.0.0/dbhome_1/dbs/hc_O19P.dat
...
 ```

# Lock file
例： lkO19P
- lk{db_unique_name}
インスタンスの2重起動を防ぐために作成されるファイルです。テキスト形式の小さなファイルです。

 ```SHELL: ロック・ファイルの内容
 $ cd ${ORACLE_HOME}/dbs
 $ cat lkO19P
DO NOT DELETE THIS FILE!
 ```

このファイルは全バックグラウンド・プロセスがオープンしています。

```SHELL:ロック・ファイルのオープン
$ lsof | grep lkO19P
ora_pmon_ 13850               oracle    7uR     REG              253,0         24 109495893 /u01/app/oracle/product/19.0.0/dbhome_1/dbs/lkO19P
ora_clmn_ 13854               oracle    7uR     REG              253,0         24 109495893 /u01/app/oracle/product/19.0.0/dbhome_1/dbs/lkO19P
ora_psp0_ 13858               oracle    7uR     REG              253,0         24 109495893 /u01/app/oracle/product/19.0.0/dbhome_1/dbs/lkO19P
...
 ```

 インスタンス起動時にこのファイルにアクセスできない場合、ORA-01102: cannot mount database in EXCLUSIVE mode エラーが発生して、MOUNT モードに移行できません。

# Snapshot control file
例： snapcf_O19P.f
- snapcf_${ORACLE_SID}.f
  snapcf_ ではじまるファイルは RMAN による制御ファイルのコピーです。データベース作成時にデフォルトのパスが RMAN 設定 CONFIGURE SNAPSHOT CONTROLFILE NAME に指定されます。Oracle Real Application Clusters 環境では全インスタンスからアクセスできる共有領域に指定することが推奨されます。

```
RMAN> SHOW SNAPSHOT CONTROLFILE NAME;

db_unique_name O19PのデータベースにおけるRMAN構成パラメータ:
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/19.0.0/dbhome_1/dbs/snapcf_O19P.f'; # default
```

# Backup control file
例： c-2302801788-20240304-01

-  c-\\${DBID}-\\${YYYYMMDD}-\\${SEQUENCE}
 c-から始まる名前のファイルは RMAN により自動バックアップされた制御ファイルです。制御ファイルの自動バックアップ機能はデフォルトで有効になっており、システムの構成情報が変更された時や、データファイルのバックアップ時に自動的に作成されます。RMAN のパラメーター CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK 設定のデフォルトが '%F' に指定されており、ディレクトリの指定が無いのでカレント・ディレクトリに作成されます。%F は10進数10桁のDBID、作成日、00からFFまでのシーケンス番号で構成されます。

``` shell: RMAN による制御ファイルの自動バックアップ設定確認
RMAN> SHOW CONTROLFILE AUTOBACKUP;

db_unique_name O19PのデータベースにおけるRMAN構成パラメータ:
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default

RMAN> SHOW CONTROLFILE AUTOBACKUP FORMAT;

db_unique_name O19PのデータベースにおけるRMAN構成パラメータ:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
```

Author: Noriyoshi Shinoda / Date: June 16, 2024