Oracle Database Cloud Service上でORAchkを実行してみた

皆さんのOracleデータベースに、Oracleが推奨する設定が施されているのかを一発で確認するツール、それが、**ORAchk**です。
[しばちょう先生](http://www.oracle.com/technetwork/jp/database/articles/shibacho/index.html)の[第37回「ORAchkを使用したデータベースのヘルス・チェック」](http://www.oracle.com/technetwork/jp/database/articles/shibacho/index-2491041-ja.html)でも、導入の仕方や使い方、そのメリットをガイドをさせて頂いておりますが、
今回は、次の3つ注目してお伝えしていこうと思います。

- [Oracle Database Cloud Service (DBCS)](https://cloud.oracle.com/ja_JP/database)上に作成したRACデータベースに対して
- sudo を使用(rootユーザーのパスワード入力不要)してORAchkを実行
- 得られた得点は？

***

**1. [My Oracle Support](https://support.oracle.com) から最新版をダウンロード**

- [しばちょう先生](http://www.oracle.com/technetwork/jp/database/articles/shibacho/index.html)の[第37回「ORAchkを使用したデータベースのヘルス・チェック」](http://www.oracle.com/technetwork/jp/database/articles/shibacho/index-2491041-ja.html) の演習1 と同じです。
- My Oracle Supportの「Doc ID 1545832.2　ORAchk - Oracleスタックのヘルスチェック」（もしくは、「Doc ID 1268927.2 ORAchk - Health Checks for the Oracle Stack」）へアクセスし、最新のORAchkをダウンロードして下さい。

***

**2. sudo を使用した実行の準備**

- この手順2は、RACデータベースの全ノードで実行して下さい。
- Doc ID 1268927.2 ORAchk - Health Checks for the Oracle Stack」にユーザーズ・ガイドの中にも記載がありますが、ちょっと上手く行かなかったので、あくまでLinux知識の乏しい私が成功した設定を以下に記しておきます。
- セキュリティ的には良く無いので、ORAchkの実行後は速やかに設定を解除することを強くお薦めします。

```
[opc@sibacho1 ~]$ sudo -i
[root@sibacho1 ~]# visudo
### 次の一行を追記して保存します。
oracle    ALL=(root)       NOPASSWD: ALL
```

- 一番右の「ALL」部分の書き方を試行錯誤しましたが、残念ながら上記に辿りつきました。
- ユーザーズガイドは「$HOME/root_orachk.sh」という環境変数付きの文字列を書くように指示されていますが、visudoの構文チェックで怒られます。これを無視して保存して、ORAchkを実行しても、root権限が必要な情報収集シェルを内部で実行する際に、visudoの構文チェックエラーによりシェルが実行されていません。
- 上述した root_orachk.sh は、ORAchkを実行した際に一時的に作成されるディレクトリ（実行時のタイムスタンプ付きの名前）内に作成されますので、私には指定の仕方が分からなかった。

***

**3. ORAchk.zip の展開**
- この手順3は、RACデータベースの内、いづれか一つのノード上で行えばOKです。

```
[opc@sibacho1 ~]$ sudo -i
[root@sibacho1 ~]# su - oracle
[oracle@sibacho1 ~]$ mkdir -p work/orachk
[oracle@sibacho1 ~]$ unzip -d work/orachk/ orachk.zip
[oracle@sibacho1 ~]$ cd work/orachk
[oracle@sibacho1 orachk]$ chmod 755 orachk
```

***

**4. ORAchkのヘルプ**

```
[oracle@sibacho1 orachk]$ ./orachk -h
Usage : ./orachk [-abvhpfmsuSo:c:t:]

        -h      Prints this page.
        -a      All (Perform best practice check and recommended patch check)
        -b      Best Practice check only. No recommended patch check
        -v      Show version
        -p      Patch check only
        -m      exclude checks for Maximum Availability Architecture (MAA) scorecards(see user guide for more details)
        -u      Run orachk to check pre-upgrade or post-upgrade best practices for 11.2.0.3 and above
                -o pre or -o post is mandatory with -u option like ./orachk -u -o pre
        -f      Run Offline.Checks will be performed on data already collected from the system
        -o      Argument to an option. if -o is followed by v,V,Verbose,VERBOSE or Verbose, it will print checks which passs on the screen
                if -o option is not specified,it will print only failures on screen. for eg: orachk -a -o v
(以降、省略)
```
***

**5. ORAchkによる全項目チェックの実行**

- 幾つか質問をされるので、答えて進めて行きます。
- 一回の実行で、RACデータベースの全インスタンスを情報収集の対象にできます。
- 最近のORAchkでは、各ノードの情報収集が非同期で動作するので、実行時間が大幅に短縮しています。

```
[oracle@sibacho1 orachk]$ ./orachk -a

CRS stack is running and CRS_HOME is not set. Do you want to set CRS_HOME to /u01/app/12.1.0.2/grid?[y/n][y]

Checking ssh user equivalency settings on all nodes in cluster

Node sibacho2 is configured for ssh user equivalency for oracle user


Searching for running databases . . . . .

. .
List of running databases registered in OCR
1. orcl
2. None of above

Select databases from list for checking best practices. For multiple databases, select 1 for All or comma separated number like 1,2 etc [1-2][1].
. .


Checking Status of Oracle Software Stack - Clusterware, ASM, RDBMS

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
-------------------------------------------------------------------------------------------------------
                                                 Oracle Stack Status
-------------------------------------------------------------------------------------------------------
Host Name  CRS Installed  RDBMS Installed  CRS UP    ASM UP    RDBMS UP  DB Instance Name
-------------------------------------------------------------------------------------------------------
sibacho1    Yes             Yes             Yes        Yes      Yes      orcl1
sibacho2    Yes             Yes             Yes        Yes      Yes      orcl2
-------------------------------------------------------------------------------------------------------
```

***

**6. root権限が必要な情報収集におけるオプションの選択**

- 以下のような形で、4つのオプションから選択します。今回は、2番の”sudo”を選択しました。

```
Copying plug-ins

. . . . . . . . . .


149 of the included audit checks require root privileged data collection . If sudo is not configured or the root password is not available, audit checks which require root privileged data collection can be skipped.


1. Enter 1 if you will enter root password for each  host when prompted

2. Enter 2 if you have sudo configured for oracle user to execute root_orachk.sh script

3. Enter 3 to skip the root privileged collections

4. Enter 4 to exit and work with the SA to configure sudo  or to arrange for root access and run the tool later.

Please indicate your selection from one of the above options for root access[1-4][1]:- 2
```

***

**7. ORAchk 実行時の標準出力サンプル**

```
*** Checking Best Practice Recommendations (PASS/WARNING/FAIL) ***

Collections and audit checks log file is
/home/oracle/work/orachk/orachk_sibacho1_PDB1_011316_145918/log/orachk.log

Checking for prompts in /home/oracle/.bash_profile on sibacho1 for oracle user...

Checking for prompts in /home/oracle/.bash_profile on sibacho2 for oracle user...

Starting to run orachk in background on sibacho2

=============================================================
                    Node name - sibacho1
=============================================================

Collecting - ASM Disk Groups
Collecting - ASM Disk I/O stats
(以下、省略)
```

***

**8. root権限の情報収集が出来たことの一つの確認方法**

- 標準出力に次の出力が出ていれば成功です。
- 「Preparing...」の出力の後にパスワードの入力を求められた場合は、sudoの設定が上手く言っていません。
- パスワードの入力は求められなかったとしても、「Preparing...」の出力の後に「Collecting...」の出力が無い場合も収集されていません。

```
Preparing to run root privileged commands  sibacho1.

Collecting - Broadcast Requirements for Networks
Collecting - CRS Opatch version
Collecting - CRS user time zone check
Collecting - Custom rc init scripts (rc.local)
Collecting - Disk Information
Collecting - Grid Infastructure user shell limits configuration
Collecting - Interconnect interface config
Collecting - Network interface stats
Collecting - OCR and Voting file location
Collecting - OLR Integrity
Collecting - Root user limits
Collecting - Verify no database server kernel out of memory errors
Collecting - root time zone check
Collecting - slabinfo
Collecting - umask setting for GI owner
```

***

**9. ORAchk実行時の最後の標準出力サンプル**

- 以下の出力例のように、収集された結果を固めたzipファイルのパスが出力されれば実行完了です。
- htmlファイルも、zipファイル内に格納されています。

```
(ここまでの出力は省略)
---------------------------------------------------------------------------------
                      CLUSTERWIDE CHECKS
---------------------------------------------------------------------------------
 WARNING => DNS server config file does not match across database servers
---------------------------------------------------------------------------------

Detailed report (html) - /home/oracle/work/orachk/orachk_sibacho1_PDB1_011316_145918/orachk_sibacho1_PDB1_011316_145918.html

UPLOAD(if required) - /home/oracle/work/orachk/orachk_sibacho1_PDB1_011316_145918.zip
```

***

**10. 結果レポートのサンプル**

- 2016/1/13時点で、DBCSで自動生成されたRACデータベースの設定は、何も設定変更していないにも関わらず、93点というまずまずな高得点を記録しました。

![report.png](https://qiita-image-store.s3.amazonaws.com/0/108603/c57d0612-c80d-3256-ced9-a6741d599960.png)

***

**11. まとめ**

- 従来のオンプレでは、一般的にdbca(Database Connfiguration Asistant)と言う、Oracle Databaseに付随するGUIツールでデータベースを作成しますが、残念ながら、そのままでは、性能が出ない構成であったり、高可用性の設定が不十分だったりします。
- 具体的な例としては、redoログファイルのサイズが小さ過ぎて性能が出ないのが有名ですし、ブロック破損対策の初期化パラメータが無効、バックアップの設定も無しだったりします。
- これらを使える状態に持っていく必要がある為に、ベテランDBAがキッチリと仕上げるのがカッコ良いのですが、Databade Cloud Serviceで作成されたデータベースのデフォルト設定は、上記で述べた設定はもちろん、隠しパラメータを含めた様々なOracleのベストプラクティスが反映されています。
- もちろん、ミッション・クリティカル・システムでの利用を想定する場合には、検討が必要な設定はありますけど、**直ぐに簡単にそれなりのOracleデータベース環境が使えるDBCSの魅力は大きい**と個人的には思います。

***

**12. おまけ（./orachk -diff）**

- ORAchkで指摘された設定を見直した後、再度、ORAchkを実行しますが、その差分を前後のHTMLレポートで比較するのは正直面倒です。得点だけの比較であれば簡単ですけど。
- また、パッチ適用前後のHTMLレポート比較も面倒そうですし、ORAchkのバージョンアップにより、推奨される項目や値がが変化する場合もあります。
- それらを効率良く比較する為に、ORAchkにはdiff機能がありますので、[しばちょう先生](http://www.oracle.com/technetwork/jp/database/articles/shibacho/index.html)の[第37回「ORAchkを使用したデータベースのヘルス・チェック」](http://www.oracle.com/technetwork/jp/database/articles/shibacho/index-2491041-ja.html) の演習7を参考にしてみてくださいね。