Oracle数据库逻辑迁移之数据泵的注意事项
环境:数据迁移,版本 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数据库逻辑迁移之数据泵的注意事项的更多相关文章
- Navicat 连接 Oracle数据库并,导入数据泵(.dmp)
如有什么质疑的地方,希望可以和大家一起探讨,共同进步. 一.安装方法: 1.首先下载Navicat Premium和Oracle Database Oracle Database官网下载地址:http ...
- ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法
ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法 (2010-05-28 12:54:34) http://blog.sina.com.cn/s/blog_67d41beb0100ixn ...
- 说明Oracle数据库逻辑备份和物理备份的方式。
说明Oracle数据库逻辑备份和物理备份的方式. 解答:Oracle备份包括逻辑备份和物理备份. 1).逻辑备份 数据库的逻辑备份包含读一个数据库记录集和将记录集写入文件. a.输出(Export)输 ...
- [转帖]亚马逊彻底去掉 Oracle 数据库:迁移完成
亚马逊彻底去掉 Oracle 数据库:迁移完成 https://mp.weixin.qq.com/s/KFonq8efDZ5K6x4YzIVbbg 云头条的信息挺不错的.. 2019 年 10 月 1 ...
- 查询oracle数据库,返回的数据是乱码。 PL/SQL正常。
查询oracle数据库,返回的数据是乱码. PL/SQL正常. 解决方案如下:
- Oracle数据库表空间与数据文件的关系描述正确的是( )
Oracle数据库表空间与数据文件的关系描述正确的是( ) A.一个表空间只能对应一个数据文件 B.一个表空间可以对应多个数据文件 C.一个数据文件可以对应多个表空间 D.表空间与数据文件没任何对应关 ...
- Oracle数据库的监控及数据维护
目前Oracle数据库的管理,数据查询等都需要安装Oracle软件或安装Oracle Client等,远程访问都需要先登录到服务器等繁琐的操作.如果是开发团队,那么每个开发,测试,管理人员都要经历这个 ...
- 利用PL/SQL从Oracle数据库导出和导入数据
转自:https://www.jb51.net/article/109768.htm 本文实例为大家分享了使用PL/SQL从Oracle数据库导出和导入数据的方法,供大家参考,具体内容如下 1.导出数 ...
- 使用PL/SQL连接oracle数据库,并将数据进行导出备份和导入恢复
使用PL/SQL连接oracle数据库,并将数据进行导出备份和导入恢复 这种操作百度一搜一大片,今天整理以前做的项目时自己备份了一下数据库,试着将数据进行导出备份和导入恢复了一下:下面是操作过程: 1 ...
随机推荐
- OC第二天—封装
/.锁定头文件的方法 1. 打开终端 2. 进入到Xcode的目录, 命令: cd /Applications/Xcode.app 3. 把系统头文件修改为只读, 命令: sudo chown ...
- Linux 学习笔记_12_Windows与Linux文件共享服务_1.1_--Samba(下)Samba经典应用案例
五.[Samba应用案例二] 设置Samba共享目录/software,允许用户jack和mary可以通过Windows客户端访问,并具有读写权限. 1.创建目录/software,添加用户jack, ...
- 移动App设计的十条建议
原文链接: 10 Key Design Tips for Great Mobile Apps 原文日期: 2014年03月24日 翻译日期: 2014年04月01日 使用Android和iOS编写一个 ...
- iOS中获取本地通讯录联系人以及汉字首字母排序
iOS中获取手机通讯录中的联系人信息: /*** 加载本地联系人*/ - (void)loadLocalContacts { //新建一个通讯录类 ABAddressBookRef addressBo ...
- Android特效专辑(四)——APP主页框架TabHost绑定ViewPager的替换者TabLayout
Android特效专辑(四)--APP主页框架TabHost绑定ViewPager的替换者TabLayout 现在很多app都在追求简单明了,功能又要强大,不过我还是喜欢之前的app风格,就是TabH ...
- 抛开rails使用ActiveRecord连接数据库
今天是大年三十,明天就正式进入羊年鸟,给所有程序猿(媛)同人拜个年吧!祝大家身体健康,事业有成,财源广进哦! 话归正题,以前都是在rails中使用数据库,或者在rails的console中使用:我们如 ...
- 不容忽视的js面试题
1.全局变量和局部变量(变量提升和连等赋值问题) (function() { var a = b = 5; })(); console.log(a); console.log(b); 上面代码运行结果 ...
- 面试题之C# 内存管理与垃圾回收
面试题之C# 内存管理与垃圾回收 你说说C# 的内存管理是怎么样的 这句话我记了一个多礼拜了, 自从上次东北师大面试之后, 具体请看<随便扯扯东北师大的面试>. 国庆闲着没事, 就大概了解 ...
- 工作中常用Git指令操作
常用Git指令总结 前阵子有几天好不顺,可谓是喝水都呛着,更何况被Git给呛着了,还不轻,哈哈.所以打算总结一下自己在工作使用到Git相关的东西以及和大家探讨使用GIt的心得体会.于是,关于Git的的 ...
- 使用 Helm - 每天5分钟玩转 Docker 容器技术(163)
Helm 安装成功后,可执行 helm search 查看当前可安装的 chart. 这个列表很长,这里只截取了一部分.大家不禁会问,这些 chart 都是从哪里来的? 前面说过,Helm 可以像 a ...