CentOS 7にOracle Database 18cをコマンドラインでインストールした



仮想マシン上のCentOS 7に、Oracle Database 18cをCUIで(GUIを使わず)インストールした時の記録。

インストール後、dbcaで、これまたコマンドラインからDBを作成し、インスタンスの開始と停止ができるところまで確認した。

OracleのインストールはGUIでもハマるけど、CUIだともっとしんどい。


環境は、macOS High Sierra バージョン 10.13.5、Virtualbox バージョン 5.2.12 r122591、CentOS-7 (1804)、Oracle Database 18c (18.3)。

CentOS 7は、Minimal ISOからインストールしたもの。
このCentOS 7に対し、コマンドライン(サイレント・モード)で、X Window System(GUI)を使わずにインストールした。

MacのCPUは3.06 GHz Intel Core 2 Duo、メモリーは4 GB 1067 MHz DDR3。
VirtualboxのゲストOS(CentOS 7)には、HDD 10 GB、メモリー 1Gを割り当てた状態からスタートし、適宜拡張した。

以下、コマンドのプロンプトが#の場合は、CentOS のrootでの作業、$の場合は、特に断りがなければCentOSのユーザーoracle、oracle以外の場合は、CentOSかMacの任意の一般ユーザー。

なお、以下の手順を参考にする場合、頻繁にスナップショット機能でイメージバックアップを取得することをおすすめする

ライセンス確認

このページに下記の記述があるように、学習などの限定用途で、無償で使用できるようだ。
OTNサイト(www.oracle.com/technetwork)からダウンロードできるソフトウエアには OTN開発者ライセンスがついており、限定された用途で無償で使用できます。

OTN開発者ライセンス付きのソフトウエアは、お客様のアプリケーションの開発、テスト、プロトタイプ作成、及びデモンストレーションのみを目的として(かつ、お客様のアプリケーションが、データ処理、業務、商用又は本番利用を目的として使用されたことがない場合に限られます)、内部的にご使用いただけます。

OTN開発者ライセンスは、学習や自社での開発のために使用するためにご利用いただけるライセンスです。OTN開発者ライセンスつきのソフトウエアについて、オラクルは動作保証をお約束していません。またパッチの提供や技術的な質問への対応もしておりません。自己責任においてお使い下さい。

ダウンロード

OTNサイトにアクセス。

画面左側の下記をクリック。

> Software Downloads

ダウンロードできるソフトウェアの一覧が表示される。
下記をクリック。

→ Database 18c Enterprise/Standard Editions

Accept License Agreementにチェックを入れ、Linux x86-64のFile 1をクリック。



ダウンロードにはOracle.comのユーザー登録が必要。
持っていない場合は登録し、持っている場合はサインインして、ダウンロード。

4.3 GB。筆者の自宅の環境では、20分くらいかかった。

「LINUX.X64_180000_db_home.zip」というファイル名でダウンロードされたので、Virtualbox上のCentOS 7に転送した。
下記、Mac側のコマンド。


$ scp LINUX.X64_180000_db_home.zip user@192.168.11.77:~/

192.168.11.77は、筆者の環境のVirtualbox上のCentOS 7のIPアドレス、userは、CentOSの任意の一般ユーザー。

上記のコマンドでは、LINUX.X64_180000_db_home.zipが、ユーザーuserのホームディレクトリー直下に転送される。

インストールに必要な要件の確認

ハードウェアとソフトウェアが、インストールに必要な要件を満たしているか確認。
全部ではないが、このページに、確認に使うコマンドが例示されていたので、参考にした。

メモリー

# grep MemTotal /proc/meminfo

MemTotal:        1015508 kB

必要な要件は下記の通りなので、ぎりぎり大丈夫か。

最小RAM
  • Oracle Databaseのインストールには、1GB以上のRAMが必要です。2GBのRAMを推奨します。


ディスク容量

# df -h /tmp
ファイルシス            サイズ  使用  残り 使用% マウント位置

/dev/mapper/centos-root   6.2G  5.4G  877M   87% /

上で、LINUX.X64_180000_db_home.zipを転送したため、ディスク容量が枯渇している。

/tmpディレクトリに割り当てるディスク領域
/tmpディレクトリに1GB以上の領域。

とのことだし、そもそも割り当てが10 GBは少なすぎるので、下記のページを参考に、ディスク容量を50 Gb拡張した。

VirtualBox 上の CentOS 6.9 のハードディスク容量を増やす
VirtualBoxのゲストOSディスク拡張
CentOS 7(XFS)でLVMディスク拡張でハマったこと

上記ページにあるコマンドを、粛々と実行することで、拡張された。

# df -h /tmp/
ファイルシス            サイズ  使用  残り 使用% マウント位置

/dev/mapper/centos-root    48G  980M   47G    3% /

上記の作業前に、スナップショットでバックアップを取得しておくことを、強くおすすめします。
そもそも、仮想マシン作成時に、50 GBくらいHDD容量を割り当てておけばよかった。

スワップメモリー

# grep SwapTotal /proc/meminfo

SwapTotal:        839676 kB

RAMに対して相対的なスワップ領域割当(Oracle Database)
1GBから2GB: RAMのサイズの1.5倍

とのこと。

仮想マシンに割り当てているメモリーは1 GBなので、足りない。

このページを参考に、スワップ領域を増やした。


# mkdir /var/swapfiles
# dd if=/dev/zero of=/var/swapfiles/myswap bs=1M count=2048
2048+0 レコード入力
2048+0 レコード出力

2147483648 バイト (2.1 GB) コピーされました、 8.23666 秒、 261 MB/秒
# mkswap /var/swapfiles/myswap
スワップ空間バージョン1を設定します、サイズ = 2097148 KiB

ラベルはありません, UUID=e9a8a664-d294-4038-9dde-58f90b32177b

/etc/fstabの最後の行に、下記の1行を追加。


/var/swapfiles/myswap swap swap defaults 0 0


マシンを再起動後、スワップメモリーが増えていることを確認した。

# grep SwapTotal /proc/meminfo

SwapTotal:       2936824 kB

スワップメモリーは、実メモリーの2倍を取るのが一般的だったと記憶しているが、学習用途のサーバーのため、これでOKとした。

グループとユーザー

インストールに必要なグループやユーザーを作成した。

このページにある、Oracle Inventoryグループを作成。


# groupadd -g 54321 oinstall

このページにあるグループを作成。


# groupadd -g 54327 asmdba

# groupadd -g 54328 asmoper

# groupadd -g 54322 dba

# groupadd -g 54323 oper
# groupadd -g 54324 backupdba
# groupadd -g 54325 dgdba
# groupadd -g 54326 kmdba
# groupadd -g 54330 racdba

このページにあるコマンドで、ユーザーを追加。


# useradd -u 54321 -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba oracle

(追記)上記のユーザー追加だと、インストール時に、ユーザーoracleがoperグループに属していないと怒られたので、後ほどoperグループにも所属させた。

リソース制限

このページに従い、リソース制限を確認。

oracleユーザーになって、



# su oracle

上記ページのコマンドを粛々と実行。

引っかかったのは下記。

$ ulimit -Hn

4096
$ ulimit -Hu
3872
$ ulimit -Ss
8192

/etc/security/limits.confの末尾に下記3行を追加。(root作業)

oracle hard nofile 65536
oracle hard nproc 16384
oracle soft stack 10240

# End of file

再度、oracleユーザーで確認。

$ ulimit -Hn

65536
$ ulimit -Hu
16384
$ ulimit -Ss

10240

依存パッケージ

このページにあるパッケージが必要なようだ。

一つ一つ確認するのが面倒だったので、良い方法はないかと調べたが、Oracle Preinstallation RPMというが使えそうだ。

このページの手順に従って、yumでoracle-database-server-18c-preinstallのインストールを試みた。

まずはリポジトリーを追加。


# cd /etc/yum.repos.d/
# curl -O http://yum.oracle.com/public-yum-ol6.repo

# yum repolist

インストールしたが、

# yum install oracle-database-server-18c-preinstall
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
パッケージ oracle-database-server-18c-preinstall は利用できません。

エラー: 何もしません

利用できない?
yum searchで検索してみると、

# yum search oracle | grep preinstall | grep 18c

oracle-database-preinstall-18c.x86_64 : Sets the system for Oracle Database

oracle-database-preinstall-18c.x86_64がそれっぽいので、インストールしてみた。


# yum install -y oracle-database-preinstall-18c.x86_64

今度はインストールが進んだが、下記のエラー。


GPG 鍵の取得に失敗しました: [Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle"

/etc/yum.repos.d/public-yum-ol6.repo を下記のように編集(ol6_latestのgpgcheckを0にした)。

[ol6_latest]
name=Oracle Linux $releasever Latest ($basearch)
baseurl=https://yum.oracle.com/repo/OracleLinux/OL6/latest/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0

enabled=1

再度インストールしたところ、無事完了した。


# yum install -y oracle-database-preinstall-18c.x86_64
〜〜〜〜
完了しました!

(追記)上記の方法だと、インストール時にgcc-c++がないと怒られたので、後ほどgcc-c++.x86_64をインストールしている。

インストール

準備

このページを参考に、ダウンロードしたファイルの解凍とか、インストールの準備。


# mkdir -p /u01/app/oracle/product/18.0.0/dbhome_1
# cd /u01/app/oracle/product/18.0.0/dbhome_1

unzipコマンドがなかったので、インストール。


# yum -y install unzip

解凍。
ユーザーuserのホームディレクトリーに転送してあるので、


# unzip -q ~user/LINUX.X64_180000_db_home.zip 

rootで解凍してしまったので、所有者をoracleにした。


# chown -R oracle:oinstall /u01

サイレント・モード、すなわち、X Window System(GUI)を使わず、コマンドラインからインストールするので、レスポンスファイルを作成する。
レスポンス・ファイルとは、GUIのインストーラーでは対話的に入力する情報を、予めテキストファイルとして記述しておくためのファイルだ。

このページにあるように、レスポンス・ファイルのテンプレートをコピー。
コピー先は、oracleのホームディレクトリーとした。

$ cd

$ pwd
/home/oracle
$ cp /u01/app/oracle/product/18.0.0/dbhome_1/install/response/db_install.rsp .
$ chmod 600 db_install.rsp 

下記のページを参考に、db_install.rsp(レスポンス・ファイル)を編集。

OracleDatabase12cのサイレントインストールに挑戦
Oracle Database 12c を単純にサイレントインストール。

具体的には、下記の項目を設定した。

$ cat db_install.rsp | egrep -v ^# | egrep \\S+ | egrep -v =$
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v18.0.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_HOME=/u01/app/oracle/product/18.0.0/dbhome_1
ORACLE_BASE=/u01/app/oracle
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
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.password.ALL=orcl
oracle.install.db.config.starterdb.password.SYS=orcl
oracle.install.db.config.starterdb.password.SYSTEM=orcl
oracle.install.db.config.starterdb.password.DBSNMP=orcl

oracle.install.db.config.starterdb.password.PDBADMIN=orcl

下記の項目は空のままで行けた。

$ cat db_install.rsp | egrep -v ^# | egrep \\S+ | egrep =$
oracle.install.db.CLUSTER_NODES=
oracle.install.db.config.starterdb.type=
oracle.install.db.config.starterdb.globalDBName=
oracle.install.db.config.starterdb.SID=
oracle.install.db.ConfigureAsContainerDB=
oracle.install.db.config.PDBName=
oracle.install.db.config.starterdb.memoryOption=
oracle.install.db.config.starterdb.memoryLimit=
oracle.install.db.config.starterdb.installExampleSchemas=
oracle.install.db.config.starterdb.managementOption=
oracle.install.db.config.starterdb.omsHost=
oracle.install.db.config.starterdb.omsPort=
oracle.install.db.config.starterdb.emAdminUser=
oracle.install.db.config.starterdb.emAdminPassword=
oracle.install.db.config.starterdb.enableRecovery=
oracle.install.db.config.starterdb.storageType=
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
oracle.install.db.config.asm.diskGroup=

oracle.install.db.config.asm.ASMSNMPPassword=

インストーラーの実行(失敗〜対処)

このページにあるように、runInstallerをサイレント・モードで実行した。
db_install.rspは、上記で作成したレスポンス・ファイルを指定した。

$ /u01/app/oracle/product/18.0.0/dbhome_1/runInstaller -silent -responseFile /home/oracle/db_install.rsp
Oracle Database設定ウィザードを起動中...

[FATAL] [INS-13013] ターゲット環境は、いくつかの必須要件を満たしていません。
   原因: 一部の必須前提条件が満たされていません。詳細はログを参照してください。/tmp/InstallActions2018-07-29_02-16-42PM/installActions2018-07-29_02-16-42PM.log

   アクション: ログから失敗した前提条件チェックのリストを確認します: /tmp/InstallActions2018-07-29_02-16-42PM/installActions2018-07-29_02-16-42PM.log。次に、ログ・ファイルまたはインストレーション・マニュアルのいずれかから、前提条件を満たす適切な構成を見つけ、手動で修正してください。

インストールが停止したので、ログを確認したところ、3つのエラーが発生していた。

$ grep ERROR /tmp/InstallActions2018-07-29_02-16-42PM/installActions2018-07-29_02-16-42PM.log | egrep -v ^INFO
          ERRORMSG(localhost): PRVF-7530 : ノード"localhost"に十分な物理メモリーがありません[必要な物理メモリー = 8GB (8388608.0KB)]
          ERRORMSG(localhost): PRVF-7566 : ユーザー"oracle"はノード"localhost"のグループ"oper"には属していません

          ERRORMSG(localhost): PRVF-7532 : パッケージ"gcc-c++"がノード"localhost"にありません


物理メモリーについては、ログに下記の記述があったので、無視した。(そもそもメモリー4 GBのMac上で動かしている仮想マシンなので、8 GB用意できないし)


Severity:IGNORABLE

operについては、グループに追加した。


# usermod -aG oper oracle
# groups oracle
oracle : oinstall asmdba dba oper backupdba dgdba kmdba racdba

gcc-c++については、インストールした。


# yum -y install gcc-c++.x86_64

インストーラーの実行(成功)

もう一度runInstallerを実行。

$ /u01/app/oracle/product/18.0.0/dbhome_1/runInstaller -silent -responseFile /home/oracle/db_install.rsp
Oracle Database設定ウィザードを起動中...

[WARNING] [INS-13014] ターゲット環境は、いくつかのオプションの要件を満たしていません。
   原因: 一部のオプションの前提条件が満たされていません。詳細はログを参照してください。installActions2018-07-29_02-29-26PM.log
   アクション: ログから失敗した前提条件チェックのリストを確認します: installActions2018-07-29_02-29-26PM.log。次に、ログ・ファイルまたはインストレーション・マニュアルのいずれかから、前提条件を満たす適切な構成を見つけ、手動で修正してください。
このセッションのレスポンス・ファイルは次の場所にあります:
 /u01/app/oracle/product/18.0.0/dbhome_1/install/response/db_2018-07-29_02-29-26PM.rsp

このインストール・セッションのログは次の場所にあります:
 /tmp/InstallActions2018-07-29_02-29-26PM/installActions2018-07-29_02-29-26PM.log

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

次のノードで/u01/app/oraInventory/orainstRoot.shを実行してください: 
[localhost]
次のノードで/u01/app/oracle/product/18.0.0/dbhome_1/root.shを実行してください: 
[localhost]


Successfully Setup Software with warning(s).
インストール・セッション・ログの移動先:

 /u01/app/oraInventory/logs/InstallActions2018-07-29_02-29-26PM

警告は出たものの、下記のオプションを付けなくても通った。

-ignorePrereqFailure - 前提条件チェックのすべての失敗を無視します。
サイレント・モードでインストールしている例をググると、結構チェックの失敗を無視するオプションを付けている例が見受けられるが、気持ち悪いし、無視してインストールした後、謎の現象(sqlplusが無反応など)が起きたこともあったので、付けなくて通る方が良いはずだ。

ログを確認しても、メモリーが8 GBないエラーのみのようだ。


$ grep ERROR /u01/app/oraInventory/logs/InstallActions2018-07-29_02-29-26PM/installActions2018-07-29_02-29-26PM.log | egrep -v ^INFO
          ERRORMSG(localhost): PRVF-7530 : ノード"localhost"に十分な物理メモリーがありません[必要な物理メモリー = 8GB (8388608.0KB)]

, [FNDERROR.gif ->%ORACLE_HOME%/apex/images/FNDERROR.gif 192 plats=1=>[46] langs=-554696704=>[en,fr,ar,bn,pt_BR,bg,fr_CA,ca,hr,cs,da,nl,ar_EG,en_GB,et,fi,de,el,iw,hu,is,in,it,ja,ko,es,lv,lt,ms,es_MX,no,pl,pt,ro,ru,zh_CN,sk,sl,es_ES,sv,th,zh_TW,tr,uk,vi]]


インストール時の標準出力で指示されているように、rootで、orainstRoot.shとroot.shを実行した。

# /u01/app/oraInventory/orainstRoot.sh
権限を変更中 /u01/app/oraInventory.
グループの読取り/書込み権限を追加中。
全ユーザーの読取り/書込み/実行権限を削除中。

グループ名の変更 /u01/app/oraInventory 宛先 oinstall.

スクリプトの実行が完了しました。
# /u01/app/oracle/product/18.0.0/dbhome_1/root.sh
Check /u01/app/oracle/product/18.0.0/dbhome_1/install/root_localhost.localdomain_2018-07-29_14-47-05-884604591.log for the output of root script

root_localhost.localdomain_2018-07-29_14-47-05-884604591.logの中身を確認したが、特にエラーは出ていなかった。

DBの作成

dbcaコマンドでデータベースを作成した。

必要な環境変数を設定。


$ export ORACLE_HOME=/u01/app/oracle/product/18.0.0/dbhome_1
$ export ORACLE_BASE=/u01/app/oracle
$ export PATH=$PATH:$ORACLE_HOME/bin

このページを参考に、DBを作成。SIDはorclとした。
SYSとSYSTEMのパスワードを聞かれるが、レスポンス・ファイルで指定した、orclを入力しEnter。


$ dbca -silent -createDatabase -templateName /u01/app/oracle/product/18.0.0/dbhome_1/assistants/dbca/templates/General_Purpose.dbc -gdbname orcl -sid orcl -responseFile NO_VALUE -characterSet AL32UTF8 -memoryPercentage 70 -emConfiguration LOCAL
SYSユーザー・パスワードを入力してください: 

SYSTEMユーザー・パスワードを入力してください: 

[WARNING] [DBT-06208] 入力された'SYS(S)'パスワードが推奨される標準に準拠していません。
   原因: 
a. 入力するパスワードは、長さを8文字以上にし、大文字、小文字および数字(0から9)をそれぞれ最低1文字含めることをお薦めします。
b. 入力したパスワードは、Oracleがパスワードとしての使用を推奨していないキーワードです
   アクション: 強力なパスワードを指定してください。必要に応じて、Oracleドキュメントのガイドラインを参照してください。
[WARNING] [DBT-06208] 入力された'SYSTEM(Y)'パスワードが推奨される標準に準拠していません。
   原因: 
a. 入力するパスワードは、長さを8文字以上にし、大文字、小文字および数字(0から9)をそれぞれ最低1文字含めることをお薦めします。
b. 入力したパスワードは、Oracleがパスワードとしての使用を推奨していないキーワードです
   アクション: 強力なパスワードを指定してください。必要に応じて、Oracleドキュメントのガイドラインを参照してください。
DB操作の準備
10%完了
データベース・ファイルのコピー中
40%完了
Oracleインスタンスの作成および起動中
42%完了
46%完了
50%完了
54%完了
60%完了
データベース作成の完了
66%完了
69%完了
70%完了
構成後アクションの実行
100%完了
データベースの作成が完了しました。詳細は、次の場所にあるログ・ファイルを参照してください:
/u01/app/oracle/cfgtoollogs/dbca/orcl。
データベース情報:
グローバル・データベース名:orcl
システム識別子(SID):orcl
詳細はログ・ファイル"/u01/app/oracle/cfgtoollogs/dbca/orcl/orcl.log"を参照してください。

仮想マシンのメモリーが1 GBと弱いためか、1時間くらいかかった。
パスワードの警告が出ているが、学習用途のため、無視。

確認(インスタンスの開始、停止)

sqlplusで、インスタンスの開始、停止ができることを確認した。

環境変数ORACLE_SIDを設定。他の必要な環境変数は、上記で設定済。

$ export ORACLE_SID=orcl

ORACLE_SIDを設定しないと、下記のエラーが出るので注意。


ORA-12162: TNS:net service name is incorrectly specified

文字化けしないように、このページを参考に、NLS_LANGを設定。

export NLS_LANG=Japanese_Japan.AL32UTF8

sqlplusでローカル接続。


$ sqlplus sys as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on 日 7月 29 15:50:12 2018
Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.

パスワードを入力してください: 


Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0
に接続されました。

接続できた。

インスタンスの状態を確認したところ、

SQL> select status from v$instance;

STATUS
------------

OPEN

OPENまで起動しているので、停止してみた。

SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。

ORACLEインスタンスがシャットダウンされました。

最後に、開始できるか確認。

SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area  545256344 bytes
Fixed Size     8659864 bytes
Variable Size   297795584 bytes
Database Buffers   234881024 bytes
Redo Buffers     3919872 bytes
データベースがマウントされました。

データベースがオープンされました。


これで使えそうだ。

何回かスナップショットから復元したりしたので、ここまで数時間かかってしまった。。



コメント

このブログの人気の投稿

PowerShell 6で、Shift_JISのCSVをImport-Csvで読み込んだら文字化けした

Windowsで、特定のユーザーに特定のサービスの再起動を許可する

PowerShellでイベントログを取得する時、「指定した選択条件に一致するイベントが見つかりませんでした。」が煩わしいのでcatchする