Dockerでoracle21(compose利用)

oracleとのつきあい長い。

1990年代のoracle7からやし、まぁ苦しい思い出もある。

当時フリーの技術者の方が基本設計と詳細設計やってて、なんと日本語でテーブルと項目の定義作ってはった。

ms-accessの延長みたいなことやってるし、ヘンな構成作るから相当苦しめられたっけなぁ。

dockerでバージョン12/18/19のoracle動かしたことはあるんやけど、やり方思い出せんかったからメモ書いとく。

そろそろ23出るんやろけど、今は21がダウンロードできる最新っぽかった。

おおまかな使い方は、

  1. oracleインストール用のzipをダウンロード
  2. 作業用フォルダの準備とdockerイメージを作るための処理をgitからダウンロード
  3. gitからダウンロードしたフォルダにインストールで使うoracleのzipファイルを置く
  4. dockerビルドしてイメージ作る
  5. dockerのoracleイメージを使ってdocker composeで起動
  6. クライアントから接続

前はdocker-compose使って動かしてたけど、今回からdocker composeやね。

ここでdocker-compose.ymlの書き方だけ残してたけど、ビルドのことは書いてへんかったなぁ。

今はV2のdockerやからcompose.ymlで定義やってく。

download zip

このへんからダウンロードする。
ようけあるなぁ。

オラクル・データベース・ソフトウェアのダウンロード | オラクル | Oracle 日本
Windows、LinuxのOracle Solaris、IBM AIX、HP-UXおよび多くのための最新のデータベース・ソフトウェアである19c、またはすべての以前のバージョン18c、12cおよび11gをダウンロードしてください。

windows/linux/solaris/hp-ux/aixとかあるけど、linuxホストのdockerコンテナで動かすからlinux用でええ。

大昔のOTNアカウントでログインしてダウンロードするだけ。
もうOTNってないんかもしれんけど、アカウント使えるのは使えてるで。

作業用のフォルダを作る

コンテナ用の永続化領域でもある。

cd /docker/nariDockerDat
mkdir sv_ora21
cd sv_ora21

git cloneする

gitにenterprise editionのoracleイメージを作るための材料を置いてくれてる。

GitHub - steveswinsburg/oracle21c-docker: A docker container for running Oracle 21c
A docker container for running Oracle 21c. Contribute to steveswinsburg/oracle21c-docker development by creating an acco...

ほな取ってきましょ。

nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21$ git clone https://github.com/oracle/docker-images
Cloning into 'docker-images'...
remote: Enumerating objects: 17268, done.
remote: Counting objects: 100% (1910/1910), done.
remote: Compressing objects: 100% (479/479), done.
remote: Total 17268 (delta 1556), reused 1640 (delta 1408), pack-reused 15358
Receiving objects: 100% (17268/17268), 10.81 MiB | 27.67 MiB/s, done.
Resolving deltas: 100% (10187/10187), done.
nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21$ ls
LINUX.X64_213000_db_home.zip  dat  docker-images
nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21$

サイトからgit cloneしたらわかるんやけど、データベースだけやなくweblogicとかOpenJDKのdockerイメージを作るdockerfile入ってるみたい。

今回はデータベースやからls結果の1行目にある「OracleDatabase」ってのを使う。

nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21$ cd docker-images/
nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21/docker-images$ ls
Archive                    OracleDatabase            OracleTuxedo
CODEOWNERS                 OracleEssbase             OracleUnifiedDirectory
CODE_OF_CONDUCT.md         OracleFMWInfrastructure   OracleUnifiedDirectorySM
CONTRIBUTING.md            OracleGoldenGate          OracleVeridata
Contrib                    OracleHTTPServer          OracleWebCenterContent
GraalVM                    OracleIdentityGovernance  OracleWebCenterPortal
LICENSE.txt                OracleInstantClient       OracleWebCenterSites
NoSQL                      OracleJava                OracleWebLogic
OracleAccessManagement     OracleLinuxDevelopers     README.md
OracleAnalytics            OracleManagementAgent     SECURITY.md
OracleBI                   OracleOpenJDK             scripts
OracleCloudInfrastructure  OracleRestDataServices
OracleCoherence            OracleSOASuite
nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21/docker-images$

ダウンロードしたzipを置く

linux用のoracleをダウンロードしておいたLINUX.X64_213000_db_home.zipを、gitからダウンロードした作業フォルダに移動させる。
インストーラが処理してくれるからzipは解凍したらアカンのやで。

nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21/docker-images$ cd ..
nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21$ ls
LINUX.X64_213000_db_home.zip  dat  docker-images
nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21$ mv LINUX.X64_213000_db_home.zip ./docker-images/OracleDatabase/SingleInstance/dockerfiles/21.3.0/
nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21$

dockerビルドしてイメージ作る

さっき置いたインストールで使うzipは、バージョンごとにフォルダがあるから該当のフォルダに置く必要がある。

12とか18とかでやったのと同じ。

同じフォルダにbuildContainerImage.shってのがあるから、動かすときの引数にバージョン指定する。

引数はreadmeに書いてあるし、シェルスクリプトの内容読んでもだいたい何やってるかわかる。

21を使うけど、23のフォルダがもう入ってるなぁ。
今回はバージョン21のEnterprise Editionでやってみた。

nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21$ cd docker-images/OracleDatabase/SingleInstance/dockerfiles/
nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21/docker-images/OracleDatabase/SingleInstance/dockerfiles$ ls
11.2.0.2  12.2.0.1  18.4.0  21.3.0  buildContainerImage.sh
12.1.0.2  18.3.0    19.3.0  23.3.0
nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21/docker-images/OracleDatabase/SingleInstance/dockerfiles$ ./buildContainerImage.sh -v 21.3.0 -e
Checking Docker version.
Dockerfile
Checking if required packages are present and valid...
LINUX.X64_213000_db_home.zip: OK
==========================
Container runtime info:
Client: Docker Engine - Community
 Version:    24.0.6
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.11.2
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.21.0
    Path:     /usr/libexec/docker/cli-plugins/docker-compose

Server:
 Containers: 5
  Running: 5
  Paused: 0
  Stopped: 0
 Images: 10
 Server Version: 24.0.6
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 2
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 61f9fd88f79f081d64d6fa3bb1a0dc71ec870523
 runc version: v1.1.9-0-gccaecfc
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: builtin
  cgroupns
 Kernel Version: 6.2.0-35-generic
 Operating System: Ubuntu 22.04.3 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 6
 Total Memory: 11.64GiB
 Name: nafslinux-ubu22
 ID: PPHU:3ECW:GTJL:RDRR:5VDD:JCE7:UNOQ:HSAA:AHG4:6N7R:JWS4:ETLZ
 Docker Root Dir: /docker/nariDockerSys
 Debug Mode: false
 Username: naritomitsukasa
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

一瞬で終わる前半ここまで。

以下後半。いろいろやってくれてるみたい。

==========================
Building image 'oracle/database:21.3.0-ee' ...
[+] Building 213.7s (16/16) FINISHED                                       docker:default
 => [internal] load build definition from Dockerfile                                 0.0s
 => => transferring dockerfile: 5.02kB                                               0.0s
 => [internal] load .dockerignore                                                    0.0s
 => => transferring context: 2B                                                      0.0s
 => [internal] load metadata for docker.io/library/oraclelinux:7-slim                2.4s
 => [auth] library/oraclelinux:pull token for registry-1.docker.io                   0.0s
 => [base 1/4] FROM docker.io/library/oraclelinux:7-slim@sha256:7a7869a4c0f0a62cff8  6.1s
 => => resolve docker.io/library/oraclelinux:7-slim@sha256:7a7869a4c0f0a62cff8a618e  0.0s
 => => sha256:7a7869a4c0f0a62cff8a618e17eff2601e47e04ddf6286aca847b1f78 547B / 547B  0.0s
 => => sha256:aa5709789ac18e4d8911d2f88d4993c02767472af7561b264bac69713 529B / 529B  0.0s
 => => sha256:ac86a05ca670697b7f0299df8fde32090cdcf404fd330bf9077c6 1.48kB / 1.48kB  0.0s
 => => sha256:9ad776bc39341b015fa96ec38b0ef30213514fedd245d657d31 50.50MB / 50.50MB  3.0s
 => => extracting sha256:9ad776bc39341b015fa96ec38b0ef30213514fedd245d657d3188d81b4  2.6s
 => [internal] load build context                                                   11.0s
 => => transferring context: 3.11GB                                                 11.0s
 => [base 2/4] COPY setupLinuxEnv.sh checkSpace.sh /opt/install/                     0.4s
 => [base 3/4] COPY runOracle.sh startDB.sh createDB.sh createObserver.sh dbca.rsp.  0.0s
 => [base 4/4] RUN chmod ug+x /opt/install/*.sh &&     sync &&     /opt/install/ch  23.8s
 => [builder 1/2] COPY --chown=oracle:dba LINUX.X64_213000_db_home.zip db_inst.rsp   7.2s
 => [builder 2/2] RUN chmod ug+x /opt/install/*.sh &&     sync &&     /opt/install  98.2s
 => [stage-2 1/4] COPY --chown=oracle:dba --from=builder /opt/oracle /opt/oracle    17.5s
 => [stage-2 2/4] RUN /opt/oracle/oraInventory/orainstRoot.sh &&     /opt/oracle/pr  0.7s
 => [stage-2 3/4] WORKDIR /home/oracle                                               0.0s
 => [stage-2 4/4] RUN echo 'ORACLE_SID=${ORACLE_SID:-ORCLCDB}; export ORACLE_SID=${  0.4s
 => exporting to image                                                              30.8s
 => => exporting layers                                                             30.8s
 => => writing image sha256:3b0ac146e2632005a36b7c3fac2d941b6d9ea479c6b32c9d04096d9  0.0s
 => => naming to docker.io/oracle/database:21.3.0-ee                                 0.0s


  Oracle Database container image for 'ee' version 21.3.0 is ready to be extended:

    --> oracle/database:21.3.0-ee

  Build completed in 214 seconds.

nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21/docker-images/OracleDatabase/SingleInstance/dockerfiles$ docker images | head -2
REPOSITORY              TAG          IMAGE ID       CREATED          SIZE
oracle/database         21.3.0-ee    8b73b3259c10   52 seconds ago   7.94GB
nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21/docker-images/OracleDatabase/SingleInstance/dockerfiles$

oracleのdockerイメージできとるのがdocker imagesでわかる。

12とか18のときは10分で済まへんぐらい時間かかってたと思うけど、今は3分強で終わった。

oracleの永続化領域

フォルダ作っとく。

chmodで777ってしとかんと、コンテナ内の初回初期化処理がうまくいかん。

コンテナの中で動くユーザIDが何になってても読み書きできるようにしとかなアカン。

nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21/docker-images/OracleDatabase/SingleInstance/dockerfiles$ cd /docker/nariDockerDat/sv_ora21
nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21$ mkdir dat
nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21$ chmod 777 dat

1回目はchmodするの忘れてて初回起動処理で「書けへんぞゴラァ!」って怒られて失敗。

それ以降、やり直ししたらフォルダの中に隠しファイル(.ORCL_created)作ってしまいよるからかもしれんけど、そのままやと動かん。

コンテナ起動に失敗したときは、フォルダごと作り直したらええ。

compose.ymlに書き足す

さっきgit cloneしたサイトには、compose使う方法は書いてへん。
その代わりdocker runして使うときのことを書いてくれてる。

docker run \
--name oracle21c \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_PDB=orcl \
-e ORACLE_PWD=password \
-e INIT_SGA_SIZE=3000 \
-e INIT_PGA_SIZE=1000 \
-v /path/to/store/db/files/:/opt/oracle/oradata \
-d \
oracle/database:21.3.0-ee

なるほど、SGAとPGAのサイズ指定が入ってるやん。
最後のほうの-dは「バックグラウンドで動かす」やったっけ。
composeのと同じ意味やったかな。

SGA/PGAで指定する値は「こうしたい!」って根拠が今はないから普通にそのまま使わせてもらお。

あとは前にやったのと同じような指定。
普段使ってるcompose.ymlにアレンジして書き足す。

  sv_ora21:
    image: oracle/database:21.3.0-ee
    hostname: svora21
    ports:
      - 31521:1521
      - 35500:5500
      - 35501:5501
    volumes:
      - ./nariDockerDat/sv_ora21/dat:/opt/oracle/oradata
    environment:
      ORACLE_EDITION: '21.3.0'
      ORACLE_PWD: oracle
      ORACLE_PDB: GVISORCL
      ORACLE_SID: ORCL
      INIT_SGA_SIZE: 3000
      INIT_PGA_SIZE: 1000
      TZ: Asia/Tokyo
      NLS_LANG: "Japanese_Japan.UTF8"

oracle19cまではNLS_LANG=Japanese_Japan.AL32UTF8って文字コード指定してたけど、書き方変わったみたい。

oracle21動かす

やってみたら、ログが日本語になってて前より読みやすいやん。

nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21$ docker compose up sv_ora21
[+] Running 1/0
 ? Container ora21ee  Created                                                        0.0s
Attaching to ora21ee
ora21ee  | Relinking oracle binary for edition: 21.3.0
ora21ee  | make -f /opt/oracle/product/21c/dbhome_1/rdbms/lib/ins_rdbms.mk edition_21.3.0 ioracle
ora21ee  | make: *** No rule to make target `edition_21.3.0'.  Stop.
ora21ee  | ORACLE EDITION: 21.3.0
ora21ee  |
ora21ee  | LSNRCTL for Linux: Version 21.0.0.0.0 - Production on 23-10月-2023 06:06:31
ora21ee  |
ora21ee  | Copyright (c) 1991, 2021, Oracle.  All rights reserved.
ora21ee  |
ora21ee  | /opt/oracle/product/21c/dbhome_1/bin/tnslsnrを起動しています。お待ちください...
ora21ee  |
ora21ee  | TNSLSNR for Linux: Version 21.0.0.0.0 - Production
ora21ee  | システム・パラメータ・ファイルは/opt/oracle/homes/OraDB21Home1/network/admin/listener.oraです。
ora21ee  | ログ・メッセージを/opt/oracle/diag/tnslsnr/svora21/listener/alert/log.xmlに書き込みました。
ora21ee  | リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
ora21ee  | リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
ora21ee  |
ora21ee  | (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))に接続中
ora21ee  | リスナーのステータス
ora21ee  | ------------------------
ora21ee  | 別名                      LISTENER
ora21ee  | バージョン                TNSLSNR for Linux: Version 21.0.0.0.0 - Production
ora21ee  | 開始日                    23-10月-2023 06:06:31
ora21ee  | 稼働時間                  0 日 0 時間 0 分 0 秒
ora21ee  | トレース・レベル          off
ora21ee  | セキュリティ              ON: Local OS Authentication
ora21ee  | SNMP                      OFF
ora21ee  | パラメータ・ファイル      /opt/oracle/homes/OraDB21Home1/network/admin/listener.ora
ora21ee  | ログ・ファイル            /opt/oracle/diag/tnslsnr/svora21/listener/alert/log.xml
ora21ee  | リスニング・エンドポイントのサマリー...
ora21ee  |   (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
ora21ee  |   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
ora21ee  | リスナーはサービスをサポートしていません。
ora21ee  | コマンドは正常に終了しました。
ora21ee  | [WARNING] [DBT-06208] The 'SYS' password entered does not conform to the Oracle recommended standards.
ora21ee  |    CAUSE:
ora21ee  | a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
ora21ee  | b.The password entered is a keyword that Oracle does not recommend to be used as password
ora21ee  |    ACTION: Specify a strong password. If required refer Oracle documentation for guidelines.
ora21ee  | [WARNING] [DBT-06208] The 'SYSTEM' password entered does not conform to the Oracle recommended standards.
ora21ee  |    CAUSE:
ora21ee  | a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
ora21ee  | b.The password entered is a keyword that Oracle does not recommend to be used as password
ora21ee  |    ACTION: Specify a strong password. If required refer Oracle documentation for guidelines.
ora21ee  | [WARNING] [DBT-06208] The 'PDBADMIN' password entered does not conform to the Oracle recommended standards.
ora21ee  |    CAUSE:
ora21ee  | a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
ora21ee  | b.The password entered is a keyword that Oracle does not recommend to be used as password
ora21ee  |    ACTION: Specify a strong password. If required refer Oracle documentation for guidelines.
ora21ee  | Prepare for db operation

ここまですぐ終わるけど、ここから10分ぐらい待つ。
oracleは18からcdbとpdbって領域に分割されてる。

commondbとpluggabledbやったかな。
共通領域みたいなところで管理して、pdbにデータを置いてく感じやったような気がする。

途中はこんな感じ。
CPUコア6個をアサインしてるVMのubuntuで動かしてるんやけど、1つしかコア使ってへん瞬間がけっこうあったから、zipとかtarを解凍してるんかな。

gvis-docker-ora21

ログに100% completeってあるところ近辺で、compose.ymlに書いといたインスタンス作ったりしてくれてる。

10分ぐらい待ったら初回初期化処理が終わる。

ora21ee  | 8% complete
ora21ee  | Copying database files
ora21ee  | 31% complete
ora21ee  | Creating and starting Oracle instance
ora21ee  | 32% complete
ora21ee  | 36% complete
ora21ee  | 40% complete
ora21ee  | 43% complete
ora21ee  | 46% complete
ora21ee  | Completing Database Creation
ora21ee  | 51% complete
ora21ee  | 54% complete
ora21ee  | Creating Pluggable Databases
ora21ee  | 58% complete
ora21ee  | 77% complete
ora21ee  | Executing Post Configuration Actions
ora21ee  | 100% complete
ora21ee  | Database creation complete. For details check the logfiles at:
ora21ee  |  /opt/oracle/cfgtoollogs/dbca/ORCL.
ora21ee  | Database Information:
ora21ee  | Global Database Name:ORCL
ora21ee  | System Identifier(SID):ORCL
ora21ee  | Look at the log file "/opt/oracle/cfgtoollogs/dbca/ORCL/ORCL.log" for further details.
ora21ee  |
ora21ee  | SQL*Plus: Release 21.0.0.0.0 - Production on 月 10月 23 06:11:33 2023
ora21ee  | Version 21.3.0.0.0
ora21ee  |
ora21ee  | Copyright (c) 1982, 2021, Oracle.  All rights reserved.
ora21ee  |
ora21ee  |
ora21ee  |
ora21ee  | Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
ora21ee  | Version 21.3.0.0.0
ora21ee  | に接続されました。
ora21ee  | SQL>
ora21ee  | システムが変更されました。
ora21ee  |
ora21ee  | SQL>
ora21ee  | システムが変更されました。
ora21ee  |
ora21ee  | SQL>
ora21ee  | プラガブル・データベースが変更されました。
ora21ee  |
ora21ee  | SQL>
ora21ee  | PL/SQLプロシージャが正常に完了しました。
ora21ee  |
ora21ee  | SQL> SQL>
ora21ee  | セッションが変更されました。
ora21ee  |
ora21ee  | SQL>
ora21ee  | ユーザーが作成されました。
ora21ee  |
ora21ee  | SQL>
ora21ee  | 権限付与が成功しました。
ora21ee  |
ora21ee  | SQL>
ora21ee  | 権限付与が成功しました。
ora21ee  |
ora21ee  | SQL>
ora21ee  | 権限付与が成功しました。
ora21ee  |
ora21ee  | SQL>
ora21ee  | ユーザーが変更されました。
ora21ee  |
ora21ee  | SQL> SQL> Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
ora21ee  | Version 21.3.0.0.0との接続が切断されました。
ora21ee  | The Oracle base remains unchanged with value /opt/oracle
ora21ee  | The Oracle base remains unchanged with value /opt/oracle
ora21ee  | #########################
ora21ee  | DATABASE IS READY TO USE!
ora21ee  | #########################
ora21ee  | The following output is now a tail of the alert.log:
ora21ee  | GVISORCL(3):CREATE SMALLFILE TABLESPACE "USERS" LOGGING  DATAFILE  '/opt/oracle/oradata/ORCL/GVISORCL/users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED  EXTENT MANAGEMENT LOCAL  SEGMENT SPACE MANAGEMENT  AUTO
ora21ee  | GVISORCL(3):Completed: CREATE SMALLFILE TABLESPACE "USERS" LOGGING  DATAFILE  '/opt/oracle/oradata/ORCL/GVISORCL/users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED  EXTENT MANAGEMENT LOCAL  SEGMENT SPACE MANAGEMENT  AUTO
ora21ee  | GVISORCL(3):ALTER DATABASE DEFAULT TABLESPACE "USERS"
ora21ee  | GVISORCL(3):Completed: ALTER DATABASE DEFAULT TABLESPACE "USERS"
ora21ee  | 2023-10-23T06:11:33.855955+09:00
ora21ee  | ALTER SYSTEM SET control_files='/opt/oracle/oradata/ORCL/control01.ctl' SCOPE=SPFILE;
ora21ee  | 2023-10-23T06:11:33.861858+09:00
ora21ee  | ALTER SYSTEM SET local_listener='' SCOPE=BOTH;
ora21ee  | ALTER PLUGGABLE DATABASE GVISORCL SAVE STATE
ora21ee  | Completed: ALTER PLUGGABLE DATABASE GVISORCL SAVE STATE

ログの中にDATABASE IS READY TO USE!って見えてるし、コンテナ動いとる。

手動でもcomposeでコンテナの起動と停止できたし、2~3日自動起動と自動停止させて大丈夫やったらいったん定期運用OKやね。

今日まで動いたらもう要らんから消すかな。

コンテナからつなぐ

コンテナの中でsqlplusやってみる。

nari@nafslinux-ubu22:~$ docker exec -it ora21ee bash
bash-4.2$ sqlplus / as sysdba

SQL*Plus: Release 21.0.0.0.0 - Production on 火 10月 24 05:32:46 2023
Version 21.3.0.0.0

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



Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
に接続されました。
SQL> select name from v$database;

NAME
---------------------------
ORCL

SQL> select instance_name from v$instance ;

INSTANCE_NAME
------------------------------------------------
ORCL

SQL> show parameter service_names

NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
service_names                        string
ORCL
SQL> exit
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0との接続が切断されました。
bash-4.2$ exit
exit
nari@nafslinux-ubu22:~$

バージョンぐらいしか見てへんけど、動くのは動いてるみたいやな。

a5sqlからつなぐ

直観的でわかりやすく別ホストからGUI接続やってみましょ。

sqldeveloper使うと表領域とユーザとか見えるんかもしれんけど、面倒なのでa5sqlで接続設定作ってやってみる。

gvis-docker-ora21

接続テストはいけましたな。

gvis-docker-ora21

バージョンもSQL実行して見える。
まぁ、もうちょっとSQL動かしてもええんやけど、やる気なくなってきたから今はここまで。

稼働状態確認

oracle動いてるときのサーバ状態をnmonで観察。
空きメモリは3.5GBぐらい残っとるな。

材料ないからやらんけど、データポンプでインポートとか動かしたら重たいやろな。

それにしても、nmonのテキストを丸々コピーしたとき何で文字が変わって化けたみたいになるんやろ。

lnmonq16nqqqqqq[H for help]qqqHostname=nafslinux-ubuRefresh= 2secs qqq07:01.06qqqqqqqk
x CPU Utilisation qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqx
x---------------------------+-------------------------------------------------+      x
xCPU User%  Sys% Wait%  Idle|0          |25         |50          |75       100|      x
x  1   0.0   0.5   0.0  99.5|>                                                |      x
x  2   0.0   0.0   0.0 100.0|>                                                |      x
x  3   0.0   0.5   0.0  99.5|>                                                |      x
x  4   0.5   1.0   0.0  98.5|>                                                |      x
x  5   0.0   0.5   0.0  99.5|>                                                |      x
x  6   0.0   0.0   0.0 100.0|>                                                |      x
x---------------------------+-------------------------------------------------+      x
xAvg   0.2   0.3   0.0  99.5|>                                                |      x
x---------------------------+-------------------------------------------------+      x
x Memory and Swap qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqx
x PageSize:4KB   RAM-Memory  Swap-Space       High-Memory     Low-Memory             x
x Total (MB)        11917.5       976.0       - not in use   - not in use            x
x Free  (MB)         3507.7       976.0                                              x
x Free Percent         29.4%      100.0%                                             x
x Linux Kernel Internal Memory (MB)                                                  x
x                        Cached=    4746.4     Active=    1253.8                     x
x Buffers=     256.2 Swapcached=       0.0  Inactive =    6511.3                     x
x Dirty  =       0.4 Writeback =       0.0  Mapped   =     973.4                     x
x Slab   =     307.0 Commit_AS =   17490.6 PageTables=     103.9                     x
x Disk I/O qq/proc/diskstatsqqqqmostly in KB/sqqqqqWarning:contains duplicatesqqqqqqqx
xDiskName Busy  Read WriteKB|0          |25         |50          |75       100|      x
xTotals Read-MB/s=0.0      Writes-MB/s=0.2      Transfers/sec=18.0                   x
xqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqx

oracleだけやなくて、jupyterlab/xrdp/mariadb/django/sslリバプロのコンテナも動かしてる。

mariadbの倍以上oracleはメモリ使うのがdocker statsで見える。
データ流し込みとかなんもやってへんのに、こんな食われるとちょっとツライなぁ。

CONTAINER ID   NAME                       CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
37ae7b5bbf5c   ora21ee                    2.93%     3.768GiB / 11.64GiB   32.38%    25.8kB / 10.4kB   457MB / 36.3MB    96
83975967e734   docker-sv_jupyter-1        0.00%     115.7MiB / 11.64GiB   0.97%     544kB / 10.6MB    69.1MB / 115kB    4
2f04fedc8912   docker-cl_ubu22gvis-1      0.00%     12.77MiB / 11.64GiB   0.11%     17.1kB / 0B       24.6MB / 28.7kB   2
8bc8da340ac7   docker-sv_mariadb1011-1    0.10%     1.462GiB / 11.64GiB   12.56%    36.9kB / 17.5MB   1.4GB / 20.5kB    10
883da5f356b1   docker-sv_django-1         0.03%     81.88MiB / 11.64GiB   0.69%     17.5MB / 11kB     46.8MB / 16.4kB   13
91b06cc22e98   docker-sv_https-portal-1   0.00%     17.53MiB / 11.64GiB   0.15%     17.1kB / 0B       20.5MB / 184kB    14

永続化領域のディスクの消費具合。
このへんは普通かもしれんけど4GBって何入ってんねん。

nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21$ sudo du -shc *
[sudo] nari のパスワード:
4.1G    dat
3.0G    docker-images
7.0G    合計
nari@nafslinux-ubu22:/docker/nariDockerDat/sv_ora21$

コンテナに入って確認

ホスト名はちゃんとcompose.ymlに書いたのが使われてる。
他のコンテナからその名前で参照できるはず。

OSとしてはoracle linux7.9が使われてるやな。
redhat系やね。

nari@nafslinux-ubu22:~$ docker exec -it ora21ee bash
bash-4.2$ uname -n
svora21
bash-4.2$ cat /etc/os-release
NAME="Oracle Linux Server"
VERSION="7.9"
ID="ol"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="7.9"
PRETTY_NAME="Oracle Linux Server 7.9"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:7:9:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://github.com/oracle/oracle-linux"

ORACLE_BUGZILLA_PRODUCT="Oracle Linux 7"
ORACLE_BUGZILLA_PRODUCT_VERSION=7.9
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=7.9
bash-4.2$
bash-4.2$ ls
setPassword.sh
bash-4.2$ pwd
/home/oracle
bash-4.2$

使わんけどsystemユーザとかのパスワード変更するスクリプト(setPassword.sh)が入ってる。

bash-4.2$ cat setPassword.sh
#!/bin/bash
# LICENSE UPL 1.0
#
# Copyright (c) 1982-2022 Oracle and/or its affiliates. All rights reserved.
#
# Since: November, 2016
# Author: gerald.venzl@oracle.com
# Description: Sets the password for sys, system and pdb_admin
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#

if [ -e "${ORACLE_BASE}/oradata/${ORACLE_SID}/.prebuiltdb" ] && [ -n "${ORACLE_PWD}" ] && [ "${ORACLE_PWD}" != "$1" ]; then
      echo "WARNING: The database password can not be changed for this container having a prebuilt database. The original password exists in the container environment. Your new password has been ignored!"
      exit 1
fi

ORACLE_PWD=$1
ORACLE_SID="$(grep "$ORACLE_HOME" /etc/oratab | cut -d: -f1)"
ORACLE_PDB="$(ls -dl "$ORACLE_BASE"/oradata/"$ORACLE_SID"/*/ | grep -v -e pdbseed -e "${ARCHIVELOG_DIR_NAME:-archive_logs}"| awk '{print $9}' | cut -d/ -f6)"
ORAENV_ASK=NO
source oraenv

sqlplus / as sysdba << EOF
      ALTER USER SYS IDENTIFIED BY "$ORACLE_PWD";
      ALTER USER SYSTEM IDENTIFIED BY "$ORACLE_PWD";
      ALTER SESSION SET CONTAINER=$ORACLE_PDB;
      ALTER USER PDBADMIN IDENTIFIED BY "$ORACLE_PWD";
      exit;
EOF

bash-4.2$

データ流し込みはやらんけど、動くのは動いた。

タイトルとURLをコピーしました