前言: 实际日常运维中,pdb库在线迁移成为日常中非常普遍的操作,如测试库,数据镜像等等,本次通过dblink方式将生产库中rac库中的pdb迁移到单库的pdb,从操作的过程来讲,整个过程非常简洁,也很方便,下面我们来看下具体操作过程。一、环境介绍1、生产库 19c pdb 操作系统:oracle linux 7.8Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - ProductionOracle Linux Server 7.82、源库:生产库RAC rac1:10.10.10.11 rac2:10.10.10.123、目标库:单实例库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 ORCL2、检查源目库是否是归档模式源库:SQL> archive log listDatabase log mode Archive ModeAutomatic archival EnabledArchive destination USE_DB_RECOVERY_FILE_DESTOldest online log sequence 14Next log sequence to archive 15Current log sequence 153、检查源目库是否用本地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日 元旦
