19c dblink迁移在线pdb库

前言: 实际日常运维中,pdb库在线迁移成为日常中非常普遍的操作,如测试库,数据镜像等等,本次通过dblink方式将生产库中rac库中的pdb迁移到单库的pdb,从操作的过程来讲,整个过程非常简洁,也很方便,下面我们来看下具体操作过程。

一、环境介绍

1、生产库 19c pdb  操作系统:oracle linux 7.8

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Oracle Linux Server 7.8

2、源库:生产库RAC  

rac1:10.10.10.11   rac2:10.10.10.12

3、目标库:单实例库

db100:10.10.10.100

二、dblink在线迁移pdb库前提条件

1、检查源目库具有相同的字节存储顺序

源库:

SQL> select d.inst_id, t.platform_id, t.platform_name, t.endian_format, d.name

from v$transportable_platform t, gv$database d

where t.platform_name = d.platform_name;  2    3

   INST_ID PLATFORM_ID PLATFORM_NAME                                                                                         ENDIAN_FORMAT  NAME

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

         1          13 Linux x86 64-bit                                                                                      Little         ORCL

目的库:

SQL> select d.inst_id, t.platform_id, t.platform_name, t.endian_format, d.name

from v$transportable_platform t, gv$database d

where t.platform_name = d.platform_name;  2    3

   INST_ID PLATFORM_ID PLATFORM_NAME                                                                                         ENDIAN_FORMAT  NAME

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

         1          13 Linux x86 64-bit                                                                                      Little         ORCL

2、检查源目库是否是归档模式

源库:

SQL> archive log list

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     14

Next log sequence to archive   15

Current log sequence           15

3、检查源目库是否用本地undo模式

源库:

SQL> select property_name, property_value from database_properties where property_name = 'LOCAL_UNDO_ENABLED';

PROPERTY_NAME                                      PROPERTY_VALUE

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

LOCAL_UNDO_ENABLED                                 TRUE

三、具体操作

备注:操作都在cdb视图下;

1、源库:cdb下创建用户

create user c##dblk identified by oracle;

grant CREATE PLUGGABLE DATABASE to c##dblk container=all;

grant create session,connect,resource,cdb_dba,sysoper to c##dblk container=all;

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


2、目标库:创建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=(SERVER = DEDICATED)(SERVICE_NAME =pdb01)))';

备注:using '(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =10.10.10.11)(PORT = 1521))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME =pdb01)))';

可以使用tnsnames.ora中配置源端连接信息如:

pdb01 =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = pdb01)

    )

  )

创建dblink可以改为:create public database link pdb01_links connect to c##dblk identified by oracle using 'pdb01';

3、检查dblink:

select instance_name from v$instance@pdb01_links;

4、新建目录:

mkdir -p /oradata/ORCL/pdb01/  /oradata/ORCL/pdb01/TEMPFILE/  

备注:测试过程中,使用原目录到目标目录出现没有TEMPFILE报错,所以重新建立TEMPFILE目录;

5、创建目标pdb库:

create pluggable database pdb01 from pdb01@pdb01_links 

file_name_convert=('+DATA/ORCL/334820967F541799E0630C0A0A0AE1B8/','/oradata/ORCL/pdb01/'); 

6、检查目标pdb库

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         2 PDB$SEED                       READ ONLY  NO

         3 PDB01                          READ WRITE NO

7、报错问题解决

Database option RAC mismatch: PDB installed version 19.0.0.0.0. CDB installed version NULL.  PENGDING

原因:因为源端库为rac库,目标端为单实例库,执行一下语句,可以解决,执行完成后,检查视图PDB_PLUG_IN_VIOLATIONS

是否变成RESOLVED状态;

SQL> alter session set container=pdb01;

Session altered.

SQL> exec dbms_registry.OPTION_OFF('RAC');

PL/SQL procedure successfully completed.


结束语:19c迁移方式后面将逐个介绍,本文就到此了。

              2026.1.1日 元旦

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