こんにちは、@yasuです。
オラクルの動作確認がしたくて、ubuntuで動作するオラクルデータベースを探しました。
できるだけ簡単に導入できるものを探したのですが、
なかなかないですね。
前回の記事とは別の方法です。
[Dev] ubuntuでオラクルを使ってみる
あとで使用するSQLファイルが、呪文だと思って内容は気にしなくてもよいです。
パスワード(passw0rd)は、変えても大丈夫です。
リポジトリのクローン
git clone https://github.com/oracle/docker-images.git
リポジトリにダウンロードしたOracleを配置
docker-images\OracleDatabase\SingleInstance\dockerfiles\21.3.0
イメージ作成シェルの実行
cd docker-images/OracleDatabase/SingleInstance/dockerfiles
./buildContainerImage.sh -v 21.3.0 -x -i
生成物確認
docker images
docker-compose.yml
version: '3'
services:
db:
image: oracle/database:21.3.0-xe
container_name: oracle21c
ports:
- 1521:1521
volumes:
- db-store:/opt/oracle/oradata
environment:
- ORACLE_PWD=passw0rd
volumes:
db-store:
docker-compose up -d
docker-compose logs -f
接続確認
docker exec -it oracle21c /bin/sh
sqlplus sys/passw0rd@//localhost:1521/XE as sysdba
sqlplus system/passw0rd@//localhost:1521/XE
sqlplus pdbadmin/passw0rd@//localhost:1521/XEPDB1
コンテナの削除
docker-compose stop
docker rm oracle21c
docker volume rm dockerfiles_db-store
docker-compose(修正後)
version: '3'
services:
db:
image: oracle/database:21.3.0-xe
container_name: oracle21c
ports:
- 1521:1521
volumes:
- db-store:/opt/oracle/oradata
- ./script/startup:/opt/oracle/scripts/startup # 追加
- ./script/setup:/opt/oracle/scripts/setup # 追加
environment:
- ORACLE_PWD=passw0rd
volumes:
db-store:
name: oraora
setup スクリプト作成
mkdir -p script/setup
script/setup/01_setup.sh
mkdir /opt/oracle/oradata/XE/pdb01
script/setup/02_setup.sql
-- PDBの新規作成(pdb$seedから作成)
CREATE PLUGGABLE DATABASE pdb01 ADMIN USER pdb01admin IDENTIFIED BY passw0rd
file_name_convert = ('/opt/oracle/oradata/XE/pdbseed/','/opt/oracle/oradata/XE/pdb01/');
-- PDBの起動
ALTER PLUGGABLE DATABASE pdb01 OPEN;
-- PDBの自動起動設定
ALTER PLUGGABLE DATABASE pdb01 SAVE STATE;
-- PDB切り替え(これがないと、コンテナ再起動時に「ORA-01109: database not open」が発生)
ALTER SESSION SET CONTAINER=pdb01;
-- ロール権限付与
GRANT DBA TO PDB_DBA;
-- 表領域作成
CREATE TABLESPACE users
DATAFILE '/opt/oracle/oradata/XE/pdb01/users01.dbf' SIZE 300M
AUTOEXTEND ON NEXT 500K MAXSIZE UNLIMITED;
startupスクリプト作成
mkdir -p script/startup
script/startup/01_create_user.sql
-- PDBへ切り替え
ALTER SESSION SET CONTAINER=pdb01;
-- ユーザ削除
DROP USER hogeuser CASCADE;
-- ユーザ作成
CREATE USER hogeuser IDENTIFIED BY passw0rd
DEFAULT TABLESPACE users
QUOTA UNLIMITED ON users
TEMPORARY TABLESPACE temp;
-- 作成ユーザへ権限付与
GRANT CREATE SESSION TO hogeuser;
GRANT RESOURCE TO hogeuser;
GRANT UNLIMITED TABLESPACE TO hogeuser;
script/startup/02_create_tb_sample.sql
-- PDBへ切り替え
ALTER SESSION SET CONTAINER=pdb01;
-- テーブル作成するユーザ(変数定義)
DEFINE USER_NAME='hogeuser';
-- テーブル作成
CREATE TABLE &USER_NAME..tb_sample
(
col1 VARCHAR2(10) NOT NULL,
col2 VARCHAR2(50),
col3 VARCHAR2(30),
CONSTRAINT pk1 PRIMARY KEY(col1)
)
;
-- データ挿入
INSERT INTO &USER_NAME..tb_sample values('111', '2221', '3331');
INSERT INTO &USER_NAME..tb_sample values('112', '2222', '3332');
INSERT INTO &USER_NAME..tb_sample values('113', '2223', '3333');
INSERT INTO &USER_NAME..tb_sample values('114', '2224', '3334');
INSERT INTO &USER_NAME..tb_sample values('115', '2225', '3335');
INSERT INTO &USER_NAME..tb_sample values('116', '2226', '3336');
INSERT INTO &USER_NAME..tb_sample values('117', '2227', '3337');
COMMIT;
参考記事(手順に間違いがあるので注意)
https://zenn.dev/re24_1986/articles/29430f2f8b4b46