LoginSignup
5
0

More than 3 years have passed since last update.

Pluggable Database 環境に慣れる(3)(Oracle Database 19c)

Posted at

Pluggable Databaseという名前の通り、PDBは他のCDBに対して気軽に取り外し(UNPLUG)や取り付け(PLUG)を行うことができます。ここでは文字コードが異なるCDBとPDB間でPDBの移動を行います。文字コードはCDBはAL32UTF8で、PDBはJA16SJISTILDEです。

UNPLUGを行う

文字コードの確認

実行中のPDBは文字コードをJA16SJISTILDEで作成しています。

SQL> SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';

PARAMETER                                                        VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
NLS_CHARACTERSET                                                 JA16SJISTILDE

UNPLUG操作

ALTER PLUGGABLE DATABASE UNPLUG文でPDBを取り外します。オープン状態ではエラーになるため、クローズしてから行うか、UNPLUGと同時にCLOSEを行います。UNPLUGを行う場合にはメタデータの保存先としてXMLファイル名を指定します。ファイルにパスを指定しない場合は、${ORACLE_HOME}/dbsディレクトリに作成されます。

SQL> SELECT NAME, OPEN_MODE FROM V$PDBS;

NAME                           OPEN_MODE
------------------------------ ----------
PDB$SEED                       READ ONLY
PDB4                           READ WRITE

SQL> ALTER PLUGGABLE DATABASE pdb4 UNPLUG INTO 'pdb4.xml';
ALTER PLUGGABLE DATABASE pdb4 UNPLUG INTO 'pdb4.xml'
*
ERROR at line 1:
ORA-65025: Pluggable database PDB4 is not closed on all instances.

SQL> ALTER PLUGGABLE DATABASE pdb4 CLOSE;

Pluggable database altered.

SQL> ALTER PLUGGABLE DATABASE pdb4 UNPLUG INTO 'pdb4.xml';

Pluggable database altered.

UNPLUGされてもPDBの情報は削除されません。完全に削除するにはDROP PLUGGABLE DATABASE文を実行します。下記の例ではKEEP DATAFILES句を指定して、OSからデータファイルは削除しません。

SQL> SELECT NAME, OPEN_MODE FROM V$PDBS;

NAME                           OPEN_MODE
------------------------------ ----------
PDB$SEED                       READ ONLY
PDB4                           MOUNTED

SQL> SELECT PDB_NAME, STATUS FROM CDB_PDBS;

PDB_NAME                       STATUS
------------------------------ ----------
PDB$SEED                       NORMAL
PDB4                           UNPLUGGED

SQL> DROP PLUGGABLE DATABASE pdb4 KEEP DATAFILES;

Pluggable database dropped.

XMLファイルの確認

ALTER PLUGGABLE DATABASE UNPLUG文に指定したXMLファイルには、データファイルのパス以外に使用していたデータベース・オプション、稼働統計情報、バージョン等の情報が出力されています。

$ cat pdb4.xml
<?xml version="1.0" encoding="UTF-8"?>
<PDB>
  <xmlversion>1</xmlversion>
  <pdbname>PDB4</pdbname>
  <cid>3</cid>
  <byteorder>1</byteorder>
  <vsn>318767104</vsn>
  <vsns>
    <vsnnum>19.0.0.0.0</vsnnum>
    <cdbcompt>19.0.0.0.0</cdbcompt>
    <pdbcompt>19.0.0.0.0</pdbcompt>
    <vsnlibnum>0.0.0.0.24</vsnlibnum>
    <vsnsql>24</vsnsql>
    <vsnbsv>8.0.0.0.0</vsnbsv>
  </vsns>
  <dbid>531233205</dbid>
  <ncdb2pdb>0</ncdb2pdb>
  <cdbid>2820269750</cdbid>
  <guid>9FDA23CACBB50EC0E053D301A8C03F1A</guid>
  <uscnbas>1073514</uscnbas>
  <uscnwrp>0</uscnwrp>
  <undoscn>238</undoscn>
  <rdba>4194824</rdba>
  <tablespace>
    <name>SYSTEM</name>
    <type>0</type>
    <tsn>0</tsn>
    <status>1</status>
    <issft>0</issft>
    <isnft>0</isnft>
    <encts>0</encts>
    <flags>0</flags>
    <bmunitsize>8</bmunitsize>
    <file>
      <path>/u01/app/oracle/oradata/pdb4/pdbseed/system01.dbf</path>
      <afn>8</afn>
      <rfn>1</rfn>
      <createscnbas>1070691</createscnbas>
      <createscnwrp>0</createscnwrp>
      <status>1</status>
      <fileblocks>26880</fileblocks>
      <blocksize>8192</blocksize>
      <vsn>318767104</vsn>
      <fdbid>531233205</fdbid>
      <fcpsb>1073505</fcpsb>
      <fcpsw>0</fcpsw>
      <frlsb>1</frlsb>
      <frlsw>0</frlsw>
      <frlt>1033983222</frlt>
      <autoext>1</autoext>
      <maxsize>4194302</maxsize>
      <incsize>1280</incsize>
      <plugscn>0</plugscn>
      <plugafn>0</plugafn>
      <plugdbid>0</plugdbid>
    </file>
  </tablespace>
  <tablespace>
    <name>SYSAUX</name>
    <type>0</type>
    <tsn>1</tsn>
    <status>1</status>
    <issft>0</issft>
    <isnft>0</isnft>
    <encts>0</encts>
    <flags>0</flags>
    <bmunitsize>8</bmunitsize>
    <file>
      <path>/u01/app/oracle/oradata/pdb4/pdbseed/sysaux01.dbf</path>
      <afn>9</afn>
      <rfn>4</rfn>
      <createscnbas>1070713</createscnbas>
      <createscnwrp>0</createscnwrp>
      <status>1</status>
      <fileblocks>21120</fileblocks>
      <blocksize>8192</blocksize>
      <vsn>318767104</vsn>
      <fdbid>531233205</fdbid>
      <fcpsb>1073505</fcpsb>
      <fcpsw>0</fcpsw>
      <frlsb>1</frlsb>
      <frlsw>0</frlsw>
      <frlt>1033983222</frlt>
      <autoext>1</autoext>
      <maxsize>4194302</maxsize>
      <incsize>1280</incsize>
      <plugscn>0</plugscn>
      <plugafn>0</plugafn>
      <plugdbid>0</plugdbid>
    </file>
  </tablespace>
  <tablespace>
    <name>UNDOTBS1</name>
    <type>2</type>
    <tsn>2</tsn>
    <status>1</status>
    <issft>0</issft>
    <isnft>0</isnft>
    <encts>0</encts>
    <flags>0</flags>
    <bmunitsize>8</bmunitsize>
    <file>
      <path>/u01/app/oracle/oradata/pdb4/pdbseed/undotbs01.dbf</path>
      <afn>10</afn>
      <rfn>6</rfn>
      <createscnbas>1070716</createscnbas>
      <createscnwrp>0</createscnwrp>
      <status>1</status>
      <fileblocks>25600</fileblocks>
      <blocksize>8192</blocksize>
      <vsn>318767104</vsn>
      <fdbid>531233205</fdbid>
      <fcpsb>1073505</fcpsb>
      <fcpsw>0</fcpsw>
      <frlsb>1</frlsb>
      <frlsw>0</frlsw>
      <frlt>1033983222</frlt>
      <autoext>1</autoext>
      <maxsize>4194302</maxsize>
      <incsize>640</incsize>
      <plugscn>0</plugscn>
      <plugafn>0</plugafn>
      <plugdbid>0</plugdbid>
    </file>
  </tablespace>
  <tablespace>
    <name>TEMP</name>
    <type>1</type>
    <tsn>3</tsn>
    <status>1</status>
    <issft>0</issft>
    <isnft>0</isnft>
    <encts>0</encts>
    <flags>0</flags>
    <bmunitsize>128</bmunitsize>
    <file>
      <path>/u01/app/oracle/oradata/pdb4/pdbseed/temp01.dbf</path>
      <afn>3</afn>
      <rfn>1</rfn>
      <createscnbas>1070692</createscnbas>
      <createscnwrp>0</createscnwrp>
      <status>1</status>
      <fileblocks>2560</fileblocks>
      <blocksize>8192</blocksize>
      <vsn>318767104</vsn>
      <autoext>1</autoext>
      <maxsize>4194302</maxsize>
      <incsize>80</incsize>
      <plugscn>0</plugscn>
      <plugafn>0</plugafn>
      <plugdbid>0</plugdbid>
    </file>
  </tablespace>
  <tablespace>
    <name>USERS</name>
    <type>0</type>
    <tsn>4</tsn>
    <status>1</status>
    <issft>0</issft>
    <isnft>0</isnft>
    <encts>0</encts>
    <flags>0</flags>
    <bmunitsize>8</bmunitsize>
    <file>
      <path>/u01/app/oracle/oradata/pdb4/pdbseed/users01.dbf</path>
      <afn>11</afn>
      <rfn>11</rfn>
      <createscnbas>1071406</createscnbas>
      <createscnwrp>0</createscnwrp>
      <status>1</status>
      <fileblocks>1280</fileblocks>
      <blocksize>8192</blocksize>
      <vsn>318767104</vsn>
      <fdbid>531233205</fdbid>
      <fcpsb>1073505</fcpsb>
      <fcpsw>0</fcpsw>
      <frlsb>1</frlsb>
      <frlsw>0</frlsw>
      <frlt>1033983222</frlt>
      <autoext>1</autoext>
      <maxsize>4194302</maxsize>
      <incsize>1</incsize>
      <plugscn>0</plugscn>
      <plugafn>0</plugafn>
      <plugdbid>0</plugdbid>
    </file>
  </tablespace>
  <recover>0</recover>
  <optional>
    <ncdb2pdb>0</ncdb2pdb>
    <csid>838</csid>
    <ncsid>2000</ncsid>
    <options>
      <option>CATALOG=19.0.0.0.0</option>
      <option>CATPROC=19.0.0.0.0</option>
      <option>OWM=19.0.0.0.0</option>
      <option>XDB=19.0.0.0.0</option>
    </options>
    <dv>0</dv>
    <APEX>NULL</APEX>
    <parameters>
      <parameter>processes=300</parameter>
      <parameter>nls_language='AMERICAN'</parameter>
      <parameter>nls_territory='AMERICA'</parameter>
      <parameter>db_block_size=8192</parameter>
      <parameter>compatible='19.0.0'</parameter>
      <parameter>open_cursors=300</parameter>
      <parameter>pga_aggregate_target=1357905920</parameter>
      <parameter>enable_pluggable_database=TRUE</parameter>
      <spfile>*.db_securefile='PREFERRED'</spfile>
    </parameters>
    <sqlpatches>
      <sqlpatch>19.3.0.0.0 Release_Update 1904101227 (RU): APPLY SUCCESS</sqlpatch>
    </sqlpatches>
    <tzvers>
      <tzver>primary version:32</tzver>
      <tzver>secondary version:0</tzver>
    </tzvers>
    <walletkey>0</walletkey>
    <services/>
    <opatches>
      <opatch>29517242</opatch>
    </opatches>
    <hasclob>1</hasclob>
    <awr>
      <loadprofile>CPU used by this session=1.817317</loadprofile>
      <loadprofile>DB time=26.914942</loadprofile>
      <loadprofile>db block changes=69.265260</loadprofile>
      <loadprofile>execute count=125.443222</loadprofile>
      <loadprofile>logons cumulative=0.011393</loadprofile>
      <loadprofile>parse count (hard)=11.291935</loadprofile>
      <loadprofile>parse count (total)=60.097882</loadprofile>
      <loadprofile>physical reads=3.500227</loadprofile>
      <loadprofile>physical writes=0.829861</loadprofile>
      <loadprofile>redo size=15539.804408</loadprofile>
      <loadprofile>session logical reads=523.059404</loadprofile>
      <loadprofile>user calls=10.999888</loadprofile>
      <loadprofile>user commits=0.984531</loadprofile>
      <loadprofile>user logons cumulative=0.004292</loadprofile>
      <loadprofile>user rollbacks=0.004539</loadprofile>
    </awr>
    <hardvsnchk>0</hardvsnchk>
    <localundo>1</localundo>
    <apps/>
    <dbedition>8</dbedition>
    <dvopsctl>2</dvopsctl>
    <clnupsrcpal>1</clnupsrcpal>
  </optional>
</PDB>

PLUGを行う

PDBが使用していたデータファイルとXMLファイルをPLUGを行うデータベースに移動します。PLUG側のCDBは文字コードとしてAL32UTF8を使用しています。

文字コードの確認

SQL> SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';

PARAMETER                                                        VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
NLS_CHARACTERSET                                                 AL32UTF8

互換性の確認

コピーしたPDBデータファイルをPLUGできるかどうかを確認します。DBMS_PDBパッケージのCHECK_PLUG_COMPATIBILITY関数を実行します。この関数にはXMLファイル名とPDB名(オプション)を指定します。TRUEが返ればPLUG操作を行うことができます。

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  2    comp BOOLEAN;
  3  BEGIN
  4    comp := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file=>'/u01/app/oracle/product/19.3.0/dbhome_1/dbs/pdb4.xml');
  5    CASE comp
  6      WHEN TRUE  THEN DBMS_OUTPUT.PUT_LINE('Yes');
  7      WHEN FALSE THEN DBMS_OUTPUT.PUT_LINE('No');
  8    END CASE;
  9  END;
 10  /
Yes

CHECK_PLUG_COMPATIBILITY関数は、PDBの互換性に懸念がある場合PDB_PLUG_IN_VIOLATIONSテーブルに情報を書き込みます。上記の例ではCHECK_PLUG_COMPATIBILITY関数はTRUEを返していますが、
PDB_PLUG_IN_VIOLATIONSテーブルにはいくつかの互換性に関する警告が出力されています。

SQL> SELECT MESSAGE FROM PDB_PLUG_IN_VIOLATIONS WHERE NAME='PDB4' ORDER BY LINE;

MESSAGE
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Database option APS mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0.
PDB not in Unicode (AL32UTF8) character set. PDB character set JA16SJISTILDE.
CDB parameter processes mismatch: Previous 300 Current 400
Database option CATJAVA mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0.
CDB parameter pga_aggregate_target mismatch: Previous 1295M Current 961M
Database option CONTEXT mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0.
Database option JAVAVM mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0.
Database option ORDIM mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0.
Database option SDO mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0.
Database option XML mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0.
Database option XOQ mismatch: PDB installed version NULL. CDB installed version 19.0.0.0.0.

11 rows selected.

PLUG操作

CREATE PLUGGABLE DATABASE文にXMLファイルを指定してPDBを作成します。ファイル名の変換等のオプションを指定することができます。ここではファイルのコピーを行わない(NOCOPY)のみ指定しているので、データファイルは元と同じパスが使用されます。

SQL> CREATE PLUGGABLE DATABASE pdb4 USING 'pdb4.xml' NOCOPY;

Pluggable database created.

SQL> ALTER PLUGGABLE DATABASE pdb4 OPEN;

Pluggable database altered.

文字コードの確認

PLUG操作を行ったPDBに接続して文字コードを確認します。CDBとは異なる設定で作成されていることがわかります。

SQL> ALTER SESSION SET CONTAINER=pdb4;

Session altered.

SQL> SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';

PARAMETER                                                        VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
NLS_CHARACTERSET                                                 JA16SJISTILDE

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0