⇧ 安全性に疑問が残りそうですね...
WSL 2(Windows SubSystem for Linux 2)にOracle Linuxをインストール
まずは、WSL 2(Windows SubSystem for Linux 2)にOracle Linuxをインストールしていきます。
⇧ 公式のドキュメントの通りに、インストール。
しようと思うのですが、
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 LinuxにOracle Database 23c(Free-Developer Release)をインストールする
続いて、「WSL 2(Windows SubSystem for Linux 2)」にインストールした「Oracle Linux」に「Oracle Database 23c(Free-Developer Release)」をインストールしていきたいと思います。
⇧ 上記サイト様の情報を参考。
スーパーユーザーに切り替え。
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アドレスが解決できないってことなんかね?
⇧ /etc/hosts、/etc/hostnameにIPアドレスとホスト名を追加すれば良いらしいのだけど、「WSL 2(Windows SubSystem for Linux 2)」を使ってる場合、/etc/wsl.confに設定を追加する必要があるらしい。
「WSL 2(Windows SubSystem for Linux 2)」の最大の欠陥だと思うのだけど、
⇧ ということらしい...残念過ぎる...
そこで発想を変えて、wsl2 にもう一つ固定IPを付与する(wsl2に2つ目のIPアドレスを固定的に振る)方法を紹介します。
⇧ 「WSL 2(Windows SubSystem for Linux 2)」を起動する時に、固定IPを振ってあげることができるようですと。
そもそも、何故にIPアドレスを固定にしたいかと言うと、
⇧ Oracle DatabaseがIPアドレスの可変を想定していないらしいですと。
話が脱線してしまいましたが、「WSL 2(Windows SubSystem for Linux 2)」環境でDockerとかを使わずに、Oracle Databaseをインストールするには、
- /etc/hosts、/etc/hostnameにIPアドレスとホスト名を追加
- /etc.wsl.confを作成し、設定を追加
- 1で設定するIPアドレスでWSL 2の仮想マシンを起動
- WSL 2の仮想マシンにログイン
- /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
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のインスタンスとリスナーの自動起動の設定ができていなかったので、設定を追加します。
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で実行するserviceファイルで読み込んでいる設定ファイル(自分の場合は「EnvironmentFile=/etc/sysconfig/env.oracledb」で設定しているファイル)で変数を使わない方が良いのかもしれない。
そんなわけで、Oracle Linux 8.7、Oracle Database 23c(Free-Developer Release)をインストールし直しました。ポート番号もデフォルトの1521にしてます。
自動起動の設定は以下のようにしました。
■/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)の方になっていくということらしい。
公式のドキュメントによりますと、
Starting in Oracle Database 21c, a multitenant container database is the only supported architecture. In previous releases, Oracle supported non-container databases (non-CDBs).
⇧ 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のインストールって想定されていないような気がしてきましたわ...
毎度モヤモヤ感が半端ない...
今回はこのへんで。