Oracle DBをサイレント インストールします。
環境情報
事前設定
日本向けのOS設定
タイムゾーンとlocaleを変更。
$ sudo timedatectl set-timezone Asia/Tokyo $ sudo localectl set-locale LANG=ja_JP.utf8
物理メモリのサイズ
OS上の各種設定値を確認していきます。
Oracle Databaseのインストールには、1GB以上のRAMが必要です。2GBのRAMを推奨します
$ grep MemTotal /proc/meminfo MemTotal: 15791384 kB
swapサイズの確認
1GBから2GB: RAMのサイズの1.5倍
2GBから16GB: RAMのサイズに等しい
16GBより大きい: 16GB
$ grep SwapTotal /proc/meminfo SwapTotal: 0 kB $ sudo dd if=/dev/zero of=/swapfile bs=1M count=15360 15360+0 records in 15360+0 records out 16106127360 bytes (16 GB) copied, 91.3986 s, 176 MB/s $ sudo chown root:root /swapfile $ sudo chmod 600 /swapfile $ sudo mkswap /swapfile $ sudo swapon /swapfile $ grep SwapTotal /proc/meminfo SwapTotal: 15728636 k
/etc/fstab
に追記。
/swapfile swap swap defaults 0 0
/tmpディレクトリ空き領域を確認
/tmpディレクトリに1GB以上の領域。
$ $ df -h /tmp Filesystem Size Used Avail Use% Mounted on /dev/nvme0n1p1 60G 16G 45G 27% /
共有メモリのサイズを確認
$ df -h /dev/shm Filesystem Size Used Avail Use% Mounted on tmpfs 7.6G 0 7.6G 0% /dev/shm
透過的なHugePagesの無効化
HugePageとは、
Hugepage の機能により、現代的なハードウェアアーキテクチャに備わっている複数のページサイズを Linux カーネルで使用できます。Linux は物理 RAM も swap も両方からマップされている仮想メモリの複数ページを作成します。ページは仮想メモリの基本単位で、x86 アーキテクチャのデフォルトページサイズは 4096 バイトです。
Linux は、"Translation Lookaside Buffers" (TLB) と呼ばれる CPU アーキテクチャのメカニズムを使用して、仮想メモリページから実際の物理メモリアドレスへのマッピングを管理します。TLB は限られたハードウェアリソースであるため、デフォルトのページサイズで物理メモリを大量に使用すると TLB が消費され、処理のオーバーヘッドをもたらします (4096 バイトサイズのページによって多くの TLB リソースが消費されます。) Huge Page を使用すると、より大きなサイズのページを作成でき、各ページは一つの TLB リソースを消費します。Huge Page を作成すると、Huge Page にマッピングされた物理メモリは通常のメモリ割り当ての影響を受けなくなり、カーネルの仮想メモリーマネージャで管理できなくなるため、Huge Page は実質 '保護され'、Huge Page を必要とするアプリケーションのみが利用できるという副次的な効果があります。Huge Page は物理 RAM に '固定' され、スワップアウトできません。
通常は特有の高位メモリを使用するアプリケーションのために、そしてシステムが高メモリ負荷下にあってもページがスワップアウトされないように、Huge Page を割り当てます。また、32 ビットシステムでメモリ使用量を管理するために Huge Page を割り当てます。Huge Page を作成して、それを使用するようにアプリケーションを設定すると、カーネルが管理するページが減るため、カーネルによるメモリ管理のオーバーヘッドが減ります。カーネルの仮想メモリーマネージャは低位メモリを利用します。管理するページが少ない場合は、低位メモリはあまり消費されません。
透過的なHugePage(Transparet HugePage)とは、このHugePageの機能を透過的に、つまりアプリケーション側の変更を必要とせず自動的に利用できるようする機能です。ただOracle DBでこの機能を利用するのは問題があるらしく、下記とのこと。
透過的なHugePagesを使用すると、実行中にメモリー割当ての遅延が生じます。パフォーマンスの問題を回避するために、透過的なHugePagesはすべてのOracle Databaseサーバーで無効にすることをお薦めします。かわりに標準のHugePagesを使用すると、パフォーマンスが向上します。
透過的なHugePagesメモリーが標準のHugePagesメモリーと異なるのは、カーネルのkhugepagedスレッドが実行時にメモリーを動的に割り当てるためです。標準のHugePagesメモリーは起動時に事前割当てされ実行中には変更されません。
現在の設定の確認。 always
は有効化されている意味。
$ sudo cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never
GRUBの設定変更が必要となるらしく、設定変更前の確認。 /proc/cmdline
はブートローダーがkernelに渡すパラメータを記録しているファイルらしいです。
$ cat /proc/cmdline BOOT_IMAGE=/boot/vmlinuz-3.10.0-957.1.3.el7.x86_64 root=UUID=f41e390f-835b-4223-a9bb-9b45984ddf8d ro console=tty0 console=ttyS0,115200n8 crashkernel=auto console=ttyS0,115200 LANG=en_US.UTF-8
/etc/sysconfig/grub
を編集して、 GRUB_CMDLINE_LINUX
の値に transparent_hugepage=never
を追加します。
GRUB_CMDLINE_LINUX="console=tty0 crashkernel=auto console=ttyS0,115200 transparent_hugepage=never"
以下のコマンドにて、GRUBの設定ファイルが再作成されるらしいです。
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
OS再起動。起動後に /proc/cmdline
を再確認。 transparent_hugepage=never
が渡されています。
$ cat /proc/cmdline BOOT_IMAGE=/boot/vmlinuz-3.10.0-957.1.3.el7.x86_64 root=UUID=f41e390f-835b-4223-a9bb-9b45984ddf8d ro console=tty0 crashkernel=auto console=ttyS0,115200 transparent_hugepage=never
こちらも確認。 never
となっています。
$ sudo cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never]
Red Hat Enterprise Linux 7 で transparent hugepages (THP) を無効にする
OSグループとユーザの追加
OracleDBで利用されるOSグループとユーザを追加。
$ sudo groupadd -g 54321 oinstall $ sudo groupadd -g 54322 dba $ sudo groupadd -g 54323 oper $ sudo groupadd -g 54324 backupdba $ sudo groupadd -g 54325 dgdba $ sudo groupadd -g 54326 kmdba $ sudo groupadd -g 54330 racdba $ sudo useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba oracle
併せて、上記で作成したoracleユーザの /home/oracle/.bashrc
に、以下のumask設定を実施。
umask 022
sudo権限も付与しておきます。
$ sudo echo "oracle ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/oracle
リソース制限の確認
oracleユーザの制限を、 /etc/security/limits.conf
より、推奨値を参考に変更。変更後はOS再起動しておきます。
oracle soft nofile 1024 oracle hard nofile 65536 oracle soft nproc 2047 oracle hard nproc 16384 oracle soft stack 10240 oracle hard stack 32768 oracle soft memlock 14155776 oracle hard memlock 14155776
Oracleソフトウェア・インストール・ユーザーのリソース制限の確認
OS環境変数の確認
$ printenv | grep -e ORA_CRS_HOME -e ORACLE_HOME -e ORA_NLS10 -e TNS_ADMIN $ echo $PATH | grep oracle
kernelパラメータの変更
OracleDBインストール時の推奨最小値を公開してくれているので、それを参考に変更します。 /etc/sysctl.d/97-oracle-database-sysctl.conf
というフィアルを作成して、環境に見合ったパラメータを以下のように記述。
fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 1579123 kernel.shmmax = 8085112832 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
以下コマンドにて有効となります。
$ sudo /sbin/sysctl --system
ここでもOS再起動を実施。
SELinuxの無効化
無効にしてしまいます。 /etc/selinux/config
ファイルの、 SELINUX
の値を disabled
に変更。
SELINUX=disabled
ここでもOS再起動を実施。
インストール
以下を参考にインストール処理していきます。
レスポンス・ファイルを使用したOracle Databaseのインストールおよび構成
必要ディレクトリの作成
Oracle Baseディレクトリとなるディレクトリを作成します。
$ sudo mkdir -p /u01/app/oracle $ sudo chown -R oracle:oinstall /u01 $ sudo chmod -R g+w /u01
oracleユーザにスイッチして、インストール用ディレクトリを用意します。
$ sudo su oracle
$ mkdir /home/oracle/install
OracleDBインストールモジュールの配置
OTNのサイトより、開発版のOracle DBインストールモジュールをダウンロードしてきます。
上記で作成したディレクトリにアップロードして、zipを解凍しておきます。
レスポンスファイルの編集
レスポンスファイルは、 解凍したディレクトリの database/response/db_install.rsp
にあります。このファイルをコピーして必要な設定を編集します。
パラメータ | 値 |
---|---|
oracle.install.option | INSTALL_DB_SWONLY |
UNIX_GROUP_NAME | oinstall |
ORACLE_HOME | /u01/app/oracle/product/12.2.0/db_1 |
ORACLE_BASE | /u01/app/oracle |
INVENTORY_LOCATION | /u01/app/oraInventory |
oracle.install.db.InstallEdition | EE |
oracle.install.db.OSDBA_GROUP | dba |
oracle.install.db.OSOPER_GROUP | oper |
oracle.install.db.OSBACKUPDBA_GROUP | backupdba |
oracle.install.db.OSDGDBA_GROUP | dgdba |
oracle.install.db.OSKMDBA_GROUP | kmdba |
oracle.install.db.OSRACDBA_GROUP | racdba |
インストール実行
実行します。
$ /home/oracle/install/database/runInstaller -waitforcompletion -noconfig -silent -responseFile /home/oracle/install/sample_install.rsp
以下は runInstaller
コマンドのヘルプです。
$ database/runInstaller -help Following are the possible flags: -help - display help. -silent - run in silent mode. The inputs can be a response file or a list of command line variable value pairs. [-lenientInstallMode - perform the best effort installation by automatically ignoring invalid data in input parameters.] [-ignorePrereqFailure - ignore all prerequisite checks failures.] [-showProgress - show the installation progress on the console. This option is supported for silent mode installation only.] -responseFile - specify the complete path of the response file to use. -invPtrLoc - point to a different inventory location. The orainst.loc file contains the location of the central inventory (inventory_loc) and the inventory group (inst_group). -jreLoc - specify the location for the jre used in the installation. -logLevel - enable the log of messages up to the priority level provided in this argument. Valid options are: severe, warning, info, config, fine, finer, finest. -paramFile - specify the location of the oraparam.ini file to be used in the installation. -executePrereqs | -executeConfigTools | -deinstall -executePrereqs - execute the prerequisite checks only. -executeConfigTools - execute the config tools for an installed home. -responseFile - specify the complete path of the response file to use. [-all - execute all the config tools for an installed home, including the config tools that have already succeeded.] -deinstall - uninstall the specified home. -debug - run in debug mode. -executeSysPrereqs - execute the system prerequisite checks and exit. -ignoreSysPrereqs - ignore the results of the system prerequisite checks. -printdiskusage - log the debug information for the disk usage. -printmemory - log the debug information for the memory usage. -printtime - log the debug information for the time usage. -waitForCompletion - wait for the completion of the installation, instead of spawning the installer and returning the console prompt. -suppressPreCopyScript - suppress the execution of the precopy script. -acceptUntrustedCertificates - accept untrusted certificates from a secure site. -suppressPostCopyScript - suppress the execution of the postcopy script. -noconfig - do not execute the config tools. -noconsole - suppress the display of messages in the console. The console is not allocated. -skipPrereqs - skip the prerequisite checks. -ignoreInternalDriverError - ignore any internal driver errors. -promptForPassword - provide the passwords on the console during a silent installation of an Oracle database. -remotecp - specify the path to the remote copy program on the local cluster node. Used only for cluster installs. -remoteshell - specify the path to the remote shell program on the local cluster node. Used only for cluster installs. -version - get the product version.
実行結果です。
$ /home/oracle/install/database/runInstaller -waitforcompletion -noconfig -silent -responseFile /home/oracle/install/sample_install.rsp Starting Oracle Universal Installer... Checking Temp space: must be greater than 500 MB. Actual 36772 MB Passed Checking swap space: must be greater than 150 MB. Actual 15359 MB Passed Preparing to launch Oracle Universal Installer from /tmp/OraInstall2019-11-13_11-08-51PM. Please wait ...You can find the log of this install session at: /u01/app/oraInventory/logs/installActions2019-11-13_11-08-51PM.log The installation of Oracle Database 12c was successful. Please check '/u01/app/oraInventory/logs/silentInstall2019-11-13_11-08-51PM.log' for more details. As a root user, execute the following script(s): 1. /u01/app/oraInventory/orainstRoot.sh 2. /u01/app/oracle/product/12.2.0/db_1/root.sh
僕の実施した環境では、successfulとなるものの、以下のようなエラーが大量に発生していました。
- Error in invoking target 'client_sharedlib' of makefile '/u01/app/oracle/product/12.2.0/db_1/rdbms/lib/ins_rdbms.mk'. See '/u01/app/oraInventory/logs/installActions2019-11-13_11-08-51PM.log' for details.
- Error in invoking target 'links proc gen_pcscfg procob' of makefile '/u01/app/oracle/product/12.2.0/db_1/precomp/lib/ins_precomp.mk'. See '/u01/app/oraInventory/logs/installActions2019-11-13_11-08-51PM.log' for details.
- Error in invoking target 'idg4odbc' of makefile '/u01/app/oracle/product/12.2.0/db_1/rdbms/lib/ins_rdbms.mk'. See '/u01/app/oraInventory/logs/installActions2019-11-13_11-08-51PM.log' for details.
メッセージ内で確認を示唆しているログ・ファイルでgrepしてあげると、プロンプト上に表示されていないメッセージも確認できました。こんな感じですね。
$ cat /u01/app/oraInventory/logs/installActions2019-11-13_11-08-51PM.log | grep Err
そのメッセージを確認すると、以下のパッケージが不足しているようでした。
- compat-libcap1
- libstdc++-devel(x86_64)
- sysstat
- gcc-c++
- ksh
- glibc-devel(x86_64)
- libaio
- libaio-devel(x86_64)
- smartmontools
そのため、必要なパッケージを入れ直して、インストールをやり直しています。
$ sudo yum install -y compat-libcap1 libstdc++-devel sysstat gcc-c++ ksh glibc-devel libaio libaio-devel smartmontools
指定スクリプトの実行
プロンプトに表示された2つのスクリプトをsudo権限で実行します。
$ sudo /u01/app/oraInventory/orainstRoot.sh Changing permissions of /u01/app/oraInventory. Adding read,write permissions for group. Removing read,write,execute permissions for world. Changing groupname of /u01/app/oraInventory to oinstall. The execution of the script is complete.
$ sudo /u01/app/oracle/product/12.2.0/db_1/root.sh Check /u01/app/oracle/product/12.2.0/db_1/install/root_ip-172-31-34-16.ap-northeast-1.compute.internal_2019-11-13_11-30-09-053248891.log for the output of root script
Net Configuration Assistantの実行
Network Configuration Assistantを実行して、Listenerを作成しておきます。Network Configuration Assistant用のレスポンスファイルは、インストールモジュールの database/response/netca.rsp
にあります。レスポンスファイルはデフォルト値から変更せずに利用できるので、適当なPathにコピーして netca
コマンドを実行。
$ /u01/app/oracle/product/12.2.0/db_1/bin/netca -silent -responsefile /home/oracle/install/sample_netca.rsp Parsing command line arguments: Parameter "silent" = true Parameter "responsefile" = /home/oracle/install/sample_netca.rsp Done parsing command line arguments. Oracle Net Services Configuration: Profile configuration complete. Oracle Net Listener Startup: Running Listener Control: /u01/app/oracle/product/12.2.0/db_1/bin/lsnrctl start LISTENER Listener Control complete. Listener started successfully. Listener configuration complete. Oracle Net Services configuration successful. The exit code is 0
レスポンス・ファイルを使用したNet Configuration Assistantの実行
Database Configuration Assistantの実行
Database Configuration Assistantを実行して、データベースを作成します。
事前にデータファイルを配置するディレクトリを作成しておきます。
$ sudo mkdir /data $ sudo chown oracle:oinstall /data $ sudo chmod g+w /data
dbca用のレスポンスファイルは、インストールモジュールの database/response/dbca.rsp
にあるのですが、レスポンスファイルでのインストールは上手くいかなったため、以下のようにパラメータで値を指定しています。
$ /u01/app/oracle/product/12.2.0/db_1/bin/dbca -silent -createDatabase \ -templateName /u01/app/oracle/product/12.2.0/db_1/assistants/dbca/templates/General_Purpose.dbc \ -gdbName orcl \ -sid orcl \ -sysPassword change_on_install \ -systemPassword manager \ -datafileDestination /data \ -characterSet "AL32UTF8" \ -nationalCharacterSet "UTF8"
スペックに依るのでしょうが、作成完了までは結構時間がかかります。
レスポンス・ファイルを使用したDatabase Configuration Assistantの実行
接続確認
データベースが出来たはずですので、接続してみます。
接続前にOracleDB用の環境変数を設定します。 /home/oracle/.bashrc
に以下を追記します。
export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=${ORACLE_BASE}/product/12.2.0/db_1 export PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib export ORACLE_SID=orcl export NLS_LANG=Japanese_Japan.UTF8 export LC_ALL=ja_JP.utf8
sqlplusで接続してみます。
$ sqlplus / as sysdba SQL*Plus: Release 12.2.0.1.0 Production on 水 11月 13 23:55:53 2019 Copyright (c) 1982, 2016, Oracle. All rights reserved. Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production に接続されました。 SQL> select instance_name from v$instance; INSTANCE_NAME ------------------------------------------------ orcl
接続できました。