0
0

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 3 years have passed since last update.

Oracle Databaseの公式イメージ(11g)を使用してはまったことまとめ

Posted at

環境構築にDockerを使用して、ハマったポイントがあるため書き残しておきます。

前書き

dockerイメージについては、公式で公開されているリポジトリの情報をもとに作成しています。
インストーラの入手、ビルドについては公式リポジトリを参照すれば可能なはずです。
qiitaで記事にしている方もいらっしゃるようです
@moriwakiii 様

この記事にたどり着いた皆様なら、すでにここまではなんとなく終わっているんじゃないかと。。。

永続化ボリュームの場所

永続化ボリュームの場所は、/u01/app/oracle/oradataです

12cの場合:/opt/oracle/oradata
19cの場合:/opt/oracle/product/19c

のようです・・・コロコロ変えるなよ〇すぞ

永続化ボリュームのpermission

docker runするときや、docker-compose upするときなんかに永続化ボリュームとして
ローカルストレージをマウントすると思いますが、

docker run -it -d -p 1521:1521 -v ./oradata:/u01/app/oracle/oradata oracle/database:11.2.0.2-xe

その際以下のようなログが出て初期化に失敗している場合があります。

oracle11g | #####################################
oracle11g | ########### E R R O R ###############
oracle11g | DATABASE SETUP WAS NOT SUCCESSFUL!
oracle11g | Please check output for further info!
oracle11g | ########### E R R O R ###############
oracle11g | #####################################
oracle11g | The following output is now a tail of the alert.log:
oracle11g | ALTER DATABASE   MOUNT
oracle11g | ORA-00210: cannot open the specified control file
oracle11g | ORA-00202: control file: '/u01/app/oracle/oradata/XE/control.dbf'
oracle11g | ORA-27037: unable to obtain file status
oracle11g | Linux-x86_64 Error: 2: No such file or directory
oracle11g | Additional information: 3
oracle11g | ORA-205 signalled during: ALTER DATABASE   MOUNT...
oracle11g | Sun May 10 04:16:38 2020
oracle11g | Checker run found 1 new persistent data failures

公式issueなどにもあるのですが、
https://github.com/oracle/docker-images/issues/176
マウント元のディレクトリ(oradata)のOwnerが1000:1000になっていないと、
操作する権限がなくてERRORになって死にます。

12c/19cなどのissueでは、chown 54321:54322という記事も見かけますが、
11gの場合は1000:1000ですので、イメージが完成して喜び勇んでdocker run/docker-compose upするまえに、

mkdir oradata/ # 永続化ボリュームマウント用のディレクトリを作成
chown 1000:1000 oradata/ # ownerを1000:1000に設定。必要に応じてsudoなどで実行してください。

をしておくと幸せになれるかもしれません。

あと、これはDocker関係ないのですが、Vagrant + Hyper-Vで作業をしていたのですが、
smbでマウントしているフォルダだと、chown 1000:1000 oradata/しても適切なpermissionが
割り当たらずに死にました。(smbの仕組み的に、仕方ないのかな?よくわかってない)
黙ってVMのローカルディスクで作業してください。

完成したdocker imageのpush時

11gにかかわる話ではないですが、インストーラを探してきて・ビルドして使うのめんどくさいですよね?
そんな時、docker hubなどのリポジトリにストックしておくのが一般的かと思いますが、
完成したイメージを自分のリポジトリなどにpushしようとしてもエラーになります。

docker push oracle/database:11.2.0.2-xe # これはエラーになるコマンド

単にイメージ名:tagで構成されているイメージの oracleの部分がdocker hubのユーザ名と
一致していないので、oracle/には権限がない的なエラーだったかと思いますが、
適切にtagを設定してあげれば問題ありません

docker tag oracle/database:11.2.0.2-xe {自分のdocker hubのユーザ名}/oracle-database:11.2.0.2-xe # わかりやすい名前に変更する
docker push {自分のdocker hubのユーザ名}/oracle-database:11.2.0.2-xe

としてあれば、docker login済みであればpush可能でしょう。

SID

SIDはXE固定です。
12cなどでは、ORACLE_SID環境変数に値をセットすることで任意のSIDを指定できますが、
XE固定のようです。(どこかで見た記事では、指定すると落ちると書いてあったような。。。)

docker-compose

参考にdocker-composeを書き残しておきます。

version: '3'
services: 
  db:
    image: oracle/database:11.2.0.2-xe # ビルドしたイメージ名
    container_name: oracle11g          # docker psしたとき、docker execするときに使用する一意名を明示的に指定する
    shm_size: 1g                       # /dev/shmに割り当てる容量を指定する. 1g以上指定しないと起動しない
    ports: 
      - 1521:1521                      # DB接続先ポート
      - 8080:8080                      # 何のためにあるのかわからないポート
    volumes: 
      - ./oradata:/u01/app/oracle/oradata # 永続化したいデータ
    environment: 
      ORACLE_BASE: /u01/app/oracle     # なくても動くと思う
      ORACLE_PWD: oracle               # sys/systemのパスワード
      TZ: Asia/Tokyo                   # TZ指定。効いてるのかは確認してない

他にも何かあれば更新していきます。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?