CentOSでOracle Database 18c オンプレミス版のサイレントインストール
お勉強用環境作りで実施した作業の忘備録です。
手順の確認
スタート・ガイドを参考に進めていきます。一度も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 <