【手順】Oracle12cサイレントインストール

VirtualBoxOracle 12c をサイレントインストールしたときのメモ。基本的にはリファレンス通りの手順ですが、素人ゆえ自分用に加えた補足も残しておきたく。

環境

VIrtualBox 6.0
・RedHat6.7
Oracle 12c EE

事前準備

ダウンロードとインストール手順は割愛。バージョンは6.0です。
OSはRedHat6.7。とある業務でこのバージョンのRHEL+12cという要件があったので、やや古めのバージョンとなっています。6.7にはsystemctlコマンドがないんですね。
12cはここからダウンロードしました。

手順

カーネルパラメータの設定

# vi /etc/sysctl.conf
    fs.file-max = 6815744
    kernel.sem = 250 32000 100 128
    kernel.shmmni = 4096
    kernel.shmall = 1073741824
    kernel.shmmax = 4398046511104
    kernel.panic_on_oops = 1
    net.core.rmem_default = 262144
    net.core.rmem_max = 4194304
    net.core.wmem_default = 262144
    net.core.wmem_max = 1048576
    net.ipv4.conf.all.rp_filter = 2
    net.ipv4.conf.default.rp_filter = 2
    fs.aio-max-nr = 1048576
    net.ipv4.ip_local_port_range = 9000 65500

/*設定反映*/
# /sbin/sysctl -p 

リソース制限の設定

# vi /etc/security/limits.conf
oracle   soft   nofile    1024
oracle   hard   nofile    65536
oracle   soft   nproc    16384
oracle   hard   nproc    16384
oracle   soft   stack    10240
oracle   hard   stack    32768
oracle   hard   memlock    134217728
oracle   soft   memlock    134217728

OSグループ、OSユーザ作成

/*OSグループ作成*/
# groupadd -g 54321 oinstall
# groupadd -g 54322 dba
# groupadd -g 54323 oper
# groupadd -g 54324 backupdba
# groupadd -g 54325 dgdba

/*OSユーザ作成*/
# useradd -u 54321 -g oinstall -G dba,backupdba,dgdba,oper oracle

/*oracleユーザのパスワード設定*/
# passwd oracle

90-nproc.conf設定

/*この部分を*/
*          soft    nproc    1024

/*このように変更*/
* - nproc 16384

SELinux無効化

# vi /etc/selinux/config
   SELINUX=disabled

# reboot

再起動後、getenforceコマンドでDisabledが表示されることを確認

ファイアウォール無効化

# service iptables status
# service iptables stop
# chkconfig iptables off
# service iptables status

oracleユーザの環境変数設定

# su - oracle
$ mkdir -p /home/oracle/scripts
$ cat > /home/oracle/scripts/setEnv.sh <<EOF
    # Oracle Settings
    export TMP=/tmp
    export TMPDIR=\$TMP
    
    export ORACLE_HOSTNAME=mylocal.domain
    export ORACLE_UNQNAME=cdb1
    export ORACLE_BASE=/u01/app/oracle
    export ORACLE_HOME=\$ORACLE_BASE/product/12.1.0.2/dbhome_1
    export ORA_INVENTORY=/u01/app/oraInventory
    export ORACLE_SID=cdb1
    export PDB_NAME=pdb1
    export DATA_DIR=/u02/oradata
    
    export PATH=/usr/sbin:/usr/local/bin:\$PATH
    export PATH=\$ORACLE_HOME/bin:\$PATH
    
    export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
    export CLASSPATH=\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
    EOF
    
$ echo ". /home/oracle/scripts/setEnv.sh" >> /home/oracle/.bash_profile

インストールメディアのマウント
virtual box のメニューから、RHEL6.7のインストールメディアをマウントしておく。

# mount -t iso9660 /dev/cdrom /mnt
# ls /mnt
# vi /etc/yum.repos.d/dvd.repo
   [dvd]
   name=dvd
   baseurl=file:///mnt
   enabled=1
   gpgcheck=0
   gpgkey=file:///mnt//RPM-GPG-KEY-redhat-release

/*dvd以外のリポジトリを無効化*/
# cd /etc/yum.repos.d
# vi <リポジトリ名>
    enabled=0
# yum clean all
# yum repolist
 dvd のみ出力されることを確認

パッケージのインストール
yumで12cに必要なパッケージをインストール

ソフトウェアインストール用のディレクトリ作成

# mkdir -p /u01/app/oracle/product/12.1.0.2/db_1
# chown -R oracle:oinstall /u01
# chmod -R 775 /u01

これでインストール準備は整いました。次の手順からOracleソフトウェアインストールと、DB作成の手順になります。

インストールパッケージの展開など

/*/home/oracleにzipをscpしておく*/
# su - oracle
$ unzip linuxamd64_12102_database_1of2.zip
$ unzip linuxamd64_12102_database_2of2.zip

パッケージの配置場所はどこでもいいはず。2つのzipをunzipすると、その場所にdatabaseというディレクトリが作成されます。 ・レスポンスファイル作成
/home/oracle/response にサンプル db_install.rsp があるのでコピーして自分用のレスポンスファイルを作成します。参考までに今回使用したレスポンスファイルは次のようなものです。(明示的に値を設定した項目のみ抜粋)

レスポンスファイル oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v12.1.0
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=your.domain
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
SELECTED_LANGUAGES=en
ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/db_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=oper
oracle.install.db.BACKUPDBA_GROUP=dba
oracle.install.db.DGDBA_GROUP=dba
oracle.install.db.KMDBA_GROUP=dba
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.PDBName=pdb1
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.memoryOption=true
oracle.install.db.config.starterdb.memoryLimit=512
oracle.install.db.config.starterdb.password.ALL=YourePassword
oracle.install.db.config.starterdb.storageType=FILE_SYSTEM_STORAGE
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=/u01/app/oracle/oradata
DECLINE_SECURITY_UPDATES=true

Oracleインストーラ実行

/*パッケージを展開したディレクトリに移動*/
$ cd /home/oracle/database
$ ./runInstaller -ignorePrereq -waitforcompletion -silent \
    -responseFile /home/oracle/database/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ユーザになってから実行します。

rootユーザーとして次のスクリプトを実行します:
        1. /u01/app/oraInventory/orainstRoot.sh
        2. /u01/app/oracle/product/12.1.0.2/dbhome_1/root.sh

初期化パラメータファイル
これを作らずに進み、DBを起動させようとしたら「初期化パラメータファイルがありません。」というエラーになりました。自動的に作成されるものではないのか。。

$ cd $HOME_ORACLE/dbs/

/*デフォルトで作成されているinit.oraをinitcdb1.oraとしてコピー*/
/*コピー後のファイル名はSID名に同じ*/
$ cp init.ora initcdb1.ora
$ vi initcdb1.ora
    <ORACLE_BASE>の部分を自分の環境に合わせて編集

initcdb1.ora db_name='ORCL'
memory_target=1G
processes = 150
audit_file_dest='/u01/app/oracle/admin/orcl/adump'
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='/u01/app/oracle'
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
control_files = (ora_control1, ora_control2)
compatible ='11.2.0'
私の設定がどこか間違っていたのか、audit_file_dest、db_recovery_file_dest、diagnostic_destの3つのディレクトリは手動で作成しなければなりませんでした。これらがないと、「そんなディレクトリ知りません」と突っぱねられてしまいます。

データベース作成

# su - oracle
$ 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 \
    -totalMemory 2000 \
    -storageType FS \
    -datafileDestination "${DATA_DIR}" \
    -redoLogFileSize 50 \
    -emConfiguration NONE \
    -ignorePreReqs


完成!
psqlで接続できるようになります。サーバとクライアントが同じマシン上にあるのですが、一応リスナー経由でもアクセスできることを確認済みです。listener.oraとtnsname.oraも自動作成されなかったので、$ORACLE_HOME/network/admin/sample 配下にあるサンプルをコピって自作しました。

悩み

VirtualBoxでGuest Additionsの設定がうまくできません。。事情によりVirtualBoxはインターネット接続ができない環境に置かれているのですが、kernel-headerが合わないとか、古いとか、そんな感じのエラーをずっと解決できずにおります。どうしたらいいの。。

/*** Original ***/