JA16SJISデータベースから別のAL32UTF8データベースにデータベース・リンクを介してPDBをリモート・クローンしてみてみます。
手順は通常のリモート・クローンと同じで、文字コード異なる複数のPDBを1つのCDBへ混在させることができます。
Oracle Cloud infrastructure(OCI)のDatabase Cloud Serviceでは、表領域暗号化Transparent Data Encryption(TDE)はデフォルトで有効になっています。
ということで、Oracle Database 18cでは、KEYSTORE IDENTIFIED BY句を追加したCREATE PLUGGABLE DATABASE文によって、暗号化データを含むPDBをリモートからクローニングできます。
・Remote Cloning手順概要
1. Target DB :Source DB接続 Database Link設定
2. Target DB :Source PDB クローン実行
3. Target DB :クローンPDB 起動
・リモートクローン要件参考:
- Advanced Securityガイド:統一モードで、暗号化データを含むPDBのリモート・クローニングを2つのCDB間で実行する
- グローバリゼーション・サポート・ガイド:PDB候補がCDBルートに直接プラグインされる場合
#■環境事前確認
##●環境変数確認
以下が設定されていることを確認
・Target DB:sjis2db
[oracle@sjis2db ~]$ env | grep ORA
ORACLE_UNQNAME=sjis2db
ORACLE_SID=sjis2db
ORACLE_HOME=/u01/app/oracle/product/18.0.0.0/dbhome_1
・Source DB:UTF8PDB
[oracle@utf8db ~]$ env | grep ORA
ORACLE_UNQNAME=UTF8PDB
ORACLE_SID=UTF8PDB
ORACLE_HOME=/u01/app/oracle/product/18.0.0.0/dbhome_1
##●Walletパス確認
・Target DB:sjis2db
[oracle@sjis2db admin]$ cat $ORACLE_HOME/network/admin/sqlnet.ora
ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/oracle/dcs/commonstore/wallets/tde/$ORACLE_UNQNAME)))
・・・
・Source DB:UTF8DB
[oracle@sjis2db ~]$ cat $ORACLE_HOME/network/admin/sqlnet.ora
ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/oracle/dcs/commonstore/wallets/tde/$ORACLE_UNQNAME)))
・・・
##●PDB文字コード確認
・Target DB:sjis2pdb
[oracle@sjis2db ~]$ sqlplus / as sysdba
SQL*Plus: Release 18.0.0.0.0 - Production on Tue Jul 23 09:24:00 2019
Version 18.6.0.0.0
Copyright (c) 1982, 2018, Oracle. All rights reserved.
Connected to:
Oracle Database 18c EE High Perf Release 18.0.0.0.0 - Production
Version 18.6.0.0.0
SQL> alter session set container=SJIS2PDB;
Session altered.
SQL> SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
VALUE
------------
JA16SJIS
・Source DB:UTF8PDB
[oracle@utf8db ~]$ sqlplus / as sysdba
SQL*Plus: Release 18.0.0.0.0 - Production on Tue Jul 23 09:25:19 2019
Version 18.6.0.0.0
Copyright (c) 1982, 2018, Oracle. All rights reserved.
Connected to:
Oracle Database 18c EE High Perf Release 18.0.0.0.0 - Production
Version 18.6.0.0.0
SQL> alter session set container=UTF8PDB;
Session altered.
SQL> SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
VALUE
------------
AL32UTF8
#■1. Target DB :Source DB接続用Database Link作成
##● Source DB(sjis2db): Database Link接続User作成
[oracle@sjis2db ~]$ sqlplus / as sysdba
SQL> col NAME format a20
SQL> select name, open_mode from v$pdbs;
NAME OPEN_MODE
-------------------- ----------
PDB$SEED READ ONLY
SJIS2PDB READ WRITE
SQL> alter session set container=SJIS2PDB;
Session altered.
SQL> create user remote_user_for_clone identified by <user パスワード>;
User created.
SQL> grant create session,create pluggable database to remote_user_for_clone;
Grant succeeded.
##● Target Databse(utf8db):Database Link設定
###① Source DBでPDBの接続情報確認
Target DBのtnsnames.oraに設定するSERVICE_NAMEをlsnrctlで確認
[oracle@sjis2db ~]$ lsnrctl stat | grep pdb
Service "sjis2pdb.publicsubnet01.vcnxxxxx.oraclevcn.com" has 1 instance(s).
###② tnsnames.ora設定
Target DBのtnsnames.oraにSource PDBの接続情報SJIS2PDBを設定
[oracle@utf8db ~]$ cd $ORACLE_HOME/network/admin
[oracle@utf8db ~]$ vi tnsnames.ora
SJIS2PDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.10)(PORT = 1521)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = sjis2pdb.publicsubnet01.vcnxxxxx.oraclevcn.com)
)
)
###③ Database link作成
リモート・クローンの場合、DB_DOMAIN異なるので、リモート側のDOMAIN含めた名前で作成
SQL> create database link sjis2pdb.publicsubnet01.vcnxxxxx.oraclevcn.com connect to remote_user_for_clone identified by <Database Linkパスワード> using 'SJIS2PDB_NRT1RK';
Database link created.
###④ Database link接続確認
SQL> select * from dual@sjis2pdb.publicsubnet01.vcnxxxxx.oraclevcn.com;
D
-
X
#■2. Target DB :Source PDB クローン実行
##● リモート・クローン実行
SQL> create pluggable database Clone_SJIS2PDB from SJIS2PDB@sjis2pdb.publicsubnet01.vcnxxxxx.oraclevcn.com KEYSTORE IDENTIFIED BY <Database Linkパスワード>;
Pluggable database created.
##● リモート・クローンPDB作成確認
SQL> col NAME format a20
SQL> select name, open_mode from v$pdbs;
NAME OPEN_MODE
-------------------- ----------
PDB$SEED READ ONLY
UTF8PDB READ WRITE
CLONE_SJIS2PDB MOUNTED
#■3. Target DB :クローンPDB 起動
SQL> alter pluggable database CLONE_SJIS2PDB open;
Pluggable database altered.
SQL> select name, open_mode from v$pdbs;
NAME OPEN_MODE
-------------------- ----------
PDB$SEED READ ONLY
UTF8PDB READ WRITE
CLONE_SJIS2PDB READ WRITE
#■4.PDB文字コード確認
① CDB$ROOT文字コード確認
SQL> alter session set container=CDB$ROOT;
Session altered.
SQL> SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
VALUE
-------------
AL32UTF8
② UTF8PDB文字コード確認
SQL> alter session set container=UTF8PDB;
Session altered.
SQL> SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
VALUE
-------------
AL32UTF8
③ CLONE_SJIS2PDB文字コード確認
SQL> alter session set container=CLONE_SJIS2PDB;
SQL> SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
VALUE
-------------
JA16SJIS
#■参考
・SQL言語リファレンス
- CREATE PLUGGABLE DATABASE
・Advanced Securityガイド
- 統一モードで、暗号化データを含むPDBのリモート・クローニングを2つのCDB間で実行する
・Database グローバリゼーション・サポート・ガイド
- PDB候補がCDBルートに直接プラグインされる場合
- マルチテナント・コンテナ・データベースのデータベース文字セットの選択