Help us understand the problem. What is going on with this article?

Oracle Database:リモート・クローンで文字コード異なるPDBを混在させてみてみた

More than 1 year has passed since last update.

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ルートに直接プラグインされる場合

■構成

構成.png

■環境事前確認

●環境変数確認

以下が設定されていることを確認

・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間で実行する

・グローバリゼーション・サポート・ガイド: PDB候補がCDBルートに直接プラグインされる場合

shirok
自宅から専用線を引きたい今日この頃 ※ここでの発言は私個人の見解であり、所属する会社&組織の見解を反映したものではありません。ご了承ください。
oracle
Oracle Cloudは、最先端の機能をSoftware as a Service、Platform as a ServiceおよびInfrastructure as a ServiceおよびData as a Serviceとして提供します。
https://cloud.oracle.com/ja_JP/home
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away