CentOSでOracle Database 18c オンプレミス版のサイレントインストール

2018年10月28日14時56分投稿IT, 環境構築, 

お勉強用環境作りで実施した作業の忘備録です。

手順の確認

スタート・ガイドを参考に進めていきます。一度もOracleをインストールしたことのない環境のため、一からグループとユーザーを作成する必要があります。何が必要なのか、ドキュメントから列挙して整理してみました。

グループ

Oracleソフトウェア所有者には、プライマリ・グループとしてOracle Inventoryグループが必要、データベース・ソフトウェア所有者には、OSDBAグループと、セカンダリ・グループとして(作成する場合) OSOPER、OSBACKUPDBA、OSDGDBA、OSRACDBAおよびOSKMDBAグループが必要とのこと。

名前 グループ名 概要 必要
Oracle Inventoryグループ oinstall すべてのOracleインストール所有者のプライマリ・グループ ○
OSDBAグループ(標準Oracle Databaseグループ、必須) dba Oracle Databaseソフトウェアをシステムに初めてインストールする場合は、このグループを作成する必要あり ○
Oracle Database用のOSOPERグループ(標準Oracle Databaseグループ、オプション) oper OPERATORに、データベースを起動および停止する権限(SYSOPER権限)を付与 ○
Oracle Database用のOSBACKUPDBAグループ(拡張Oracle Databaseグループ) backupdba 別のグループにバックアップおよびリカバリ関連権限の一部(SYSBACKUP権限)を付与する場合に作成 ○
Oracle Data Guard用のOSDGDBAグループ(拡張Oracle Databaseグループ) dgdba 別のグループにOracle Data Guardを管理および監視する権限の一部(SYSDG権限)を付与する場合に作成 ○
暗号化鍵を管理するOSKMDBAグループ(拡張Oracle Databaseグループ) kmdba 別のグループにOracle Wallet Managerの管理など暗号化鍵管理権限の一部(SYSKM権限)を付与する場合に作成 ○
Oracle Real Application Clusters管理のOSRACDBAグループ(拡張Oracle Databaseグループ) racdba 別のグループにOracle Real Application Clusters (RAC)の管理権限の一部(SYSRAC権限)を付与する場合に作成 ○
Oracle ASM管理のOSASMグループ(Oracle Automatic Storage Managementグループ) asmadmin Oracle ASM管理者用とOracle Database管理者用の管理権限グループを別にするには、このグループを個別のグループとして作成 ×
Oracle ASM管理のOSDBAグループ(Oracle Automatic Storage Managementグループ) asmdba ユーザーを、Oracle Grid InfrastructureとOracle Databaseインストールの両方の所有者として作成する場合に、ASM用のOSDBAグループをユーザーのセカンダリ・グループにする必要がある ×
Oracle ASM管理のOSOPERグループ(Oracle Automatic Storage Managementグループ、オプション) asmoper Oracle ASMインスタンスの起動と停止を含め、制限されたセットのOracleインスタンス管理者権限(ASMのSYSOPER権限)を持つ別のオペレーティング・システム・グループが必要な場合に作成 ×

ユーザー

名前 ユーザー名 概要 必要
Gridユーザー grid Oracle Grid Infrastructureソフトウェア・インストールのみを所有するために作成されたユーザー ×
Oracleユーザー oracle すべてのOracleインストールまたは1つ以上のOracle Databaseインストールのいずれかを所有するために作成されたユーザー ○
ASMSNMPユーザー asmsnmp Oracle ASMインスタンスを監視する権限を持つユーザー ×

インストール

1. Oracle用のグループ作成

参照先は「Oracle Inventoryが存在しない場合のOracle Inventoryグループの作成」と「オペレーティング・システム権限のグループの作成」にて。以降、特記なき場合は全てrootユーザーで実施しました。

// 既存グループのID使用状況確認(グループ名:x:グループID:)
# grep 543 /etc/group

// グループ追加
# /usr/sbin/groupadd -g 54321 oinstall
# /usr/sbin/groupadd -g 54322 dba
# /usr/sbin/groupadd -g 54323 oper
# /usr/sbin/groupadd -g 54324 backupdba
# /usr/sbin/groupadd -g 54325 dgdba
# /usr/sbin/groupadd -g 54326 kmdba
# /usr/sbin/groupadd -g 54330 racdba

// グループ確認
# cat /etc/group

2. Oracle用のユーザー作成

参照先は「オペレーティング・システムのOracleインストール・ユーザー・アカウントの作成」にて。

// 既存ユーザーのID使用状況確認(ユーザー名:x:ユーザーID:)
# grep 54321 /etc/passwd

// ユーザー追加 ※ asmdbaを削除、operを追記してます
# /usr/sbin/useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba oracle

// ユーザー確認
# cat /etc/passwd

3. 物理メモリについて

インストール時のログにて、筆者の環境ではエラーノード"local"に十分な物理メモリーがありません[必要な物理メモリー = 8GB (8388608.0KB)]が発生しましたが、Severity:IGNORABLEということで無視することにしました。(といっても、一応16GBまでメモリを増設しているマシーンなのですが…この辺りの理解ができていません。。※2023年12月3日追記※のちに、メモリーとスロットの接触不良であったことが判明しました)

4. カーネル・パラメータ値の変更

参照先はこちら。筆者の環境では下記が不足しエラーが発生したため、手順に追加しました。

  • semopm
  • file-max
  • rmem_default
  • rmem_max
  • wmem_default
  • wmem_max
  • aio-max-nr
// カーネルパラメータの設定
# vi /etc/sysctl.d/97-oracle-database-sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
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 = 1048576

// 設定反映
# /sbin/sysctl --system

// 設定値確認
# /sbin/sysctl -a

// サーバー再起動
# reboot

5. 必要なパッケージのインストール

筆者の環境では下記が不足しエラーが発生したため、手順に追加しました。

  • compat-libcap1-1.10
  • libstdc++-devel-4.8.2 (x86_64)
  • sysstat-10.1.5
  • gcc-c++-4.8.2
  • ksh
  • glibc-devel-2.17 (x86_64)
  • libaio-devel-0.3.109 (x86_64)
  • nfs-utils-1.2.3-15
  • smartmontools-6.2-4
  • net-tools-2.0-0.17
  • compat-libstdc++-33-3.2.3 (x86_64)
  • libxcb-1.11 (x86_64)
  • libX11-1.6.3 (x86_64)
  • libXau-1.0.8 (x86_64)
  • libXi-1.7.4 (x86_64)
  • libXtst-1.2.2 (x86_64)
// インストール可能なパッケージを確認
# yum search compat-libcap

// 適宜選んでインストール
# yum install -y compat-libcap1.x86_64
# yum install -y libstdc++-devel.x86_64
# yum install -y sysstat.x86_64
# yum install -y gcc-c++.x86_64
# yum install -y ksh.x86_64
# yum install -y glibc-devel.x86_64
# yum install -y libaio-devel.x86_64
# yum install -y nfs-utils.x86_64
# yum install -y smartmontools.x86_64
# yum install -y net-tools.x86_64
# yum install -y compat-libstdc++-33.x86_64
# yum install -y libxcb.x86_64
# yum install -y libX11.x86_64
# yum install -y libXau.x86_64
# yum install -y libXi.x86_64
# yum install -y libXtst.x86_64

6. OTNからのインストール用アーカイブ・ファイルのダウンロード

参照先はこちら。ライセンスに同意のうえダウンロードして、/tmpに置きました。

7. 必要なディレクトリやファイルを揃える

参照先はこちら。筆者の環境に合わせて変更してます。

// Oracleホーム・ディレクトリを作成
# mkdir -p /u01/app/oracle/product/18.0.0/dbhome_1

// Oracleホーム・ディレクトリに移動
# cd /u01/app/oracle/product/18.0.0/dbhome_1

// zipファイル展開
# unzip -q /tmp/LINUX.X64_180000_db_home.zip

// u01ディレクトリ以下全ての所有者をoracle、グループをoinstallへ変更
# chown -R oracle:oinstall /u01

8. ここからサイレントインストールに移る

参照先はこちら。実際はこちらのページを参考にさせていただきました。

// Oracleインストール所有者ユーザー・アカウント(oracle)になる
# su oracle

// Oracleホーム・ディレクトリに移動
$ cd /u01/app/oracle/product/18.0.0/dbhome_1

// 環境変数に値を設定
$ export ORACLE_BASE=/u01/app/oracle
$ export ORACLE_HOME=${ORACLE_BASE}/product/18.0.0/dbhome_1
$ export ORACLE_HOSTNAME=
$ export ORA_INVENTORY=/u01/app/oraInventory

// インストール実行
$ ./runInstaller -ignorePrereq -waitforcompletion -silent                    \
  -responseFile ${ORACLE_HOME}/install/response/db_install.rsp               \
  oracle.install.option=INSTALL_DB_SWONLY                                    \
  ORACLE_HOSTNAME=${ORACLE_HOSTNAME}                                         \
  UNIX_GROUP_NAME=oinstall                                                   \
  INVENTORY_LOCATION=${ORA_INVENTORY}                                        \
  SELECTED_LANGUAGES=en,en_GB                                                \
  ORACLE_HOME=${ORACLE_HOME}                                                 \
  ORACLE_BASE=${ORACLE_BASE}                                                 \
  oracle.install.db.InstallEdition=EE                                        \
  oracle.install.db.OSDBA_GROUP=dba                                          \
  oracle.install.db.OSBACKUPDBA_GROUP=dba                                    \
  oracle.install.db.OSDGDBA_GROUP=dba                                        \
  oracle.install.db.OSKMDBA_GROUP=dba                                        \
  oracle.install.db.OSRACDBA_GROUP=dba                                       \
  SECURITY_UPDATES_VIA_MYORACLESUPPORT=false                                 \
  DECLINE_SECURITY_UPDATES=true

// rootになって下記を実行するよう指示されるので従う
# /u01/app/oraInventory/orainstRoot.sh
# /u01/app/oracle/product/18.0.0/dbhome_1/root.sh

// エラーが発生する場合、詳細についてはログを見るよう指示されるので従う(下記はパスの一例)
# less /u01/app/oraInventory/logs/InstallActions2018-10-29_01-45-54PM/installActions2018-10-29_01-45-54PM.log

動作確認

1. データベース作成

参照先はこちら。実際はこちらのページを参考にさせていただきました。

// Oracleインストール所有者ユーザー・アカウント(oracle)になる
# su oracle

// 環境変数に値を設定
$ export ORACLE_BASE=/u01/app/oracle
$ export ORACLE_HOME=${ORACLE_BASE}/product/18.0.0/dbhome_1
$ export PATH=${ORACLE_HOME}/bin:${PATH}
$ export ORACLE_SID=cdb1
$ export PDB_NAME=pdb1
$ export DATA_DIR=${ORACLE_BASE}/data

// データベース作成
$ dbca -silent -createDatabase                                              \
  -templateName General_Purpose.dbc                                         \
  -gdbname ${ORACLE_SID} -sid  ${ORACLE_SID} -responseFile NO_VALUE         \
  -characterSet AL32UTF8                                                    \
  -sysPassword SysPassword1                                                 \
  -systemPassword SysPassword1                                              \
  -createAsContainerDatabase true                                           \
  -numberOfPDBs 1                                                           \
  -pdbName ${PDB_NAME}                                                      \
  -pdbAdminPassword PdbPassword1                                            \
  -databaseType MULTIPURPOSE                                                \
  -automaticMemoryManagement false                                          \
  -totalMemory 2000                                                         \
  -storageType FS                                                           \
  -datafileDestination "${DATA_DIR}"                                        \
  -redoLogFileSize 50                                                       \
  -emConfiguration NONE                                                     \
  -ignorePreReqs

2. インスタンス接続

こちらのページを参考にさせていただきました。oracleユーザーとして実行してます。

// このあとのsqlplus実行時に応答が文字化けする場合は、一旦sqlplusを終了させて下記設定
$ export NLS_LANG=Japanese_Japan.AL32UTF8

// データベースとPDBを指定してsqlplus起動〜終了させてみる
$ sqlplus / as sysdba <<EOF
alter system set db_create_file_dest='${DATA_DIR}';
alter pluggable database ${PDB_NAME} save state;
exit;
EOF

// シャットダウン
$ sqlplus / as sysdba <<EOF
shutdown normal;
exit;
EOF

SALLY'S REVIEW

考察中、あるいは特記なし。

COMMENTS