OTN の VirtualBoxイメージ で Oracle DB 19c環境 を 楽々構築

※(2023/4/4追記)23cの開発者版がリリースされてovaイメージが置き換えられたため下記記事を参照して下さい。

https://qiita.com/ora_gonsuke777/items/564471e460b2b58d8aa2

以前の記事の 19c版 となります。

 > OTN の VirtualBoxイメージ で Oracle DB 18c環境 を 楽々構築
 >【Oracle Database or GoldenGate Advent Calendar 2018 Day 5】
 > https://qiita.com/ora_gonsuke777/items/87f9b0078febddea2178

OTNからダウンロードできる VirtualBoxイメージ(ovaファイル)で
Oracle Database 19c環境をサクっと構築してみるやで彡(ﾟ)(ﾟ)

# 1. VirtualBox をインストール

まずは VirtualBox をダウンロードしてインストール、現時点(2019/8/16)の最新版は 6.0.10 となります。
Oracle VM VirtualBox Extension Pack も一緒に入れとくと良いです。

 > Oracle VM VirtualBox
 > https://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp

# 2. Database Virtual Box Appliance / Virtual Machine の ovaイメージをダウンロード

下記ページから ovaイメージ を ダウンロードします。
7.8GB位あるのでダウンロードを開始したら少し待ちます彡(ﾟ)(ﾟ)

 > Oracle Technology Network
 > Database Virtual Box Appliance / Virtual Machine
 > https://www.oracle.com/technetwork/database/enterprise-edition/databaseappdev-vm-161299.html
 > ↓
 > ※リンクが変わっていたので追記、上記リンクもリダイレクトはされるようですが。
 > https://www.oracle.com/database/technologies/databaseappdev-vm.html


念のためハッシュ値を確認します。下記はコマンドプロンプトでのMD5ハッシュ値確認例彡(ﾟ)(ﾟ)

```shell
certutil -hashfile C:\Users\AYSHIBAT\Downloads\DeveloperDaysVM2019-05-31_20.ova MD5

MD5 ハッシュ (対象 C:\Users\AYSHIBAT\Downloads\DeveloperDaysVM2019-05-31_20.ova):
20b5a5bd91cfe9d4f5acf5128f06146e
CertUtil: -hashfile コマンドは正常に完了しました。
```

# 3. ovaイメージのインポート

ダウンロードしたovaイメージをVirtualboxにインポートします。基本ポチポチするだけ彡(ﾟ)(ﾟ)
![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/3b5b0e1a-be98-be56-e956-6c46ad4465cc.jpeg)
![WS000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/5be69473-f40d-5327-f586-1dd58b306c3c.jpeg)

# 4. 仮想マシンの起動

インポートが成功したら、仮想マシンを起動します。起動するだけ彡(ﾟ)(ﾟ)
![WS000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/7c5fe08c-ec70-ca3c-2cd5-d170bc52916c.jpeg)
![WS000004c.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/24340aa5-3628-39ce-c2c5-d6c4726f1ec6.jpeg)

# 5. 仮想マシンへのアクセス(ssh + sqlplus)

インポートされた仮想マシンにはNATのポートフォワード設定が下記のように設定されています。
![WS000006.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/0aeba753-0400-aaa5-0880-44744a2da1e4.jpeg)

sshのポートフォワードは 2222(HOST)→22(GUEST) に設定されているので、
ホストOSのターミナルソフトから「localhost:2222」でsshログインが可能です。

ユーザ名とパスワードは元ページに書かれている通り両方とも oracle 彡(ﾟ)(ﾟ)

 >  (Username and password is oracle.) 

Teratermでログインしてみます。

![WS000007.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/620acb5f-eb0e-4677-4465-171a3232c0a8.jpeg)
![WS000008.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/712ac37c-a0fc-76ed-4b57-f5366567e542.jpeg)

sshログイン後、環境変数ORACLE_HOMEとPATHを設定します。
tnsnames.oraには CDB と PDB の接続文字列が記述されてます。CDB に接続してみますやで彡(ﾟ)(ﾟ)

```sql
export ORACLE_HOME=/u01/app/oracle/product/version/db_1
export PATH=${PATH}:${ORACLE_HOME}/bin
cat ${ORACLE_HOME}/network/admin/tnsnames.ora
sqlplus /nolog
CONNECT SYS/oracle@ORCLCDB AS SYSDBA
SET LINESIZE 170;
SET PAGESIZE 100;
SHOW CON_NAME;
SELECT PATCH_ID, PATCH_UID, PATCH_TYPE, DESCRIPTION FROM DBA_REGISTRY_SQLPATCH;
```

実行結果は下記の通り。DBにログイン成功や！彡(^)(^)

```sql
[oracle@localhost ~]$ export ORACLE_HOME=/u01/app/oracle/product/version/db_1
[oracle@localhost ~]$ export PATH=${PATH}:${ORACLE_HOME}/bin
[oracle@localhost ~]$ cat ${ORACLE_HOME}/network/admin/tnsnames.ora
ORCLCDB=localhost:1521/orclcdb
ORCL=
 (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
[oracle@localhost ~]$ sqlplus /nolog

SQL*Plus: Release 19.0.0.0.0 - Production on Sat Aug 17 03:21:14 2019
Version 19.3.0.0.0

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

SQL> CONNECT SYS/oracle@ORCLCDB AS SYSDBA
Connected.
SQL> SET LINESIZE 170;
SQL> SET PAGESIZE 100;
SQL> SHOW CON_NAME;

CON_NAME
------------------------------
CDB$ROOT
SQL> SELECT PATCH_ID, PATCH_UID, PATCH_TYPE, DESCRIPTION FROM DBA_REGISTRY_SQLPATCH;

  PATCH_ID  PATCH_UID PATCH_TYPE DESCRIPTION
---------- ---------- ---------- ----------------------------------------------------------------------------------------------------
  29517242   22862832 RU         Database Release Update : 19.3.0.0.190416 (29517242)

SQL>
```

# 6. 仮想マシン上のDBへのアクセス(SQL Developer)
お次はホストOSの SQL Developer で仮想マシンのDBにログインしてみます彡(ﾟ)(ﾟ)

仮想マシンのOracleリスナーのポートは 1521(HOST)→1521(GUEST) にフォワードされているので、
ホストOSのツール等から localhost:1521 でDB接続できます。SQL Developer で PDBの方に接続してみます。

 > ユーザー名：PDBADMIN
 > パスワード：oracle
 > ホスト名　：localhost
 > ポート　　：1521
 > サービス名：orcl

![WS000010.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/895b264e-294a-cb0d-e122-70cb3c4041fc.jpeg)

接続後、試しに V$VERSION を SELECT してみます。
![WS000009.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/f98935d3-7850-1d93-0086-739d756c4159.jpeg)

成功(｀･ω･)Ъ

# 7. 仮想マシンのAPEX ADMIN環境にホストマシンのWebブラウザからアクセス(Oracle APEX)

仮想マシンの8080ポート(HOST)は8080ポート(GUEST)にフォワードされていて、
ホストマシンのブラウザから仮想マシンのAPEX ADMIN環境にアクセスできます。下記は接続情報となります。

 > URL…………http://localhost:8080/apex
 > Workspace…INTERNAL
 > Username …ADMIN
 > Password …oracle

接続画面キャプチャはこちら
![WS000012.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/98a8373f-a1c6-2c29-fd09-b10ce73c4ac0.jpeg)

接続後のキャプチャはこちら
![WS000013.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/a0f24700-6a66-356c-26db-4ac7ec956032.jpeg)

この接続情報元ネタは下記、publicなのは無いのかな…？

 > Installing and Configuring an Oracle Developer Day VirtualBox Image
 > https://mikesmithers.wordpress.com/2015/01/25/installing-and-configuring-an-oracle-developer-day-virtualbox-image/

このADMIN環境からワークスペースを作成すれば、
もりもりAPEXアプリを作れるやで。過去記事も見てね彡(^)(^)

 > Oracle APEX Meetup 第2回「2時間でできるAPEXハンズオン」(6/1・木) に行ってみたのでご報告
 > https://gonsuke777.hatenablog.com/entry/20170613/1497339652

# 8. OS認証で CDB$ROOT にSYSユーザーでログイン(※2019/8/23追記)

CDB$ROOT に OS認証 でログインする方法ですが、該当環境のoracleユーザーには
環境変数TWO_TASKがセットされているので、これを解除して ORACLE_SID を指定してログインして下さい。

 > SQL*Plus ユーザーズ・ガイドおよびリファレンス 19c
 > 2.1 SQL*Plusの環境変数
 > https://docs.oracle.com/cd/F19136_01/sqpug/configuring-SQL-Plus.html#GUID-A91DD984-84ED-4D67-9983-938FCFC3665E
 > TWO_TASK　接続文字列を指定するUNIX環境変数。データベースを指定しない接続は、TWO_TASKに指定したデータベースに接続されます。

```sql

export ORACLE_HOME=/u01/app/oracle/product/version/db_1
export PATH=${PATH}:${ORACLE_HOME}/bin
export ORACLE_SID=orclcdb
unset TWO_TASK
sqlplus /nolog
CONNECT / AS SYSDBA
SHOW CON_NAME;
SHOW PDBS;
```

下記の通り OS認証 でログインできます。

```sql
$ export ORACLE_HOME=/u01/app/oracle/product/version/db_1
$ export PATH=${PATH}:${ORACLE_HOME}/bin
$ export ORACLE_SID=orclcdb
$ unset TWO_TASK
$ sqlplus /nolog

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Aug 23 03:43:09 2019
Version 19.3.0.0.0

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

SQL> CONNECT / AS SYSDBA
Connected.
SQL> SHOW CON_NAME;

CON_NAME
------------------------------
CDB$ROOT
SQL> SHOW PDBS;

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

SQL>
```

# 9. まとめ
VirtualBoxでお手軽にOracle Database 19c環境を構築できたやで！どんどん活用するんやで。
彡(^)(^)