【迁移】单实例环境使用数据泵(Data Pump)数据迁移

生产上遇到单实例跨平台迁移情况,以下为迁移过程,有不完善的地方欢迎提出改进

一、源库及目标库情况

源库目标库
IP10.0.15.XX10.0.16.XXX
系统版本windows 2008CentOS Linux release 7.6.1810 (Core)
数据库版本11.2.0.4.011.2.0.4.181016 (28204707)
内存GB6432
数据量GB30

二、迁移方案

源库未开启归档,采用数据泵方式迁移。

三、迁移流程

1、确定业务停机时间

系统管理员与业务确认可停机时间范围,数据库运维通过计算业务数据量,预估迁移耗时,两者结合综合评估后共同确定迁移时间

2、通知系统开发商停业务

数据库运维做好迁移前准备后,通知系统开发商停业务系统

3、关闭所有业务

系统开发商关闭所有业务系统

4、源库停数据库监听程序

数据库运维收到开发商停完业务的通知后,关闭数据库监听程序,拒绝新的连接请求

--查看监听状态
lsnrctl status
--关闭监听程序
lsnrctl stop
--检查监听状态
lsnrctl status

5、源库查询除非系统默认用户

目的是一会impdp导入时,按照查出的用户导入,not in()中为11g默认用户

select username from dba_users where username not in('SYS','SYSTEM','SCOTT','OUTLN','MGMT_VIEW','FLOWS_FILES','MDSYS','ORDSYS','EXFSYS','DBSNMP','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','ORACLE_OCM','XS$NULL','MDDATA','DIP','APEX_PUBLIC_USER','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR');

6、源库检查会话是否全部释放

数据库运维检查数据库会话是否全部释放掉,是否有未停干净的业务,并检查未提交的二阶段事物,如发现异常及时通知系统开发商处理

--查询status 为 INACTIVE的会话
select SID,SERIAL#,username,status from v$session where username in ('用户名1','用户名2');
--杀死进程
alter system kill session 'sid,serial#';

7、源库切换日志

数据库运维进行归档日志切换,将所有内存中的数据刷到磁盘,保障数据完整性。首先要查询日志组状态,将active及current状态的日志组,都要切换到inactive一次,建议多次切换。(见异常处理-2)

--查询avtive状态日志组
select * from v$log;
--切换日志组,直达avtive变为inactive,可多切换几次
alter system switch logfile;
--注:此处无需做手工CheckPoint

8、核对源库与目标库字符集是否一致

select userenv('language') from dual;

9、源库导出数据

查看dump目录

select * from dba_directories;

无dump目录创建

--创建目录
create or replace directory mydump as '/u01/temp';
--授权
grant read, write on directory mydump to 用户名;

检查dump目录存储空间,评估DMP文件大小

--方式一:通过block大小去估算,默认
expdp \'/ as sysdba\' ESTIMATE_ONLY=y schemas=用户名 ESTIMATE=blocks;
--方式二:通过统计信息去估算
expdp \'/ as sysdba\' ESTIMATE_ONLY=y schemas=用户名 ESTIMATE=statistics;

sys用户执行全库导出

--注意parallel参数需要考虑CPU核心数,另可使用filesize参数设置导出单个文件大小
expdp \"/ as sysdba\" directory=mydump dumpfile=YKT-FULL_%U.DMP parallel=4 logfile=YKT-FULL.log full=y;

注意:
1、11g有“延迟段创建”特性,参数:deferred_segment_creation。expdp不受影响,exp受影响。参考:https://www.cnblogs.com/ningvsban/p/3603897.html
2、执行导出导入过程中可以通过dba_datapump_jobs查看执行中的job
3、归档模式下导入会产生大量归档日志,要注意磁盘空间

10、使用FileZilla工具将备份传输到目标库dump目录下

dump目录相关见步骤9

11、删除目标库测试数据

由于之前导入过测试数据,需要正式迁移前删除,步骤5中已经查出所有非系统默认用户

--CASCADE参数会删除用户所有关联对象
DROP USER 用户名 CASCADE;

注意:impdp导入前需要先创建表空间,用户可以不用创建,已验证
参考:http://blog.itpub.net/31520497/viewspace-2156830/

--在源库查询,在目标库create tablespace
SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size 
FROM dba_tablespaces t, dba_data_files d 
WHERE t.tablespace_name = d.tablespace_name 
GROUP BY t.tablespace_name; 

12、执行导入

导入前将目标库监听关闭,分别按schema导入,全库导入由于元数据已在目标库存在会报对象已存在错误

impdp \"/ as sysdba\" directory=ENMO_DUMPDIR dumpfile=YKT-FULL_%U.DMP parallel=4 logfile=impdp_xk.log schemas=用户名;

13、校验数据

对比dba_objects表数量

select count(1) from dba_objects;

查询每个表行数,对比源库目标库

--查询数据库所有的表
select t.table_name,t.num_rows from all_tables t;
--查询当前用户表
select t.table_name,t.num_rows from user_tables t;

14、检查迁移后表空间容量

对空间不足的表空间需要reseize

alter database datafile 'XXXXXXX' resize 10G;

15、对比源库与目标库用户权限

通过脚本

16、目标库启动监听

17、通知系统开发商启业务

18、启动系统服务

19、测试业务

20、数据库运维收尾结束

数据库运维更新防火墙策略,通知主机添加堡垒机

四、异常处理

1、impdp报ORA-39082

导入过程中报错

ORA-39082: Object type PACKAGE_BODY:"XXXX"."PXG_TS_LEAING" created with compilation warnings

通过以下SQL查询到状态为INVALID,忽略

select owner,object_name,object_type,status from dba_objects where object_name='PXG_TS_LEAING';

2、切换日志,一直无法变为inactive状态

首先查询dba_jobs与dba_jobs_running表,查询job情况

select * from dba_jobs
select * from dba_jobs_running

尝试broken job,失败

exec DBMS_JOB.broken(49,TRUE);

最后通过设置job_queue_processes=0解决,日志可以成功切换inactive状态
参考:https://blog.csdn.net/leshami/article/details/8694772

show parameter job
alter system set job_queue_processes=0;

3、源库expdp报错

使用powershell导出报错,使用cmd窗口解决

五、总结

1、迁移前务必在测试环境完整测试
2、impdp导入日志一定要留存完整
3、源库expdp前要保证所有数据落盘
4、对于数据泵、JOB等内容深入学习
5、细心谨慎

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值