参考:https://qiita.com/kawakawaryuryu/items/ae51bee866a57f178fe5
oracle database xe の使用理由
- MySQLより複雑なことをやりたい
- MySQLより汎用性のあることをやりたい
- Oracle ADWは遠いのでレスポンスが悪く、ローカル環境でテストしたい
- macOSではネイティブサポートがないため、dockerでやらざるを得ない
- かといってライセンスは高価なため開発用の Express Edition を使う
- 他の理由 https://www.oracle.com/jp/database/technologies/appdev/xe.html
oracle xe dockerファイルのダウンロード
- https://github.com/oracle/docker-images/tree/master/OracleDatabase/SingleInstance/dockerfiles/18.4.0 からdockerfileなどをダウンロード
- 簡単にやるには、 https://downgit.github.io/ に上記URLを入れると部分ダウンロードが可能
xe dockerイメージの作成
- Dockerfile.xe に記載されているとおりに入力しイメージを作る
- イメージサイズは 10GB ほど必要
docker build -t oracle/database:18.4.0-xe -f Dockerfile.xe .
docker images
にて、oracle/database:18.4.0-xe
ができていることを確認 5.9GB
dockerコンテナの起動コマンド
- まずホームディレクトリにデータ置き場を作る
mkdir /Users/gikoha/Develop/oradata
- startup ディレクトリを用意し、-vで
/docker-entrypoint-initdb.d/startup
へマウント接続、初期化時のスクリプトを走らせるようにする 例:
-- 01_profile.sql プロファイルのパスワード有効期限を無期限に
ALTER PROFILE DEFAULT limit
FAILED_LOGIN_ATTEMPTS UNLIMITED
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_LOCK_TIME UNLIMITED
PASSWORD_GRACE_TIME UNLIMITED;
- docker runコマンドでコンテナを起動しデータベースを初期化する
docker run -d --name oraclerdb -it \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_PWD=hogehogeA00 \
-e NLS_LANG=JAPANESE_JAPAN.AL32UTF8 \
-v /Users/gikoha/Library/Mobile\ Documents/com~apple~CloudDocs/Develop:/home/oracle/Develop \
-v /Users/gikoha/Develop/oradata:/opt/oracle/oradata \
-v /Users/gikoha/Library/Mobile\ Documents/com~apple~CloudDocs/Develop/oraclelinux/oracle-18c-xe/startup:/docker-entrypoint-initdb.d/startup \
oracle/database:18.4.0-xe
- password を指定
- port 1521はDBアクセス用 5500はアクセスできないからなくてもいい?
- NLS_LANGは日本語にする
/opt/oracle/oradata
をマウントすることでデータ永続化を図る- Developはicloudでマウントする一方、データ永続化部分はicloudには載せない
- データベースの初期化に10分ほど待つと
###DATABASE IS READY TO USE!###
のメッセージが表示され起動完了。
sqlplusを使用し初期設定
docker CLIを開く
su oracle
- PDBADMINがユーザを作れるようにする
sqlplus sys/hogehogeA00@XE as sysdba
alter session set container = XEPDB1;
grant grant any privilege to PDBADMIN;
grant grant any role to PDBADMIN;
QUIT
- PDBADMINでログインしなおしTABLESPACE, ユーザを作る
sqlplus pdbadmin/hogehogeA00@XEPDB1
grant create user to PDB_DBA;
grant create tablespace to PDB_DBA;
alter session set container = XEPDB1;
CREATE TABLESPACE "DATA"
DATAFILE '/opt/oracle/oradata/XE/tbs_data.dbf'
SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
NOLOGGING;
create user admin identified by hogehogeA00 default tablespace "DATA" temporary tablespace temp;
grant connect, resource to admin;
grant unlimited tablespace to admin;
QUIT
自分のTNSADMINにXEPDB1を追加しておく
cat /opt/oracle/product/18c/dbhomeXE/network/admin/tnsnames.ora
- この内容を $TNS_ADMIN/tnsnames.ora に追加しておくと、ホスト側のsqlplusや SQL Developerからログイン容易
sqlplus admin/hogehogeA00@127.0.0.1/XEPDB1