💾

VirtualBox + VagrantでOracle DB (19c) を試食してみる。

2024/08/10に公開

「宇宙天啓データベース G.2 と、断続的な絞首刑が発生します」

※ 懐かしい小ネタは関係ありません。

概要

何だかんだプライベートでSQLの勉強をしたいと思い友人に相談したところ、OracleがVagrantスクリプトを配布していて、勉強用程度の環境であれば簡単に構築できるのでは?とのアドバイスをくれた。正直Vagrantも手を出したことがなかったが、簡単にという誘い文句にチャレンジしてみた。

その時の手順などを備忘録としてまとめてみる。

そんな、 ~0番煎じの記事です。

結論

VirtualBoxVagrant で、簡単に SQL Developper で繋げられるSQL勉強環境を、Windows上に比較的簡単に作ることが できた

環境 (利用ツール)

必須

任意

不要

  • Oracle Client
    • 本稿ではODBCでのクライアント構築は取り扱わない。

環境構築

(0) 各モジュールのダウンロード

(0-1) VirtualBox

https://www.virtualbox.org/wiki/Downloads

image.png

ダウンロード ファイル : VirtualBox-7.0.20-163906-Win.exe

(0-2) Vagrant

https://developer.hashicorp.com/vagrant/install?product_intent=vagrant#windows

image.png

ダウンロード ファイル : vagrant_2.4.1_windows_amd64.msi

(0-3) oracle / vagrant-projects

Vagrant用スクリプトをダウンロードする。

https://github.com/oracle/vagrant-projects/

image.png

ダウンロード ファイル : vagrant-projects-main.zip

(0-4) Oracle Database 19c (19.3) for Linux x86-64

https://www.oracle.com/jp/database/technologies/oracle19c-linux-downloads.html

image.png

ダウンロード ファイル : LINUX.X64_193000_db_home.zip

(0-5) SQL Developer

※ ダウンロードにはOracleアカウントが必要です。本稿ではSQL Developerそのもののセットアップは取り扱いません。

https://www.oracle.com/jp/database/sqldeveloper/technologies/download/

image.png

ダウンロード ファイル : sqldeveloper-23.1.0.097.1607-x64.zip

(0-6) Teraterm 5.2

※ 本稿ではTeratermそのもののセットアップは取り扱いません。

https://github.com/TeraTermProject/teraterm/releases

image.png

ダウンロード ファイル : teraterm-5.2.exe

(1) 環境構築 (システム)

(1-1) VirtualBoxのインストール

特筆することが無いく、普通にインストール。

インストーラー : VirtualBox-7.0.20-163906-Win.exe

image.png

(1-2) Vagrantのインストール

特筆することが無いく、普通にインストール。

インストーラー : vagrant_2.4.1_windows_amd64.msi

image.png

(1-3) 再起動してインストールの確認

Virtuanl Box

スタート メニューから確認できる。

image.png

Vagrant

コマンド プヨンプヨン で確認。

cmd
vagrant -v

image.png
バージョンが表示されればOK。

(2) 環境構築 (Oracle Database) ★★★

(2-1) vagrant-projectsを解凍する。

ダウンロード ファイル : vagrant-projects-main.zip

を、任意のフォルダに解凍する。
※ 移動させず恒久的に残すため、それを加味した作業フォルダに行う。

(2-2) Oracle Database 19c モジュールをコピーする。

ダウンロード ファイル : LINUX.X64_193000_db_home.zip

コピー先 : .\vagrant-projects-main\OracleDatabase\19.3.0

image.png

(2-3) Vagrantを実行して仮想マシンとOracle DBの構築する。

vagrant up を実行するとVagrantにより、Oracle DBが構築された仮想マシンがVirtual Boxに自動で構築される。(当然結構時間かかる。)

今回の手順では初期パスワードなども指定せずランダムのものを使用するため。インストール後に表示されるパスワードをメモし忘れない様に注意する。

cmd
cd .\OracleDatabase\19.3.0
vagrant up

image.png
※ パスワードはちゃんとメモろう。

(2-9) 仮想マシンの起動と終了

起動

cmd
vagrant up

image.png

起動ログを見ると。
SSH用のポートは、自分のPC 2222 が仮想マシンの 22番 に。。
Oracle Database用のポートは、自分のPC 1521 が仮想マシンの 1521番 に。
Oracle Database Enterprise Manager用のポートは、自分のPC 5500 は仮想マシンの 5500番 に。
ポートがマッピングされたことがわかる。

終了

cmd
vagrant halt

(3) クライアント接続設定 ★★★

SQL Developper

JDK同梱版を用いれば、基本SQL Developperの展開だけで利用可能。

基本はPDBでの作業になるが。CDBへ接続して行う設定もあるため、両方作成しておく。
CDBはSIDPDBはサービス名 での接続になる。

CDB管理者

項目
ユーザー名 SYS or SYSTEM
ロール SYSDBA
パスワード 初期パスワード
ホスト名 localhost
ポート 1521
SID ORCLCDB

image.png

PDB管理者

項目
ユーザー名 SYS or SYSTEM or PDBADMIN
ロール SYSDBA
パスワード 初期パスワード
ホスト名 localhost
ポート 1521
サービス名 ORCLPDB1

image.png

Oracle Enterprise Manager

項目
protocol HTTPS
port 5500
context em
URL https://:localhost:5500/em
Username SYS or SYSTEM
Password 初期設定されたパスワード
Container Name ORCLPDB1

image.png
image.png

(4) DB初期設定 ★★★

CDB管理者として接続してパスワードを無期限にして再設定を行う。

ORCLCDBSYSSYSDBA 付きでログインし、次のSQLを実行する。

-- パスワードを有効期限を、無期限をデフォルトにする。
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

-- パスワード変更コマンドで再設定を行い、SYS/SYSTEMのパスワードを無期限にする。
ALTER USER SYS IDENTIFIED BY "初期パスワード" CONTAINER=ALL;
ALTER USER SYSTEM IDENTIFIED BY "初期パスワード" CONTAINER=ALL;

続いて、PDB管理者として接続して、同様にパスワードの再設定を行う。
ORCLPDB1SYSSYSDBA 付きでログインし、次のSQLを実行する。

-- パスワード変更コマンドで再設定を行い、PDBADMINのパスワードを無期限にする。
ALTER USER PDBADMIN IDENTIFIED BY "初期パスワード";

(5) スキーマ作成 ★★★

(5-1) スキーマ作成

PDB管理者として接続して、スキーマの作成を行う。
今回作成するスキーマ例は以下。

項目
スキーマ (ユーザー名) ABC
パスワード abc012
表領域 USERS
-- スキーマ作成
CREATE USER ABC IDENTIFIED BY abc012;

-- 接続許可
GRANT CONNECT TO ABC;

-- 自分のスキーマに表を作成する権限。
GRANT CREATE TABLE TO ABC;

-- 任意のスキーマに表を作成する権限。
GRANT CREATE ANY TABLE TO ABC;

-- USERS表領域へ無制限割当
ALTER USER ABC QUOTA UNLIMITED ON USERS;

-- パスワード変更 (もしあとから変更したくなったら)
ALTER USER ABC IDENTIFIED BY "abc012";

(5-2) スキーマへの接続設定・確認

image.png
繋がればOK。

(6) テーブル作成/SQL試行 (ABCスキーマ) ★★★

今回作成したスキーマで実際にテーブルの作成やデータ操作が行えるかを試行する。

今回作成したABCスキーマに接続して試行作業を行う。

テーブル作成DDL
CREATE TABLE "EMP" (
    "EMP_ID" CHAR(5 BYTE) NOT NULL ENABLE,
    "EMP_NAME" NVARCHAR2(128) NOT NULL ENABLE,
    "ENTRY_DATE" DATE NOT NULL ENABLE,
    "MODFIY_DATE" DATE,
    "MAIL_ADDR" VARCHAR2(128 BYTE),
    "NOTE" NVARCHAR2(128),
  CONSTRAINT "TABLE1_PK" PRIMARY KEY ("EMP_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE
)
SEGMENT CREATION IMMEDIATE 
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"
;
データ登録SQL
INSERT INTO EMP (EMP_ID, EMP_NAME, ENTRY_DATE, MODFIY_DATE, MAIL_ADDR, NOTE) VALUES ('A0001', '森川君1号', SYSDATE, NULL, NULL, NULL);
INSERT INTO EMP (EMP_ID, EMP_NAME, ENTRY_DATE, MODFIY_DATE, MAIL_ADDR, NOTE) VALUES ('A0002', '森川君2号', SYSDATE, NULL, NULL, NULL);
INSERT INTO EMP (EMP_ID, EMP_NAME, ENTRY_DATE, MODFIY_DATE, MAIL_ADDR, NOTE) VALUES ('A0003', '森川君3号', SYSDATE, NULL, NULL, NULL);
INSERT INTO EMP (EMP_ID, EMP_NAME, ENTRY_DATE, MODFIY_DATE, MAIL_ADDR, NOTE) VALUES ('A0004', '森川君4号', SYSDATE, NULL, NULL, NULL);
INSERT INTO EMP (EMP_ID, EMP_NAME, ENTRY_DATE, MODFIY_DATE, MAIL_ADDR, NOTE) VALUES ('A0005', '森川君5号', SYSDATE, NULL, NULL, NULL);
データ確認SQL
SELECT * FROM EMP ORDER BY EMP_ID;

image.png
image.png

(9) 以上。 ★★★

無限大の未来へ

(9) おまけ

SSH

vagrant ssh

Vagrant機能でSSH接続が簡単にできる。ただし、インストール時に自動生成される秘密鍵の改行コードが CRLF のせいで認証に失敗するので、改行コードを LF にする必要がある。
(これだからWindowsは。。。)

cmd
vagrant ssh

image.png

Teraterm

Teratermは秘密鍵が CRLF でもなんとかしてくれている様で、そのまま使えば接続できる。

項目
host localhost
port 2222
user vagrant
秘密鍵 ..vagrant\machines\oracle-19c-vagrant\virtualbox\private_key
macro.ttl
HOST='localhost'
PORT='2222'
USER='vagrant'
PRIVATE_KEY='.\.vagrant\machines\oracle-19c-vagrant\virtualbox\private_key'

getdir CUR_DIR
strconcat PRIVATE_KEY_PATH CUR_DIR
strconcat PRIVATE_KEY_PATH PRIVATE_KEY

strconcat COMMAND HOST
strconcat COMMAND ':'
strconcat COMMAND PORT
strconcat COMMAND ' /ssh /2 /user='
strconcat COMMAND USER
strconcat COMMAND ' /auth=publickey /keyfile="'
strconcat COMMAND PRIVATE_KEY_PATH
strconcat COMMAND '"'

connect COMMAND

image.png

あとがき

DB自体に様々な専門的知識が必要で環境構築をするのが大変で。ライセンス問題も加味すれば、そもそも構築できるのか?というあたりから調べる必要もあり。人生1周目ではなかなか時間が足りなくね?とか思うことが少なくない。それとも彼らは「お風呂キャンセル界隈」なのか?もっと大きな何かを犠牲にしているのではないか?そう思えるくらいには険しい道のりには、どこから手を付ければという気持ちが少なくない。

そして今回の目的地の「SQLの勉強」に対しては、なかなか道がそれていると思える。今じゃない。

超弩級のプログラム初心者に #include の意味から教えるか?まずは「おまじない」でしょ?

今回のVagrantスクリプトはかなり「おまじない」に近いありがたみを感じた。

参考(謝辞)

Discussion