※当サイトの記事には、広告・プロモーションが含まれます。

WSL 2にOracle Linux 8.7、Oracle Database 23c(Free-Developer Release)をインストール

nazology.net

⇧ 安全性に疑問が残りそうですね...

WSL 2(Windows SubSystem for Linux 2)にOracle Linuxをインストール

まずは、WSL 2(Windows SubSystem for Linux 2)にOracle Linuxをインストールしていきます。

learn.microsoft.com

⇧ 公式のドキュメントの通りに、インストール。

しようと思うのですが、

forums.oracle.com

2023年6月3日(土)時点で、Oracle Linux 9.x系では、「Oracle Database 23c(Free-Developer Release)」がインストールに未対応らしいので、Oracle Linux_8_7をインストールします。

 wsl --install OracleLinux_8_7   

Oracle Linuxにログインするためのユーザー名とパスワードを入力。

⇧ インストールされました。

Oracle LinuxOracle Database 23c(Free-Developer Release)をインストールする

続いて、「WSL 2(Windows SubSystem for Linux 2)」にインストールした「Oracle Linux」に「Oracle Database 23c(Free-Developer Release)」をインストールしていきたいと思います。

docs.oracle.com

qiita.com

qiita.com

⇧ 上記サイト様の情報を参考。

スーパーユーザーに切り替え。

sudo su -    

Oracle Linux 8 Developer Channelをインストール。

dnf install -y oraclelinux-developer-release-el8    

Oracle Linux 8 Developer Channelを有効にする。

dnf config-manager --set-enabled ol8_developer    

Oracle Database 23c(Free-Developer Release)のRPMをインストール。

dnf -y install oracle-database-preinstall-23c

Oracle Database 23c(Free-Developer Release)のインストーラーをダウンロード。

wget https://download.oracle.com/otn-pub/otn_software/db-free/oracle-database-free-23c-1.0-1.el8.x86_64.rpm

Oracle Database 23c(Free-Developer Release)のインストール。

dnf -y localinstall oracle-database-free-23c-1.0-1.el8.x86_64.rpm

で、指示通りに、「/etc/init.d/oracle-free-23c configure」を実行したところ、

/etc/init.d/oracle-free-23c configure

⇧ リスナーの作成で失敗してるんだが...

ログを確認すると、

Netca configuration log

Parsing command line arguments:
    Parameter "orahome" = /opt/oracle/product/23c/dbhomeFree
    Parameter "instype" = typical
    Parameter "inscomp" = client,oraclenet,javavm,server,ano
    Parameter "insprtcl" = tcp
    Parameter "cfg" = local
    Parameter "authadp" = NO_VALUE
    Parameter "responsefile" = /opt/oracle/product/23c/dbhomeFree/network/install/netca_typ.rsp
    Parameter "silent" = true
    Parameter "orahnam" = OraHomeFree
    Parameter "listenerparameters" = DEFAULT_SERVICE=FREE
Done parsing command line arguments.
Oracle Net Services Configuration:
Profile configuration complete.
Oracle Net Listener Startup:
No valid IP Address returned for the host Toshinobu-PC.
Check the trace file for details: /opt/oracle/cfgtoollogs/netca/trace_OraDBHome23cFree-2306035PM3223.log
Oracle Net Services configuration failed.  The exit code is 1

IPアドレスが解決できないってことなんかね?

stackoverflow.com

stackoverflow.com

learn.microsoft.com

⇧ /etc/hosts、/etc/hostnameにIPアドレスとホスト名を追加すれば良いらしいのだけど、「WSL 2(Windows SubSystem for Linux 2)」を使ってる場合、/etc/wsl.confに設定を追加する必要があるらしい。

「WSL 2(Windows SubSystem for Linux 2)」の最大の欠陥だと思うのだけど、

www.kemasoft.net

wsl2に外部マシンからssh接続する際に問題になるのが、Windows再起動でwsl2のIPが変わる点です。

vm/wsl2に固定IPでssh-server - KemaSoft

⇧ ということらしい...残念過ぎる...

そこで発想を変えて、wsl2 にもう一つ固定IPを付与する(wsl2に2つ目のIPアドレスを固定的に振る)方法を紹介します。

vm/wsl2に固定IPでssh-server - KemaSoft

⇧ 「WSL 2(Windows SubSystem for Linux 2)」を起動する時に、固定IPを振ってあげることができるようですと。

そもそも、何故にIPアドレスを固定にしたいかと言うと、

kaede.jp

Oracle DatabaseがIPアドレスの可変を想定していないらしいですと。

話が脱線してしまいましたが、「WSL 2(Windows SubSystem for Linux 2)」環境でDockerとかを使わずに、Oracle Databaseをインストールするには、

  1. /etc/hosts、/etc/hostnameにIPアドレスとホスト名を追加
  2. /etc.wsl.confを作成し、設定を追加
  3. 1で設定するIPアドレスでWSL 2の仮想マシンを起動
  4. WSL 2の仮想マシンにログイン
  5. /etc/init.d/oracle-free-23c configure を実行

って手順になるんかな?

これで、上手くいったとしても面倒くさ過ぎるんだが...

とりあえず、Oracle リスナーのポートはデフォルトの1521とは異なる値にしておく。Windows側にOracle Database 12c、19cをインストールしていて、1521、1519のポートを使っているので。

#This is a configuration file to setup the Oracle Database.
#It is used when running '/etc/init.d/oracle-free-23c configure'.

# LISTENER PORT used Database listener, Leave empty for automatic port assignment
LISTENER_PORT=1523

# Character set of the database
CHARSET=AL32UTF8

# Database file directory
# If not specified, database files are stored under Oracle base/oradata
DBFILE_DEST=

# DB Domain name
DB_DOMAIN=

# SKIP Validations, memory, space
SKIP_VALIDATIONS=false

そしたらば、固定IPアドレスで起動するための設定をしていきます。

その前に、systemdが有効になっていないので、先に、/etc/wsl.confを作成します。

/etc/wsl.confを作成し、設定を追加。

vi /etc/wsl.conf  

systemdを有効にするためには、WSL 2のLinuxディストリビューション仮想マシンを再起動する必要があるので、再起動で。

とりあえず、ホスト名を確認しておきます。

hostnamectl    

固定したいIPアドレスを追加。

vi /etc/hosts    

ホスト名を追加。自分の環境では元から追加されてました。

vi /etc/hostname    

で、/etc/resolv.confが存在しないっぽいので、作成。

もう一度、WSL 2のLinuxディストリビューション仮想マシンを再起動。

そしたら、再起動して、ログインし、Oracle Linuxのアップデートしときます。

sudo dnf update && sudo dnf upgrade

openssh serverが起動してるのと、「/etc/ssh/sshd_config」でパスワード認証が有効になっているか確認しておきます。

SSHのホスト鍵を生成。

そしたらば、管理者権限でコマンドプロンプトを起ち上げ、仮想マシンを起動する時のIPアドレスを設定。

netsh interface ip add address "vEthernet (WSL)" 10.255.255.88 255.255.255.0
netsh interface portproxy add v4tov4 listenport=22 connectaddress=10.255.255.16

固定IPアドレスを付与して仮想マシンを起動。

wsl -d [起動したいWSL 2のLinuxディストリビューション] -u root ip addr add 10.255.255.16/24 broadcast 10.255.255.255 dev eth0 label eth0:1

で、再度、仮想マシンにログイン後、Oracle Databaseのインストール。

⇧ 今度はOracle Databaseがインストールされたようです。
「$HOME/.bash_profile」にOracle Databaseの環境変数を設定する。

2023年6月4日(日)追記:↓ ここから

ORACLE_HOMEの末尾のスラッシュが余分でした...

2023年6月4日(日)追記:↑ ここまで

以下は、一応、追加。

で、Oracle Databaseの環境変数を設定を有効にする。

source ~/.bash_profile    
. /opt/oracle/product/23c/dbhomeFree/bin/oraenv    

なぜか、sqlplus / as sysdbaでの接続ができんかったので、SYSユーザーでログインしました。

とりあえず、Linux環境にOracle Databaseがインストールできたということで。

2023年6月4日(日)追記:↓ ここから

Oracle Databaseのインスタンスとリスナーの自動起動の設定ができていなかったので、設定を追加します。

souiunogaii.hatenablog.com

qiita.com

drinking-masa.cocolog-nifty.com

⇧ 上記サイト様を参考。

「/etc/oratab」ファイルを編集。

「/etc/sysconfig/env.oracledb」を作成。

「/etc/systemd/system/oraclelsnr.service」を作成し、以下の内容を設定。

[Unit]
Description = Oracle Listener
After=network.target
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/env.oracledb
ExecStart=/opt/oracle/product/23c/dbhomeFree/bin/lsnrctl start
ExecStop=/opt/oracle/product/23c/dbhomeFree/bin/lsnrctl stop
Restart=always
User=oracle
Group=oinstall
[Install]
WantedBy=multi-user.target  

「/etc/systemd/system/oracle.service」を作成し、以下の内容を設定。

[Unit]
Description=Oracle Database Server
After=network.target oraclelsnr.service

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/env.oracledb
ExecStart=/opt/oracle/product/23c/dbhomeFree/bin/dbstart /opt/oracle/product/23c/dbhomeFree
ExecStop=/opt/oracle/product/23c/dbhomeFree/bin/dbshut /opt/oracle/product/23c/dbhomeFree
User=oracle
Group=oinstall

[Install]
WantedBy=multi-user.target    

サービスファイルを systemd に反映。

sudo systemctl daemon-reload

oraclelsnr.serviceを有効化。

sudo systemctl enable oraclelsnr

oracle.serviceを有効化。

sudo systemctl enable oracle

oracle.serviceが有効化されたか確認。

sudo systemctl is-enabled oracle

2023年6月4日(日)追記:↑ ここまで

2023年6月10日(土)追記:↓ ここから

何か、

goodbyegangster.hatenablog.com

変数展開ができないらしく、ORACLE_HOMEの値を、ちゃんとフルパスで書いてあげます。

systemdでOracleDBを自動起動する - goodbyegangsterのブログ

⇧ という話もあるので、systemdで実行するserviceファイルで読み込んでいる設定ファイル(自分の場合は「EnvironmentFile=/etc/sysconfig/env.oracledb」で設定しているファイル)で変数を使わない方が良いのかもしれない。

そんなわけで、Oracle Linux 8.7、Oracle Database 23c(Free-Developer Release)をインストールし直しました。ポート番号もデフォルトの1521にしてます。

自動起動の設定は以下のようにしました。

Oracle Databaseの環境変数

■/etc/sysconfig/env.oracledb

ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/product/23c/dbhomeFree
ORACLE_SID=FREE
NLS_LANG=Japanese_Japan.AL32UTF8    

Oracle Net Listenerの自動起動のServiceの設定

■/etc/systemd/system/oralistener.service

[Unit]
Description=Oracle Databaes Listener Service
After=network.target

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/env.oracledb
ExecStart=/opt/oracle/product/23c/dbhomeFree/bin/lsnrctl start
ExecStop=/opt/oracle/product/23c/dbhomeFree/bin/lsnrctl stop
Restart=always
User=oracle
Group=oinstall

[Install]
WantedBy=multi-user.target    

Oracle Database instanceの自動起動のServiceの設定

■/etc/systemd/system/oracledb.service

[Unit]
Description=Oracle Databaes Instance Service
After=network.target oralistener.service

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/env.oracledb
ExecStart=/opt/oracle/product/23c/dbhomeFree/bin/dbstart /opt/oracle/product/23c/dbhomeFree
ExecStop=/opt/oracle/product/23c/dbhomeFree/bin/dbshut /opt/oracle/product/23c/dbhomeFree
Restart=always
User=oracle
Group=oinstall

[Install]
WantedBy=multi-user.target    

Oracle Database instanceを自動起動対象にする

■/etc/oratab

#



# This file is used by ORACLE utilities.  It is created by root.sh
# and updated by either Database Configuration Assistant while creating
# a database or ASM Configuration Assistant while creating ASM instance.

# A colon, ':', is used as the field terminator.  A new line terminates
# the entry.  Lines beginning with a pound sign, '#', are comments.
#
# Entries are of the form:
#   $ORACLE_SID:$ORACLE_HOME:<N|Y>:
#
# The first and second fields are the system identifier and home
# directory of the database respectively.  The third field indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
#
#FREE:/opt/oracle/product/23c/dbhomeFree:N
FREE:/opt/oracle/product/23c/dbhomeFree:Y

で、再起動して、外部接続できれば、Oracleのリスナー、インスタンスともに自動起動できてるということになるようです。

ちなみに、Oracle Database 12cから、

  • CDB(Container DataBase)
  • PDB(Pluggable DataBase)

にデータベースの構成が変わっているらしく、テーブルとか追加していくのは、PDB(Pluggable DataBase)の方になっていくということらしい。

公式のドキュメントによりますと、

docs.oracle.com

Starting in Oracle Database 21c, a multitenant container database is the only supported architecture. In previous releases, Oracle supported non-container databases (non-CDBs).

https://docs.oracle.com/en/database/oracle/oracle-database/23/cncpt/CDBs-and-PDBs.html#GUID-5C339A60-2163-4ECE-B7A9-4D67D3D894FB

Oracle Database 21c以降は、「非CDB(Container DataBase)」には対応しない方針らしい。

2023年6月10日(土)追記:↑ ここまで

「WSL 2(Windows SubSystem for Linux 2)」へのOracle Databaseのインストール本当に面倒くさい...

というか、「WSL 2(Windows SubSystem for Linux 2)」へのOracle Databaseのインストールって想定されていないような気がしてきましたわ...

毎度モヤモヤ感が半端ない...

今回はこのへんで。