环境:数据迁移,版本 11.2.0.4 -> 12.2.0.1

思考:

对于DBA而言,常用物理方式的迁移,物理迁移的优势不必多说,使用这种方式不必担心对象前后不一致的情况,而这往往也解决了不懂业务的DBA最头疼的问题。

对于开发而言,常用逻辑方式的迁移,比如传统的exp/imp或者现在的expdp/impdp,优势是简单方便,不需要了解过多的数据库运维知识。

实际上,在某些数据库升级的场景下,针对业务数据量不大,停机时间充裕的迁移专项来说,也可以考虑采用数据泵逻辑迁移的方式。

那么数据泵的导出导入究竟需要注意哪些事项呢?本文宗旨是通过构建一个简单的例子来说明。

1.构建测试用例

我的想法是,构建一个小的测试用例,但尽可能的包含更多类型的对象,从而模拟现实绝大部分的场景。
那么,仔细的思考下,我们至少需要创建:
- 1.1 用户的默认数据表空间、索引表空间、临时表空间
- 1.2 多个用户schema,拥有不同的角色权限
- 1.3 用户下建有表(普通堆表、索引组织表、全局临时表、分区表、簇表、外部表),表上的约束(主键、外键)
- 1.4 用户下建有索引(B-Tree索引、bitmap索引、函数索引、分区索引)
- 1.5 用户下有视图(普通视图、物化视图)
- 1.6 用户下有同义词(public的同义词,private的同义词)
- 1.7 用户下有dblink(public的dblink,private的dblink)
- 1.8 用户下有存储过程、函数、触发器、包、包体、序列

2.查询特殊对象

**2.1 查询public database link**
select dbms_metadata.get_ddl('DB_LINK',DB_LINK,'PUBLIC') FROM DBA_DB_LINKS where owner='PUBLIC';

SYS@jyzhao1 >select dbms_metadata.get_ddl('DB_LINK',DB_LINK,'PUBLIC') FROM DBA_DB_LINKS where owner='PUBLIC';

SYS@jyzhao1 >set long 999999
SYS@jyzhao1 >/ DBMS_METADATA.GET_DDL('DB_LINK',DB_LINK,'PUBLIC')
-------------------------------------------------------------------------------- CREATE PUBLIC DATABASE LINK "TO_JYZHAO_LD"
CONNECT TO "LUDAN" IDENTIFIED BY VALUES ':1'
USING 'JYZHAO' SYS@jyzhao1 >

2.2 查询public synonym

SYS@jyzhao1 >SELECT DBMS_METADATA.GET_DDL('SYNONYM',a.SYNONYM_NAME,a.owner) FROM DBA_SYNONYMS a where a.owner ='PUBLIC' and table_owner in ('JINGYU','LUDAN');

DBMS_METADATA.GET_DDL('SYNONYM',A.SYNONYM_NAME,A.OWNER)
-------------------------------------------------------------------------------- CREATE OR REPLACE PUBLIC SYNONYM "PUBIC_DEPT" FOR "JINGYU"."DEPT" CREATE OR REPLACE PUBLIC SYNONYM "PUBIC_EMP" FOR "JINGYU"."EMP" SYS@jyzhao1 >

2.3 查询外部表

SYS@jyzhao1 >select * from dba_external_tables;

OWNER                          TABLE_NAME                     TYP TYPE_NAME                      DEF DEFAULT_DIRECTORY_NAME         REJECT_LIMIT                             ACCESS_
------------------------------ ------------------------------ --- ------------------------------ --- ------------------------------ ---------------------------------------- -------
ACCESS_PARAMETERS PROPERTY
-------------------------------------------------------------------------------- ----------
SH SALES_TRANSACTIONS_EXT SYS ORACLE_LOADER SYS DATA_FILE_DIR 100 CLOB
RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII ALL
TERRITORY AMERICAN
BADFILE log_file_dir:'ext_1v3.bad'
LOGFILE log_file_dir:'ext_1v3.log'
FIELDS TERMINATED BY "|" OPTIONALLY ENCLOSED BY '^' LDRTRIM
( PROD_ID ,
CUST_ID ,
TIME_ID DATE(10) "YYYY-MM-DD",
CHANNEL_ID ,
PROMO_ID ,
QUANTITY_SOLD ,
AMOUNT_SOLD ,
UNIT_COST ,
UNIT_PRICE
) SYS@jyzhao1 >

3.测试迁移过程

主要测试逻辑迁移的可行性,为之后正式停机时的操作奠定基础。

--创建目录(两端):
create directory xdump as '/public/xdump';
create directory xdump as '/public/xdump'; --expdp导出:
nohup expdp system/oracle schemas=JINGYU,LUDAN directory=xdump dumpfile=db1_zs_SCHEMA_%U.dmp logfile=expdp_db1_zs_SCHEMA.log PARALLEL=4 cluster=n & --impdp导入:
nohup impdp system/oracle schemas=JINGYU,LUDAN directory=xdump REMAP_TABLESPACE=DBS_D_JINGYU:USERS,DBS_I_JINGYU:USERS,TEMP_JINGYU:TEMP table_exists_action=replace dumpfile=db1_zs_SCHEMA_%U.dmp logfile=impdp_db1_zs_SCHEMA.log parallel=4 cluster=n &

4.正式迁移过程

正式迁移需要做的事情:
- 4.1 锁定迁移的业务用户
- 4.2 杀掉业务会话
- 4.3 关闭job分别在两端
- 4.4 源端导出并传送
- 4.5 目标端准备并导入
- 4.6 创建public对象
- 4.7 解锁业务用户
- 4.8 目标端开启job
- 4.9 配合应用测试

--4.1 锁定迁移的业务用户
alter user JINGYU account lock;
alter user LUDAN account lock; --4.2 杀掉业务会话
select * from v$session where username in ('JINGYU','LUDAN');
select 'alter system kill session ''' || sid || ',' || SERIAL# || ''';' from v$session where username in ('JINGYU','LUDAN');
ps -ef|grep LOCAL=NO|grep -v grep|xargs kill -9 --4.3 关闭job分别在两端
show parameter job_queue_process
SYS >alter system set job_queue_processes=0; --4.4 源端导出并传送
nohup expdp system/oracle schemas=JINGYU,LUDAN directory=xdump dumpfile=db1_zs_SCHEMA_%U.dmp logfile=expdp_db1_zs_SCHEMA.log PARALLEL=4 cluster=n & - 4.6 创建public对象
根据查询的public对象,直接创建即可。 - 4.7 解锁业务用户
在迁移升级失败,遭遇不可抗力,最终导致环境确实需要回退时才可以。
alter user JINGYU account unlock;
alter user LUDAN account unlock; - 4.8 目标端开启job
SYS >alter system set job_queue_processes=1000; - 4.9 配合应用测试

延伸MOS文档:

  • Oracle Server - Export DataPump and Import DataPump FAQ (文档 ID 556636.1)

Oracle数据库逻辑迁移之数据泵的注意事项的更多相关文章

  1. Navicat 连接 Oracle数据库并,导入数据泵(.dmp)

    如有什么质疑的地方,希望可以和大家一起探讨,共同进步. 一.安装方法: 1.首先下载Navicat Premium和Oracle Database Oracle Database官网下载地址:http ...

  2. ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法

    ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法 (2010-05-28 12:54:34) http://blog.sina.com.cn/s/blog_67d41beb0100ixn ...

  3. 说明Oracle数据库逻辑备份和物理备份的方式。

    说明Oracle数据库逻辑备份和物理备份的方式. 解答:Oracle备份包括逻辑备份和物理备份. 1).逻辑备份 数据库的逻辑备份包含读一个数据库记录集和将记录集写入文件. a.输出(Export)输 ...

  4. [转帖]亚马逊彻底去掉 Oracle 数据库:迁移完成

    亚马逊彻底去掉 Oracle 数据库:迁移完成 https://mp.weixin.qq.com/s/KFonq8efDZ5K6x4YzIVbbg 云头条的信息挺不错的.. 2019 年 10 月 1 ...

  5. 查询oracle数据库,返回的数据是乱码。 PL/SQL正常。

    查询oracle数据库,返回的数据是乱码. PL/SQL正常. 解决方案如下:

  6. Oracle数据库表空间与数据文件的关系描述正确的是( )

    Oracle数据库表空间与数据文件的关系描述正确的是( ) A.一个表空间只能对应一个数据文件 B.一个表空间可以对应多个数据文件 C.一个数据文件可以对应多个表空间 D.表空间与数据文件没任何对应关 ...

  7. Oracle数据库的监控及数据维护

    目前Oracle数据库的管理,数据查询等都需要安装Oracle软件或安装Oracle Client等,远程访问都需要先登录到服务器等繁琐的操作.如果是开发团队,那么每个开发,测试,管理人员都要经历这个 ...

  8. 利用PL/SQL从Oracle数据库导出和导入数据

    转自:https://www.jb51.net/article/109768.htm 本文实例为大家分享了使用PL/SQL从Oracle数据库导出和导入数据的方法,供大家参考,具体内容如下 1.导出数 ...

  9. 使用PL/SQL连接oracle数据库,并将数据进行导出备份和导入恢复

    使用PL/SQL连接oracle数据库,并将数据进行导出备份和导入恢复 这种操作百度一搜一大片,今天整理以前做的项目时自己备份了一下数据库,试着将数据进行导出备份和导入恢复了一下:下面是操作过程: 1 ...

随机推荐

  1. thinkpad x260在ubuntu 14.04lts wifi驱动安装 ( ubuntu iwlwifi驱动 都可行 )

    实验室要新购笔记本x260,用于ROS调试,装上ubuntu-ros后,发现wifi不支持. 查阅大量资料,如下: http://www.ubuntu.com/certification/hardwa ...

  2. python的read() 、readline()、readlines()、xreadlines()

    先来一个小例子: import sys dir= os.path.dirname(os.path.abspath(__file__)) file_path='%s/test.txt'  % dir f ...

  3. python发送post请求

    urllib2.urlopen() urlib2是使用各种协议完成打开url的一个扩展包.最简单的使用方式是调用urlopen方法,比如 def urlopen(url, data=None, tim ...

  4. css3学习之旅-css的基本语法(1)

    后面就将要介绍css的全面语法: 1.css介绍 2.css基本语法 3.css高级语法 4.css派生选择器 5.css的id选择器 6.css类选择器 7.css属性选择器 !!!!!css介绍 ...

  5. 【翻译】对于Ext JS 5,你准备好了吗?

    原文:Are You Ready for Ext JS 5? Ext JS 5:准备升级 对于Ext JS 5加入Sencha的大家庭,我们感到非常高兴!作为一个主要版本,在Ext JS 5引入了一堆 ...

  6. SpriteBuilder中的粒子系统属性

    一个粒子发射器可以有2种模式,放射状和重力的(radial or gravity) 放射状模式允许你去使用发射器创建粒子旋涡状环绕在指定位置的效果. 当启用重力效果,你可以使得粒子在任何方向任意飞行, ...

  7. TCP的核心系列 — 重传队列的更新和时延的采样(二)

    在tcp_clean_rtx_queue()中,并非对每个ACK都进行时延采样.是否进行时延采样,跟这个ACK是否为 重复的ACK.这个ACK是否确认了重传包,以及是否使用时间戳选项都有关系. 本文主 ...

  8. Hibernate学习大全

    第1课 课程内容. 6 第2课Hibernate UML图. 6 第3课 风格. 7 第4课 资源. 7 第5课 环境准备. 7 第6课 第一个示例HibernateHelloWorld 7 第7课 ...

  9. mybatis源码之MapperMethod

    /** * @author Clinton Begin * @author Eduardo Macarron * @author Lasse Voss */ //这个类是整个代理机制的核心类,对Sql ...

  10. C++实现双链表

    #include <iostream> using namespace std ; #define NR(x) (sizeof(x)/sizeof(x[0])) class node { ...