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

简介: Oralce 12c中的多租户数据库的启用,使得原来分布于多台服务器或者一台服务器上运行N多实例的情形需要进行整合。

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

DBA牛鹏社(SQL/NOSQL/LINUX)
这里写图片描述

目录
相关文章
|
3月前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!点击阅读原文完成实验就可获得一本日历哦~
|
3月前
|
关系型数据库 MySQL 数据库
|
3月前
|
关系型数据库 MySQL 数据库
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
|
16天前
|
算法 大数据 数据库
云计算与大数据平台的数据库迁移与同步
本文详细介绍了云计算与大数据平台的数据库迁移与同步的核心概念、算法原理、具体操作步骤、数学模型公式、代码实例及未来发展趋势与挑战。涵盖全量与增量迁移、一致性与异步复制等内容,旨在帮助读者全面了解并应对相关技术挑战。
28 3
|
2月前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
344 15
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
2月前
|
SQL Java 数据库连接
数据库迁移不再难:Flyway 与 Liquibase 大比拼,哪个才是你的真命天子?
【9月更文挑战第3天】数据库迁移在软件开发中至关重要,尤其在使用 ORM 框架如 Hibernate 时。为确保部署时能顺利应用最新的数据库变更,开发者常使用自动化工具。Flyway 和 Liquibase 是当前流行的两种选择,均能有效管理数据库版本控制。Flyway 采用 SQL 脚本表示变更,简单易用;Liquibase 支持多种脚本格式,功能更强大,适合复杂项目。本文将对比这两种工具的特点,并通过示例展示各自的优缺点,帮助开发者根据项目需求做出合适的选择。
411 1
|
3月前
|
JSON NoSQL Ubuntu
在Ubuntu 14.04上如何备份、恢复和迁移MongoDB数据库
在Ubuntu 14.04上如何备份、恢复和迁移MongoDB数据库
88 1
|
3月前
|
API Java 开发框架
【从零到精通】如何用Play Framework快速构建RESTful API?看完这篇你就懂了!
【8月更文挑战第31天】《Play Framework快速入门:从零开始构建RESTful API》介绍了如何使用高性能Web开发框架Play Framework构建简单的RESTful API。从环境搭建到项目创建,再到实现用户列表的增删查功能,本文档详细指导每个步骤,并解释核心概念。适合初学者快速上手。首先确保已安装JDK和sbt,然后通过sbt创建Play项目,接着定义控制器、模型及路由,最后运行应用进行测试。通过本教程,你将掌握构建RESTful API的基础知识,为进一步学习Play Framework打下坚实基础。
48 0
|
3月前
|
SQL Oracle 关系型数据库
Entity Framework Core 实现多数据库支持超厉害!配置连接、迁移与事务,开启多元数据库之旅!
【8月更文挑战第31天】在现代软件开发中,为了满足不同业务需求及环境要求,常需支持多个数据库系统。Entity Framework Core(EF Core)作为一款强大的对象关系映射(ORM)框架,通过数据库提供程序与多种数据库如SQL Server、MySQL、PostgreSQL、Oracle等交互。开发者可通过安装相应NuGet包并配置`DbContextOptionsBuilder`来指定不同数据库连接,从而实现多数据库支持。
168 0
|
4月前
|
关系型数据库 MySQL 数据库
下一篇
无影云桌面