手順を忘れてしまいそうなので、、、メモ
linux用のoracleをダウンロードしておく
https://www.oracle.com/jp/database/technologies/oracle-database-18c/enterprise-edition.html
docker image作成 (standard editionで作成)
$ git clone https://github.com/oracle/docker-images.git $ cd docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0 $ cp <path-to-zip>/LINUX.X64_193000_db_home.zip . $ cd .. $ ./buildContainerImage.sh -v 19.3.0 -s $ mkdir dump $ chmod 777 dump $ mkdir oradata $ chmod 777 oradata
dockerを起動して、PDBにユーザーを作成し、インポート用のdirオブジェクトを作成しインポートを実行するまで
(dumpが古いのでshift-jisで作る)
services:
db:
image: oracle/database:19.3.0-se2
ports:
- 1521:1521
- 5500:5500
volumes:
- ./oradata:/opt/oracle/oradata
- ./dump:/opt/oracle/dump
environment:
- ORACLE_PWD=<SYSPASS>
- ORACLE_PDB=<PDB>
- ORACLE_CHARACTERSET=JA16SJISTILDE
$ docker compose up -d $ docker compose exec db bash
bash$ sqlplus / as sysdba
SQL> SELECT NLS_CHARSET_NAME(NLS_CHARSET_ID('CHAR_CS')),NLS_CHARSET_NAME(NLS_CHARSET_ID('NCHAR_CS')) FROM DUAL;
SQL> alter session set container = <PDB>;
SQL> create user <USER> identified by <PASS>;
SQL> grant dba to <USER>;
SQL> create directory DUMPDIR as '/opt/oracle/dump/';
SQL> grant read on directory DUMPDIR to <USER>;
SQL> grant write on directory DUMPDIR to <USER>;
SQL> exit
bash$ impdp <USER>/<PASS>@<PDB> remap_schema=<USER>:<USER> DIRECTORY=DUMPDIR dumpfile=DATA.DMP logfile=DATA.log
bash$ exit
$ docker compose down
データベースの文字セット変換をしたら壊れたw
SQL> SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER SYSTEM ENABLE RESTRICTED SESSION; ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; ALTER SYSTEM SET AQ_TM_PROCESSES=0; ALTER DATABASE OPEN; ALTER DATABASE CHARACTER SET INTERNAL_USE JA16SJISTILDE; SHUTDOWN IMMEDIATE; STARTUP; Total System Global Area 1610609928 bytes Fixed Size 9135368 bytes Variable Size 452984832 bytes Database Buffers 1140850688 bytes Redo Buffers 7639040 bytes SQL> SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'; SQL> VALUE -------------------------------------------------------------------------------- JA16SJISTILDE