VirtualBox + VagrantでOracle DB (19c) を試食してみる。
「宇宙天啓データベース G.2 と、断続的な絞首刑が発生します」
※ 懐かしい小ネタは関係ありません。
概要
何だかんだプライベートでSQLの勉強をしたいと思い友人に相談したところ、OracleがVagrantスクリプトを配布していて、勉強用程度の環境であれば簡単に構築できるのでは?とのアドバイスをくれた。正直Vagrantも手を出したことがなかったが、簡単にという誘い文句にチャレンジしてみた。
その時の手順などを備忘録としてまとめてみる。
そんな、 ~0番煎じの記事です。
結論
VirtualBox と Vagrant で、簡単に SQL Developper で繋げられるSQL勉強環境を、Windows上に比較的簡単に作ることが できた。
環境 (利用ツール)
必須
-
Windows10 Pro x64 21H1
- OS。
-
残念ながら、本稿ではクソ雑魚64bit版 Windowsを扱います。
-
Oracle VirtualBox v7.0.12 (最新 v7.0.20)
- https://www.virtualbox.org/
- 仮想化基盤。
-
Vagrant v2.4.0 (最新 v2.4.1)
- https://www.vagrantup.com/
- 仮想化基盤操作ツール。
- OracleのVagrantスクリプトを用いるので。
- Oracle / vagrant-projects
-
Oracle Database 19c (19.3) for Linux x86-64
- https://docs.oracle.com/cd/F19136_01/
- Linux向けOracle Databaseサーバー クライアント。
- (Vagrantで仮想マシンにLinuxがインストールされる)
-
SQL Developer v23.1.0.097
- https://www.oracle.com/jp/database/sqldeveloper/
- GUIでのOracle クライアント ツール。
- 今回はJDBCで主に利用。
任意
-
Teraterm 5.2
- https://teratermproject.github.io/
- ターミナル エミュレータ。
- 今回はSSHで利用。
不要
-
Oracle Client
- 本稿ではODBCでのクライアント構築は取り扱わない。
環境構築
(0) 各モジュールのダウンロード
(0-1) VirtualBox
ダウンロード ファイル : VirtualBox-7.0.20-163906-Win.exe
(0-2) Vagrant
ダウンロード ファイル : vagrant_2.4.1_windows_amd64.msi
(0-3) oracle / vagrant-projects
Vagrant用スクリプトをダウンロードする。
ダウンロード ファイル : vagrant-projects-main.zip
(0-4) Oracle Database 19c (19.3) for Linux x86-64
ダウンロード ファイル : LINUX.X64_193000_db_home.zip
(0-5) SQL Developer
※ ダウンロードにはOracleアカウントが必要です。本稿ではSQL Developerそのもののセットアップは取り扱いません。
ダウンロード ファイル : sqldeveloper-23.1.0.097.1607-x64.zip
(0-6) Teraterm 5.2
※ 本稿ではTeratermそのもののセットアップは取り扱いません。
ダウンロード ファイル : teraterm-5.2.exe
(1) 環境構築 (システム)
(1-1) VirtualBoxのインストール
特筆することが無いく、普通にインストール。
インストーラー : VirtualBox-7.0.20-163906-Win.exe
(1-2) Vagrantのインストール
特筆することが無いく、普通にインストール。
インストーラー : vagrant_2.4.1_windows_amd64.msi
(1-3) 再起動してインストールの確認
Virtuanl Box
スタート メニューから確認できる。
Vagrant
コマンド プヨンプヨン で確認。
vagrant -v
バージョンが表示されれば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
(2-3) Vagrantを実行して仮想マシンとOracle DBの構築する。
vagrant up
を実行するとVagrantにより、Oracle DBが構築された仮想マシンがVirtual Boxに自動で構築される。(当然結構時間かかる。)
今回の手順では初期パスワードなども指定せずランダムのものを使用するため。インストール後に表示されるパスワードをメモし忘れない様に注意する。
cd .\OracleDatabase\19.3.0
vagrant up
※ パスワードはちゃんとメモろう。
(2-9) 仮想マシンの起動と終了
起動
vagrant up
起動ログを見ると。
SSH用のポートは、自分のPC 2222
が仮想マシンの 22
番 に。。
Oracle Database用のポートは、自分のPC 1521
が仮想マシンの 1521
番 に。
Oracle Database Enterprise Manager用のポートは、自分のPC 5500
は仮想マシンの 5500
番 に。
ポートがマッピングされたことがわかる。
終了
vagrant halt
(3) クライアント接続設定 ★★★
SQL Developper
JDK同梱版を用いれば、基本SQL Developperの展開だけで利用可能。
基本はPDBでの作業になるが。CDBへ接続して行う設定もあるため、両方作成しておく。
CDBはSID。PDBはサービス名 での接続になる。
CDB管理者
項目 | 値 |
---|---|
ユーザー名 |
SYS or SYSTEM
|
ロール | SYSDBA |
パスワード | 初期パスワード |
ホスト名 | localhost |
ポート | 1521 |
SID | ORCLCDB |
PDB管理者
項目 | 値 |
---|---|
ユーザー名 |
SYS or SYSTEM or PDBADMIN
|
ロール | SYSDBA |
パスワード | 初期パスワード |
ホスト名 | localhost |
ポート | 1521 |
サービス名 | ORCLPDB1 |
Oracle Enterprise Manager
項目 | 値 |
---|---|
protocol | HTTPS |
port | 5500 |
context | em |
URL | https://:localhost:5500/em |
Username |
SYS or SYSTEM
|
Password | 初期設定されたパスワード |
Container Name | ORCLPDB1 |
(4) DB初期設定 ★★★
CDB管理者として接続してパスワードを無期限にして再設定を行う。
ORCLCDB
に SYS
で SYSDBA
付きでログインし、次の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管理者として接続して、同様にパスワードの再設定を行う。
ORCLPDB1
に SYS
で SYSDBA
付きでログインし、次の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) スキーマへの接続設定・確認
繋がればOK。
(6) テーブル作成/SQL試行 (ABCスキーマ) ★★★
今回作成したスキーマで実際にテーブルの作成やデータ操作が行えるかを試行する。
今回作成したABCスキーマに接続して試行作業を行う。
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"
;
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);
SELECT * FROM EMP ORDER BY EMP_ID;
(9) 以上。 ★★★
無限大の未来へ
(9) おまけ
SSH
vagrant ssh
Vagrant機能でSSH接続が簡単にできる。ただし、インストール時に自動生成される秘密鍵の改行コードが CRLF
のせいで認証に失敗するので、改行コードを LF
にする必要がある。
(これだからWindowsは。。。)
vagrant ssh
Teraterm
Teratermは秘密鍵が CRLF
でもなんとかしてくれている様で、そのまま使えば接続できる。
項目 | 値 |
---|---|
host | localhost |
port | 2222 |
user | vagrant |
秘密鍵 | ..vagrant\machines\oracle-19c-vagrant\virtualbox\private_key |
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
あとがき
DB自体に様々な専門的知識が必要で環境構築をするのが大変で。ライセンス問題も加味すれば、そもそも構築できるのか?というあたりから調べる必要もあり。人生1周目ではなかなか時間が足りなくね?とか思うことが少なくない。それとも彼らは「お風呂キャンセル界隈」なのか?もっと大きな何かを犠牲にしているのではないか?そう思えるくらいには険しい道のりには、どこから手を付ければという気持ちが少なくない。
そして今回の目的地の「SQLの勉強」に対しては、なかなか道がそれていると思える。今じゃない。
超弩級のプログラム初心者に #include
の意味から教えるか?まずは「おまじない」でしょ?
今回のVagrantスクリプトはかなり「おまじない」に近いありがたみを感じた。
参考(謝辞)
- Oracle VM VirtualBox
https://www.virtualbox.org/ - Oracle Database 19c Download for Linux x86-64 | Oracle 日本
https://www.oracle.com/jp/database/technologies/oracle19c-linux-downloads.html - Vagrant by HashiCorp
https://www.vagrantup.com/ - vagrant-projects/OracleDatabase/19.3.0 at main · oracle/vagrant-projects · GitHub
https://github.com/oracle/vagrant-projects/tree/main/OracleDatabase/19.3.0 - Vagrantで楽々Oracle18c構築(作業3分、待ち時間数十分) #oracle - Qiita
https://qiita.com/mkyz08/items/4bf8f8ccbaf279fb0bc1
Discussion