Oracle 12c远程克隆PDB的问题及修复(r12笔记第78天)


 Oracle 12c里面的PDB迁移还是有很多花样的,玩法很多,如果想达到一种平滑方式的迁移,克隆远程PDB也是一种方法,保证网络畅通,即可远程克隆PDB到指定的目标容器数据库中,当然这种方式还是推荐数据量不大的PDB。

  要实现远程克隆,主要就是创建DB link,然后使用create pluggable database语句指定db link复制的路径即可。当然这个过程中还是可能出现一大堆的问题。我就抛砖引玉,提一个比较有代表性的。

首先在目标端容器数据库创建DB link,指向源端的PDB

create public database link tcymob1_new12c connect to pdb_mgr identified by oracle using 'tcymob1';

接着在目标端容器数据库远程克隆PDB

CREATE PLUGGABLE DATABASE pdb4 FROM test_pdb ? FILE_NAME_CONVERT =
file_name_convert=('/U01/app/oracle/oradata/dbcadb','/U01/app/oracle/oradata/dbcadb/pdb4');

当然很不幸,抛出了下面的错误,这个错误如果在12.2中测试很可能不会碰到,但是在12.1和12.2之间切换,那还是很可能有的,因为其中的一个重要原因就是undo了。

ORA-17628: Oracle error 65035 returned by remote Oracle server
ORA-65035: unable to create pluggable database from我们看看错误分析:

$ oerr ora 65035
65035, 00000, "unable to create pluggable database from %s"
// *Cause:  An attempt was made to clone a pluggable database that did not have
//          local undo enabled.
// *Action: Enable local undo for the PDB and and retry the operation.

为了进一步验证,我们到源端,查看源容器数据库的信息  

SQL> show pdbs;
    CON_ID CON_NAME            OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB2_PROXY                     MOUNTED
         5 TCYMOB0                        READ WRITE NO
         6 TCYMOB1                        READ WRITE NO

查看database_properties,或者查看dba_data_files都可以,源库中的undo是共享模式的,接下来的问题就会变为如果把share undo改为local undo

修复share undo为local undo核心的命令就是alter database undo local,但是要实现这样一个目标还是需要花些功夫的。

我们先启动源数据库到upgrade模式。

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup upgrade然后在root容器下执行undo的切换命令。

SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> alter database local undo on;
Database altered.然后启动源容器数据库即可。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.再次查看,对应的undo文件已经是PDB级别,即local模式了。
SQL> show pdbs;
CON_ID CON_NAME                  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB2_PROXY                     MOUNTED
         5 TCYMOB0                        MOUNTED
         6 TCYMOB1                        MOUNTED
SQL> alter session set container=tcymob1;
Session altered.
SQL> select name from v$datafile where name like '%undo%';
NAME
---------------------------------------------------------------
/U01/app/oracle/oradata/new12c/NEW12C/datafile/o1_mf_undotbs1_dkbv7dro_.dbf再次尝试就可以看到,问题引刃而解。

时间: 2024-09-20 19:41:14

Oracle 12c远程克隆PDB的问题及修复(r12笔记第78天)的相关文章

ORACLE 12C CDB中PDB参数管理机制

转自:http://www.xifenfei.com/2013/06/oracle-12c-cdb%E4%B8%ADpdb%E5%8F%82%E6%95%B0%E7%AE%A1%E7%90%86%E6%9C%BA%E5%88%B6.html 在ORACLE 12C中参数文件只是记录了cdb的参数信息,没有记录任何的pdb的信息,那ORACLE是如何管理使得各个pdb有自己的参数,这里通过试验的出来ORACLE 12C CDB环境中是通过参数文件结合PDB_SPFILE$来实现参数管理数据库版本

Oracle 12c中DBCA搭建备库体验(r11笔记第92天)

   Oracle 12c中DBCA有一个特性看起来蛮有意思,就是直接通过DBCA来搭建Data Guard,当然这么说也有点噱头,我们来实际看看.   Oracle提供的官方命令结构如下:       dbca -createDuplicateDB         -gdbName global_database_name         -primaryDBConnectionString easy_connect_string_to_primary         -sid databas

Oracle 12c中JOB运行失败的简单处理(r11笔记第66天)

在之前简单分析过一个12c中数据字典的小问题. Oracle 12c数据字典的小问题(r11笔记第49天) 最近查看邮件,12c的一个PDB还是存在JOB运行异常的情况,因为是测试环境,不是业务类的JOB,这个问题就给了我一些时间来修复. 首先因为数据字典cdb_scheduler_job_run_details的问题,还不能一下子就查出数据.我们分阶段来完成这个工作,即分成几条SQL语句来查. 首先查看PDB中的JOB执行情况.可以看到con_id=8的PDB存在失败的JOB SQL> sel

Oracle 12c PDB中碰到的DG问题

Oracle 12c中的PDB一下子让数据文件的格式复杂了一些,所以Data Guard就很有必要了,一旦出现问题,受损失的数据库是全局的.没想到在搭建Data Guard的时候还是碰到了一些小问题. 问题源自于一次PDB创建的时候,早些时候我在搭建好Data Guard后,主备库的日志应用都没有问题,过了几天,根据需求需要再添加一个PDB,导入一些数据供应用使用.按照要求创建了数据文件然后导入数据,但是查看备库的状态发现MRP异常停止了. DG Broker检测的状态如下: DGMGRL> s

Oracle 12c多租户特性详解:从Schema到PDB的变化与隔离

(题图来自Oracle VP , Sally Piao的摄影佳作,感谢摄影师授权) 编辑手记:Oracle 12c的多租户特性是Oracle Database历史上最重要的革新之一,在云时代这一特性展现出强大的整合威力,这篇文章来自<深入解析Oracle>一书的摘录. 在Oracle Database 12c版本中,一个重要的新特性:插接式数据库(Pluggable Database)被引入进来.在12c之前的版本中,Oracle数据库中的多用户管理通过Schema – 模式管理方式来实现,而

ORACLE 12C新特性——CDB与PDB

Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB).CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库.在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载.而实例与数据库不可

Oracle 12c多租户特性详解:PDB 的出与入 InAndOut

(题图来自Oracle VP , Sally Piao的摄影佳作,感谢摄影师授权) 编辑手记:这一节我们将介绍多租户中PDB的Plug-Out 与 Plug-In与备份恢复,这篇文章来自<深入解析Oracle>一书的摘录. 将 Non-PDB 插入 CDB   在12c中,可以将一个非 CDB(也即NON-CDB)插入到 CDB 中,这个过程需要在只读模式下进行.   以下测试首先启动一个常规的 Non-CDB 数据库: 这个数据库中已经预先建立了一个数据库用户,并且有一个测试表: 在12c中

Oracle 12c多租户特性详解:PDB 的备份与恢复

(题图来自Oracle VP , Sally Piao的摄影佳作,感谢摄影师授权) 编辑手记:这一节我们将介绍多租户中的备份与恢复,这篇文章来自<深入解析Oracle>一书的摘录. 由于 PDB 的引入,Oracle 数据库的备份和恢复也发生了很多变化,基于 PDB 级别的表空间.库备份同时被支持.以下通过实际测试介绍一下12c中关于 PDB 的备份恢复过程. ⑴ 启动归档模式   首先启动数据库的归档模式(需要以IMMEDIATE方式关闭数据库,执行模式更改): 根据数据库的实际情况,设置闪

ORACLE 12C PDB 维护基础知识介绍_oracle

先说基本用法: 先按11G之前进行 conn / as sysdba; create user test identifed by test; ORA-65096: 公用用户名或角色名无效. 查官方文档得知"试图创建一个通用用户,必需要用C##或者c##开头",这时候心里会有疑问,什么是common user?不管先建成功了再说 create C##user test identifed by test; 创建成功 SQL>show con_name; CON_NAME ----