第7回 Oracleインストール支援ツールを使う(2)


引き続きOracle Preinstallation RPMの話です。今回は出力されたログファイルから内部的な動作を解析します。

Oracle Preinstallation RPMのログファイル

このようなツールを解析するときは、本来はスクリプトを直接見るべきです。しかし今回は、よりわかりやすく紹介するため、ログファイルから内部の動作を調べることにします。前回目星を付けた/var/log/oracle-rdbms-server-12cR1-preinstallには、2つのディレクトリがあることがわかります。

# cd /var/log/oracle-rdbms-server-12cR1-preinstall/
# ls -l
合計 8
drwxr-xr-x 3 root root 4096  6月 29 14:48 2015 backup
drwx------ 2 root root 4096  6月 29 14:49 2015 results

treeコマンドで確認してみると、grub.confやsysctl.confがバックアップされ、さらにログファイル(orakernel.log)らしきものがあります。

# LANG=C tree
.
|-- backup
|   `-- Jun-29-2015-14-48-54
|       |-- grub.conf
|       |-- orakernel.log
|       `-- sysctl.conf
`-- results
    `-- orakernel.log

ログファイル解析(ユーザー作成からカーネルパラメーター設定)

それではログファイルorakernel.logの内容を先頭から順に見ていきます。かなり長いので、いくつかに分けて説明します。

最初の部分では、2つのグループ(oinstall, dba)と1つのユーザー(oracle)を追加しています。

Adding group oinstall with gid 54321
Adding group dba
Adding user oracle with user id 54321, initial login group oinstall, supplementa
ry group dba and  home directory /home/oracle
Changing ownership of /home/oracle to oracle:oinstall
Please set password for oracle user
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba)
Creating oracle user passed

実際に設定ファイルを見るとユーザーとグループが追加されています。

# tail -n 1 /etc/passwd
oracle:x:54321:54321::/home/oracle:/bin/bash

# tail -n 2 /etc/group
oinstall:x:54321:
dba:x:54322:oracle

次の部分では、必要なカーネルパラメーターを設定し、既存のsysctl.confをバックアップしていることがわかります。

Verifying  kernel parameters as per Oracle recommendations...
Adding fs.file-max = 6815744
Adding kernel.sem = 250 32000 100 128
Adding kernel.shmmni = 4096
kernel.shmall is higher than preinstall config.
kernel.shmall = 4294967296
kernel.shmmax = 4398046511104
Changing kernel.shmmax to match preinstall config
Adding kernel.panic_on_oops = 1
Adding net.core.rmem_default = 262144
Adding net.core.rmem_max = 4194304
Adding net.core.wmem_default = 262144
Adding net.core.wmem_max = 1048576
Adding fs.aio-max-nr = 1048576
Adding net.ipv4.ip_local_port_range = 9000 65500
Setting kernel parameters as per oracle recommendations...
Altered file /etc/sysctl.conf
Original file backed up at /etc/sysctl.conf.orabackup
Verifying & setting of kernel parameters passed

実際に/etc/sysctl.confを確認すると、新しくパラメーターが追加されています(一部抜粋)。

# oracle-rdbms-server-12cR1-preinstall setting for fs.file-max is 6815744
fs.file-max = 6815744

# oracle-rdbms-server-12cR1-preinstall setting for kernel.sem is '250 32000 100
128'
kernel.sem = 250 32000 100 128

# oracle-rdbms-server-12cR1-preinstall setting for kernel.shmmni is 4096
kernel.shmmni = 4096

次の部分ではOSのリソース制限の設定をしています。手動で設定するときは/etc/security/limits.confに記述するのが一般的ですが、今回は/etc/security/limits.dディレクトリにファイルを配置しています。

Setting user limits using /etc/security/limits.d/oracle-rdbms-server-12cR1-preinstall.conf

Verifying oracle user OS limits as per Oracle recommendations...
Adding oracle soft nofile  1024
Adding oracle hard nofile  65536
Adding oracle soft nproc  16384
Adding oracle hard nproc  16384
Adding oracle soft stack  10240
Adding oracle hard stack  32768
Adding oracle hard memlock  134217728
Adding oracle soft memlock  134217728
Setting oracle user OS limits as per Oracle recommendations...
Altered file /etc/security/limits.d/oracle-rdbms-server-12cR1-preinstall.conf
Original file backed up at /var/log/oracle-rdbms-server-12cR1-preinstall/backup/Jun-29-2015-14-48-54
Verifying & setting of user limits passed

oracle-rdbms-server-12cR1-preinstall.confの中身を見ると、通常limits.confに設定する内容と同等の記述があります(一部抜粋)。

# oracle-rdbms-server-12cR1-preinstall setting for nofile soft limit is 1024
oracle   soft   nofile    1024

# oracle-rdbms-server-12cR1-preinstall setting for nofile hard limit is 65536
oracle   hard   nofile    65536

# oracle-rdbms-server-12cR1-preinstall setting for nproc soft limit is 16384
# refer orabug15971421 for more info.
oracle   soft   nproc    16384

# oracle-rdbms-server-12cR1-preinstall setting for nproc hard limit is 16384
oracle   hard   nproc    16384

実際にoracleユーザーでリソース制限が効いていることを確認します。Hはハードリミットを表します。代表的なところではopen filesが設定どおり変更されていることがわかります。

# su - oracle
$ ulimit -Ha
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7715
max locked memory       (kbytes, -l) 134217728
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536  ←デフォルトの4096から変更されている
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 32768
cpu time               (seconds, -t) unlimited
max user processes              (-u) 16384
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

ログファイル解析(ブートパラメーター)

次の部分ではgrub.confにブートパラメーターを追加しています(一部省略)。追加しているのはnuma=offとtransparent_hugepage=neverです。それぞれについて説明します。

Verifying kernel boot parameters as per Oracle recommendations...
old boot params: kernel /vmlinuz-3.8.13-44.1.1.el6uek.x86_64 ro root=/dev/mapper/vg00-lv_root rd_LVM_LV=vg00/lv_swap rd_NO_LUKS rd_LVM_LV=vg00/lv_root rd_NO_MD   KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=ja_JP.UTF-8 rd_NO_DM rhgb quiet numa=off, new boot params: kernel /vmlinuz-3.8.13-44.1.1.el6uek.x86_64 ro root=/dev/mapper/vg00-lv_root rd_LVM_LV=vg00/lv_swap rd_NO_LUKS rd_LVM_LV=vg00/lv_root rd_NO_MD   KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=ja_JP.UTF-8 rd_NO_DM rhgb quiet numa=off transparent_hugepage=never

old boot params: kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/vg00-lv_root rd_LVM_LV=vg00/lv_swap rd_NO_LUKS rd_LVM_LV=vg00/lv_root rd_NO_MD   KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=ja_JP.UTF-8 rd_NO_DM rhgb quiet crashkernel=auto numa=off, new boot params: kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/vg00-lv_root rd_LVM_LV=vg00/lv_swap rd_NO_LUKS rd_LVM_LV=vg00/lv_root rd_NO_MD   KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=ja_JP.UTF-8 rd_NO_DM rhgb quiet crashkernel=auto numa=off transparent_hugepage=never

Setting kernel boot parameters as per Oracle recommendations...
Boot parameters will be effected on next reboot
Altered file /boot/grub/grub.conf
Original file backed up at /boot/grub/grub.conf.orabackup
Verifying & setting of boot parameters passed

numa=offは、OSのNUMA最適化(NUMA Optimization)を無効にする設定です。NUMAの詳細には触れませんが、2プロセッサー以上のCPUを搭載しているサーバーで関係ある機能です(コアではなくプロセッサーです)。現時点(2015年8月)では、Oracleデータベース利用時にLinux OSのNUMA最適化機能は非推奨の設定です。

次はtransparent_hugepage=neverです。これはOracle Linux 6から導入された透過的Huge Pagesを無効にする設定です(透過的≒自動的)。Huge Pagesは、昔からOracleデータベースでサポートされていますが、透過的Huge Pagesは非推奨の設定です。

Huge Pagesと透過的Huge Pages

Huge Pagesと透過的Huge Pagesについて説明します。なお透過的Huge Pages(Transparent Huge Pages)はTHPと省略されることがあります。またHuge PagesとLarge Pagesは同じ意味です。

コンピューターではメモリーをページというブロック単位で管理します。x86系CPUの場合、デフォルトのページサイズは4KBytesです。一般的なアプリケーションの場合、4KBytesのほうが無駄なくメモリーを利用できて効率的です。ところがOracleのSGAのように大量のメモリーを使用する場合、4Kbytesという非常に小さな単位では管理情報が膨大になりオーバーヘッドが大きくなります。

そのために導入されたのがHuge Pagesです。Huge Pagesを利用すると2MBytesのページサイズが利用できるので、大量メモリーを使用したときのメモリー管理が効率化されます。2048Kbytes/4Kbytes=512なので、メモリーの管理情報は1/512になり、それに伴うTLB(Translation Lookaside Buffer)のヒットミス低減など、数々のメリットが得られます。

Oracle Linux 5までは、明示的にHuge Pagesのサイズを指定していたのですが、Oracle Linux 6から導入されたTHPでは、何も設定しなくても動的にHuge Pagesを割り当てることが可能になりました。この機能をTHPと呼びます。

THPの設定は、以下のコマンドで確認できます。[never]になっているときは無効で、それ以外のときは有効です。このパラメーター自体が無いときは、THPは無効になっています。

# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

上記パラメーターは、RHEL互換カーネルでは/sys/kernel/mm/redhat_transparent_hugepage/enabledという名称です。

OracleデータベースではTHPは非推奨なので、UEK3や一部のUEK2では初めから無効になっています。パラメーター自体が存在しません。したがって、RHEL互換カーネルや一部のUEK2を利用しているときに関係があります。

なおgrub.confに設定したパラメーターを有効にするためには、OSを再起動する必要があります。再起動してもTHPが無効にならないときは、パラメーターチューニングツールtunedの設定を調べてください。tunedが有効になっていると、grub.confの設定が上書きされることがあります。

またJDKのバージョンによっては、THPが無効になっているとワーニングメッセージが表示されることがあります。エラーではないのでアプリケーションの動作に問題はありませんが、DBと同じサーバーでJavaアプリケーションを動かすときには、メッセージを抑止するようにJDKの設定を検討してもいいかもしれません。

ログファイル解析(ネットワーク設定)

最後は/etc/sysconfig/networkへのNOZEROCONFパラメーター追加です。

Trying to add NOZEROCONF parameter...
Taking a backup of existing file to /etc/sysconfig/network.orabackup
Successfully added parameter NOZEROCONF to /etc/sysconfig/network
Setting /etc/sysconfig/network parameters passed

実際に/etc/sysconfig/networkを見ると、末尾にNOZEROCONF=yesが追加されています。

NETWORKING=yes
HOSTNAME=sample.com
NTPSERVERARGS=iburst
# oracle-rdbms-server-12cR1-preinstall : Add NOZEROCONF=yes
NOZEROCONF=yes

NOZEROCONFは、APIPA(Automatic Private IP Addressing)というIPアドレスの自動設定機能に関するパラメーターです。IPアドレスの自動設定と聞くとDHCPを連想しますが、まったく別の機能です。APIPAでは、DHCPサーバーのようなサーバーは不要で、リンクローカルアドレスという「169.254.0.0~169.254.255.255」のアドレスが割り当てられます。ルーティングできない特殊なIPアドレスなので、小規模ネットワーク向けの機能です。

APIPAが有効になっていると、DHCPでIPアドレス割り当てに失敗したときでも、APIPAによって169.254で始まるIPアドレスが割り当てられます。一見するとIPアドレスは正しく割り当てられているように見えるのでトラブルのもとです。サーバーでは不要な設定なので無効にします。次の例には169.254.0.0のルーティングテーブルが表示されていますが、NOZEROCONF=yesを指定すると、この行は無くなります。

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.176.2   0.0.0.0         UG        0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
192.168.176.0   0.0.0.0         255.255.255.0   U         0 0          0 eth0

インストーラーを起動する

Oracle Preinstallation RPMによって、次のことが自動的に実行されることがわかりました。


  1. 必要なRPMをインストールする
  2. ユーザーとグループを作成する
  3. カーネルパラメーターを設定する
  4. OSのリソース制限を設定する
  5. grub.confにブートパラメーターを追加する
  6. NOZEROCONF=yesにしてAPIPAを無効にする

ここまでくればあと少しです。パスワード設定とディレクトリ作成が終われば、ついにインストーラーの起動です。

先ほど作成したoracleユーザーにパスワードを設定します。

# passwd oracle
ユーザー oracle のパスワードを変更。
新しいパスワード:  ←パスワード入力
新しいパスワードを再入力してください:
passwd: 全ての認証トークンが正しく更新できました。

インストール先のディレクトリを作成します。

# mkdir -p /u01/app/oracle
# chown -R oracle:oinstall /u01/app
# chmod -R 775 /u01/app/oracle

一度X Windowをログアウトして、oracleユーザーでログインします。umaskが0022になっていることを確認してからインストーラーを起動します。このときカレントディレクトリが書き込み可能になっている必要があります。

$ umask
0022          ←umaskが0022になっていることを確認する
$ umask 0022  ←0022以外のときは設定する
0022
$ /media/database/runInstaller

文字化けするようであれば、次のようにLANG=Cを追加します。

$ LANG=C /media/database/runInstaller

Oracle Preinstallation RPMを使うと、インストール前の作業がとても簡単になることがわかったと思います。次回はインターネットに接続できないときやRed Hat Enterprise Linuxを使用するとき、そしてASM/RACをインストールするときについて説明します。

にわかワイン通養成講座

第7回 おいしくワインを飲むコツ

堅苦しい話が続いたので、今回はワインをおいしく飲むコツについて説明します。まったく同じワインでも、飲むときの条件によっておいしさは変わります。誰と飲むか、何を食べるかによっても違うのですが、もっと簡単で普遍的なことがあります。それは「グラス」と「ワインの温度」です。この2点に注意することで、千円のワインでも、それ以上高いワインに感じることができます。

まずはグラスです。理想的なワイングラスは、無色透明で、飲み口が薄く、香りを溜めるだけの容量があるものがよいと言われています。値段は千円以上、容量は280cc~350ccくらいのものが家庭用として使いやすいです。百均の厚手のグラスとは、比べものにならない満足感を得られます。

ワイングラスには、リーデルやロブマイヤー、バカラ、シュピゲラウなど有名な会社が数多くあります。とくにリーデルは、日本ではデファクトと言える存在感があり、千円台のものから2万円を超えるものまでラインナップが充実しています。また2万円以上するロブマイヤーのバレリーナシリーズはワインラバーの憧れです。

どれを選ぶかは、予算や用途次第です。でも入門用に1つ選ぶとすれば「リーデル オヴァチュア レッドワイン」がオススメです。薄すぎないので扱いやすく、入手もしやすいです。

次にワインの温度です。「赤は常温で、白は冷やして」とは思っていませんか? これは大きな間違いです。とくに日本のような暑い気候では、夏に赤を常温で飲んだらぬるすぎです。一般にワインの適温は、

白ワイン:5度から14度
赤ワイン:14度から18度

だと言われています。冷蔵庫の温度が4度くらい、クーラーをかけた室内温度が25度から28度くらいであることを考えると、赤の適温とは大きな開きがあることがわかります。

だから私自身も、夏場にレストランでボトルワインの赤を注文するときは、冷やしてもらうことが少なくありません。以前店員さんに「赤は常温で飲むものですよ」と言われて、暴れそうになったことは秘密です(笑)。

また理想の温度幅が広いのは、ワインのタイプによる違いです。こちらもいくつか法則があり、「軽いワインや安いワインは、低めの温度」「重いワインや高級ワインは、高めの温度」と言われています。温度変化を楽しみながら、みなさんの適温を見つけてください。

白ワインは冷蔵庫から出せば徐々に温度が上がるので、ゆっくり飲むか、早めに冷蔵庫から出せばよいのですが、悩ましいのは暑い季節の赤ワインです。

赤ワインを適温で飲むオススメの方法を2つ紹介します。1つめの方法は、冷蔵庫に冷やしておき、飲む1時間くらい前に取り出すことです。もう1つの方法は、ボトルにかぶせるタイプの保冷剤を利用することです。5分から10分くらいかぶせておくと適温になります。このような保冷剤は、キッチン用品で有名な「ル クルーゼ社」などから発売されています。白ワインや缶ビールの保冷にも使えるので便利です。

こんなに暑い日が続くと、きりっと冷やしたスパークリングワインが飲みたくなってきます。乾杯!



第7回 Oracleインストール支援ツールを使う(2)