Vagrant + Oracle8Linux + OracleXE 21cのインストール

Vagrant Boxを設定する

OralceLinuxは、Oracleが管理しているリポジトリから取得する為、box_urlを指定する必要がある


Vagrant.configure("2") do |config|
  
  # Boxを分けてDBとプログラムを分ける方が管理しやすいので名前を付ける
  config.vm.define "oracleDB" do |server|
    server.vm.box = "oraclelinux/8"
    server.vm.box_url = "https://oracle.github.io/vagrant-projects/boxes/oraclelinux/8.json"
    server.vm.network "private_network", ip: "192.168.33.11"
  end

end

Oracle Linux Vagrant Boxes:https://yum.oracle.com/boxes/

Boxを起動する

Vagrantを立ち上げ

> vagrant up oracleDB

SSHで接続する

> vagrant ssh oracleDB

OracleXE 21cをインストールする

参考:https://docs.oracle.com/cd/E96517_01/xeinl/procedure-installing-oracle-database-xe.html

VagrantのSSHは、ユーザ:vagrantで接続するのでsuコマンドでrootにする

$ sudo su -

RPMをダウンロードしてインストールをする

# curl -o oracle-database-preinstall-21c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-21c-1.0-1.el7.x86_64.rpm
# yum -y localinstall oracle-database-preinstall-21c-1.0-1.el7.x86_64.rpm

サービス構成スクリプトを起動する
SYS, SYSTEM, PDBADMINといった管理者用のパスワードの設定をすることになる。
開発用のBox設定なので、忘れづらいもの(vagrant)とかを入力しておく。

# /etc/init.d/oracle-xe-21c configure

OracleXEのパスを通す

環境変数を設定する

$ export ORACLE_SID=XE 
$ export ORAENV_ASK=NO 

oraenvコマンドを実行する。

$ . /opt/oracle/product/21c/dbhomeXE/bin/oraenv

何らかのエラーメッセージが出てくるが気にせず、以下の行が出てきたら「/opt/oracle/product/21c/dbhomeXE」と入力する

ORACLE_HOME = [] ? /opt/oracle/product/21c/dbhomeXE
The Oracle base has been set to /opt/oracle

OracleXEの起動

systemctlコマンドで起動する

$ systemctl start oracle-xe-21c

起動できているか念のため確認

$ lsnrctl status

以下のような表示がされれば起動している

LSNRCTL for Linux: Version 21.0.0.0.0 - Production on 09-JUL-2022 03:10:55

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 21.0.0.0.0 - Production
Start Date                09-JUL-2022 03:10:27
Uptime                    0 days 0 hr. 0 min. 28 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Default Service           XE
Listener Parameter File   /opt/oracle/homes/OraDBHome21cXE/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=localhost)(PORT=5500))(Security=(my_wallet_directory=/opt/oracle/homes/OraDBHome21cXE/admin/XE/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "XE" has 1 instance(s).
  Instance "XE", status READY, has 1 handler(s) for this service...
Service "XEXDB" has 1 instance(s).
  Instance "XE", status READY, has 1 handler(s) for this service...
Service "e11a70b25b8634e0e055000000000001" has 1 instance(s).
  Instance "XE", status READY, has 1 handler(s) for this service...
Service "xepdb1" has 1 instance(s).
  Instance "XE", status READY, has 1 handler(s) for this service...
The command completed successfully

PDBの確認

まずは以下のコマンドでアクセスする

sqlplus sys/{パスワード} as sysdba

接続が出来たら存在するPDBの一覧を確認する

SQL> show pdbs

以下のようにデフォルトでXEPDB1というものが存在するはず

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 XEPDB1                         READ WRITE NO

ユーザを作成する

セッションをつなぐ

SQL> alter session set container = XEPDB1;

ユーザを作成(user名:vagrant, パスワード:vagrant)

SQL> CREATE USER vagrant IDENTIFIED BY "vagrant";

権限を付与(全権限付与)

SQL> GRANT ALL PRIVILEGES TO vagrant;

接続できるか確認

ホストPCなどで接続を試す。以下はPHPの例

<?php

// [ユーザー名], [パスワード], //[ホスト名]:[ポート]/[DBサービス名]
$c = oci_pconnect("vagrant", "vagrant", "//192.168.33.11:1521/XEPDB1");
$s = oci_parse($c, "SELECT 'Hello World!'FROM dual");
oci_execute($s);
oci_fetch_all($s, $res);
echo "<pre>\n";
var_dump($res);
echo "</pre>\n";
OCI8モジュール:https://pecl.php.net/package/oci8
Oracle Instant Client:https://www.oracle.com/database/technologies/instant-client/downloads.html