给oracle逻辑导出clob大字段、大数据量表提提速

文章目录

  • 前言
  • 一、大表数据
    • 附:查询大表
  • 二、解题思路
    • 1.导出排除大表的数据
    • 2.rowid切片导出大表数据
      • Linux代码如下(示例):
      • Windows代码如下(示例):
      • 手工执行代码如下(示例):
    • 3.rowid切片导入大表数据
      • 导入前准备
      • linux代码如下(示例):
      • windows代码如下(示例):
  • 三、导出时业务卡顿如何停止


前言

Oracle在做数据迁移、还原测试库以及其他需要导出、导入数据的需求下,我们常用到数据泵来进行数据的转移操作,但往往很多事后我们要操作的库数据量都非常大,且数据库中clob字段非常多,就给我们导出带来了一些问题,导出慢或者卡在那里很久不动等问题;

有小伙伴可能会说你开并行不就行了吗?事实上当你数据库中大对象数据量占用较大时候,你会发现开并行没有任何用,那么怎么解决这个问题呢?那么思路是先排除大对象的表;然后大表再通过rowid切片多个进程导出导入。


提示:以下是本篇文章正文内容,下面案例可供参考

一、大表数据

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
截图中可以看到,此表占用446G数据量,压缩完后大小为51G,开了2个进程并行,但没有效果,最终执行了10小时,时间是非常久的。

附:查询大表

--查看大对象,先排除导出,然后再单独导出
SELECT owner,tablespace_name,case SEGMENT_typewhen 'LOBSEGMENT' then(select table_name || '.' || column_namefrom dba_lobs twhere t.segment_name = s.segment_name)elseSEGMENT_NAMEend as SEGMENT_NAME,BYTES / 1024 / 1024 MB,BYTES / 1024 / 1024 / 1024 GBFROM DBA_SEGMENTS sOrder By 4 Desc,3 asc;

二、解题思路

1.导出排除大表的数据

命令参考:

expdp system/oracle@ip:1521/sidname directory=datapump_dir parallel=8 cluster=N dumpfile=exp_full0824_%U.dmp logfile=exp_full_20230824.log schemas=usrname COMPRESSION=ALL exclude=statistics exclude=TABLE:\"in\(\'table_name\'\)\"

在这里插入图片描述
这里可以看到排除大表后整体导出时间下降到了17分钟!!!

2.rowid切片导出大表数据

rowid切片导出数据是从0开始,我们需要知道rowid的分配来控制最终想执行的并行数。

Linux代码如下(示例):

#!/bin/bash
chunk=9
for ((i=0;i<=8;i++));
do
expdp system/oracle TABLES=tablename QUERY=tablename:\"where mod\(dbms_rowid.rowid_block_number\(rowid\)\, ${chunk}\) = ${i}\" directory=DMP dumpfile=TX_${i}.DMP logfile=TX_${i}.log &
echo $i
sleep 10
done 

Windows代码如下(示例):

@echo off
#这里可以带上IP地址、端口、sid
set connStr=system/oracle@ip:1521/sid_name
#这里指的并行数
set chunk=10
#sid_name
set oracle_sid=orcl
#oracle_home路径注意bin后边的‘\’
set oracle_home_path=d:\oracle\product\10.2.0\db_1\bin\rem 格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]
#10个并行,0~9(开始标号、每次增加量、结束标号)
for /l %%a in (0,1,9) do (
start /b %oracle_home_path%expdp %connStr% TABLES=table_name QUERY=table_name:\"where mod\(dbms_rowid.rowid_block_number\(rowid\)\,%chunk%\) = %%a\" directory=expdpdump dumpfile=TX_%%a.DMP logfile=TX_%%a.log
timeout 10 >nul 2>nul
)

手工执行代码如下(示例):

#如下,打开三个窗口分别粘贴执行,如果要开更多的进程,需要更改3后后面的0~2
SQL> create or replace directory dmp as 'D:\dump\';
SQL> grant read,write on directory dmp to public;expdp system/oracle tables=table_name  QUERY=table_name:\"where mod\(dbms_rowid.rowid_block_number\(rowid\)\,3\) = 0\" directory=DMP dumpfile=xxxx_0.dmp logfile=xxxx_0.log
expdp system/oracle tables=table_name  QUERY=table_name:\"where mod\(dbms_rowid.rowid_block_number\(rowid\)\,3\) = 1\" directory=DMP dumpfile=xxxx_1.dmp logfile=xxxx_1.log
expdp system/oracle tables=table_name  QUERY=table_name:\"where mod\(dbms_rowid.rowid_block_number\(rowid\)\,3\) = 2\" directory=DMP dumpfile=xxxx_2.dmp logfile=xxxx_2.log
)

在这里插入图片描述

在这里插入图片描述
以上我拿一张14G数据表进行测试,3个并行度执行实际4分半,实际测试中切片导出数据也可以加压缩参数。
在这里插入图片描述
对比此张图可以看到我的切片测试已将导出实际提升了2倍左右,如果并行度更高的话,那么我们的整体时间会成倍降低。

3.rowid切片导入大表数据

导入前准备

在导入大表数据之前需要做的是:

#确保大表所在的表空间存在
select table_name,tablespace from user_tables where table_name='TABLE_NAME';
#创建用户以及表结构,建议使用plsql查询
SELECT DBMS_METADATA.GET_DDL('TABLE','TABLE_NAME') from DUAL;

linux代码如下(示例):

#!/bin/bash
for ((i=0;i<=8;i++));
do
#echo dumpfile=TX_${i}.DMP
impdp \"/ as sysdba\" directory=impdpdump dumpfile=TX_${i}.DMP logfile=impdp_TX_${i}.log DATA_OPTIONS=DISABLE_APPEND_HINT TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y CONTENT=DATA_ONLY &
sleep 10
done

windows代码如下(示例):

@echo offset connStr=system/oracle
set oracle_sid=orcl
set oracle_home_path=d:\oracle\product\10.2.0\db_1\bin\rem 格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]for /l %%a in (0,1,9) do (
rem 11g upper >start /b %oracle_home_path%impdp %connStr% directory=impdpdump dumpfile=TX_%%a.DMP logfile=imp_TX_%%a.log DATA_OPTIONS=DISABLE_APPEND_HINT TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y CONTENT=DATA_ONLYstart /b %oracle_home_path%impdp %connStr% directory=impdpdump dumpfile=TX_%%a.DMP logfile=imp_TX_%%a.log CONTENT=DATA_ONLY
timeout 10 >nul 2>nul
)

在这里插入图片描述
测试表导入成功,和切片导出的时间基本相同。

三、导出时业务卡顿如何停止

select s.inst_id,to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') "DATE", s.program, s.sid, 'orakill orcl2 '||spid,'kill -9 '||spid,  s.status, s.username, d.job_name, p.spid, s.serial#, p.pid ,'ALTER SYSTEM KILL SESSION '||''''||s.SID||','||s.SERIAL#||',@'||s.inst_id||''''||' IMMEDIATE;' killsefrom gv$session s, gv$process p, dba_datapump_sessions d  where p.addr=s.paddr and s.saddr=d.saddr and s.inst_id=p.inst_id and s.inst_id=d.inst_id; select 'orakill orcl '||spid ,'ALTER SYSTEM KILL SESSION '||''''||t1.SID||','||t1.SERIAL#||''''||' IMMEDIATE;' killse
--,'kill -9 '||spidfrom sys.gV_$PROCESS t,gv$session t1,dba_datapump_sessions d where t.addr=t1.paddr and t1.saddr=d.saddrand t1.Type='USER' and t1.username is not null;select 'drop table ' || owner_name || '.' || job_name || ' purge;'  from dba_datapump_jobs where state = 'NOT RUNNING' ;

参考文献:https://mp.weixin.qq.com/s/pKNe2EzpB_PM0itpa4jrdA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/62803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++11——右值引用和移动语义

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;C11——右值引用 ☂️<3>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<4>前言&#xff1a;右值引用&#xff0c;是C11更新的一个非常有价值的语法&am…

【网络安全防护】上海道宁与Bitdefender帮助您构建弹性网络并降低安全运营成本

在网络的世界中 风险变得更加常见与复杂 企业需要从网络安全转向网络弹性 复杂的网络攻击已非常普遍 在面临攻击时 企业如何保持业务连续性&#xff1f; Bitdefender GravityZone将 风险分析、安全加固、威胁预防 检测和响应功能相结合 帮助您构建弹性网络 并降低安全…

LinkedHashMap实现LRU缓存cache机制,Kotlin

LinkedHashMap实现LRU缓存cache机制&#xff0c;Kotlin LinkedHashMap的accessOrdertrue后&#xff0c;访问LinkedHashMap里面存储的元素&#xff0c;LinkedHashMap就会把该元素移动到最尾部。利用这一点&#xff0c;可以设置一个缓存的上限值&#xff0c;当存入的缓存数理超过…

手摸手2-springboot编写基础的增删改查

目录 手摸手2-springboot编写基础的增删改查创建controller层添加service层接口service层实现添加mapper层mapper层对应的sql添加扫描注解,对应sql文件的目录 手摸手2-springboot编写基础的增删改查 创建controller层 实现 test 表中的添加、修改、删除及列表查询接口&#x…

Unity——工程与资源

本文将详细介绍Unity工程的文件夹结构&#xff0c;以及动态加载资源的技术要点 一、Unity项目的文件夹结构 1.工程文件夹 在新建工程时&#xff0c;Unity会创建所有必要的文件夹。第一级文件夹有Assets,Library,Logs,Packages,ProjectSettings。 Assets&#xff1a;最主要的文…

stable diffusion实践操作-提示词插件安装与使用

本文专门开一节写提示词相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 正文 1、提示词插件安装 1.1、 安装 1.2 加载【应用更改并重载前端】 1.3 界面展示 1.3.-4 使用 里面有个收藏列表&#xff0c;可以收藏以前的所有提示…

CSC2121A

半桥架构的栅极驱动电路CSC2121A CSC2121系列是一款高性价比的半桥架构的栅极驱动专用电路&#xff0c;用于大功率MOS管、IGBT管栅极驱动。IC内部集成了逻辑信号处理电路、死区时间控制电路、欠压保护电路、电平位移电路、脉冲滤波电路及输出驱动电路&#xff0c;专用于无刷电…

10 行代码能做什么?

10 行代码能做什么&#xff1f; 写一串 SQL Join&#xff0c;统计全渠道市场营销的 ROI 用 JS 画个饼图&#xff0c;展示最有效的广告投放策略 用 Python 写段算法&#xff0c;分析销量骤降的原因是什么 …… 数据出错了&#xff0c;写个对数脚本 -_-|| AI 时代&#xff0c;…

Zookeeper的使用

一、Zookeeper简介 分布式协调框架&#xff0c;小型的树形结构数据共享储存系统。 zookeeper的应用场景 集群管理 注册中心 配置中心 发布者将数据发布到ZooKeeper一系列节点上面&#xff0c;订阅者进行数据订阅&#xff0c;当数据有变化时&#xff0c;可及时得到数据的变…

指针(个人学习笔记黑马学习)

1、指针的定义和使用 #include <iostream> using namespace std;int main() {int a 10;int* p;p &a;cout << "a的地址为&#xff1a;" << &a << endl;cout << "a的地址为&#xff1a;" << p << endl;…

promethues监控postgres,emqx,redis

一、监控postgres 1、安装监控 docker pull wrouesnel/postgres_exporter2、执行 docker run -d -p 9187:9187 --name postgres_exporter --nethost -d -e DATA_SOURCE_NAME"postgresql://postgres:123456192.168.12.116:5432/rcc-manage?sslmodedisable" wroues…

centos 7的超详细安装教程

打开虚拟机&#xff0c;创建一个新电脑 我们选择经典&#xff0c;然后选择下一步 我们选择稍后安装&#xff0c;我们在后面进行改设备 因为centos系统是linux系统的一个版本&#xff0c;所有我们选择linux&#xff0c;版本选择centos 7 64位&#xff0c;然后就是点击下一步 这一…

四、MySQL(表操作)如何添加字段?修改表?删除字段?修改表名?删除表?格式化某张表?

1、添加字段 &#xff08;1&#xff09;基础语法&#xff1a; alter table 表名 add 字段名 类型名(长度) [comment注释] [约束]; &#xff08;2&#xff09;示例&#xff1a;添加nickname这个字段 2、修改表 修改表中某个字段的【数据类型】/【数据类型&字段名】 &…

Microsoft Edge 主页启动diy以及常用的扩展、收藏夹的网站

一、Microsoft Edge 主页启动diy 二、常用的扩展 1、去广告&#xff1a;uBlock Origin 2、翻译&#xff1a; 页面翻译&#xff1a;右键就有了&#xff0c;已经内置了划词翻译 3、超级复制 三、收藏夹的网站

Nacos 配置管理及相关使用

文章目录 Nacos 配置管理一、统一配置管理1、在Nacos 中添加配置文件2、从微服务拉取配置3、配置实现步骤&#xff08;1&#xff09;引入 nacos-config 依赖&#xff08;2&#xff09;添加 bootstrap.yml&#xff08;4&#xff09;在 nacos 中添加配置 二、配置热更新1、配置热…

嵌入式部署机器学习模型---TinyML

我们目前生活在一个被机器学习模型包围的世界。在一天中&#xff0c;您使用这些模型的次数比您意识到的要多。诸如浏览社交媒体、拍照、查看天气等日常任务都依赖于机器学习模型。您甚至可能会看到此博客&#xff0c;因为机器学习模型向您推荐了此博客。 我们都知道训练这些模型…

Linux工具

一、yum yum可以看作一个客户端&#xff08;应用商店&#xff09;、应用程序&#xff0c;它如何知道去哪里下载软件&#xff1f; yum也是一个指令/程序&#xff0c;可以找到它的安装路径。 在list中可以看到yum能安装的所有软件&#xff0c;通过管道找到想要的&#xff0c;yum …

时序预测 | MATLAB实现Attention-GRU时间序列预测(注意力机制融合门控循环单元,TPA-GRU)

时序预测 | MATLAB实现Attention-GRU时间序列预测----注意力机制融合门控循环单元&#xff0c;即TPA-GRU&#xff0c;时间注意力机制结合门控循环单元 目录 时序预测 | MATLAB实现Attention-GRU时间序列预测----注意力机制融合门控循环单元&#xff0c;即TPA-GRU&#xff0c;时…

nvm安装后,安装并切换版本,node报错

1、下载 下载地址 https://github.com/coreybutler/nvm-windows/releases 这个版本是 v1.1.11&#xff0c;不喜欢的话&#xff0c;自己选版本 下载setup.exe&#xff0c;安装 2、安装 安装时候 安装路径可以自选&#xff0c;但是涉及到指向的路径&#xff0c;最好让它自己选&…

深入探索C语言自定义类型:打造你的编程世界

一、什么是自定义类型 C语言提供了丰富的内置类型&#xff0c;常见的有int, char, float, double, 以及各种指针。 除此之外&#xff0c;我们还能自己创建一些类型&#xff0c;这些类型称为自定义类型&#xff0c;如数组&#xff0c;结构体&#xff0c;枚举类型和联合体类型。 …