19c pdb relocate/pdb refresh区别及使用

前言:日常运维过程中,特别是涉及到数据库迁移,在19c pdb库迁移过程中,涉及到pdb relocate和refresh两种方式,这两种方式对比ADG方式配置过程确实少了不少,但各种方式各有自己的前置条件,下面我们来测试下。

一、环境介绍

1、操作系统  orhel 7.9 x64

2、数据库:oracle 19c pdb库

3、源目库都采用omf方式存储文件,版本都一致,并开启归档模式

二、19c pdb refresh迁移

1、前置条件

  • 源端和目标端数据库必须为归档模式
  • 源端和目标端必须为local_undo多租户(database_properties where property_name=‘LOCAL_UNDO_ENABLED’)
  • 源端和目标端需要同平台,字节顺序相同
  • 确保目标库有足够的SGA/PGA内存分配给refresh过来的pdb
  • 确保目标库磁盘组有足够的可用空间存放refresh过来的pdb
  • 源库pdb的字符集要和目标CDB的字符集和国家字符集兼容,例如目标库是AL32UTF8的话,源库可以是ZHS16GBK,但是反过来就不行。

2、测试过程

源库:cdb下创建用户

 create user c##dblk identified by oracle;

grant create any table,unlimited tablespace to c##dblk container=all;

目标库:编辑tnsnames.ora

pdb02 =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.11)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = pdb02)

    )

  )

3、创建dblink

create public database link pdb01_links connect to c##dblk identified by oracle using '(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =10.10.10.11)(PORT = 1521))(CONNECT_DATA=( DEDICATED)(SERVICE_NAME =pdb01)))';

检查dblink:

select instance_name from v$instance@pdb01_links;

4、目标库:建立pdb refresh库

SQL> create pluggable database pdb01 from pdb01@pdb01_links refresh mode every 1 minutes;

Pluggable database created.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

         2 PDB$SEED                       READ ONLY  NO

         3 PDB01                             MOUNTED

5、源库:应用关闭后,一致性关闭源库,并以read only方式打开(确保老库数据不会增加)

alter pluggable database pdb01 close immediate;

alter pluggable database pdb01 open read only;

6、目标库最后一次刷新

alter pluggable database pdb01 refresh;

7、检查目标库数据或关键表数据是否一致

8、激活目标库

alter pluggable database pdb01 refresh mode none;(刷新模式为none为不可逆操作)

alter pluggable database pdb01 open;

9、执行datapatch修复目标pdb库最新补丁

[oracle@db100 admin]$ $ORACLE_HOME/OPatch/datapatch -pdbs pdb01

SQL Patching tool version 19.3.0.0.0 Production on Fri Jan  2 20:05:17 2026

Copyright (c) 2012, 2019, Oracle.  All rights reserved.

Log file for this invocation: /u01/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_86924_2026_01_02_20_05_18/sqlpatch_invocation.log

Connecting to database...OK

Gathering database info...done

10、解决Database option RAC mismatch: PDB installed version 19.0.0.0.0. CDB installed version NULL.(略)


三、19c pdb relocate

在使用RelocatePDB进行数据迁移时需要注意如下事项:

1.如果PDB被Relocate到的CDB的字符集不是AL32UTF8,那么源与目标字符集必须兼容。

2.源端与目标短的字节顺序必须相同。

3.连接的用户在CDB中必须拥有'CREATEPLUGGABLE DATABASE'的权限。

5.源端PDB必须为归档模式。

6.源端PDB必须是localundo模式。

7.当指定AVAILABILITY MAX字句时,要求目标PDB与源PDB名字必须保持一致。

=====================================================================================

1、源库:cdb下创建用户

create user c##dblk identified by oracle;

grant create session,sysoper,create pluggable database to c##dblk container=all;

2、目标库:配置tnsnames.ora

orcl =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.11)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

  )

3、目标库:创建dblink

create public database link orcl_links connect to c##dblk identified by oracle using 'orcl';(使用cdb的link,不是pdblink))

检查dblink:

select instance_name from v$instance@orcl_links;

4、现有源目库存储文件采用omf方式

5、通过relocate方式创建目标pdb库:

create pluggable database pdb01 from pdb01@orcl_links relocate;

6、检查源目库状态

源库:

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

         2 PDB$SEED                       READ ONLY  NO

         3 PDB01                          READ WRITE NO

         5 PDB02                          READ WRITE NO

SQL> select pdb_id, pdb_name, status, refresh_mode,refresh_interval from cdb_pdbs;

   PDB_ID   PDB_NAME      STATUS     REFRES REFRESH_INTERVAL

---------- ------ -------------------------------------------

    2       PDB$SEED      NORMAL     NONE   NONE

    5       PDB02         NORMAL     NONE   NONE  

目标库:

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

         2 PDB$SEED                       READ ONLY  NO

         3 PDB01                             MOUNTED

SQL> select pdb_id, pdb_name, status, refresh_mode,refresh_interval from cdb_pdbs;


    PDB_ID  PDB_NAME                                 STATUS                    REFRESH_MODE       REFRESH_INTERVAL

---------- ---------------------------------------- ---------------------------------------- ------------------ ----------------

       2         PDB$SEED                                 NORMAL                      NONE

       3         PDB01                                    RELOCATING                   NONE

7、源库创建测试数据

SQL> alter session set container=pdb01;

Session altered.

SQL> create table it (id number);

Table created.

SQL> insert into it values(1);

1 row created.

SQL> insert into it values(2);

SQL> select * from it;

        ID

----------

         1

         2

SQL> create tablespace data11 datafile size 100m autoextend on;

Tablespace created.

SQL> select tablespace_name from dba_data_files;

TABLESPACE_NAME

------------------------------

SYSTEM

SYSAUX

UNDOTBS1

UNDO_2

USERS

DATA

DATA01

DATA11

8、目标库pdb01打开open状态

SQL> alter pluggable database pdb01 open;

Pluggable database altered.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

         2 PDB$SEED                               READ ONLY      NO

         3 PDB01                                      READ WRITE    NO

alert.log日志信息:

alter pluggable database pdb01 open

2026-01-03T09:27:37.206519+08:00

Applying media recovery for pdb-4099 from SCN 6835327 to SCN 6836889

Remote log information: count-2

thr-2, seq-16, logfile-+DATA/ORCL/partial_archivelog/2026_01_03/thread_2_seq_16.338.1221557257, los-6817708, nxs-18446744073709551615

thr-1, seq-19, logfile-+DATA/ORCL/partial_archivelog/2026_01_03/thread_1_seq_19.340.1221557257, los-6547727, nxs-18446744073709551615

PDB01(3):Media Recovery Start

2026-01-03T09:27:37.207578+08:00

PDB01(3):Serial Media Recovery started

PDB01(3):max_pdb is 8

2026-01-03T09:27:37.706930+08:00

PDB01(3):Media Recovery Log +DATA/ORCL/partial_archivelog/2026_01_03/thread_1_seq_19.340.1221557257

2026-01-03T09:27:38.771488+08:00

PDB01(3):Media Recovery Log +DATA/ORCL/partial_archivelog/2026_01_03/thread_2_seq_16.338.1221557257

2026-01-03T09:27:40.854244+08:00

PDB01(3):Successfully added datafile 99 to media recovery

PDB01(3):Datafile #99: '/oradata/ORCL/334820967F541799E0630C0A0A0AE1B8/datafile/o1_mf_data11_nojw4chd_.dbf'

2026-01-03T09:27:40.958966+08:00

PDB01(3):Incomplete Recovery applied until change 6836889 time 01/03/2026 09:26:35

2026-01-03T09:27:40.965535+08:00

PDB01(3):Media Recovery Complete (orcl)

PDB01(3):Autotune of undo retention is turned on.

PDB01(3):Undo initialization finished serial:0 start:88332584 end:88332584 diff:0 ms (0.0 seconds)

PDB01(3):Database Characterset for PDB01 is AL32UTF8

2026-01-03T09:27:42.773895+08:00

PDB01(3):Opening pdb with no Resource Manager plan active

2026-01-03T09:28:14.357099+08:00

PDB01(3):JIT: pid 100844 requesting stop

PDB01(3):Buffer Cache flush started: 3

PDB01(3):Buffer Cache flush finished: 3

2026-01-03T09:28:19.621553+08:00

Applying media recovery for pdb-4099 from SCN 6836889 to SCN 6837594

Remote log information: count-2

thr-2, seq-16, logfile-+DATA/ORCL/partial_archivelog/2026_01_03/thread_2_seq_16.338.1221557299, los-6817708, nxs-18446744073709551615

thr-1, seq-19, logfile-+DATA/ORCL/partial_archivelog/2026_01_03/thread_1_seq_19.340.1221557299, los-6547727, nxs-18446744073709551615

PDB01(3):Media Recovery Start

2026-01-03T09:28:19.622572+08:00

PDB01(3):Serial Media Recovery started

PDB01(3):max_pdb is 8

2026-01-03T09:28:19.800936+08:00

PDB01(3):Media Recovery Log +DATA/ORCL/partial_archivelog/2026_01_03/thread_2_seq_16.338.1221557299

2026-01-03T09:28:19.933723+08:00

PDB01(3):Media Recovery Log +DATA/ORCL/partial_archivelog/2026_01_03/thread_1_seq_19.340.1221557299

2026-01-03T09:28:21.519872+08:00

PDB01(3):Incomplete Recovery applied until change 6837594 time 01/03/2026 09:26:35

2026-01-03T09:28:21.525384+08:00

PDB01(3):Media Recovery Complete (orcl)

PDB01(3):Undo initialization recovery: err:0 start: 88372497 end: 88372500 diff: 3 ms (0.0 seconds)

PDB01(3):[100844] Successfully onlined Undo Tablespace 2.

PDB01(3):Undo initialization online undo segments: err:0 start: 88372500 end: 88372523 diff: 23 ms (0.0 seconds)

PDB01(3):Undo initialization finished serial:0 start:88372497 end:88372527 diff:30 ms (0.0 seconds)

PDB01(3):Database Characterset for PDB01 is AL32UTF8

PDB01(3):Buffer Cache flush started: 3

PDB01(3):Buffer Cache flush finished: 3

2026-01-03T09:28:23.281010+08:00

PDB01(3):Undo initialization recovery: err:0 start: 88374182 end: 88374184 diff: 2 ms (0.0 seconds)

PDB01(3):[100844] Successfully onlined Undo Tablespace 2.

PDB01(3):Undo initialization online undo segments: err:0 start: 88374184 end: 88374267 diff: 83 ms (0.1 seconds)

PDB01(3):Undo initialization finished serial:0 start:88374182 end:88374270 diff:88 ms (0.1 seconds)

PDB01(3):Deleting old file#10 from file$

PDB01(3):Deleting old file#11 from file$

PDB01(3):Deleting old file#12 from file$

PDB01(3):Deleting old file#13 from file$

PDB01(3):Deleting old file#14 from file$

PDB01(3):Deleting old file#15 from file$

PDB01(3):Deleting old file#81 from file$

PDB01(3):Deleting old file#82 from file$

PDB01(3):Adding new file#92 to file$(old file#10).             fopr-1, newblks-35840, oldblks-19200

PDB01(3):Adding new file#93 to file$(old file#11).             fopr-1, newblks-44800, oldblks-15360

PDB01(3):Adding new file#94 to file$(old file#12).             fopr-1, newblks-12800, oldblks-12800

PDB01(3):Adding new file#95 to file$(old file#13).             fopr-1, newblks-12800, oldblks-12800

PDB01(3):Adding new file#96 to file$(old file#14).             fopr-1, newblks-640, oldblks-640

PDB01(3):Adding new file#97 to file$(old file#15).             fopr-1, newblks-12800, oldblks-12800

PDB01(3):Adding new file#98 to file$(old file#81).             fopr-1, newblks-1280, oldblks-1280

PDB01(3):Adding new file#99 to file$(old file#82).             newblks-12800, oldblks-12800

PDB01(3):Successfully created internal service PDB01 at open

****************************************************************

Post plug operations are now complete.

Pluggable database PDB01 with pdb id - 3 is now marked as NEW.

****************************************************************

9、检查源库状况

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

         2 PDB$SEED                                  READ ONLY  NO

         5 PDB02                                         READ WRITE NO

alert.log日志:

Domain Action Reconfiguration complete (total time 0.0 secs)

Decreasing priority of 1 RS

2026-01-03T09:28:15.771482+08:00

Pluggable database PDB01 closed

2026-01-03T09:28:22.592671+08:00

Deleted Oracle managed file +DATA/ORCL/334820967F541799E0630C0A0A0AE1B8/DATAFILE/data11.339.1221557195

Deleted Oracle managed file +DATA/ORCL/334820967F541799E0630C0A0A0AE1B8/DATAFILE/data01.335.1221507639

Deleted Oracle managed file +DATA/ORCL/334820967F541799E0630C0A0A0AE1B8/DATAFILE/data.302.1221087139

Deleted Oracle managed file +DATA/ORCL/334820967F541799E0630C0A0A0AE1B8/DATAFILE/users.285.1199038753

Deleted Oracle managed file +DATA/ORCL/334820967F541799E0630C0A0A0AE1B8/DATAFILE/undo_2.284.1199038751

Deleted Oracle managed file +DATA/ORCL/334820967F541799E0630C0A0A0AE1B8/TEMPFILE/temp.283.1199038451

Deleted Oracle managed file +DATA/ORCL/334820967F541799E0630C0A0A0AE1B8/DATAFILE/undotbs1.280.1199038445

Deleted Oracle managed file +DATA/ORCL/334820967F541799E0630C0A0A0AE1B8/DATAFILE/sysaux.282.1199038445

Deleted Oracle managed file +DATA/ORCL/334820967F541799E0630C0A0A0AE1B8/DATAFILE/system.281.1199038445

Deleted Oracle managed file +DATA/ORCL/partial_archivelog/2026_01_03/thread_1_seq_19.340.1221557299

Deleted Oracle managed file +DATA/ORCL/partial_archivelog/2026_01_03/thread_2_seq_16.338.1221557299

2026-01-03T09:34:05.311053+08:00

Control autobackup written to DISK device

handle '+DATA/ORCL/AUTOBACKUP/2026_01_03/s_1221557644.338.1221557645'

源库pdb01从cdb中消失了。


小结:pdb refresh和pdb relocate两种迁移方式中最大的不同在于前者是完全复制源库到目的库,且源库不做任何操作,保持现状;

而relocate方式,将源库复制到目的库,但在源库中会将复制过来的pdb删除,在后面pdb迁移过程中,感觉pdb refresh可能会用

的多些。

       2026.1.3  

      good luck
























请使用浏览器的分享功能分享到微信等