Linux版Oracle

ORACLE MASTER Oracle Database 11gの学習用の環境を構築。あまりPCのレジストリなどを汚したくなかったので仮想環境上に作成。

OS Fedora16 デスクトップ版
※ Ubuntu12.04LTS上のVMWare Playerで動作
アプリケーション Oracle Database 11g Release 2
Standard Edition, Standard Edition One, and Enterprise Edition
(11.2.0.1.0) Linux x86

Oracleから本体をダウンロードする。

linux_11gR2_database_1of2.zip
linux_11gR2_database_2of2.zip
# vi /etc/hosts

以下の行を追加する。

<IP-address>  <fully-qualified-machine-name>  <machine-name>

例)

127.0.0.1               localhost.localdomain    localhost
192.168.1.86            localhost.localdomain     fedora16
::1                     localhost6.localdomain6  localhost6
fedora16.localdomainとした方が良いと思いますが、成功したものを変えるのがめんどいのでそのままにしてます。

必要なパラメータ

fs.aio-max-nr 1048576
fs.file-max 6815744
kernel.shmall 2097152
kernel.shmmax 536870912
kernel.shmmni 4096
kernel.sem 250 32000 100 128
net.ipv4.ip_local_port_range 9000 65500
net.core.rmem_default 262144
net.core.rmem_max 4194304
net.core.wmem_default 262144
net.core.wmem_max 1048586

fedora16の初期状態で

# /sbin/sysctl -a | grep fs.aio-max-nr
fs.aio-max-nr = 65536
# /sbin/sysctl -a | grep fs.file-max
fs.file-max = 204871
# /sbin/sysctl -a | grep kernel.shmall
kernel.shmall = 2097152
# /sbin/sysctl -a | grep kernel.shmmax
kernel.shmmax = 33554432
# /sbin/sysctl -a | grep kernel.shmmni
kernel.shmmni = 4096
# /sbin/sysctl -a | grep kernel.sem
kernel.sem = 250        32000   32      128
# /sbin/sysctl -a | grep net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768    61000
# /sbin/sysctl -a | grep net.core.rmem_default
net.core.rmem_default = 163840
# /sbin/sysctl -a | grep net.core.rmem_max
net.core.rmem_max = 131071
# /sbin/sysctl -a | grep net.core.wmem_default
net.core.wmem_default = 163840
# /sbin/sysctl -a | grep net.core.wmem_max
net.core.wmem_max = 131071

こんな感じ。全然要件足りない。

# vi /etc/sysctl.conf

以下を追記。

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048586

反映する。

# /sbin/sysctl -p
# vi /etc/security/limits.conf

以下を追記。

oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  1024
oracle              hard    nofile  65536
# vi /etc/pam.d/login

以下を追記

session    required     pam_limits.so
# vi /etc/selinux/config

SELINUXを探して以下のように書き換える。

SELINUX=disabled

いくつかのパッケージはすでに入っていると怒られたりした。

# yum install compat-libstdc++-33.i686
# yum install elfutils-libelf-devel
# yum install glibc-devel.i686
# yum install ksh
# yum install libaio
# yum install libaio.i686
# yum install libaio-devel
# yum install libaio-i686
# yum install libaio-devel.i686
# yum install libstdc++.i686
# yum install numactl-devel
# yum install sysstat
# yum install unixODBC
# yum install unixODBC.i686
# yum install unixODBC-devel
# yum install unixODBC-devel.i686

後で怒られたので以下もインストールする

# yum install binutils gcc gcc-c++ libstdc++-devel

意味は深く考えず、そのまま入力。

# groupadd oinstall
# groupadd dba
# groupadd oper
# groupadd asmadmin
# useradd -g oinstall -G dba,oper,asmadmin oracle
# passwd oracle

db_1となっててその通り実行したが、 おそらくdbhome_1とした方が良いのではないかと思われる。

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

成功しなかったっぽい?無視して先に進めた。

# xhost +<machine-name>
# vi /etc/redhat-release

以下に書き換えて、詐称します。元のファイルはバックアップとっといた方が後で楽かも。

redhat release 5
.bash_profileの場合suコマンドによるログインで反映されなかった1)ので.bashrcに追記してます。

Oracleのホームディレクトリにある.bashrcを編集する。

$ vi /home/oracle/.bashrc

以下を追記する。各変数の値には注意。

# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

ORACLE_HOSTNAME=localhost.localdomain; export ORACLE_HOSTNAME
ORACLE_UNQNAME=orcl; export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

if [ $USER = "oracle" ]; then
  if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
  else
    ulimit -u 16384 -n 65536
  fi
fi

Oracleユーザでインストーラを実行する。 Oracleユーザでデスクトップのログインしようとしたら先に進めなくなったので、別のユーザからsuで。 LANG=Cは前回やったときにインストーラが文字化けした教訓からやっておいた。

# su oracle
$ unzip linux_11gR2_database_1of2.zip
$ unzip linux_11gR2_database_2of2.zip
$ export LANG=C
$ /database/runInstaller

インストーラはほぼデフォルトで進めた。文字コードだけAL32UTF8に変えた。

pdksh

kshで逃げます。Ignoreする。

どうやら防げないエラーがあるらしい

http://fedoraforum.org/forum/showthread.php?t=247430 より

13. At some point during the installation you will likely get the following error:
Code:
“Error in invoking target 'agent nmhs' of makefile '/u01/app/oracle/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk'”


Note I just used the default ORACLE Home of “dbhome_1.” I am not sure of how to fix this error, and it will prevent Enterprise Manager from working correctly. Click “Continue.” In the future if I figure out how to fix it I will edit this guide.

無視して続ける。

# vi /etc/redhat-release

元に戻しておく。

Fedora release 16 (Verne)

dbstartコマンドやdbshutコマンドで使う設定ファイルを作成する。

# vi /etc/oratab
orcl:/u01/app/oracle/product/11.2.0/dbhome_1:Y

自動起動設定のサイトよりスクリプトを拝借しています。 詳細は上記リンクの

[2] 起動スクリプトを作成してOracleを起動します。

の項を参照。

Automating Database Startup and Shutdown on Linuxでも情報あるので見ておくと良いかも。

# shutdown -r now

再起動後にemが繋がれば、大丈夫だと思われます。

なかなかできないと思っていろいろいじっていたら、気になることが結構あった。

emが繋がらない部分の解決

コマンドで起動しても一見正常に動いているように見えるが、繋がらない状態。

$ emctl start dbconsole
Oracle Enterprise Manager 11g Database Control Release 11.2.0.1.0
Copyright (c) 1996, 2009 Oracle Corporation.  All rights reserved.
http://localhost:1158/em/console/aboutApplication
Starting Oracle Enterprise Manager 11g Database Control .... started.
------------------------------------------------------------------
Logs are generated in directory /u01/app/oracle/product/11.2.0/dbhome_1/localhost_orcl/sysman/log

検索結果2)を参考にログを見てみる。

$ vi /u01/app/oracle/product/11.2.0/dbhome_1/localhost_orcl/sysman/log/emagent.log
2012-04-30 09:30:32,210 Thread-3034716416 Starting Agent 10.2.0.4.2 from /u01/app/oracle/product/11.2.0/dbhome_1 (00701)
2012-04-30 09:30:32,217 Thread-3034716416 <Agent Startup> : Startup of HTTP LISTENER failure (00716)

起動失敗してるね。

$ vi /u01/app/oracle/product/11.2.0/dbhome_1/localhost_orcl/sysman/log/emagent.trc
2012-04-30 09:30:32,217 Thread-3034716416 ERROR http: snmehl_allocateListenerPort: failed to listen on all sockets for hostname  and port 3938
2012-04-30 09:30:32,217 Thread-3034716416 ERROR http: nmehl_startHttpListener: failed to listen to HTTP(s) port for http://localhost:3938/emd/main
2012-04-30 09:30:32,217 Thread-3034716416 ERROR main: nmehl_startHttpListener failed starting http listener.

うーん、調べる3)と/etc/hostsの設定が悪いのでは。

# vi /etc/hosts
127.0.0.1               localhost.localdomain localhost
192.168.1.86            fedora16.localdomain fedora16
::1             localhost6.localdomain6 localhost6

fedora16.localdomainじゃなくてlocalhost.localdomainにする。 自動起動で動作を確認したいので再起動する。

# shutdown -r now

しばし待つ。

$ vi /u01/app/oracle/product/11.2.0/dbhome_1/localhost_orcl/sysman/log/emagent.log
2012-04-30 09:36:41,433 Thread-3034794240 Starting Agent 10.2.0.4.2 from /u01/app/oracle/product/11.2.0/dbhome_1 (00701)
2012-04-30 09:36:41,817 Thread-3034794240 [Oracle Exadata Storage Server] InstanceProperty (MgmtIPAddr2) is marked OPTIONAL but is being used (00506)
2012-04-30 09:36:42,347 Thread-3034794240 [Load Balancer Switch] InstanceProperty (snmpTimeout) is marked OPTIONAL but is being used (00506)
2012-04-30 09:36:47,958 Thread-3034794240 EMAgent started successfully (00702)

おっ、起動したっぽい! 別PCからブラウザでアクセスしたところ、繋がった!