やりたいこと
DockerにOracleを追加し、他のOracle環境(Oracle Databaseは12c)からデータを複製したい。
Oracle Databaseは12cからマルチテナント・アーキテクチャ?なるものが導入されている様子🐵
イメージのダウンロード
> docker pull store/oracle/database-enterprise:12.2.0.1
12.2.0.1: Pulling from store/oracle/database-enterprise
4ce27fe12c04: Pull complete
9d3556e8e792: Pull complete
fc60a1a28025: Pull complete
0c32e4ed872e: Pull complete
b465d9b6e399: Pull complete
Digest: sha256:40760ac70dba2c4c70d0c542e42e082e8b04d9040d91688d63f728af764a2f5d
Status: Downloaded newer image for store/oracle/database-enterprise:12.2.0.1
docker.io/store/oracle/database-enterprise:12.2.0.1
イメージの確認
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
store/oracle/database-enterprise 12.2.0.1 12a359cd0528 3 years ago 3.44GB
コンテナの生成/起動
> docker run -d -it --name oracle -p 1521:1521 -p 5500:5500 -v OracleDBData:/ORCL store/oracle/database-enterprise:12.2.0.1
0c0c2ae241d957ac8ce4bd0308fcc0bbb496fcfd13bff6348ce9cca47ccc989e
稼働コンテナの一覧表示
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ee9731c6222d store/oracle/database-enterprise:12.2.0.1 "/bin/sh -c '/bin/ba…" About a minute ago Up About a minute (healthy) 0.0.0.0:1521->1521/tcp, :::1521->1521/tcp, 0.0.0.0:5500->5500/tcp, :::5500->5500/tcp oracle
稼動コンテナでbashを実行
> docker exec -it oracle bash
[oracle@ee9731c6222d /]$
エクスポートの実行
(conventional way)
[oracle@ee9731c6222d /]$ cd /ORCL/
[oracle@ee9731c6222d ORCL]$ ls -l
total 16
drwxr-xr-x 3 oracle oinstall 4096 Aug 8 2017 u01
drwxr-xr-x 3 oracle oinstall 4096 Aug 8 2017 u02
drwxr-xr-x 3 oracle oinstall 4096 Aug 8 2017 u03
drwxr-xr-x 3 oracle oinstall 4096 Aug 8 2017 u04
[oracle@ee9731c6222d ORCL]$
[oracle@ee9731c6222d ORCL]$ mkdir dump
[oracle@ee9731c6222d ORCL]$ cd dump/
[oracle@ee9731c6222d dump]$
[oracle@ee9731c6222d dump]$ exp USER/PASS@192.168.1.xxx:1521/testdb file=/ORCL/dump/exp0.dmp log=exp0.log owner=USER STATISTICS=none
Export: Release 12.2.0.1.0 - Production on Wed Aug 11 01:42:38 2021
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
server uses AL32UTF8 character set (possible charset conversion)
About to export specified users ...
インポートの準備
[oracle@ee9731c6222d dump]$ sqlplus /nolog
SQL*Plus: Release 12.2.0.1.0 Production on Wed Aug 11 02:19:59 2021
Copyright (c) 1982, 2016, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected.
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 ORCLPDB1 READ WRITE NO
SQL> alter session set container=ORCLPDB1;
Session altered.
SQL> show con_name
CON_NAME
------------------------------
ORCLPDB1
SQL> create user admin identified by secret;
User created.
SQL> grant connect, resource, dba to admin;
Grant succeeded.
表領域が必要な場合は作成
SQL> create tablespace TESTTBSP datafile '/ORCL/dump/datafile0.dbf' size 100M autoextend on next 500k maxsize unlimited;
Tablespace created.
SQL> quit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
[oracle@ee9731c6222d dump]$
インポートの実行
[oracle@ee9731c6222d dump]$ imp admin/secret@ORCLPDB1 file=exp0.dmp fromuser=USER touser=admin
Import: Release 12.2.0.1.0 - Production on Wed Aug 11 02:25:19 2021
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Export file created by EXPORT:V12.02.00 via conventional path
Warning: the objects were exported by USER, not by you
import done in US7ASCII character set and AL16UTF16 NCHAR character set
import server uses AL32UTF8 character set (possible charset conversion)
接続テスト
①サービス名指定でPDBへ接続してみる
tnsnames.oraでデフォルトのサービス名を確認。
[oracle@0c0c2ae241d9 ~]$ cd /u01/app/oracle/product/12.2.0/dbhome_1/admin/ORCLCDB
[oracle@0c0c2ae241d9 ORCLCDB]$ cat tnsnames.ora
ORCLCDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCLCDB.localdomain) ) )
ORCLPDB1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCLPDB1.localdomain) ) )
リスナー・ログでクライアントからの接続要求を確認
[oracle@14c661047581 /]$ tail -f /ORCL/u01/app/oracle/diag/tnslsnr/14c661047581/listener/trace/listener.log
24-8月 -2021 04:42:06 * (CONNECT_DATA=(SERVICE_NAME=ORCLPDB1.localdomain)(CID=(PROGRAM=A5M2.exe)(HOST=CAST-A101)(USER=xxxx))) * (ADDRESS=(PROTOCOL=tcp)(HOST=172.17.0.1)(PORT=52196)) * establish * ORCLPDB1.localdomain * 0
しかし、Clientツール上でテーブル名が文字化けしてしまった。
export先で環境変数NLS_LANGを指定していなかったから?(後で再試行)
よくよく見ると、エクスポートやインポートの時点でキャラセットがUS7ASCIIに変換されていた模様😅
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
server uses AL32UTF8 character set (possible charset conversion)
import done in US7ASCII character set and AL16UTF16 NCHAR character set
import server uses AL32UTF8 character set (possible charset conversion)
②SID指定でPDBへ接続してみる
SIDはデフォルトでは設定されていない。データベースURL内のSID指定で接続したいので、SIDをサービス名として解釈するようにlistener.oraに「USE_SID_AS_SERVICE_listener=on」を追加する。
[oracle@1d48b5e4c549 ORCLCDB]$ cat listener.ora
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
DIAG_ADR_ENABLED = off
SSL_VERSION = 1.0
USE_SID_AS_SERVICE_listener=ON
リスナー・ログでクライアントからの接続要求を確認
[oracle@14c661047581 /]$ tail -f /ORCL/u01/app/oracle/diag/tnslsnr/14c661047581/listener/trace/listener.log
24-8月 -2021 04:24:50 * (CONNECT_DATA=(SID=ORCLPDB1.localdomain)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=xxxx))) * (ADDRESS=(PROTOCOL=tcp)(HOST=172.17.0.1)(PORT=52122)) * establish * ORCLPDB1.localdomain * 0
NSL_LANGを指定してエクスポート、インポートを再試行
①環境変数NLS_LANGを設定
[oracle@14c661047581 /]$ env | grep NLS
NLS_LANG=Japanese_Japan.AL32UTF8
②再エクスポート
😅日本語化されてる。。元のDBと同じキャラセットでエクスポートされた模様。
[oracle@14c661047581 dump]$ exp USER/PASS@192.168.1.xxx:1521/testdb file=/ORCL/dump/exp0.dmp log=exp0.log owner=USER STATISTICS=none
Export: Release 12.2.0.1.0 - Production on 木 8月 12 04:52:49 2021
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
接続先: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
AL32UTF8文字セットおよびAL16UTF16 NCHAR文字セットでエクスポートを実行します
指定されたユーザーをエクスポートします...
③再インポート
インポートも同様。元のDBと同じキャラセットでインポートされた模様。
[oracle@14c661047581 dump]$ imp admin/secret@ORCLPDB1 file=exp0.dmp fromuser=USER touser=admin
Import: Release 12.2.0.1.0 - Production on 木 8月 12 05:42:03 2021
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
接続先: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
エクスポート・ファイルはEXPORT:V12.02.00によって従来型パス経由で作成されました
警告: オブジェクトは別のユーザー: USERによってエクスポートされました。
AL32UTF8文字セットおよびAL16UTF16 NCHAR文字セットでインポートを実行します
④再接続
😄文字化け解消!問題なさそう。
0 件のコメント:
コメントを投稿