gikoha’s blog

個人的メモがわり

Oracle Express Edition

参考: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ファイルのダウンロード

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