読者です 読者をやめる 読者になる 読者になる

12cでOracle Restart環境(ASM)を作っちゃおうぜ!!の巻

※ここで記載した内容は独断と偏見に基づく個人の見解であり、実行しているコマンドや手順も必ずしも正しい手順ではありません。その為、あくまで参考程度にご覧頂ければと思います。


How to install Oracle Database 12.1.0.1 Restart(ASM) on OEL5.8

 

■概要
Oracle Database 12.1.0.1 Restart(ASM)環境の構築時の手順を纏めましたので記録として残します。正式な手順ではないので、本番環境などの構築の参考にするのはご遠慮ください。

 

手順を実行するのに要する時間として、私は慣れているので1時間位で構築出来ましたが、慣れていない場合はそれ以上かかるかもしれません。


■構成

OS環境:Oracle Enterprise Linux 5.8
Grid:Grid Infrastructure 12.1.0.1
DB:Oracle Database 12.1.0.1


■環境概要

[Grid Infrastructure側構成概要]
ORACLE_BASE: /opt/app/oracle
ORACLE_HOME(gridのホーム):$ORACLE_BASE/product/12.1.0.1/grid
OSユーザ:grid
ORACLE_SID:+ASM

 

[DB 側構成概要]
ORACLLE_BASE:/opt/app/oracle
ORACLE_HOME(DBのホーム):$ORACLE_BASE/product/12.1.0.1/dbhome_1
OSユーザ:oracle
ORACLE_SID=orcl

 

[ASM構成概要]
ディスクグループ名:+DATA
ディスクグループの冗長:External(冗長無し)


■環境構築手順

(1)必須パッケージの確認
必要なパッケージがインストールされているか確認します。私の環境ではサーバーのインストール時に必要なパッケージが揃っていましたが不足している場合は任意の方法でインストールください。

[root@localhost grid]# rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE}(%{ARCH})\n' binutils \
> compat-libstdc++-33 \
> gcc \
> gcc-c++ \
> glibc \
> glibc-common \
> glibc-devel \
> glibc-headers \
> ksh \
> libaio \
> libaio-devel \
> libgcc \
> libstdc++ \
> libstdc++-devel \
> libXext \
> libXtst \
> libX11 \
> libXau \
> libXi \
> make \
> sysstat \
> unixODBC \
> unixODBC-devel
binutils-2.17.50.0.6-20.el5(x86_64)
compat-libstdc++-33-3.2.3-61(x86_64)
compat-libstdc++-33-3.2.3-61(i386)
gcc-4.1.2-52.el5(x86_64)
gcc-c++-4.1.2-52.el5(x86_64)
glibc-2.5-81(x86_64)
glibc-2.5-81(i686)
glibc-common-2.5-81(x86_64)
glibc-devel-2.5-81(x86_64)
glibc-devel-2.5-81(i386)
glibc-headers-2.5-81(x86_64)
ksh-20100621-5.el5(x86_64)
libaio-0.3.106-5(x86_64)
libaio-0.3.106-5(i386)
libaio-devel-0.3.106-5(x86_64)
libaio-devel-0.3.106-5(i386)
libgcc-4.1.2-52.el5(x86_64)
libgcc-4.1.2-52.el5(i386)
libstdc++-4.1.2-52.el5(x86_64)
libstdc++-4.1.2-52.el5(i386)
libstdc++-devel-4.1.2-52.el5(x86_64)
libXext-1.0.1-2.1(x86_64)
libXext-1.0.1-2.1(i386)
libXtst-1.0.1-3.1(x86_64)
libXtst-1.0.1-3.1(i386)
libX11-1.0.3-11.el5_7.1(x86_64)
libX11-1.0.3-11.el5_7.1(i386)
libXau-1.0.1-3.1(x86_64)
libXau-1.0.1-3.1(i386)
libXi-1.0.1-4.el5_4(x86_64)
libXi-1.0.1-4.el5_4(i386)
make-3.81-3.el5(x86_64)
sysstat-7.0.2-11.el5(x86_64)
unixODBC-2.2.11-10.el5(x86_64)
unixODBC-devel-2.2.11-10.el5(x86_64)
unixODBC-devel-2.2.11-10.el5(i386)


(2)カーネルパラメータの編集

[root@localhost grid]# vi /etc/sysctl.conf
kernel.core_uses_pid = 1
kernel.msgmax = 65536
kernel.msgmnb = 65535
kernel.msgmni = 2878
kernel.panic = 10
kernel.sem = 256 32000 100 142
kernel.shmall = 4294967296
kernel.shmmax = 68719476736
kernel.shmmni = 4096
kernel.sysrq = 0
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.ip_forward = 0
net.ipv4.tcp_syncookies = 1
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576

 

(3)カーネルパラメータ変更の反映
[root@localhost grid]# /sbin/sysctl -p


(4)limits.confの編集
[root@localhost grid]# vi /etc/security/limits.conf

* hard nproc 16384
* soft nofile 2048
* hard nofile 65536


(5)ディスク容量の確認
[grid@localhost ~]$ df -h
Filesystem サイズ 使用 残り 使用% マウント位置
/dev/sda1 9.5G 3.8G 5.3G 42% /
/dev/sda2 29G 6.6G 21G 25% /opt
tmpfs 1.5G 0 1.5G 0% /dev/shm
F 233G 149G 84G 64% /media/sf_F
/dev/sr0 56M 56M 0 100% /media/VBOXADDITIONS_4.3.16_95972


(6)メモリ容量の確認
12cでGrid Infrastructureをインストールする際の最低メモリ要件は4Gとなっています。私の環境は約3GBとなっていますが、要件は満たす様にしてください。

[grid@localhost ~]$ free
total used free shared buffers cached
Mem: 3048752 1749096 1299656 0 32716 1195052
-/+ buffers/cache: 521328 2527424
Swap: 4096564 0 4096564


(7)SWAPの確認
SWAP領域はメモリと同等ほどで問題ありません。

[grid@localhost oracle]$ /sbin/swapon -s
Filename Type Size Used Priority
/dev/sda3 partition 4096564 0 -1


(8)必要なグループとOSユーザを作成します。

[root@localhost ~]# groupadd oinstall
[root@localhost ~]# groupadd oper
[root@localhost ~]# groupadd asmoper 
[root@localhost ~]# groupadd asmadmin
[root@localhost ~]# groupadd asmdba
[root@localhost ~]# groupadd dba
[root@localhost home]# useradd -g oinstall -G dba,asmdba,oper oracle
[root@localhost home]# useradd -g oinstall -G asmadmin,asmdba,asmoper,oper,dba grid


(9)作成したoracleユーザとgridユーザのパスワードを設定します。

[root@localhost oracle]# passwd grid
Changing password for user grid.
New UNIX password:
BAD PASSWORD: it is too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

[root@localhost oracle]# passwd oracle
Changing password for user oracle.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully.


(10)必要なディレクトリを作成後、権限やパーミッションの変更を行います。
[root@localhost home]# mkdir -p /opt/app/oracle/product/12.1.0/dbhome_1
[root@localhost home]# mkdir -p /opt/app/grid/product/12.1.0/grid
[root@localhost home]# chown -R oracle:oinstall /opt/app/
[root@localhost home]# chown -R grid:oinstall /opt/app/grid
[root@localhost home]# chmod -R 775 /u01/


(11)gridユーザのプロファイルに必要な環境変数の設定を行います。

[grid@localhost ~]$ vi .bash_profile
export PATH
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_SID=+ASM; export ORACLE_SID
ORACLE_BASE=/opt/app/grid; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/12.1.0/grid; export ORACLE_HOME
PATH=$ORACLE_HOME/bin:$PATH; export PATH


(12)oracleユーザも同様にプロファイルの設定を行っていきます。

[oracle@localhost ~]$ vi .bash_profile
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/opt/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/12.1.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


(13)追加したディスクの確認
任意の方法で新規のディスクを追加後、fdiskコマンドでディスクが認識されている事を確認します。

[root@localhost ~]# fdisk -l

Disk /dev/sda: 47.8 GB, 47878307840 bytes
255 heads, 63 sectors/track, 5820 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

バイス Boot Start End Blocks Id System
/dev/sda1 * 1 1275 10241406 83 Linux
/dev/sda2 1276 5101 30732345 83 Linux
/dev/sda3 5102 5611 4096575 82 Linux swap / Solaris

Disk /dev/sdb: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

ディスク /dev/sdb は正常な領域テーブルを含んでいません


(14)追加したディスクのフォーマット
fdiskコマンドを使用し、ディスクをフォーマットします。

[root@localhost oracle]# /sbin/fdisk /dev/sdb
バイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は
メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。

このディスクのシリンダ数は 1566 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
(例. DOS FDISK, OS/2 FDISK)
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-1566, default 1): 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-1566, default 1566):
Using default value 1566

コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。


(15)gridユーザがアクセスできるようにブロックデバイスの権限を変更します

[root@hoge ~]# chown grid:oinstall /dev/sdb1
[root@hoge ~]# chmod u=rw /dev/sdb1


(16)上記の設定をOSの再起動後にも有効化するために以下ファイルを作成し、必要なエントリを追加します。

[root@hoge ~]# vi /etc/udev/rules.d/51-oracle.rules
#ASM
KERNEL=="sdb1",OWNER="grid",GROUP="oinstall",MODE="0660"


(17)作成した「51-oracle.rules」の内容を以下コマンドでパーティションに反映します。

[root@hoge ~]# udevcontrol reload_rules
[root@hoge ~]# start_udev
udev を起動中: [ OK ]


(18)GridInfrastructureのメディアをgridユーザで解凍後、インストーラを進めていきます。

※特に悩む項目もないと思うので、GUI上の操作については省略します。
[grid@localhost grid]$ unzip linuxamd64_12c_grid_1of2.zip
[grid@localhost grid]$ unzip linuxamd64_12c_grid_2of2.zip
[grid@localhost grid]$ ./runInstaller
Oracle Universal Installerを起動中です...

一時領域の確認中: 120MBを超えている必要があります. 実際 5822MB 問題なし
スワップ領域の確認中: 150MBを超えている必要があります. 実際 4000MB 問題なし
モニターの確認中: 少なくとも256色表示するよう設定されている必要があります. 実際 16777216 問題なし
Oracle Universal Installerの起動を準備中 /tmp/OraInstall2015-02-27_11-57-22PM. お待ちくださ


(19)DBのメディアをoracleユーザで解凍後、インストーラを進めていきます。

※特に悩む項目もないと思うので、GUI上の操作については省略します。
[oracle@localhost oracle]$ unzip linuxamd64_12c_database_1of2.zip
[oracle@localhost oracle]$ unzip linuxamd64_12c_database_2of2.zip
[oracle@localhost database]$ ./runInstaller
Oracle Universal Installerを起動中です...

一時領域の確認中: 500MBを超えている必要があります. 実際 5759MB 問題なし
スワップ領域の確認中: 150MBを超えている必要があります. 実際 4000MB 問題なし
モニターの確認中: 少なくとも256色表示するよう設定されている必要があります. 実際 16777216 問題なし
Oracle Universal Installerの起動を準備中 /tmp/OraInstall2015-02-28_12-40-32AM. お待ちください...


■環境構築後のおまけ

環境が構築できたので、少し遊んでみましょう。


(1)OSターミナルからASMCMDユーティリティを起動させます。その後、ASMインスタンスのディスク・グループをリストしてみます。

[grid@hoge ~]$ asmcmd

ASMCMD> lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED EXTERN N 512 4096 1048576 12284 9771 0 9771 0 N DATA/

(2)SQL*PLUSから作成されたデータファイルを確認します。

SQL> select name from V$datafile;

NAME
--------------------------------------------------------------------------------
+DATA/ORCL/DATAFILE/system.258.873197537
+DATA/ORCL/DATAFILE/example.270.873197687
+DATA/ORCL/DATAFILE/sysaux.257.873197453
+DATA/ORCL/DATAFILE/undotbs1.260.873197635
+DATA/ORCL/DATAFILE/users.259.873197633

 

(3)srvctlコマンドでDBの構成を確認します。

[grid@hoge dbs]$ srvctl config database -d ORCL
一意のデータベース名: orcl
データベース名: orcl
Oracleホーム: /opt/app/oracle/product/12.1.0/dbhome_1
Oracleユーザー: oracle
spfile: +DATA/orcl/spfileORCL.ora
パスワード・ファイル:
ドメイン:
開始オプション: open
停止オプション: immediate
データベース・ロール: PRIMARY
管理ポリシー: AUTOMATIC
データベース・インスタンス: ORCL
ディスク・グループ: DATA
サービス:


(4)srvctlコマンドでasmの構成を確認してみましょう。
[grid@hoge ~]$ srvctl config asm
ASMホーム: /opt/app/grid/product/12.1.0/grid
パスワード・ファイル: +DATA/orapwasm
ASMリスナー: LISTENER
spfile: +DATA/ASM/ASMPARAMETERFILE/registry.253.873196493
ASMディスク・グループ検出文字列:


(5)srvctlコマンドでリスナーの構成を確認してみましょう
[grid@hoge ~]$ srvctl config listener
名前: LISTENER
ホーム: /opt/app/grid/product/12.1.0/grid
エンド・ポイント: TCP:1521


(6)同じくonsプロセス構成を確認してみましょう。

[grid@hoge dbs]$ srvctl config ons
ONSが存在します: ローカル・ポート6100、リモート・ポート6200、EMポート2016


(7)psコマンドでGridInfrastrucure固有のプロセスを確認してみましょう。

[grid@hoge ~]$ ps -ef |grep /grid/bin
grid 2837 1 1 11:38 ? 00:00:06 /opt/app/grid/product/12.1.0/grid/bin/ohasd.bin reboot
grid 3561 1 1 11:41 ? 00:00:02 /opt/app/grid/product/12.1.0/grid/bin/oraagent.bin
grid 3576 1 0 11:41 ? 00:00:00 /opt/app/grid/product/12.1.0/grid/bin/evmd.bin
grid 3582 1 0 11:41 ? 00:00:00 /opt/app/grid/product/12.1.0/grid/bin/tnslsnr LISTENER -no_crs_notify -inherit
grid 3597 3576 0 11:41 ? 00:00:00 /opt/app/grid/product/12.1.0/grid/bin/evmlogger.bin -o /opt/app/grid/product/12.1.0/grid/log/[HOSTNAME]/evmd/evmlogger.info -l /opt/app/grid/product/12.1.0/grid/log/[HOSTNAME]/evmd/evmlogger.log
grid 3605 1 0 11:41 ? 00:00:00 /opt/app/grid/product/12.1.0/grid/bin/cssdagent
grid 3629 1 0 11:41 ? 00:00:00 /opt/app/grid/product/12.1.0/grid/bin/ocssd.bin
grid 3945 3423 0 11:44 pts/1 00:00:00 grep /grid/bin


(8)PSコマンドでASMインスタンス側のプロセスの起動状態を確認してみます。

[grid@hoge ~]$ ps -ef |grep asm_
grid 3665 1 0 11:41 ? 00:00:00 asm_pmon_+ASM
grid 3667 1 0 11:41 ? 00:00:00 asm_psp0_+ASM
grid 3670 1 4 11:41 ? 00:00:09 asm_vktm_+ASM
grid 3674 1 0 11:41 ? 00:00:00 asm_gen0_+ASM
grid 3676 1 0 11:41 ? 00:00:00 asm_mman_+ASM
grid 3680 1 0 11:41 ? 00:00:00 asm_diag_+ASM
grid 3682 1 0 11:41 ? 00:00:00 asm_dia0_+ASM
grid 3684 1 0 11:41 ? 00:00:00 asm_dbw0_+ASM
grid 3686 1 0 11:41 ? 00:00:00 asm_lgwr_+ASM
grid 3688 1 0 11:41 ? 00:00:00 asm_ckpt_+ASM
grid 3690 1 0 11:41 ? 00:00:00 asm_smon_+ASM
grid 3692 1 0 11:41 ? 00:00:00 asm_lreg_+ASM
grid 3694 1 0 11:41 ? 00:00:00 asm_rbal_+ASM
grid 3696 1 0 11:41 ? 00:00:00 asm_gmon_+ASM
grid 3698 1 0 11:41 ? 00:00:00 asm_mmon_+ASM
grid 3700 1 0 11:41 ? 00:00:00 asm_mmnl_+ASM
grid 3731 1 0 11:41 ? 00:00:00 asm_asmb_+ASM
grid 3735 1 0 11:41 ? 00:00:00 asm_o000_+ASM

 

(9)lsnrctl statusコマンドでリスナーの構成状況を確認してみましょう。

[oracle@hoge ~]$ lsnrctl status

LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 01-MAR-2015 13:34:55

Copyright (c) 1991, 2013, Oracle. All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 12.1.0.1.0 - Production
Start Date 01-MAR-2015 11:57:54
Uptime 0 days 1 hr. 37 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/app/grid/product/12.1.0/grid/network/admin/listener.ora
Listener Log File /opt/app/grid/diag/tnslsnr/hoge/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hoge)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=hoge)(PORT=5500))(Security=(my_wallet_directory=/opt/app/oracle/product/12.1.0/dbhome_1/admin/orcl/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "+ASM" has 1 instance(s).
Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "ORCLXDB" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
The command completed successfully


(10)lsnrctl serviceコマンドでサービスの登録状態を確認してみましょう。

[oracle@hoge ~]$ lsnrctl service

LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 01-MAR-2015 13:34:43

Copyright (c) 1991, 2013, Oracle. All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
Services Summary...
Service "+ASM" has 1 instance(s).
Instance "+ASM", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
Service "ORCLXDB" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER <machine: hoge, pid: 6958>
(ADDRESS=(PROTOCOL=tcp)(HOST=hoge)(PORT=37115))
Service "orcl" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
The command completed successfully


以上です(^^)/~