WSL2 で Oracle Database 19c インストール

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287622/24d38a78-2d1e-47cd-e66d-2463088f6bd3.png)

# Oracle Database 19c ダウンロード

`Oracle Database 19c for Microsoft Windows x64 (64-bit)`をWindowsダウンロードフォルダにダウンロードしておきます。ダウンロードするにはログインが必要になります。
ダウンロード完了したら、`LINUX.X64_193000_db_home.zip`ファイルを存在していることを確認します。

https://www.oracle.com/database/technologies/oracle-database-software-downloads.html

# リポジトリのクローン

`Ubuntu-22.04`で起動してOracleのdocker-imagesリポジトリをクローンします。

```bash
PS > wsl --install --distribution Ubuntu-22.04
$ cd $HOME
$ git clone https://github.com/oracle/docker-images.git
Cloning into 'docker-images'...
remote: Enumerating objects: 17409, done.
remote: Counting objects: 100% (1986/1986), done.
remote: Compressing objects: 100% (288/288), done.
remote: Total 17409 (delta 1777), reused 1747 (delta 1686), pack-reused 15423
Receiving objects: 100% (17409/17409), 15.04 MiB | 12.50 MiB/s, done.
Resolving deltas: 100% (10300/10300), done.
```

# ダウンロードしたファイルの配置

```bash
$ username=$(powershell.exe -Command 'echo $env:UserName' | tr -d '\r\n')
$ cp /mnt/c/Users/${username}/Downloads/LINUX.X64_193000_db_home.zip ~/docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0/
```

# Dockerインストール

別の記事を参照してDockerをインストールします。

https://qiita.com/motoJinC25/items/c6fbb10f00230f6a5a97

# ビルド

```bash
$ cd ~/docker-images/OracleDatabase/SingleInstance/dockerfiles
$ ./buildContainerImage.sh -v 19.3.0 -e -i
```

> -v : バージョン指定
> -e : Enterprise Edition
> -i : MD5チェックサム無視

# docker-compose.yaml 作成

```bash
$ cd $HOME
$ mkdir -p oracledb_19.3.0 && cd oracledb_19.3.0
$ cat << EOF >> docker-compose.yml
version: "3.9"
services:
  db:
    image: oracle/database:19.3.0-ee
    container_name: oracledb
    ports:
      - 1521:1521
      - 5500:5500
    volumes:
      - ./oradata:/opt/oracle/oradata
      - ./startup:/opt/oracle/scripts/startup
    environment:
      - ORACLE_SID=ORCLCDB
      - ORACLE_PDB=ORCLPDB1
      - ORACLE_PWD=password1      
    restart: always
EOF
$ mkdir -p oradata startup
$ chmod 777 oradata startup
```

# コンテナ作成

```bash
$ docker compose -f ~/oracledb_19.3.0/docker-compose.yml up -d
$ docker compose -f ~/oracledb_19.3.0/docker-compose.yml logs -f
```

> `XDB initialized`が見えたら、Ctrl+Cで抜けます。

# Oracle 接続確認

```bash
$ docker exec -it oracledb sqlplus SYSTEM/password1@ORCLCDB
SQL> exit
$ docker exec -it oracledb sqlplus SYSTEM/password1@ORCLPDB1
SQL> exit
```

# (オプション)パスワード無期限化

```bash
$ docker exec -it oracledb /bin/bash
bash-4.2$ sqlplus / as sysdba
SQL> alter session set container=CDB$ROOT;
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
SQL> alter session set container=ORCLPDB1;
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
SQL> exit
bash-4.2$ exit
```

# HRスキーマ追加

```bash
$ docker exec -it oracledb /bin/bash
bash-4.2$ cd /opt/oracle/product/19c/dbhome_1/demo/schema/human_resources
bash-4.2$ sqlplus / as sysdba
SQL> alter session set container=ORCLPDB1;
SQL> @hr_main.sql hr users temp /tmp
SQL> GRANT ALL PRIVILEGES TO hr;
SQL> GRANT SELECT ANY DICTIONARY to hr;
SQL> exit
bash-4.2$ exit
```

# システム識別子(SID)による接続設定

```bash
$ docker exec -it oracledb /bin/bash
bash-4.2$ cd $ORACLE_HOME/network/admin
bash-4.2$ echo "USE_SID_AS_SERVICE_LISTENER=on" >> listener.ora
bash-4.2$ lsnrctl stop listener
bash-4.2$ lsnrctl start listener
bash-4.2$ exit
$ docker compose -f $HOME/oracledb_19.3.0/docker-compose.yml restart
```

# SQL Developer で接続確認

`SQL Developer`最新バージョン(23.1)をダウンロードして実行して接続確認します。

### ORCLCDB

- ユーザー名 : SYSTEM
- パスワード : password1
- ホスト名 : localhost
- ポート : 1521
- SID : ORCLCDB

### ORCLPDB1

- ユーザー名 : SYSTEM
- パスワード : password1
- ホスト名 : localhost
- ポート : 1521
- SID : ORCLPDB1