ORACLE 19C PDB从一个CDB近零停机迁移到另一个CDB

目标:

       把 PDB1从CDB1 热迁移到CDB2

前提:
    1.两个CDB 开启归档
    2.两个CDB 本地UNDO
    3.要求用于DBLINK 的连接用户(源端),必须有CREATE PLUGGABLE DATABASE ,sysoper 权限

环境:
  源端:cdb1
 目标端:cdb2

操作步骤:


1. 源端创建DBLINK连接需要的用户,并授予必须的权限 


   登陆到源端 cdb1

   [oracle@dbserver ~]$ . oraenv
   ORACLE_SID = [cdb1] ? 
   The Oracle base remains unchanged with value /u01/app/oracle
   [oracle@dbserver ~]$ sqlplus /nolog

   SQL*Plus: Release 19.0.0.0.0 - Production on Sun Oct 22 16:37:55 2023
   Version 19.20.0.0.0
   
   Copyright (c) 1982, 2022, Oracle.  All rights reserved.

   @ >conn / as sysdba
   
   SYS@cdb1 >show pdbs

       CON_ID CON_NAME                       OPEN MODE  RESTRICTED
   ---------- ------------------------------ ---------- ----------
            2 PDB$SEED                       READ ONLY  NO
            3 PDB1                           READ WRITE NO
   SYS@cdb1 >

   SYS@cdb1 >create user c##relocate identified by oracle_4U;
   SYS@cdb1 >grant create session,create pluggable database to c##relocate container=all;
   SYS@cdb1 >grant sysoper to c##relocate container=all;

2. 目标端创建连接到源端的DBLINK 


  登陆到源端 cdb2 
  [oracle@dbserver ~]$ . oraenv
  ORACLE_SID = [cdb2] ? 
  The Oracle base remains unchanged with value /u01/app/oracle
  [oracle@dbserver ~]$ sqlplus /nolog
  @ >conn / as sysdba
  
  SYS@cdb2 >

  SYS@cdb2 >create database link link_cdb1
    2      connect to c##relocate
    3      identified by oracle_4U
    4        using 'cdb1'  
    5      ;

  Database link created.


3.模拟有用户在源端PDB1上操作 


    登陆源端 CDB1上PDB1

  [oracle@dbserver admin]$ sqlplus /nolog

  SQL*Plus: Release 19.0.0.0.0 - Production on Sun Oct 22 16:43:15 2023
  Version 19.20.0.0.0

  @ >CONN SYSTEM/oracle_4U@pdb1_cdb1     

  SYSTEM@pdb1_cdb1 >create table test_relocate(create_date date);

  SYSTEM@pdb1_cdb1 >insert into test_relocate values(sysdate);

  SYSTEM@pdb1_cdb1 >

4. 使用RELOCATE创建PDB


    登陆到源端 cdb2 
   
   SYS@cdb2 >create pluggable database pdb1
   2     from pdb1@link_cdb1
   3     relocate
   4     ;

   提示:使用OMF

  SYS@cdb2 >show pdbs

      CON_ID CON_NAME                       OPEN MODE  RESTRICTED
  ---------- ------------------------------ ---------- ----------
           2 PDB$SEED                       READ ONLY  NO
           3 PDB2                           READ WRITE NO
           4 PDB1                           MOUNTED
  SYS@cdb2 >


5.打开目标端PDB1之前,查看一下源端PDB1状态

  SYS@cdb1 >show pdbs

      CON_ID CON_NAME                       OPEN MODE  RESTRICTED
  ---------- ------------------------------ ---------- ----------
           2 PDB$SEED                       READ ONLY  NO
           3 PDB1                           READ WRITE NO

  而且模拟客户端可以正常执行DML操作
   SYSTEM@pdb1_cdb1 >alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';

  SYSTEM@pdb1_cdb1 >select * from test_relocate;

  CREATE_DATE
  -------------------
  2023-10-22 16:43:59

  SYSTEM@pdb1_cdb1 >insert into test_relocate values(sysdate);

  SYSTEM@pdb1_cdb1 >select * from test_relocate;

  CREATE_DATE
  -------------------
  2023-10-22 16:43:59
  2023-10-22 16:48:45

  SYSTEM@pdb1_cdb1 >


6.打开目标端PDB1

SYS@cdb2 >alter pluggable database pdb1 open;

SYS@cdb2 >SHOW pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB2                           READ WRITE NO
         4 PDB1                           READ WRITE NO
SYS@cdb2 >

7.检查源端PDB及客户端链接

--源端PDB1已经没有
SYS@cdb1 > show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
SQL> 

客户端报错
SYSTEM@pdb1_cdb1 >r
  1* select * from test_relocate
ERROR:
ORA-03114: not connected to ORACLE


SYSTEM@pdb1_cdb1 >conn system/oracle_4U@pdb1_cdb1

SYSTEM@pdb1_cdb1 >select * from test_relocate;

no rows selected

--发现迁移前,没有提交的数据,都回滚了。

附:

1.报错信息1:

*
ERROR at line 1:
ORA-17628: Oracle error 1031 returned by remote Oracle server
ORA-01031: insufficient privileges

解决:
grant sysoper to system container=all;

2.报错信息2:


  1   create pluggable database pdb1
  2     from pdb1@link_cdb1
  3*    relocate
 create pluggable database pdb1
*
ERROR at line 1:
ORA-65122: Pluggable database GUID conflicts with the GUID of an existing
container.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值