Oracle19cをWindows11にインストール
目次
オリジナルイメージの作成
やりたいこと
Oracle19cの検証環境(個人用に好き勝手に遊んでいい環境)を作って本で読んだ知識をハンズオン形式に学習したい
やったこと
ローカルを汚染したくない、かつリ簡単にビルドできるようにしたい(環境を作っては捨て、作っては捨てるサイクルをサクッとやりたい)ので、流行りのコンテナを使用して環境構築する。
前提
- Windows11 HomeにDocker Desktopをインストールしてコンテナを構築します
- シェルスクリプトファイルを実行するため、Linux環境(WSL2)が必要です
- Oracle Database 19c for Linux x86-64をコンテナにインストールします
- Docker Desktop:4.27.2
- エディタは、Vscodeを使用します。
本記事では、Docker Desktop及びWSL2をインストール済みという前提で進みます。
未インストールの場合は、インストール後に戻ってきてください。
gitからDocker imageをclone
C:\OracleTest>git clone https://github.com/oracle/docker-images.git
Cloning into 'docker-images'...
remote: Enumerating objects: 17584, done.
remote: Counting objects: 100% (2158/2158), done.
remote: Compressing objects: 100% (408/408), done.
remote: Total 17584 (delta 1844), reused 1895 (delta 1738), pack-reused 15426
Receiving objects: 100% (17584/17584), 15.11 MiB | 16.92 MiB/s, done.
Resolving deltas: 100% (10369/10369), done.
Oracle公式から19cをダウンロード
オリジナルImageの作成
提供されているシェルスクリプトファイルを実行してオリジナルImageを作成します。
Windowsではシェルスクリプトファイルを実行できないので、Ubuntuで実行します。
<ユーザ名>@<ホスト名>:/mnt/c/oracletest/docker-images/oracledatabase/singleinstance/dockerfiles$ ./buildContainerImage.sh -v 19.3.0 -e -i
# ~省略~
Server:
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 3
Server Version: 25.0.3
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: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: ae07eda36dd25f8a1b98dfbf587313b99c0190bb
runc version: v1.1.12-0-g51d5e94
init version: de40ad0
Security Options:
seccomp
Profile: unconfined
Kernel Version: 5.15.133.1-microsoft-standard-WSL2
Operating System: Docker Desktop
OSType: linux
Architecture: x86_64
CPUs: 16
Total Memory: 15.59GiB
Name: docker-desktop
ID: 1fb14317-26a9-4536-906c-7e20c71815d4
Docker Root Dir: /var/lib/docker
Debug Mode: false
HTTP Proxy: http.docker.internal:3128
HTTPS Proxy: http.docker.internal:3128
No Proxy: hubproxy.docker.internal
Experimental: false
Insecure Registries:
hubproxy.docker.internal:5555
127.0.0.0/8
Live Restore Enabled: false
# ~省略~
What's Next?
View a summary of image vulnerabilities and recommendations → docker scout quickview
Oracle Database container image for 'ee' version 19.3.0 is ready to be extended:
--> oracle/database:19.3.0-ee
Build completed in 551 seconds.
<ユーザ名>@<ホスト名>:/mnt/c/oracletest/docker-images/oracledatabase/singleinstance/dockerfiles$
Docker DesktopのImagesに
oracle/database
が追加されている。
コンソールからもImageを確認
PS C:\OracleTest\docker-images\OracleDatabase\SingleInstance\dockerfiles> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
oracle/database 19.3.0-ee f3483ed6fa25 22 minutes ago 6.54GB
コンテナの確認
PS C:\OracleTest> docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
60d91216cedd oracle/database:19.3.0-ee "/bin/bash -c 'exec …" 5 minutes ago Up 5 minutes (health: starting) 0.0.0.0:1521->1521/tcp, 0.0.0.0:5500->5500/tcp oracledb19-20240320
触ってみる
ユーザを作ってみる
ユーザを作成するため、SYS
ユーザでログインします。
OS認証されてるか確認するため、自分のOSユーザ名をまず確認します。
PS C:\OracleTest> docker exec -it oracledb19-20240320 bash
bash-4.2$
以後、コンテナ内の環境でコマンドを色々と実行していくため、Powershellからコンテナに入り込んでいます。Docker Desktopからコマンド叩いても同じなので、お好きな方でどうぞ。
bash-4.2$ whoami
oracle # OSユーザは「oracle」
次に、oracle
というOSユーザがdbaグループに所属しているか確認します。
bash-4.2$ grep 'dba' /etc/group
dba:x:54322:oracle # OSユーザのoracleは、dbaグループに所属していることが分かる
backupdba:x:54324:oracle
dgdba:x:54325:oracle
kmdba:x:54326:oracle
racdba:x:54330:oracle
カレントOSユーザのoracle
がdba
グループに所属していることがわかったので、OS認証でSYS
にログインできます。
bash-4.2$ sqlplus / as sysdba # OS認証でログイン
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Mar 20 11:19:24 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> show user
USER is "SYS" # SYSユーザでログインできている
SQL> show con_name;
CON_NAME
------------------------------
CDB$ROOT -- CDBのルート
SQL> select pdb_id, pdb_name from cdb_pdbs order by pdb_id;
PDB_ID PDB_NAME
---------- --------------------------------------------------------------------------------------------------------------------------------
2 PDB$SEED
3 ORCLPDB1 -- docker-compose.yamlで定義したPDB
SQL> alter session set container = ORCLPDB1;
Session altered.
SQL> show con_name;
CON_NAME
------------------------------
ORCLPDB1
SQL> create user user01 identified by password#1;
User created.
ユーザを作っただけではログインできないので、セッション権限を付与。
SQL> grant create session to user01;
Grant succeeded.
SQL> SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='USER01';
GRANTE PRIVILEGE ADM COM INH
------ ---------------------------------------- --- --- ---
USER01 CREATE SESSION NO NO NO
参考
bash-4.2$ echo $ORACLE_HOME
/opt/oracle/product/19c/dbhome_1
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /opt/oracle/product/19c/dbho
sh-4.2$ lsnrctl status
# (~省略~)
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
Services Summary...
Service "ORCLCDB" has 1 instance(s).
Instance "ORCLCDB", status RESTRICTED, has 1 handler(s) for this service...
Service "ORCLCDBXDB" has 1 instance(s).
Instance "ORCLCDB", status RESTRICTED, has 1 handler(s) for this service...
The command completed successfully
↓数分後
h-4.2$ lsnrctl status
# (~省略~)
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=6a6f894672df)(PORT=5500))(Security=(my_wallet_directory=/opt/oracle/admin/ORCLCDB/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "14641d92104b0e8ce063020013ac385d" has 1 instance(s).
Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "ORCLCDB" has 1 instance(s).
Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "ORCLCDBXDB" has 1 instance(s).
Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "orclpdb1" has 1 instance(s).
Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
The command completed successfully