[Dev] OracleデータベースをUbuntuで使ってみる

in japanese •  6 months ago  (edited)

こんにちは、@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;


image.png

image.png

参考記事(手順に間違いがあるので注意)
https://zenn.dev/re24_1986/articles/29430f2f8b4b46

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!