使用DataPump迁移非CDB到CDB数据库

Oralce 12c中的多租户数据库的启用,使得原来分布于多台服务器或者一台服务器上运行N多实例的情形需要进行整合。那就是将之前的N多非CDB数据库整合到CDB,原来的数据库将作为CDB数据库下一个PDB容器,各个PDB之间也可以通过快速dblink实现交互。常用的方法包括导出导入,DBMS_PDB包方式,以及GoldenGate复制方式等。本文主要描述使用DataPump方式实现迁移。

一、几种常用的迁移方法

如上图所示,通常有3种方式来实现将非CDB迁移到CDB数据库
注:文中所描述的迁移到CDB,指的是非CDB迁移之后将作为目标CDB的一个PDB数据库

1、Datapump/TTS
  使用Datapump迁移的场景:
    源非CDB数据库使用了与目标数据库不同的字节码(简单说就是跨OS平台)
    源非CDB数据库使用了与目标数据库不同的字符集
  使用TTS方式迁移
    TTS方式与传统的导出导入方式以及可传输数据库多适用于用户定义的对象位于当个表空间情行

2、使用DBMS_PDB包实现
  该方式将非CDB数据库构建一个XML文件用于描述其结构然后在目标端读取它实现导入
  此种方式最为简单,但是仅仅使用在Oracle 12c版本中

3、使用复制方式,如GoldenGate
  该方式能实现Oracle 12c版本之前最小化停机时间 ,但是配置复杂

二、演示使用DataPump迁移非CDB到CDB

演示说明:
1、以下演示将Oracle 11g一个schema soe作为一个pdb导入到Oracle 12c
2、在导入pdb前,做了schema映射(soe到report_usr),如果是正式迁移应创建原账号,导入完成后并将其密码变更为原密码
3、导入完成后应检查所有迁移期间涉及到的对象,如表,视图,存储过程,包,dblink,无效对象等等

--当前环境
SQL> select banner from v$version where rownum<2;

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

--当前数据库字符集,此书与原数据库字符集是一致的
SQL> select * from nls_database_parameters where parameter like '%CHARACTERSET%';

PARAMETER                           VALUE
----------------------------------- --------------------
NLS_NCHAR_CHARACTERSET              AL16UTF16
NLS_CHARACTERSET                    AL32UTF8

SQL> select 'Leshami' Author,'http://blog.csdn.net/leshami' Blog,
  2  '645746311' QQ from dual;
AUTHOR  BLOG                         QQ
------- ---------------------------- ---------
Leshami http://blog.csdn.net/leshami 645746311     

--创建可插拔数据库
SQL> create pluggable database reportdb
  2  admin user reportdba identified by pass roles=(connect)
  3  file_name_convert=('/app/oracle/ora12c/oradata/cdb1/pdbseed',
  4  '/app/oracle/ora12c/oradata/cdb1/reportdb');

--将数据库置为open
SQL> alter pluggable database reportdb open;

--连接到刚刚创建的pdb数据库
SQL> conn sys/pass@192.168.1.244:1521/reportdb as sysdba

--为pdb用户授权
SQL> grant dba to reportdba;

--使用pdb账号reportdba连接到pdb
SQL> conn reportdba/pass@192.168.1.244:1521/reportdb

SQL> show user;
USER is "REPORTDBA"

--创建一个用于导入的临时目录
SQL> create directory dump_dir as '/tmp';

--创建表空间
SQL> create tablespace report_tbs datafile
 2>  '/app/oracle/ora12c/oradata/cdb1/reportdb/report_tbs.dbf' size 500m autoextend on;

--创建一个新schema存放导入源数据schema,如果不使用新用户,则创建源schema
SQL> create user report_usr identified by report_usr default tablespace report_tbs;

--对新schema授权
SQL> grant create session,resource,connect,dba to report_usr;

--下面开始源数据schema导出,如下,连接到Oracle 11g
SQL> conn sys/oracle@ora11g as sysdba

SQL> select * from v$version where rownum=1;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

--SOE下的对象数目
SQL> select count(*) from dba_objects where owner='SOE';

  COUNT(*)
----------
        47

--导出SOE schema
SQL> ho expdp soe/soe directory=DATA_PUMP_DIR dumpfile=soe.dmp logfile=exp_soe.log schemas=soe

--将其复制到临时位置
$ cp /app/oracle/ora11g/admin/ora11g/dpdump/soe.dmp /tmp 

--导入SOE schema,并将其映射到report_usr
$ impdp report_usr/report_usr@192.168.1.244:1521/reportdb directory=dump_dir dumpfile=soe.dmp \
> logfile=imp_soe.log schemas=soe remap_schema=soe:report_usr transform=segment_attributes:n

--连接到目标数据库,验证导入
SQL> conn report_usr/report_usr@192.168.1.244:1521/reportdb

SQL> show con_name;

CON_NAME
------------------------------
REPORTDB

--对像数目比对,其它的对象以及状态也需要比对,此处省略
SQL> select count(*) from user_objects;

  COUNT(*)
----------
        47


时间: 2024-11-01 11:49:50

使用DataPump迁移非CDB到CDB数据库的相关文章

sqliteopenhelper-android中SQLiteOpenHelper能管理非默认位置的数据库吗?

问题描述 android中SQLiteOpenHelper能管理非默认位置的数据库吗? 最近刚开始学习. 我们的数据库是程序初始化时候复制到SD卡上的(如果有的话).那么我想要用SQLiteOpenHelper来管理我SD卡上数据库的创建与版本可能吗? 比如我想要用getWritableDatabase()方法获取我SD卡上的数据库对象,该怎样做? 另外我很不明白的一点,如果我不用SQLiteOpenHelper,直接用SQLiteDatabase打开指定位置的数据库 然后操作表,这样可以吗?

Informix 11.7非操作系统用户访问数据库的机制使用

这种方法使系统可以通过映射系统中已存在的除 Informix 和 root 外的其他用户,来http://www.aliyun.com/zixun/aggregation/11872.html">访问数据库.这种机制将会减少为了使用数据库而创建的大量系统用户.减少 DBA 的工作量,增加系统的安全系数. 1. 概述 Informix11.7 提供了非操作系统用户访问数据库的机制.在 Informix 之前的版本,所有访问数据库的用户必须是一个拥有相应权限的系统用户.从 11.7 开始,In

Oracle 12c手工建库(非CDB及CDB创建)

对于Oracle数据库的创建,Oracle除了支持dbca(GUI界面),同时也支持手工方式创建数据库,即使用CREATE DATABASE语句创建数据库.使用此语句对使用DBCA的一个优点是可以从脚本内创建数据库.在Oracle 12c版本中支持12c之前的非CDB数据库以及CDB容器数据库.因此创建方式略有不同.本文同时描述2种不同数据库的手工创建方法. 一.12c手工创建非CDB数据库 步骤1:指定实例标识符(SID) ORACLE_SID的环境变量用于该实例从稍后可能创建并同时在同一主机

使用带dblink方式的datapump迁移Oracle 10g到11g

      对于从Oracle 10g下迁移数据库到Oracle 11g,除了使用RMAN方式之外,我们可以使用带dblink的datapump方式来实现基于逻辑上的迁移.其步骤也相对简单,而且不会产生中间过程生成的dump文件.本文即针对如何使用该方法给出了示例,供大家参考.   1.确保源数据库和目标数据库处于可用状态 --环境描述 --源库: mftst Oracle 10.2.0.3 + Enterprise Linux Enterprise Linux Server release 5

你印象中似知非知的NOSQL数据库

/**************************************************************/NoSQl产生原因:NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展.NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据

yii2.0数据库迁移教程【多个数据库同时同步数据】_php实例

本文讲述了yii2.0数据库迁移的方法.分享给大家供大家参考,具体如下: 创建迁移 使用如下命令来创建一个新的迁移: yii migrate/create <name> 必填参数 name 的作用是对新的迁移做一个简要的描述.例如,如果这个迁移是用来往多个数据库同一张表  ( 假设每个数据库都有news表 )   添加字段的,那么你可以使用addColumn_news (该名称自定义)这个名称并运行如下命令: yii migrate/create addColumn_news 注意:因为 na

yii2.0数据库迁移教程【多个数据库同时同步数据】

本文讲述了yii2.0数据库迁移的方法.分享给大家供大家参考,具体如下: 创建迁移 使用如下命令来创建一个新的迁移: yii migrate/create <name> 必填参数 name 的作用是对新的迁移做一个简要的描述.例如,如果这个迁移是用来往多个数据库同一张表  ( 假设每个数据库都有news表 )   添加字段的,那么你可以使用addColumn_news (该名称自定义)这个名称并运行如下命令: yii migrate/create addColumn_news 注意:因为 na

非关系性分布式数据库:HBase

HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力.HBase在列上实现了Bigtable 论文提到的压缩算法.内存操作和布隆过滤器.Base是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.

阿里云推出数据库迁移服务ADAM:Oracle数据库上云只需4步

为方便用户更安全快速地在云上开展数据库业务,阿里云在"2017云栖大会·上海峰会"上推出了业内首个覆盖数据全生命周期的应用与数据库迁移工具Advanced Database & Application Migration(ADAM),该服务使得企业能够将Oracle等数据库无缝迁移上云,在云上数据库MySQL.PPAS.AnalyticDB等开展业务. 传统数据库和云端数据库不兼容是阻碍企业上云的一大障碍,阿里云ADAM提供了一种绝佳的方案,全程仅需4步--迁移前,ADAM可对