Vagrantで楽々Oracle18c構築（作業3分、待ち時間数十分）

# はじめに

Vagrantで簡単にOracle18cの環境を構築する方法を見つけたので試してみた。以下の記事では12cになっていますが、11gと18cのvagrantfileもあった。

・[Quick and Easy Installation of Oracle Database 12c on Oracle Linux in Oracle VM VirtualBox](https://blogs.oracle.com/linux/quick-and-easy-installation-of-oracle-database-12c-on-oracle-linux-in-oracle-vm-virtualbox)

この方法で、Oracle Linux上にOracle EEをインストールし、データベースまで構築した環境が簡単に作れます。
試した感想としては、作業中の待ち時間は長いですが作業自体は簡単なのでちょっと自分用の開発環境が欲しいなというときは便利かなと思いました。

Dockerが好きな人は以下の記事のように構築することもできるようです。

- [Docker版Oracle Database 12cを使ってみる](https://qiita.com/comefigo/items/d05c0e1977cc25e6b98a)
- [Oracle 18c (18.3) の Docker を作成する](https://qiita.com/manymanyuni/items/ee2a3b9032750fdf5d72)


# 前提条件

使用した環境は以下のとおり。

・Windows 10
・VirtualBox、Vagrantはインストール済み。
・構築したVMは約15.3GBなのでディスクの空きに注意


# インストールモジュールをダウンロード

OTNから18cのモジュール（Linux x86-64）をダウンロードする。

- [Oracle Database ソフトウェア・ダウンロード](https://www.oracle.com/technetwork/jp/database/enterprise-edition/downloads/index.html)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/179607/148d35d3-094e-ab09-9f17-82fb22529480.png)


# git clone

まずは以下のようにgit cloneなのですが、今回のPCはgitが入っていないので、ダウンロードしました。

```
git clone https://github.com/oracle/vagrant-boxes
```

以下をぽちっと

![image.png](https://qiita-image-store.s3.amazonaws.com/0/179607/d7f447f9-638f-ff26-08b8-fbf89e4977cc.png)

ダウンロードしたファイルはとりあえず「c:\vagrant-boxes-master」以下に展開。

そして、Oracleのインストールモジュール「LINUX.X64_180000_db_home.zip」を以下のディレクトリに置きます。

```
C:\vagrant-boxes-master\OracleDatabase\18.3.0
```

以下のコマンドを実行してインスタンスを起動します。
Oracle Linuxをダウンロードし、Oracleのインストールを実行しているので、環境にもよりますが数十分かかります。

```
vagrant up
```

インストールが完了すると、以下のように表示されます。
sys/system/pdbadminユーザのパスワードが自動生成されるのでメモしておきます。

```
    oracle-18c-vagrant: INSTALLER: Database created
    oracle-18c-vagrant: INSTALLER: Oratab configured
    oracle-18c-vagrant: Created symlink from /etc/systemd/system/multi-user.target.wants/oracle-rdbms.service to /etc/systemd/system/oracle-rdbms.service.
    oracle-18c-vagrant: INSTALLER: Created and enabled oracle-rdbms systemd's service
    oracle-18c-vagrant: INSTALLER: setPassword.sh file setup
    oracle-18c-vagrant: ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: ★パスワードが表示される★
    oracle-18c-vagrant: INSTALLER: Installation complete, database ready to use!
```

デフォルトで以下の環境にて構築されます。

- ORACLE_HOME: /opt/oracle/product/18c/dbhome_1
- Hostname: localhost
- Port: 1521
- SID: ORCLCDB
- PDB: ORCLPDB1

次にoraenvでOracle関連の環境変数をセットします。
手順に沿ってoraenvを使用していますが、/etc/profile等に環境変数をセットする方が一般的かなと思います。

```
vagrant ssh

[vagrant@oracle-18c-vagrant ~]$ . oraenv
ORACLE_SID = [ORCLPDB1] ? ORCLPDB1
ORACLE_HOME = [/home/oracle] ? /opt/oracle/product/18c/dbhome_1
ORACLE_BASE environment variable is not being set since this
information is not available for the current user ID vagrant.
You can set ORACLE_BASE manually if it is required.
Resetting ORACLE_BASE to its previous value or ORACLE_HOME
The Oracle base remains unchanged with value /opt/oracle/product/18c/dbhome_1
```

次にsqlplusでデータベースに接続します。
パスワードはインストール時にメモしたものを使用しています。

```
[vagrant@oracle-18c-vagrant ~]$ sqlplus system/vT2USPjIs+k=1@localhost/orclpdb1

SQL*Plus: Release 18.0.0.0.0 - Production on Sat Nov 10 09:19:34 2018
Version 18.3.0.0.0

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

Last Successful login time: Sat Nov 10 2018 09:10:43 +09:00

Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0
```

接続成功。省略しますが、ローカル（Windows）からA5:SQL（なんでもよいですが）でも接続してうまくいことを確認できています。

なお、Vagrantfile（抜粋）は以下のようになっています。
メモリーは2GBでORACLE_SID等も記載されているので必要に応じて変更すればいいですね。

```
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ol7-latest"
  config.vm.box_url = "https://yum.oracle.com/boxes/oraclelinux/latest/ol7-latest.box"
  config.vm.define NAME
  
  config.vm.box_check_update = false
  
  # change memory size
  config.vm.provider "virtualbox" do |v|
    v.memory = 2048
    v.name = NAME
  end

  # VM hostname
  config.vm.hostname = NAME

  # Oracle port forwarding
  config.vm.network "forwarded_port", guest: 1521, host: 1521
  config.vm.network "forwarded_port", guest: 5500, host: 5500

  # Provision everything on the first run
  config.vm.provision "shell", path: "scripts/install.sh", env:
    {
       "ORACLE_BASE"         => "/opt/oracle",
       "ORACLE_HOME"         => "/opt/oracle/product/18c/dbhome_1",
       "ORACLE_SID"          => "ORCLCDB",
       "ORACLE_PDB"          => "ORCLPDB1",
       "ORACLE_CHARACTERSET" => "AL32UTF8",
       "ORACLE_EDITION"      => "EE",
       "SYSTEM_TIMEZONE"     => SYSTEM_TIMEZONE
    }

end
```

簡単でしたが以上。


# Oracle11gの場合

[2019/4/10追記]
11gも必要になったので以下を参考に環境を構築しました。
Vagrantがあれば作業も数分で、後は待ち時間だけで構築でき簡単でした。

- [Oracle Database 11.2, 12.1, 12.2の簡易セットアップ](https://qiita.com/shakiyam/items/3d2b94c118ab88fa4c79)

なお、そのままですとteraterm等でパスワード認証でのログインができないので以下のように変更しておくと便利です。

/etc/ssh/sshd_configを以下のように修正

> PasswordAuthentication no

設定をリロードする。

```
$ systemctl reload sshd
```

これで、ID:oracle, PASSWORD:oracleでリモートログインできるようになります。
（公開鍵認証でも良いですが・・・）


# 参考

・[Quick and Easy Installation of Oracle Database 12c on Oracle Linux in Oracle VM VirtualBox](https://blogs.oracle.com/linux/quick-and-easy-installation-of-oracle-database-12c-on-oracle-linux-in-oracle-vm-virtualbox)