🙄

Oracle19c(WSL2+Docker)のインストール手順

5 min read

はじめに

プロジェクトでOracleを使っている方も多いと思いますので、WSL2+Dockerを利用したOracle19cのインストール手順をまとめてみました。zipをダウンロードして、シェルを実行するだけでインストールが終わるので、簡単です。

実は、Oracleの最新バージョンは21cですが、公式ページの最後に記載されている通り、Innovationリリースでサポート期間が限られており、本番にはおすすめしないとのことで、今回は19cを記事にしています。

Oracle19cのインストール

Oracleから公式でDockerイメージが提供されていますので、記載されている手順に従い、インストールを行います。作業PCのメモリが16Gより少ない方は、21c Express Editionも利用できます。

  1. WSLとDockerのインストールを前の記事を参考に行う。実施済みの場合はスキップ。
  2. 公式ページから、Oracle19cのLinux x86-64をダウンロードする。
    https://www.oracle.com/jp/database/technologies/oracle-database-software-downloads.html
  3. VSCodeで以下のファイルを用意し、OracleのDockerイメージを作成する。20.3.0版はコメントにて記載。私の環境では約35分かかりました。
oracle-docker/oracleInstall.sh
#!/bin/sh
# Parameter check
if [ $# != 1 ]; then
  echo "Usage : ./OracleInstall.sh <zipFile>" 1>&2
  exit 0
fi
# Oracle docker image download
git init
git config core.sparsecheckout true
git remote add origin https://github.com/oracle/docker-images.git
echo OracleDatabase > .git/info/sparse-checkout
git pull origin main
# Zip file copy
cd OracleDatabase/SingleInstance/dockerfiles/19.3.0
#cd OracleDatabase/SingleInstance/dockerfiles/21.3.0
cp $1 .
# Build docker image
cd ..
./buildContainerImage.sh -v 19.3.0 -e -i
#./buildContainerImage.sh -v 21.3.0 -x -i
# Make oradata folder
sudo mkdir -p /home/oracle/oradata
sudo chmod 777 /home/oracle/oradata
# Startup docker container
cd ~/oracle-docker
docker-compose up -d
docker-compose logs -f
oracle-docker/docker-compose.yml
version: '3'
services:
  database:
    image: oracle/database:19.3.0-ee
    volumes:
      - /home/oracle/oradata:/opt/oracle/oradata
    environment:
      ENABLE_ARCHIVELOG: "true"
      NLS_LANG: "Japanese_Japan.UTF8"
    ports:
      - 1521:1521
      - 5500:5500
  • 直下のフォルダ名がコンテナ名になるため、oracle-docker/配下にファイルを作成する。
  • アーカイブログモードにする。
  • 日本語表示にする。
  • データを永続化するために、/home/oracle/oradataにVolumeを作成する。
  • sysのパスワードは、セキュリティの観点から別途設定する。
$ cd ~/oracle-docker
$ chmod 755 oracleInstall.sh
$ ./oracleInstall.sh <1で取得したzipファイル(/mnt/c/配下)>
→ DATABASE IS READY TO USE!が表示されれば、完了。
→ メモリ使用率が高い場合は、再起動して/home/oracle/oradata内を削除すれば、再実行可能。
$ docker images
REPOSITORY        TAG         IMAGE ID       CREATED       SIZE
oracle/database   19.3.0-ee   2d81e98cfd1d   2 hours ago   6.53GB
oraclelinux       7-slim      1af2d7d8be2c   2 days ago    132MB
  1. sysユーザのパスワード変更する。
$ docker exec -ti oracle-docker_database_1 ./setPassword.sh <パスワード>
  1. サンプルとして、trainingスキーマを作成する。その際、パスワードの無期限化も併せて行う。
$ docker exec -ti oracle-docker_database_1 sqlplus sys@ORCLPDB1 as sysdba
SQL>
create user training identified by training default tablespace users temporary tablespace temp;
grant create session, resource, unlimited tablespace to training;
alter profile default limit password_life_time unlimited;
quit
  1. 作成したスキーマに対して、テーブル操作を行ってみる。
$ docker exec -ti oracle-docker_database_1 sqlplus training/training@ORCLPDB1
SQL>
create table sample (id int);
insert into sample values (1);
select * from sample;
commit;
drop table sample;

外部アプリからのDB接続

ここから少し問題があり、DBツールからlocalhost:1521で接続しても繋がず、hostname -Iで取得したIPアドレスだと繋がります。WSLの公式サイトによると、通常の仮想マシンの場合と同じ手順を実行する必要があり、「Microsoft は、このエクスペリエンスを改善する方法を検討しています」とのことです。JavaのWEBサービスは普通に繋がったのに、何かが違うんでしょうね。

そこで、ポートプロキシの設定を行うのですが、WSLは毎回IPアドレスが変わるため、hostname -Iで取得した最初のIPアドレスを利用します。

netsh interface portproxy add v4tov4 listenport=1521 listenaddress=0.0.0.0 connectport=1521 connectaddress=((wsl hostname -I).Split(" ")[0])
→ 管理者モードで実行
netsh interface portproxy show all
Address         Port        Address         Port
--------------- ----------  --------------- ----------
…
0.0.0.0         1521        172.31.223.128  1521

ただ、毎回、上記のコマンドを実行するのも面倒なので、以下の手順で起動時に実行するように変更します。

  1. Windowsのタスクバーで、taskと検索し、タスクスケジューラを起動する。
  2. タスクの作成を選択し、以下のタスクを追加する。
  • 全般
    • 名前 : WSL ProxyPort
    • 最上位の特権で実行する。
  • トリガー
    • タスクの開始:スタートアップ時
    • 遅延時間を設定する:30秒
  • 操作
    • プログラム:%Systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe
    • -ExecutionPolicy Bypass <先ほどのコマンドのps1ファイル>
  1. PCを再起動して、Oracleを起動し、localhost:1521でもDBに接続できるか確認する。

余談ですが、私のおすすめツールはSQL Workbench/Jです。

Oracle Developer Tools for VSCode

VSCodeには、Oracle Developer ToolsというOracle用のDBツールが存在します。使用するには.NET Core Runtime 3.1が必要になるので、ここの内容に従い、インストールを行ってください。

$ lsb_release -a
→ 今回はUbuntu 20.04の.NET Core Runtime 3.1をインストール
$ 
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update; \
  sudo apt-get install -y apt-transport-https && \
  sudo apt-get update && \
  sudo apt-get install -y aspnetcore-runtime-3.1
→ 公式サイトは6.0なので、3.1に変更している。

使い方については、公式ページを参考にしてください。

おわりに

実際にOracleをLinux上で触れるので、本番でOracleを利用している方は、本手順での導入をお勧めします。

Discussion

ログインするとコメントできます