SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【Oracle】Oracle19cをCentOS7にサイレントインストールする インストール編 2/2


前回はインストールを行うための事前準備を行いました。今回は実際にインストールを行います。
諸々の設定などは前回の事前準備編に従うのでそちらも参照してください。

www.wantanblog.com

レスポンスファイル

Oracle DatabaseのインストールはGUIで行うのが一般的ですが、CUIでインストールを行うこともできます。
CUIでインストールを行う場合には、GUIで行う設定をレスポンスファイルというファイルで行うことになります。

レスポンスファイルの作成

zipファイルを展開した場合、レスポンスファイルのテンプレートは以下の場所に配置されています。
また、テンプレートファイルは念のためバックアップしておきます。

[oracle@localhost response]$ readlink -f db_install.rsp
/u01/app/oracle/product/19.0.3/dbhome_1/install/response/db_install.rsp
[oracle@localhost response]$ cp db_install.rsp db_install.rsp.org


・レスポンスファイルの設定例
コメント行は排除して表示しています。
正直良く分かっていない部分も多い。

[oracle@localhost response]$ grep -v '^\s*#' db_install.rsp |grep -v '^\s*$'
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_HOME=/u01/app/oracle/product/19.0.3/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=dba
oracle.install.db.rootconfig.executeRootScript=
oracle.install.db.rootconfig.configMethod=
oracle.install.db.rootconfig.sudoPath=
oracle.install.db.rootconfig.sudoUserName=
oracle.install.db.CLUSTER_NODES=
oracle.install.db.config.starterdb.type=
oracle.install.db.config.starterdb.globalDBName=
oracle.install.db.config.starterdb.SID=test_db
oracle.install.db.ConfigureAsContainerDB=
oracle.install.db.config.PDBName=
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.memoryOption=
oracle.install.db.config.starterdb.memoryLimit=
oracle.install.db.config.starterdb.installExampleSchemas=
oracle.install.db.config.starterdb.password.ALL=
oracle.install.db.config.starterdb.password.SYS=sys
oracle.install.db.config.starterdb.password.SYSTEM=system
oracle.install.db.config.starterdb.password.DBSNMP=dbsnmp
oracle.install.db.config.starterdb.password.PDBADMIN=pdbadmin
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=FILE_SYSTEM_STORAGE
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=


なかなか思うような設定をするための設定値が見つからなかったたりするかもしれませんが、基本的にはGUIインストールで設定していることを設定値として用意しているだけなので、GUIでのインストール画面などを参照しながらやるとやりやすいかもしれません。

参考:http://takiken.webcrow.jp/rdbms/oracle/silent_install.html
参考:Oracle Database 19c (19.3)をレスポンス・ファイルにてインストール - ザ☆ミュージシャンズ・プログラマー - Exploring Music & Programming -

Oracle Databaseのインストール実行

サイレントインストール実行

・ORACLE_HOMEに移動する

cd /u01/app/oracle/product/19.0.3/dbhome_1

・インストール実行
どきどきしながら実行する。

./runInstaller -silent -noconfig -responseFile ./install/response//db_install.rsp

実行時の様子。これでうまくいったか?

[oracle@localhost dbhome_1]$ ./runInstaller -silent -noconfig -responseFile ./install/response//db_install.rsp
Launching Oracle Database Setup Wizard...

[WARNING] [INS-32047] The location (/u01/app/oraInventory) specified for the central inventory is not empty.
   ACTION: It is recommended to provide an empty location for the inventory.
[WARNING] [INS-13014] Target environment does not meet some optional requirements.
   CAUSE: Some of the optional prerequisites are not met. See logs for details. installActions2021-05-02_09-53-41AM.log
   ACTION: Identify the list of failed prerequisite checks from the log: installActions2021-05-02_09-53-41AM.log. Then either from the log file or from installation manual find the appropriate configuration to meet the prerequisites and fix it manually.
The response file for this session can be found at:
 /u01/app/oracle/product/19.0.3/dbhome_1/install/response/db_2021-05-02_09-53-41AM.rsp

You can find the log of this install session at:
 /tmp/InstallActions2021-05-02_09-53-41AM/installActions2021-05-02_09-53-41AM.log

As a root user, execute the following script(s):
        1. /u01/app/oraInventory/orainstRoot.sh
        2. /u01/app/oracle/product/19.0.3/dbhome_1/root.sh

Execute /u01/app/oraInventory/orainstRoot.sh on the following nodes:
[localhost]
Execute /u01/app/oracle/product/19.0.3/dbhome_1/root.sh on the following nodes:
[localhost]


Successfully Setup Software with warning(s).
Moved the install session logs to:
 /u01/app/oraInventory/logs/InstallActions2021-05-02_09-53-41AM
[oracle@localhost dbhome_1]$

実際にインストールするときは何度か失敗した。
簡単なメッセージはインストール実行時に表示されるがそれだけだと良くわからない場合もあるので必要に応じてメッセージに従いログなどを確認するとよい。

/u01/app/oraInventory/logs/
事後処理

インストール時に以下のようなメッセージが表示されるので、その通りに実行する。

As a root user, execute the following script(s):
        1. /u01/app/oraInventory/orainstRoot.sh
        2. /u01/app/oracle/product/19.0.3/dbhome_1/root.sh

・/u01/app/oraInventory/orainstRoot.sh

[root@localhost ~]# /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.

・/u01/app/oracle/product/19.0.3/dbhome_1/root.sh

[root@localhost ~]# /u01/app/oracle/product/19.0.3/dbhome_1/root.sh
Check /u01/app/oracle/product/19.0.3/dbhome_1/install/root_localhost.localdomain_2021-05-02_09-59-54-706004764.log for the output of root script
環境変数の設定

Oracleのインストールが完了したら、環境変数がログインされるたびに反映されるように設定しておきます。

・/home/oracle/.bash_profile
以下の内容を追記する。
インストールした内容によって書き換える。

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.0.3/dbhome_1
export ORACLE_SID=test_db
export NLS_LANG=Japanese_Japan.AL32UTF8
export PATH=$ORACLE_HOME/bin:$PATH

設定を即時反映させる。

source .bash_profile

インストール自体はここまでなはず。

データベースの作成

Oracleのインストールは正常にできたはずなので、正常にインストールできているか確認するためにデータベースの作成と接続確認を行います。

参考:Oracle Databaseの作成および構成

初期化パラメータファイル(PFILE)の設定

データベースの起動の際に参照するパラメータファイルに対して最低限の設定を行っておきます。
基本的にはテンプレートが/u01/app/oracle/product/19.0.3/dbhome_1/dbs/init.oraに存在するのでこれをinitSID.oraのファイル名でコピーして流用します。

・ファイル名設定例

cp init.ora inittest_db.ora

・PFILEの設定例
※コメント行は除く

db_name='test_db'
memory_target=1G
processes = 500
db_block_size=8192
db_domain=''
diagnostic_dest='$ORACLE_BASE'
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'
local_listener='(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.142.12)(PORT=1521))'

【修正】
compatibleの設定値を「11.2.0」から「19.0.0」に修正。
いらぬトラブルを踏みました。インストールしたバージョンに合わせるのが正しいようです。

参考:Oracle Databaseの作成および構成

データベースの作成

レスポンスファイルでも作成できるっぽいですが、ちょっと面倒ですがここではCREATE DATABASE文を使用して作成します。

データファイルの配置を行うディレクトリを念のため、予め作成しておく。

mkdir -p /u01/app/oracle/oradata/test_db/
[root@localhost u01]# mkdir -p /u01/logs/my/
[root@localhost u01]# chown oracle:oinstall /u01/logs/ -R

基本的には上記の参考からできるだけ引っ張ってくる。

・CREATE DATABASE文を作成する

CREATE DATABASE test_db
   USER SYS IDENTIFIED BY password
   USER SYSTEM IDENTIFIED BY password
   LOGFILE GROUP 1 ('/u01/logs/my/redo01a.log','/u01/logs/my/redo01b.log') SIZE 100M BLOCKSIZE 512,
           GROUP 2 ('/u01/logs/my/redo02a.log','/u01/logs/my/redo02b.log') SIZE 100M BLOCKSIZE 512,
           GROUP 3 ('/u01/logs/my/redo03a.log','/u01/logs/my/redo03b.log') SIZE 100M BLOCKSIZE 512
   MAXLOGHISTORY 1
   MAXLOGFILES 16
   MAXLOGMEMBERS 3
   MAXDATAFILES 1024
   CHARACTER SET AL32UTF8
   NATIONAL CHARACTER SET AL16UTF16
   EXTENT MANAGEMENT LOCAL
   DATAFILE '/u01/app/oracle/oradata/test_db/system01.dbf'
     SIZE 700M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
   SYSAUX DATAFILE '/u01/app/oracle/oradata/test_db/sysaux01.dbf'
     SIZE 550M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
   DEFAULT TABLESPACE users
      DATAFILE '/u01/app/oracle/oradata/test_db/users01.dbf'
      SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
   DEFAULT TEMPORARY TABLESPACE tempts1
      TEMPFILE '/u01/app/oracle/oradata/test_db/temp01.dbf'
      SIZE 20M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
   UNDO TABLESPACE undotbs1
      DATAFILE '/u01/app/oracle/oradata/test_db/undotbs01.dbf'
      SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
   USER_DATA TABLESPACE usertbs
      DATAFILE '/u01/app/oracle/oradata/test_db/usertbs01.dbf'
      SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;


・CREATE DATABASE文の実行

実行はsqlplusより行います。

sqlplusログイン。

[oracle@localhost oracle]$ sqlplus /nolog

SQL*Plus: Release 19.0.0.0.0 - Production on 月 53 09:05:16 2021
Version 19.3.0.0.0

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

SQL>

SYSDBAで接続。

SQL> CONNECT / AS SYSDBA
アイドル・インスタンスに接続しました。
SQL>

PFILEからSPFILEの作成。
エラーなどが発生してPFILEを修正した場合には作成し直す。

SQL> CREATE SPFILE FROM PFILE;

File created.

SQL>

インスタンスをNOMOUNT状態で起動。

SQL> STARTUP NOMOUNT
ORACLE instance started.

Total System Global Area  524285856 bytes
Fixed Size                  8898464 bytes
Variable Size             360710144 bytes
Database Buffers          150994944 bytes
Redo Buffers                3682304 bytes

CREATE DATABASE文の実行。
CREATE DATABASE文は長いので省力。データベースが作成されましたのメッセージが表示されればOK。

データベースが作成されました。

途中、メモリサイズやディレクトリ有無などでエラーが発生したがパラメータファイルを随時修正して対応した。

データベース作成後のSQL実行

データベースを手動で(SQL文などで)作成した場合、そのまま接続しようとすると恐らく「表またはビューが存在しません。」が発生する。
そのため、sqlplusでログインし以下のsqlを実行する。

なお、この辺は参考にできるものが少なく手探り状態でやっているので過不足があるかもしれない。
私はrdbms配下を先に実行したけどそれだとcatproc.sqlがうまく実行できなかったぽいので、実際の構築時は、rdbms配下→pupbld.sqlcatproc.sqlの順に実行しました。以下の順番でうまくいってなさそうな場合などの参考までに。

[oracle@localhost admin]$ sqlplus / as sysdba
SQL> @/u01/app/oracle/product/19.0.3/dbhome_1/sqlplus/admin/pupbld.sql

SQL> @/u01/app/oracle/product/19.0.3/dbhome_1/rdbms/admin/standard.sql
SQL> @/u01/app/oracle/product/19.0.3/dbhome_1/rdbms/admin/dbmsstdx.sql
SQL> @/u01/app/oracle/product/19.0.3/dbhome_1/rdbms/admin/catalog.sql
SQL> @/u01/app/oracle/product/19.0.3/dbhome_1/rdbms/admin/catproc.sql

参考:データ・ディクショナリの作成

DATABASEへの接続確認

接続用ユーザの作成

接続用のユーザ(スキーマ)を作成しておく。

・ユーザ作成

SQL> CREATE USER wantan
  2  IDENTIFIED BY "wantan"
  3  DEFAULT TABLESPACE users;

・権限付与

SQL> GRANT DBA TO wantan ;

権限付与が成功しました。

SQL> GRANT UNLIMITED TABLESPACE TO wantan;

権限付与が成功しました。

SQL>
テストデータ作成

実際に参照できるか確認するために念のためテストデータを投入しておきます。
どんなデータでもよいですし、別になくてもよいです。

・参照用ユーザにスイッチ

SQL> conn wantan
パスワードを入力してください:
接続されました。
SQL>

・テーブル作成
なんでもOK。

SQL> CREATE TABLE emp (
  2   emp_no VARCHAR2(10),
  3   emp_name VARCHAR2(50),
  4   age NUMBER(3,0),
  5   del_flag VARCHAR2(1),
  6   CONSTRAINT pk1 PRIMARY KEY(emp_no));

表が作成されました。

・テストデータインサート

SQL> INSERT INTO emp
  2   (emp_no,emp_name,age,del_flag)
  3   VALUES ('00001','wantan','20','0');

1行が作成されました。

SQL>

一応取得できるかsqlplusから確認しておく。

QL> SELECT * FROM emp;

EMP_NO     EMP_NAME                                                  AGE D
---------- -------------------------------------------------- ---------- -
00001      wantan                                                     20 0

1行が選択されました。

SQL>
リスナーの起動

データベースが起動しただけでは外部からの接続はできないので、まずはリスナーの起動を行います。
※以下ではあっさり書いてますが、ここがなかなかうまくいかなくて時間かかりました。前述のPFILEにもリスナーに関する設定をちゃっかり追加させています。

・/u01/app/oracle/product/19.0.3/dbhome_1/network/admin/tnsnames.ora
設定例。インスタンスのサービス名と接続名を紐づけている

test_db=
 (DESCRIPTION=
  (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.142.12)(PORT=1521))
  (CONNECT_DATA=
   (SERVICE_NAME=test_db)))

・/u01/app/oracle/product/19.0.3/dbhome_1/network/admin/listener.ora
設定例。リスナーの定義。

LISTENER=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.142.12)(PORT=1521))))
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=off


・リスナー起動

[oracle@localhost admin]$ lsnrctl start

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 15-5-2021 08:52:17

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

/u01/app/oracle/product/19.0.3/dbhome_1/bin/tnslsnrを起動しています。お待ちくだ さい...

TNSLSNR for Linux: Version 19.0.0.0.0 - Production
システム・パラメータ・ファイルは/u01/app/oracle/product/19.0.3/dbhome_1/network/admin/listener.oraです。
ログ・メッセージを/u01/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml に書き込みました。
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.142.12)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.142.12)(PORT=1521)))に接続中
リスナーのステータス
------------------------
別名                      LISTENER
バージョン                TNSLSNR for Linux: Version 19.0.0.0.0 - Production
開始日                    15-5月 -2021 08:52:17
稼働時間                  00 時間 00 秒
トレース・レベル          off
セキュリティ              ON: Local OS Authentication
SNMP                      OFF
パラメータ・ファイル      /u01/app/oracle/product/19.0.3/dbhome_1/network/admin/listener.ora
ログ・ファイル            /u01/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
リスニング・エンドポイントのサマリー...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.142.12)(PORT=1521)))
リスナーはサービスをサポートしていません。
コマンドは正常に終了しました

サービスが登録されていることを確認しておく。
登録されるのに数分程度かかる場合もあるとか。

[oracle@localhost admin]$ lsnrctl service

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 15-5-2021 08:53:21

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.142.12)(PORT=1521)))に接続中
サービスのサマリー...
サービス"ORCLXDB"には、1件のインスタンスがあります。
  インスタンス"test_db"、状態READYには、このサービスに対する1件のハンドラがあり ます...
    ハンドラ:
      "D000" 確立:0 拒否:0 現行:0 最大:1022 状態:ready
         DISPATCHER <machine: localhost.localdomain, pid: 16505>
         (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=30105))
サービス"test_db"には、1件のインスタンスがあります。
  インスタンス"test_db"、状態READYには、このサービスに対する1件のハンドラがあり ます...
    ハンドラ:
      "DEDICATED" 確立:0 拒否:0 状態:ready
         LOCAL SERVER
コマンドは正常に終了しました。
A5:SQL Mk-2で接続する

外部からの接続確認にはA5:SQL Mk-2を使用しました。まぁ好みのツールなどを使用してください。

・A5の設定

私の環境では以下のように設定しました。
適宜修正してください。テスト接続ができればとりあえずOK。

正常に接続できれば、先ほどのテーブルとデータが参照できる。



一旦ここまでで終了。
まぁこのDBを使ってなにしようて感じではないですが、とりあえず立ててみた。