首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >避坑指南:通过expdp/impdp迁移数据的7个坑

避坑指南:通过expdp/impdp迁移数据的7个坑

作者头像
数据和云
发布于 2020-08-21 07:26:59
发布于 2020-08-21 07:26:59
4.5K00
代码可运行
举报
文章被收录于专栏:数据和云数据和云
运行总次数:0
代码可运行

墨墨导读:expdp/impdp是一个非常简单的操作,但是简单的操作中往往蕴藏了很多原理性的东西,如果稍不注意,则可能会才到很多坑。

背景

客户更新生产库中的一些核心数据,所有核心数据更新的时间需在2天内完成。为了配合业务对数据更新时间进行演练和预估,客户要求将10T+核心数据导入到新的库中。全过程使用expdp导出,然后传输数据文件到目标端,最后用impdp导入。

这里总结整个过程中遇到的问题和经验,供大家参考,希望大家遇到同类情况可以规避这7种错误。

问题1 :在导出导入前未充分调研需要迁移的数据量

在之前做的一些迁移(不管是逻辑还是物理),如果不是空间非常紧张,我一般只会对数据文件或者表空间的大小进行调研,要求新环境的数据文件或表空间要大于源环境的数据文件即可。

但这次只是迁移部分数据,所以我在调研的时候,主要是通过dba_segments的方式来判断(已经确定这些表中没有LOB字段)。可是在选择segment_type的时候,我只筛选了其中相关的TABLE,而没有对其他的相关对象进行评估。因此,最开始评估出来的数据只有4T左右。而实际上相关对象还有索引等(索引是最大的),加起来总共有近10T的大小。而这也导致我在迁移的时候,在最后表空间很紧张。

那么这里我也大概写了一个对数据里量和相关索引量调研的查询SQL语句,供参考:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--table:
select owner,segment_name,tablespace_name,sum(bytes)/1024/1024/1024 gb from dba_segments where segment_name ='TABLE_NAME1' and owner='USER' group by owner,segment_name,tablespace_name;

--index:
select owner,segment_name,tablespace_name,sum(bytes)/1024/1024/1024 gb from dba_segments where segment_name in(select index_name from dba_indexes where table_name='TABLE_NAME1' and owner='USER') and owner='USER' group by rollup(owner,segment_name,tablespace_name);

问题2 :传输文件到源端

由于客户要求精确报告进度,所以要求每张表导出一个数据文件。所以总共导出了20多个数据文件。大小有1T+。

在传输文件过程时,本想偷懒用脚本在后台进行,就不需要人工看着。所以通过except方式写了个shell脚本,对这些文件进行后台scp传输,但是脚本跑起后,回到家才发现,每个文件只传输了几兆,任务就中断不再传输了。测试了好几遍,发现通过nohup进行scp的时候,传输一会儿任务自己就掉了(目前还不太清楚是为什么),所以最后就只能还是通过前台进行文件传输了。

问题3 :目标端表空间创建

在进行impdp的时候,如果我们在impdp语句中不加remap_tablespace参数时,我们就必须要创建和源端一样的表空间。如果导出导入的数据表中存在不一致的表空间,则会报错中断。而由于我前期没有充分调研,发现在导出的表中,其索引全部是在一个单独的表空间中,所以导入时由于索引表空间不存在而失败。

当然,如果没有强制要求(比如这里我们只是进行测试),懒得创建一模一样的表空间时,我们也可以在导入时加入remap_tablespace参数,将源端表空间remap到新建表空间。但是,这也必须知道我们的源端表空间有哪些,remap_tablespace参数中,必须要将源端到目标端表空间map关系写全。

问题4 :临时表空间

在导入数据索引的时候一定要注意临时表空间的大小。由于逻辑导入索引,实际执行的还是create index命令,所以一定会占用临时表空间,虽然期间也会释放,但是当遇到一个非常大的索引时候,则可能会引起临时表空间不足而导致导入任务卡住超时。

而由于本次迁移的数据索引量巨大,所以在导入前一定要扩展临时表空间,否则会出现问题。

问题5 :undo

在导入数据及索引的时候,其过程核心还是进行DDL、DML等操作,而这一定会产生事务,只要使用到事务,就一定会用到undo表空间。所以我们也需要时刻关注undo表空间的大小。不足的时候,可以临时调整undo_retention或undo的大小。

问题6 undo_retention大小问题

像上一条说的,导入会产生事务,所以我们有时要唔该undo_retention的大小,但是该参数大小如何调整呢?如果调整的太大,undo释放的慢,undo表空间很快就会满;如果调整的太小,undo释放的快了,但是导入可能会出现ORA-01555的错误。所以我们需要将undo_retention调整到适中大下。本次迁移,我将undo扩展为160G。undo_retention保留为1小时。在后面的导入过程中没有出现任何问题。

问题7 :如何提高效率

通过一条impdp语句导入时候,如果没有Lob字段,仅有数据,导入还是非常的快,比如500G的数据,大概20分钟就导入了。而创建索引的过程是非常慢的。所以为了提高速率,我们可以通过impdp将索引导为sql file,然后手动对索引的创建加入并行度(加了并行后,一定要在脚本里对创建完成的索引,将并行度改回1),并对脚本进行拆分,使用多个会话进行索引创建(这样,就更需要注意temp表空间了)从而提高索引创建速度。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据和云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Oracle逻辑迁移某业务用户及数据
那么在导出开始前,需要停止源数据库业务,直到成功导入到目标数据库时,应用修改新的连接方式完毕,才可以再次启动业务;
Alfred Zhao
2019/05/24
8650
相克军_Oracle体系_随堂笔记012-undo
undo表空间中undo段是自动生成的,oracle自动使用undo表空间的undo段。
Alfred Zhao
2019/05/24
4770
Oracle数据逻辑迁移综合实战篇
本次需求: 指定用户表结构迁移,所有表需要数据(因为此用户下的数据规模是10T的级别,所以想完全迁移不现实,最终确定为大表迁移部分数据,小表迁移全部数据)。 至于大表和小表的界定,研发侧不能提供,需要DBA自行评估划分。
Alfred Zhao
2019/05/24
8920
undo retention的思考(一)
最近有个网友咨询我一个问题,是关于undo_retention的,对于这个参数没有过多关注,只是知道需要设置undo_retention搭配使用undotablespace retention guarantee 通过邮件的操作记录可以看出这个网友还是很严谨的,每一个步骤都很详细的列了出来,这位网友在测试11.2.0.1.0的环境中发现undo retention没有像期望值那样来达到预期的效果。 自己在本地测试了多次,虽然结果还是不够理想,不过基本思路已经有了,继续努力。 我所在的环境是11.2.0.4
jeanron100
2018/03/16
1.4K0
EXPDP/IMPDP更改用户 表空间 表名
1、创建directory JZH@test>create directory test_dir as '/home/oracle/'; Directory created. 2、创建测试表 JZH@test>create table emp1 as select * from scott.emp; Table created. 3、查看表所在表空间 JZH@test>select owner,table_name,tablespace_name from dba_tables where table_name='EMP1'; OWNER TABLE_NAME TABLESPACE_NAME ------------------------------ ------------------------------ ------------------------------ JZH EMP1 USERS expdp jzh/jzh dumpfile=emp1.dmp directory=test_dir tables=emp1 logfile=emp1.log Export: Release 11.2.0.3.0 - Production on Sat Sep 27 15:09:23 2014 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Starting "JZH"."SYS_EXPORT_TABLE_01": jzh/******** dumpfile=emp1.dmp directory=test_dir tables=emp1 logfile=emp1.log Estimate in progress using BLOCKS method... Processing object type TABLE_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 64 KB Processing object type TABLE_EXPORT/TABLE/TABLE . . exported "JZH"."EMP1" 8.562 KB 14 rows Master table "JZH"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded ****************************************************************************** Dump file set for JZH.SYS_EXPORT_TABLE_01 is: /home/oracle/emp1.dmp Job "JZH"."SYS_EXPORT_TABLE_01" successfully completed at 15:09:40 4、查询emp1表 select empno,ename,sal,comm from emp1; EMPNO ENAME SAL COMM ---------- ---------- ---------- ---------- 7369 SMITH 1900 7499 ALLEN 1600 300 7521 WARD 1250 500 7566 JONES 2975 7654 MARTIN 1250 1400 7698 BLAKE 2850 7782 CLARK 2450 7788 SCOTT 3000
用户5640963
2019/07/26
2.1K0
【迁移】Oracle分区表及索引迁移表空间
近期计划使用XTTS方式迁移某库,在进行自包含检查时发现,该库有部分数据(分区表、索引)存放于SYSTEM表空间中,需要先将这部分数据移动到要迁移的表空间中。
甚至熊熊
2021/04/22
2.7K0
expdp和impdp的实践
导入导出我们经常用的是exp/imp命令,确实比较方便,但也有局限,例如需要导入导出的表空间名相同、schema名需要相同。
bisal
2019/01/29
8600
XTTS系列之一:U2L迁移解决方案之XTTS的使用
本系列的定位是对XTTS及相关技术进行深入的学习研究。作为本系列的开篇,本着实用性的原则,我先把一次实际生产环境U2L的迁移实战实施方案进行提炼简化,旨在能清楚说明该如何使用XTTS这种解决方案来进行U2L迁移,先达到可以跟着做下来的初级目标,如果有兴趣再去深入研究相关细节。
Alfred Zhao
2019/07/29
2.4K0
expdp|impdp及exp|imp指令介绍
expdp介绍 EXPDP命令行选项 1. ATTACH 该选项用于在客户会话与已存在导出作用之间建立关联.语法如下 ATTACH=[schema_name.]job_name Schema_name用于指定方案名,job_name用于指定导出作业名.注意,如果使用ATTACH选项,在命令行除了连接字符串和ATTACH选项外,不能指定任何其他选项,示例如下: Expdp scott/tiger ATTACH=scott.export_job 2. CONTENT 该选项用于指定要导出的内容.默认值为ALL
用户1257215
2018/01/30
2.7K0
expdp|impdp及exp|imp指令介绍
Oracle-数据泵expdp/impdp实操
因数据库版本为11.2(大于Oracle10g)初步确定使用数据泵的方式从198导出后导入197数据库
小小工匠
2021/08/16
1.3K0
oracle常用命令大全
一、Oracle数据库实例、用户、目录及session会话查看: 1、ORACLE SID查看设置 查看SID、用户名 $ env|grep SID 、select * from v$instance、select instance_name,host_name from v$instance; 查看数据库所有用户及用户状态: SQL> select usernames,account_status from dba_users; 设置SID $ export ORACLE_SID=hisvhfs 查看数据
企鹅号小编
2018/02/02
2.8K0
数据泵IMPDP 导入工具的使用
数据的导入导出时数据库经常处理的作业之一,Oracle 提供了IMP和IMPDP以及SQL*Loader等工具来完成数据的导入工作,其中IMP服务于早期的9i之前的版本,在10g及后续版本,Oracle 提供了数据泵高速导入工具,本文主要介绍IMPDP的使用方法,关于高速导出工具请参照:数据泵EXPDP 导出工具的使用。SQL*Loader请参照:SQL*Loader使用方法。
Leshami
2018/08/07
1.6K0
一线运维 DBA 五年经验常用 SQL 大全(二)
本文 SQL 及相关命令均是在运维工作中总结整理而成的,对于运维 DBA 来说可提高很大的工作效率,值得收藏。当然如果你全部能够背下来那就很牛逼了,如果不能,还是建议收藏下来慢慢看,每条 SQL 的使用频率都很高,肯定能够帮助到你。
JiekeXu之路
2021/03/15
9440
一线运维 DBA 五年经验常用 SQL 大全(二)
Oracle 回滚(ROLLBACK)和撤销(UNDO)
Oracle使用数据库中的回滚段来实现未提交数据或因系统故障导致实例崩溃时进行回滚操作
Leshami
2018/08/07
2.5K0
Oracle架构设计
Oracle数据库的表空间管理可以说是非常简单和基础的一项维护工作,但是越简单的事情就越要制定统一的规范,这样数据库的各项管理工作才会愈加的简单高效。
Alfred Zhao
2019/05/24
6660
笔记分享(1) oracle常用查询语句
以下的oracle常用查询笔记是我之前工作中用到过的. 其实常用的查询差不多就是这些.
大大刺猬
2021/04/01
1.4K0
Oracle-HWM(High Water Mark) 高水位解读
ORACLE在逻辑存储上分4个粒度 ,由大到小为: 表空间, 段, 区 和 块.
小小工匠
2021/08/16
3K0
ORA-01654错误
create index IDX_ANA_OFFICE on ANA (OFFICE_CITY, OFFICE_NO)   tablespace IDX   pctfree 10   initrans 2   maxtrans 255   storage   ( initial 128K     next 128K     minextents 1     maxextents unlimited     pctincrease 0   );
bisal
2019/01/29
1.2K0
如何删除回滚段状态为NEEDS RECOVERY的undo表空间
环境:RHEL 6.4 + Oracle 11.2.0.4 背景:备份恢复的测试库在一次不完全恢复后,没有来及做有效的全备,又一次数据库故障导致数据库无法正常open。 只能离线部分数据文件打开数据库,其中包含undo表空间数据文件。 适用场景:无有效备份,可以丢失数据,删除回滚段状态为NEEDS RECOVERY的undo表空间。
Alfred Zhao
2019/05/24
1.1K0
Oracle数据库迁移:异构传输表空间TTS HP-UX迁移至Redhat Linux 7.7
由于本次迁移为历史库迁移,且数据库未开启归档模式,所以选择较为便捷第二种方式进行迁移。
数据和云
2021/03/09
3.5K0
相关推荐
Oracle逻辑迁移某业务用户及数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档