前言: 实际日常运维中,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日 元旦