Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >避坑指南:通过expdp/impdp迁移数据的7个坑

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

作者头像
数据和云
发布于 2020-08-21 07:26:59
发布于 2020-08-21 07:26:59
4.4K00
代码可运行
举报
文章被收录于专栏:数据和云数据和云
运行总次数: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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
tcpdump命令
  tcpdump是Linux下强大的抓包工具,不仅可以分析数据包流向,还可以对数据包内容进行监听。通过分析数据包流向,可以了解一条连接是如何建立双向连接的。   tcpdump允许用户(一般是root)拦截和显示发送或收到过网络连接到该计算机的TCP/IP和其他数据包。
用户1432189
2018/09/05
1.3K0
tcpdump教程_TCPDUMP
因为客户端可以设置接收数据的超时时间,当客户端调用connect函数发送SYN时,由于客户端收到服务端的SYN/ACK的时间超过了客户端设置的等待时间,造成接收超时。当服务端的SYN/ACK到达时,客户端回应RST。
全栈程序员站长
2022/11/10
8490
使用 tcpdump 来了解 tcp 工作流程
由于我们接下来直接在 127.0.0.1 下测试,所以我们只需要监听此 ip 下的数据即可。
祥祥
2021/01/24
1.2K0
如果服务进程没启动,客户端发起 tcp 连接,会发生什么?
面试的时候被问到这么一个问题:如果服务进程没启动,客户端发起 tcp 连接,会发生什么?
祥祥
2021/11/05
1.2K0
TCP协议三次握手和四次挥手抓包分析
 TCP协议在双方建立连接的时候需要三次握手,首先客户端发送SYN标志为1的TCP数据包,然后服务器端收到之后,也会发送一个SYN标志置位,并且带有ack应答的数据包,最后客户端再发送给服务端一个应答,这样就建立起了通信。
用户4415180
2022/06/23
5900
TCP协议三次握手和四次挥手抓包分析
tcpip四次握手三次挥手_tcp四次挥手的全过程
After IP adds a header to the TCP segments the resulting IP datagrams are sent one-by-one to the “Ethernet layer”. Note that TCP/IP are part of operating system, while most functionality of Ethernet is implemented on the NIC(Network Interface Card).
全栈程序员站长
2022/11/15
3840
tcpip四次握手三次挥手_tcp四次挥手的全过程
对又一个epoll问题的全面分析
该方法最主要的目的是,当客户端建立tcp连接到服务端时,服务端立即调用shutdown方法,关闭其send方向。
KINGYT
2019/08/05
1.1K0
Kubernetes 疑难杂症排查分享:神秘的溢出与丢包
图片下载走的 k8s ingress,这个 ingress 路径对应后端 service 是一个代理静态图片文件的 nginx deployment,这个 deployment 只有一个副本,静态文件存储在 nfs 上,nginx 通过挂载 nfs 来读取静态文件来提供图片下载服务,所以调用链是:client --> k8s ingress --> nginx --> nfs。
imroc
2020/01/13
3.2K1
Linux TCP客户端出现CLOSE_WAIT后进入死循环
在前文中讲述了Linux服务端TCP的某个链路变成CLOSE_WAIT状态,然后由于客户端已经关闭了(发送了RST标志的报文),那么服务端如果继续向这个链路中写入数据的话就会收到SIGPIPE信号而终止,这篇文章主要通过客户端进入CLOSE_WAIT后由于收到服务端产生的RST标志报文进入死循环的情况。注:RST表示复位,用来关闭异常的连接。
typecodes
2024/03/29
6970
Linux TCP客户端出现CLOSE_WAIT后进入死循环
[Linux] 使用tcpdump查看上传文件过程中的tcp传输过程
客户端===>服务器[S] 标志位SYN 是1 , mss 65495 (每个包传输的最大数据部分是65495字节) seq序列号是87768135
唯一Chat
2020/11/27
5700
网络编程-从TCP连接的建立说起
网络编程几乎是每一门编程语言都会涉及的内容,虽然各种语言调用的方式可能不一样,但它们背后的原理支持都是一样的。因此本文将从TCP的连接的建立说起。在此之前,假设你已经对计算机网络有了最基本的认识。
编程珠玑
2019/07/12
7360
网络编程-从TCP连接的建立说起
TCP协议三次握手和四次挥手抓包分析
ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
胡齐
2019/10/31
1.6K0
tcpdump命令讲解
老高的建议:把流量比作水源,工具tcpdump就是一个过滤器,能够过滤出我们需要的纯净水,而水源有很多技术特征能够为我所用。
老高的技术博客
2022/12/28
7680
tcpdump命令讲解
TCP协议学习笔记、报文分析
TCP(Transmission Control Protocol传输控制协议)协议是基于IP协议,面向连接的、可靠的、基于字节流的传输层通信协议。
DannyHoo
2021/12/06
1.6K0
TCP协议学习笔记、报文分析
udp端口转发 Linux,Linux iptables 端口转发[通俗易懂]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说udp端口转发 Linux,Linux iptables 端口转发[通俗易懂],希望能够帮助大家进步!!!
Java架构师必看
2022/08/09
14.9K0
超级肝文-深入剖析客户端出现connect reset by peer报错相关的技术知识
关于http请求的报错:connect reset by peer,我相信大家应该都有所见过。今天我来剖析一下这个报错情况以及整理一下相关技术知识。
公众号-利志分享
2022/04/25
3.3K0
超级肝文-深入剖析客户端出现connect reset by peer报错相关的技术知识
linux主机网络流量抓包监控
tcpdump 是一个命令行应用程序,可让你捕获和分析通过系统的网络流量。它通常用于帮助解决网络问题以及安全工具。 tcpdump 是一个强大且多功能的工具,包括许多选项和过滤器,可用于各种情况。由于它是一个命令行工具,因此非常适合在没有 GUI 的远程服务器或设备中运行,以收集可以稍后分析的数据。它也可以在后台启动或使用 cron 等工具作为预定作业启动。 1. 在 Linux 上安装 Tcpdump 包含在多个 Linux 发行版中,因此你可能已经安装了它。使用以下命令检查你的系统上是否安装了 tcpd
入门笔记
2022/06/02
6K0
探索 tcpdump:强大的命令行网络分析工具
tcpdump 是一款广泛应用的命令行网络分析工具,它允许用户在各种网络环境下捕获和分析网络流量。本文将详细介绍 tcpdump 的基本概念、主要功能、应用场景、使用技巧以及局限性和替代方案。
陆业聪
2024/08/19
5140
探索 tcpdump:强大的命令行网络分析工具
一个有关tcp的非常有意思的问题
在tcp建立连接后,先主动关闭其服务端,之后再在客户端下对其socket进行写操作,正常思维都会认为,这个写操作肯定会返回错误吧?
KINGYT
2019/07/22
9100
网络编程学习笔记7-TCP使用的注意事项(附代码)
根据TCP 协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了
opencode
2022/12/26
3640
网络编程学习笔记7-TCP使用的注意事项(附代码)
推荐阅读
相关推荐
tcpdump命令
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验