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 <<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