1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Oracle Container Registry から Oracle Database EE 21c をプルして使えるようにしてみた

Last updated at Posted at 2022-04-27

前回の記事でWSL上からDockerを使えるようにしたので、早速コンテナをプルっとやってみる。

前回の記事はこちら

今回は、Oracle Container RegistryというDockerレジストリにあるOracle Database Enterprise Edition(EE) 21cのDockerイメージをプルする。

Dockerレジストリの名前 Dockerイメージの名前
Oracle Container Registry Oracle Database EE 21c

Oracle Database EE 21cをプルするだけで、「OracleLinux7+初期設定済みのEE」のセットがついてくるらしい。Dockerはとても楽だ。

最後にデータベースへの接続テストをやっておしまい。

引用資料

ここに今回の記事の内容全部書いてある。

Oracle® Linux Oracle Container Runtime for Dockerユーザー・ガイド

第6章 Dockerレジストリの使用

Oracle Database EE イメージの説明ページ(英語)

環境

  • Windows 10 Pro バージョン 21H2 (OSビルド 19044.1645)
  • WSL 2
  • Oracle Linux 8.5
  • Docker version 20.10.14, build a224086

インストールするもの

  • Oracle Database EE 21c のDockerイメージ

プルの事前準備

Oracle Account の作成

元からアカウントを持ってたのでここは飛ばした。

Oracle Container Registryには、ライセンスされた商用Oracleソフトウェア製品のイメージが含まれています。 Oracle Container Registry上でライセンスされているソフトウェア用のイメージをプルするには、Oracle Accountを所有している必要があります。 次のものを使用してOracle Accountを作成できます:

https://profile.oracle.com/myprofile/account/create-account.jspx

Oracle Container Registry のWebページに接続する

下記リンクへ飛ぶ。

[Oracle Database Enterprise Edition] を使いたいので、
右側の[続行]ボタンを押して、規約に同意する。

image.png

[続行]→[✅]に変わった。

ホストOS(WSL)で認証

#マークが先頭にあるので、rootユーザに切り替えてからやる。

$ sudo -s
# docker login container-registry.oracle.com

Oracle Account のログイン・パスワードで認証した。

これでOracle製品のDockerイメージをプルできるようになった。

Dockerイメージのプル

まず、pullコマンドを打つ。

root
# docker pull container-registry.oracle.com/database/enterprise:latest

8.15GBあるので少し時間がかかった。

インストールされたか確認をする。

# docker images
REPOSITORY                                          TAG       IMAGE ID       CREATED        SIZE
container-registry.oracle.com/database/enterprise   latest    e592d69e5258   2 months ago   8.15GB

もう必要がないので、ログアウトをしておく。

root
# docker logout container-registry.oracle.com

データベースの起動と接続テスト

次に初期設定や接続テストなどをやっていく。

インスタンスの起動

runコマンドが下記の通り書いてあるのだが、そのまま実行してもエラーになる。

$ docker run -d --name <oracle-db>
container-registry.oracle.com/database/enterprise:21.3.0.0

<oracle-db>を適当な名前に置き換えて(便宜上oracledbとする)、改行せずに入れれば良いみたいだった。

$ docker run -d --name oracledb container-registry.oracle.com/database/enterprise

起動中のコンテナを確認してみる。

$ docker ps
CONTAINER ID   IMAGE                                               COMMAND                  CREATED              STATUS                                 PORTS     NAMES
3a8ff2cc6863   container-registry.oracle.com/database/enterprise   "/bin/sh -c 'exec $O…"   About a minute ago   Up About a minute (health: starting)             oracledb

さっき命名したoracledbコンテナがちゃんと動いてた。

コンテナ内からの接続

ここでのコンテナ内とは、Dockerコンテナ内のOracleLinux7を指す。

下記の4つの接続方法が書かれていたのだが、今回はそのうち3つを試す。

$ docker exec -it <oracle-db> sqlplus / as sysdba
$ docker exec -it <oracle-db> sqlplus sys/<your_password>@<your_SID> as sysdba
$ docker exec -it <oracle-db> sqlplus system/<your_password>@<your_SID>
$ docker exec -it <oracle-db> sqlplus pdbadmin/<your_password>@<your_PDBname>

知りたいものリスト

  • <your_password>
  • <your_SID>
  • <your_PDBname>

ちなみに、sqlplus / as sysdbaとやったらORA-12162エラーになった。

$ docker exec -it oracledb sqlplus / as sysdba

SQL*Plus: Release 21.0.0.0.0 - Production on Tue Apr 26 10:26:08 2022
Version 21.3.0.0.0

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

ERROR:
ORA-12162: TNS:net service name is incorrectly specified


Enter user-name:

ORA-12162エラーの原因は環境変数に$ORACLE_SIDを設定してないからだそうだ。1
$ORACLE_SIDrun時の引数に設定する必要があったそうだが、知らなかった。
諦めて別の簡易接続ネーミング・メソッドを試すことにする。

<your_password>の初期設定をする

パスワードは適当に決める。
ここでは便宜上passwordとする。

$ docker exec oracledb ./setPassword.sh password

<your_SID>をログから調べる

ログから接続情報などを確認できる。

$ docker logs oracledb

~中略~

Database Information:
Global Database Name:ORCLCDB
System Identifier(SID):ORCLCDB
Look at the log file "/opt/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log" for further details.

~中略~

<your_SID>はORCLCDBとわかった。

CDB に接続

設定したパスワードでCDB(コンテナ・データベース)に接続してみる。

$ docker exec -it oracledb sqlplus sys/password@ORCLCDB as sysdba

今度は接続できた。

<your_PDBname>をSQLコマンドで調べる

先程接続したCDBで、自動作成されたPDB(プラガブル・データベース)の名前を調べる。

SQL*Plus
SQL> show pdbs

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

<your_PDBname>はORCLPDB1とわかった。

PDB に接続

exitコマンドで一度SQL*Plusから切断してから、
PDBにも接続してみる。

$ docker exec -it oracledb sqlplus pdbadmin/password@ORCLPDB1

こちらも接続できた。

コンテナ内からの接続テストは完了した。

次は手順的にコンテナ外から接続テストをしてみるのだが、ホストOSにSQL*Plusをインストールしていないことに気付いたので、長くなりそうだし次の記事でやろうと思う。

次回予告

  • ホストOSからの接続テスト
  • Webからの接続テスト
  • Windowsからの接続テスト

余談

Linuxカーネルの最新化

前回インストールしたときに忘れていたので、やっておく。

powershell
wsl --update

更新はなかった。

dnfパッケージの最新化

$ sudo dnf update

更新した。

WSLのバックアップ作成

WSLをディストリビューションごとにバックアップできる。

powershell
wsl --export OracleLinux_8_5 OracleLinux_8_5.tar

tarファイルの保存場所は%UserProfile%の下にある。
WindowsOSを再インストールするときなどに使えそう。

logファイルの中身を覗いてみる

logの中にさらにlogファイルのパスが書かれていた。
下記のようにdocker exec <コンテナ名> <コマンド>とすることで、コンテナ上で各種コマンドを実行できるらしい。

moreでlogファイルの中身を覗いてみる。

$ docker exec oracledb more /opt/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log

見てもよくわからなかった。

参考資料

今回引用はしなかったけど、参考になりそうだったもの。

  1. https://ja.visual-foxpro-programmer.com/oracle-12c-ora-12162

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?