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


前回はSQL*Plusという小ネタで攻めたので、今回も小ネタで攻めることにします。Linux版Oracleのインストール支援ツールOracle Preinstallation RPMです。単なる紹介だけではつまらないので、少しは内部構造をハックしたり、Linuxに関する豆知識を紹介したりする予定です。

Oracleのインストールは難しい?

昔からOracleのインストールは難しいと言われてきました。Oracle V6のころは職人芸、Oracle7(UNIX版)になっても初心者には大きな壁。その後Oracle Universal Installerが登場してからは、ずいぶん簡単になりました。いまでもRACは、プラットフォームに関係なく大変ですが...。

とくにLinux/UNIX版は、インストール前にいろいろ作業が必要なこともあって、Windows版と比べると面倒であることに変わりはありません。最低でも、次のことを実行する必要があります。

  • 必要なRPMパッケージをインストールする
  • ユーザーとグループを作成する
  • カーネルパラメーターを設定する
  • OSのリソース制限を設定する
  • インストール先ディレクトリを作成する
  • 環境変数を設定する

実際には、上記以外にも「ハードウエアやソフトウエアがシステム要件を満たしていることを確認する」「ドキュメントを読む」といったことも必要です。とくに「リリース・ノート」を読むことは重要です。インストレーション・ガイドに書かれていない、さまざまな注意事項や制限事項が書かれています。必ず読む習慣をつけてください。

Oracle Preinstallation RPMとは

Oracle Preinstallation RPMは、Oracleデータベースをインストールする前の作業を自動化するRPMパッケージです。このRPMを使用すると、先ほど紹介した事前作業の多くを自動化できるので、より簡単・確実にインストールできるようになります。Oracle Preinstallation RPMはOracle Linux 6以降の名称で、Oracle Linux 5ではOracle Validated RPMという名称でした。

Oracle Preinstallation RPMは、Oracle Linuxのインストールメディア、もしくはOracle Public Yumリポジトリから入手できます。インストールするOracleデータベースのバージョンごとに用意されています。

11.2の場合:oracle-rdbms-server-11gR2-preinstall
12.1の場合:oracle-rdbms-server-12cR1-preinstall
12.2の場合:oracle-database-server-12cR2-preinstall

Oracle Preinstallation RPMは、Oracle Linuxだけでなく、Red Hat Enterprise Linux(RHEL)でも使用できます。ただし注意事項があるので、次回以降で紹介します。

今回はOracle Linux 6 Update 6(x86-64)とOracle Database 12c Release 1(12.1.0.2)を使って説明します。ほかのバージョンでも、ほぼ同じ動作です。

Oracle Preinstallation RPMをインストールする

Oracle Preinstallation RPMはインストールメディアにも含まれていますが、たびたびアップデートされています。そのためOracle Public Yumリポジトリ上の最新バージョンがオススメです。

今回はOracle Preinstallation RPMの機能にフォーカスするため、インターネットへ外部接続(http/https)できるサーバーを前提とします。インターネットに接続できないサーバーでの使い方は、次回以降で紹介します。

インターネットに接続可能なサーバーの場合、次のように実行するだけです。これだけで先ほど紹介した、必要なRPMのインストールや、ユーザーの作成などが自動的に行われます。日本語環境ではうまく動かないことがあるので、先頭にLANG=Cを付けて英語モードで実行します。

# LANG=C yum install oracle-rdbms-server-12cR1-preinstall

なおインターネット接続にプロキシが必要なネットワークでは、/etc/yum.confにプロキシサーバーの設定を追加する必要があります。

proxy=http://proxy.sample.com:8080/  ←プロキシサーバー

たったこれだけで事前作業が終わってしまうのは、RPM/Yumが持つ「依存性解決機能」と「スクリプト実行機能」によるものです。次にOracle Preinstallation RPMをインストールすることで、実際にどんなことが行われるのか調べてみましょう。

RPMの依存関係を調べる

先ほどは表示を省略しましたが、実際にOracle Preinstallation RPMをインストールすると、不足しているRPMが自動的にインストールされます。このサーバーでは、libaio-develやkshなどがインストールされたことがわかります。サーバーによってインストールされるRPMの数は違います。

# LANG=C yum install oracle-rdbms-server-12cR1-preinstall
Loaded plugins: refresh-packagekit, security
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package oracle-rdbms-server-12cR1-preinstall.x86_64 0:1.0-13.el6 will be installed
--> Processing Dependency: compat-libcap1 for package: oracle-rdbms-server-12cR1-preinstall-1.0-13.el6.x86_64
--> Processing Dependency: ksh for package: oracle-rdbms-server-12cR1-preinstall-1.0-13.el6.x86_64
--> Processing Dependency: libaio-devel for package: oracle-rdbms-server-12cR1-preinstall-1.0-13.el6.x86_64
--> Processing Dependency: compat-libstdc++-33 for package: oracle-rdbms-server-12cR1-preinstall-1.0-13.el6.x86_64
--> Running transaction check
---> Package compat-libcap1.x86_64 0:1.10-1 will be installed
---> Package compat-libstdc++-33.x86_64 0:3.2.3-69.el6 will be installed
---> Package ksh.x86_64 0:20120801-21.el6_6.3 will be installed
---> Package libaio-devel.x86_64 0:0.3.107-10.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                     Arch   Version             Repository         Size
================================================================================
Installing:
 oracle-rdbms-server-12cR1-preinstall
                             x86_64 1.0-13.el6          public_ol6_latest  16 k
Installing for dependencies:
 compat-libcap1              x86_64 1.10-1              public_ol6_latest  17 k
 compat-libstdc++-33         x86_64 3.2.3-69.el6        public_ol6_latest 183 k
 ksh                         x86_64 20120801-21.el6_6.3 public_ol6_latest 758 k
 libaio-devel                x86_64 0.3.107-10.el6      public_ol6_latest  13 k

Transaction Summary
================================================================================
Install       5 Package(s)

Total download size: 986 k
Installed size: 2.5 M
Is this ok [y/N]: y ← yを入力

このように自動的にインストールされる理由は「○○をインストールするためには○○が必要」という依存関係がRPM内に記述されているからです。Yumリポジトリに接続していると、この依存関係情報を基に、必要なRPMパッケージを自動的にインストールできます。

依存関係を事前に調べる方法を2つ紹介します。RPMがローカルにある場合には-Rオプション(--requires)で表示できます。ただしこの場合は、RPMパッケージ名ではなく、ファイル名やライブラリ名が表示されることもあります。

# rpm -qpR oracle-rdbms-server-12cR1-preinstall-1.0-13.el6.x86_64.rpm
/bin/bash  
/bin/sh  
/bin/sh  
/bin/sh  
/bin/sh  
/etc/redhat-release  
bc  
bind-utils  
binutils  
compat-libcap1  
compat-libstdc++-33  
config(oracle-rdbms-server-12cR1-preinstall) = 1.0-13.el6
ethtool  
gcc  
gcc-c++  
glibc

Yumリポジトリに接続可能なサーバーでは、yum deplistを実行することで依存関係のあるパッケージ名を表示できます。

# yum deplist oracle-rdbms-server-12cR1-preinstall
読み込んだプラグイン:refresh-packagekit, security
依存性の検索中: 
パッケージ    : oracle-rdbms-server-12cR1-preinstall.x86_64 1.0-12.el6
  依存性      : sysstat
   provider: sysstat.x86_64 9.0.4-27.el6
  依存性      : make
   provider: make.x86_64 1:3.81-20.el6
  依存性      : libaio
   provider: libaio.i686 0.3.107-10.el6
   provider: libaio.x86_64 0.3.107-10.el6
  依存性      : pam
   provider: pam.i686 1.1.1-20.el6
   provider: pam.x86_64 1.1.1-20.el6
  依存性      : xorg-x11-utils
   provider: xorg-x11-utils.x86_64 7.5-6.el6
  依存性      : gcc
   provider: gcc.x86_64 4.4.7-11.el6
  依存性      : compat-libcap1
   provider: compat-libcap1.i686 1.10-1
   provider: compat-libcap1.x86_64 1.10-1
  依存性      : nfs-utils
   provider: nfs-utils.x86_64 1:1.2.3-54.el6
  依存性      : /bin/sh
   provider: bash.x86_64 4.1.2-29.el6.0.1
   provider: bash.x86_64 4.1.2-29.el6
  依存性      : /bin/bash
   provider: bash.x86_64 4.1.2-29.el6.0.1
   provider: bash.x86_64 4.1.2-29.el6
  依存性      : compat-libstdc++-33
   provider: compat-libstdc++-33.i686 3.2.3-69.el6
   provider: compat-libstdc++-33.x86_64 3.2.3-69.el6
  依存性      : bc
   provider: bc.x86_64 1.06.95-1.el6
  依存性      : ksh
   provider: ksh.x86_64 20120801-21.el6.1
   provider: ksh.x86_64 20120801-21.el6
   provider: ksh.x86_64 20120801-21.el6_6.2
   provider: ksh.x86_64 20120801-21.el6_6.3

スクリプト実行部分を見る

次にRPMのスクリプト実行部分を見てみましょう。--scriptsオプションを指定すると、RPMをインストールしたときに実行するスクリプトを表示できます。preinstallセクションがインストール前に実行する部分で、postinstallセクションがインストール後に実行する部分です。

# rpm -qp --scripts oracle-rdbms-server-12cR1-preinstall-1.0-13.el6.x86_64.rpm
preinstall scriptlet (using /bin/sh): ←インストール前に実行するスクリプト

if [ -f  /etc/sysconfig/oracle-rdbms-server-12cR1-preinstall/oracle-rdbms-server-12cR1-preinstall.param ]; then 
  cp -f /etc/sysconfig/oracle-rdbms-server-12cR1-preinstall/oracle-rdbms-server-12cR1-preinstall.param /var/log/oracle-rdbms-server-12cR1-preinstall/results/.oracle-rdbms-server-12cR1-preinstall.param 
fi

if [ -d /etc/sysconfig/oracle-rdbms-server-12cR1-preinstall ]; then
  rm -rf /etc/sysconfig/oracle-rdbms-server-12cR1-preinstall 
fi
postinstall scriptlet (using /bin/sh): ←インストール後に実行するスクリプト
/usr/bin/oracle-rdbms-server-12cR1-preinstall-verify 2> /dev/null 1>&2

if ! [ -f /etc/sysconfig/oracle-rdbms-server-12cR1-preinstall/oracle-rdbms-server-12cR1-preinstall.conf ]; then
    chkconfig --add oracle-rdbms-server-12cR1-preinstall-firstboot 
fi
preuninstall scriptlet (using /bin/sh): ←アンインストール後に実行するスクリプト
if [ "$1" = "0" ] ; then # last uninstall
 chkconfig --del oracle-rdbms-server-12cR1-preinstall-firstboot
 if [ -x /usr/bin/oracle-rdbms-server-12cR1-preinstall-verify ]; then
   /usr/bin/oracle-rdbms-server-12cR1-preinstall-verify -u 2> /dev/null 1>&2
 fi
fi

postinstallセクションにある、12行目のoracle-rdbms-server-12cR1-preinstall-verifyスクリプトが怪しそうです。

またRPMに含まれるファイルは次のコマンドでわかります。この結果を見ると、先ほどのスクリプトに加え、/etc/security/limits.d/にリソース制限の設定ファイルがあることや(3行目)、パラメーターファイルらしきものがあること(6行目)、/var/log/oracle-rdbms-server-12cR1-preinstallにログらしきものがあること(9行目)に気づきます。

# rpm -qlp oracle-rdbms-server-12cR1-preinstall-1.0-13.el6.x86_64.rpm
/etc/rc.d/init.d/oracle-rdbms-server-12cR1-preinstall-firstboot
/etc/security/limits.d/oracle-rdbms-server-12cR1-preinstall.conf
/etc/sysconfig/oracle-rdbms-server-12cR1-preinstall
/etc/sysconfig/oracle-rdbms-server-12cR1-preinstall/oracle-rdbms-server-12cR1-preinstall-verify
/etc/sysconfig/oracle-rdbms-server-12cR1-preinstall/oracle-rdbms-server-12cR1-preinstall.param
/usr/bin/oracle-rdbms-server-12cR1-preinstall-verify
/var/log/oracle-rdbms-server-12cR1-preinstall
/var/log/oracle-rdbms-server-12cR1-preinstall/results

まだ途中ですが、長くなったので、あと数回に分けて説明します。今回はOracle Preinstallation RPMの全体像や仕組みを説明したので、次回は出力されたログファイルから詳細な動きを解析します。

にわかワイン通養成講座

第6回 ワインの値段(2)

前回は、ほかのお酒と比較してワインが高くなりやすい理由を説明しました。今回は同じワインでも値段が大きく違う理由を説明します。おもな理由としては「国や地域の違い」や「作り方の違い」による生産コストの違いがあります。そして影響が大きいのは、需要と供給の関係です。それぞれについて、もう少し詳しく説明します。

国や地域の違い

ワインは世界中で作られています。当然ながら、国や地域によって、土地代や人件費は異なります。チリワインが安いのも、土地代や人件費が安いからであり、またブドウ栽培に適した土地だからです。

そして高級ワイン用ブドウを生産できる地域は限られていることです。高級ワインの生産地域は、フランスならボルドーやブルゴーニュ、イタリアならばピエモンテやトスカーナ、アメリカならばナパ・バレーやソノマと言った一部の地域です。1万円を超えるようなワインは、これらの銘醸地域でも、さらに厳選されたトップクラスの畑に限られます。

作り方の違い

原材料になるブドウの作り方も違います。高級ワイン用ブドウを作るためには、凝縮した味わいにするため、ブドウの木1本当たりの収穫量を抑えています。生産地域の気候やブドウ品種によっても違うので一概には言えませんが、高級ワインと安いワインでは、単位面積当たりの収穫量は6倍から10倍違います。また高級ワイン用ブドウは、まるで盆栽を仕立てるように手間をかけて育てています。

製造方法にも違いがあります。一般的に安いワインは、ステンレスタンクで発酵させ、数カ月から長くても1年程度で出荷しています。それに対し高級ワインは、オークの新樽で何年も熟成させてから出荷することが珍しくありません。後者の場合、樽にかかる費用や、保管維持するための費用が増えるので、当然ワインの値段にも反映します。

需要と供給の関係

極端に高いワインが存在するのは、需要と供給の関係に依存するところが大きいと言えます。ブランド力、人気・評価、生産量、生産年など、ワインには価格を左右するパラメーターがたくさんあります。

ファッションのブランド品が高価なように、ワインでもブランド品は高価格で取り引きされています。またブランド品であるほど、宣伝広告などのマーケティング費用も膨大になり、それが価格に反映します。

ワインで特殊なのは、出荷から年月を経るほど価格が上昇する傾向にあるため、投資の対象になっていることです。またワインを100点法で評価するメディアがいくつかあり、価格の変動に拍車をかけています。いままで無名だったワインでも、著名な評論家が100点を付ければ、あっという間に高騰します。

まとめ

いろいろ書きましたが、気になるのは「高いワインはおいしいのか」という疑問でしょう。私見ですが、「ワインは嗜好品なので、高いからといっておいしいとは限らない」と考えています。ある程度飲み慣れている人の間でさえ、好みは大きく分かれると感じています。しかしながら「高いワインのほうがおいしい確率は高い」とは思っています。

この分類は乱暴ですが、大まかに分けて、千円前後のもの、2千円前後のもの、5千円以下のもの、2万円以下のもの、それ以上のものくらいで味わいが違ってきます。とはいえ例外が多いのも悩ましいところで、2千円でも5千円以上に感じることもあれば、逆に3万円でも平凡なワインはあります。結局のところ、値段に惑わされず、自分の価値観で選ぶことが大切です。



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