前回はインストールを行うための事前準備を行いました。今回は実際にインストールを行います。
諸々の設定などは前回の事前準備編に従うのでそちらも参照してください。
レスポンスファイル
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のインストールは正常にできたはずなので、正常にインストールできているか確認するためにデータベースの作成と接続確認を行います。
初期化パラメータファイル(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」に修正。
いらぬトラブルを踏みました。インストールしたバージョンに合わせるのが正しいようです。
データベースの作成
レスポンスファイルでも作成できるっぽいですが、ちょっと面倒ですがここでは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 月 5月 3 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.sql
→catproc.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 稼働時間 0 日 0 時間 0 分 0 秒 トレース・レベル 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を使ってなにしようて感じではないですが、とりあえず立ててみた。