使用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)
这里写图片描述

目录
相关文章
|
2天前
|
关系型数据库 Apache 流计算
手把手教你实现 OceanBase 数据到阿里云数据库 SelectDB 内核版 Apache Doris 的便捷迁移|实用指南
本文介绍了如何将数据从 OceanBase 迁移到阿里云数据库 SelectDB 内核版 Apache Doris。提供 3 种数据同步方法 1. 使用 DataX,下载 DataX 并编写配置文件,通过 OceanBaseReader 和 DorisWriter 进行数据迁移。 2. 利用 Apache Doris 的 Catalog功 能,将 OceanBase 表映射到 Doris 并插入数据。 3. 通过Flink CDC,设置 OceanBase 环境,配置 Flink 连接器,实现实时数据同步。
手把手教你实现 OceanBase 数据到阿里云数据库 SelectDB 内核版 Apache Doris 的便捷迁移|实用指南
|
2天前
|
关系型数据库 MySQL 数据库连接
gorm连接mysql数据库以及建表和自动迁移
gorm连接mysql数据库以及建表和自动迁移
40 0
|
2天前
|
关系型数据库 数据库 RDS
如果源数据库和目标数据库中都存在sequence的column且在迁移过程中没有新增的话
如果源数据库和目标数据库中都存在sequence的column且在迁移过程中没有新增的话
32 1
|
2天前
|
存储 Oracle 关系型数据库
oracle 数据库 迁移 mysql数据库
将 Oracle 数据库迁移到 MySQL 是一项复杂的任务,因为这两种数据库管理系统具有不同的架构、语法和功能。
24 0
|
2天前
|
SQL 关系型数据库 MySQL
数据库的迁移
数据库的迁移
|
2天前
|
关系型数据库 MySQL 测试技术
【专栏】PostgreSQL数据库向MySQL迁移的过程、挑战及策略
【4月更文挑战第29天】本文探讨了PostgreSQL数据库向MySQL迁移的过程、挑战及策略。迁移步骤包括评估规划、数据导出与转换、创建MySQL数据库、数据导入。挑战包括数据类型不匹配、函数和语法差异、数据完整性和性能问题。应对策略涉及数据类型映射、代码调整、数据校验和性能优化。迁移后需进行数据验证、性能测试和业务验证,确保顺利过渡。在数字化时代,掌握数据库迁移技能对技术人员至关重要。
|
2天前
|
SQL 自然语言处理 数据库连接
Django ORM的魔力:简化数据库操作与迁移
【4月更文挑战第15天】Django ORM是Django框架的关键部分,提供了一种高级的面向对象方式与数据库交互,简化了手动SQL操作。通过定义Python数据模型,开发者能轻松创建数据库表结构,使用ORM执行查询、添加、修改和删除数据。Django ORM还自动化处理数据库连接、事务和数据类型转换。当模型变化时,Django的迁移工具帮助管理数据库结构的更新。通过这种方式,Django ORM促进了高效、专注于业务逻辑的Web开发。
|
2天前
|
SQL 数据可视化 Apache
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
阿里云数据库 SelectDB 内核 Doris 的 SQL 方言转换工具, Doris SQL Convertor 致力于提供高效、稳定的 SQL 迁移解决方案,满足用户多样化的业务需求。兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移。
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
|
2天前
|
存储 关系型数据库 数据库
在进行RDS(Amazon Relational Database Service,亚马逊关系数据库服务)迁移时,兼容性审查
在进行RDS(Amazon Relational Database Service,亚马逊关系数据库服务)迁移时,兼容性审查
26 1
|
2天前
|
存储 安全 关系型数据库
云数据库和传统数据库之间的迁移和集成有哪些挑战?
云数据库和传统数据库之间的迁移和集成有哪些挑战?
37 0