海量数据迁移之数据抽取流程

在之前的一些博文中花了大篇幅介绍了采用外部表抽取的一些细节,可能细节到了,基本原理的内容还希望再补充补充。
采用外部表抽取数据的流程图如下:

大体标注了一下抽取的基本结构,我们会尽量保证不去碰原本的数据源,会创建两个临时的用户,一个是只读用户,这个用户上只有同义词,只具有数据源中的select权限。这就对应上面红色标注的1,而另外一个用户是外部表用户,所有通过创建外部表都会在这个用户下进行,生成了dump文件之后,我们可以随时删除外部表,这个时候为了保证相关的drop操作不会牵扯到数据源,外部表用户会继承只读用户中的select权限。这就对应红色标注的2.
当开始抽取数据的时候,会去查找是否有权限读取数据,会找到只读用户,最终能够读取数据源的数据,这就对应红色标注的3,4
当满足了基本的条件,就开始生成外部表的dump,可以为一个表生成多个dump,而且这个过程是并行的,这就对应红色标注的5

对于步骤5,是抽取的关键,基本的原理可以参考下面的伪代码,黄色标注的重点部分。

CREATE TABLE MO1_MEMO_EXT

    ORGANIZATION EXTERNAL

   (

     TYPE ORACLE_DATAPUMP

     DEFAULT DIRECTORY xxxxx

     LOCATION (

    ‘xxxx1.dmp’,‘xxxx2.dmp’)

    )

    parallel xx   as

    SELECT  /*+ parallel(t xx) */

  *

    FROM 只读用户.MO1_MEMO;

我们使用了外部表的oracle_datapump引擎,可以在指定的目录下生成多个dump文件,我们可以指定并行度,指定多个dump的名称等等。这些都需要通过编程来控制和管理这些复杂的部分。

时间: 2024-10-15 15:53:23

海量数据迁移之数据抽取流程的相关文章

海量数据迁移之数据加载流程

在之前的博文中分享了关于数据抽取流程的一些思路,整体来说,数据的抽取是辅助,数据的加载是关键.加载的过程中每一步需要格外关注,稍有偏差就可能造成数据的损坏或者丢失. 为了更加清晰的说明通过外部表来实现数据加载的流程,特意画了如下的流程图. 在这个图中,数据的抽取是左边的部分,可以根据需要生成对应的外部表dump文件. 这个时候可以在目标环境中也创建只读用户,外部表用户,只读用户中只存放同义词,外部表用户中存放的是需要加载的外部表,整个外部表的加载过程不会消耗额外的物理空间,而且加载啊速度极快.

海量数据迁移之外部表并行抽取

在10g开始的新特性中,外部表是一个不容忽视的好工具.对于大型项目中海量数据使用sqlloader是一种全新的方式,不过很明显,sqlloader的可扩展性更强,但是基于oracle平台的数据迁移来说,外部表的性能也不错.对于数据迁移来说也是一个很好的方案. 使用外部表来做数据迁移,可以"动态"加载数据,能够很方便的从数据库中加载数据,对于数据校验来说就显得很有优势了,而对于sqlloader来说,可能得等到数据加载的时候才知道是不是有问题,如果对于数据的准确性要求极高,可以使用外部表

海量数据迁移之冲突数据筛查

对于数据迁移来说,无论准备工作准备的多么充分,在测试和正式生产环境中,心里还是会对冲突的数据有一些疑虑,心里感觉没底,因为生产的数据也是在不断变化的,要迁移的数据也在做相应的改动,在这样的环境中,其实数据抽取的工作还是顾虑比较少的,只要侧重考虑性能的提升,而在于数据加载的过程中,如果出现主键冲突的字段,不仅会严重拖慢加载的速度,关键对于这些数据的处理,让开发和dba都很头疼,开发需要dba来提供详尽的信息,dba则需要多个team之间进行协调.可能会有一些紧急的数据更改任务,数据的稽核等等..

海量数据迁移之一个误操作的问题总结

在生产环境中的数据迁移还是很惊心动魄的,毕竟生产的数据不容许有任何潜在的问题,很小的问题也可能导致业务的终端,这个时候dba的角色是很重要的,如果dba犯了一个很细小的问题,在海量数据迁移中可能会导致灾难性的结果,所以今天和大家讨论一下关于由vi误操作导致的问题及总结. 结合今天早上的例子来说明. 目前生产环境已经有大量的用户数据了,需要从老系统迁移一批用户数据过来,一切都在安装好计划进行准备和操作.我是采用了外部表的方式,把一个很大的表分为了几十上百个外部表,采用insert方式加载的. 数据

SQL Story摘录(八)————数据抽取

数据 数据抽取 理论上的关系型数据库,数据是以关系的形式存在.通常我们都可以把它们视为一种集合.这样,数据一般是以无序的形式存在的.这种做法的好处自不用多加讨论了,不过我们也得承认,有时这样也会带给我们一些麻烦.我最近就遇到这么一件. 我在网上遇上我的一个老同学,他提出了这样一个问题.有一个表(假设就叫myTable),表中有三个整型字段(假设就叫A11,A12,A13),其上有一个唯一键约束.现在他想要在这个表的数据中取一些样品.他希望从中A13的各个取值中,各取一条记录.然后我问他,对A11

数据抽取、清洗与转换 BI项目中ETL设计

ETL是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决策提供分析的依据 ETL是BI项目最重要的一个环节,通常情况下ETL会花掉整个项目的1/3的时间,ETL设计的好坏直接关接到BI项目的成败.ETL也是一个长期的过程,只有不断的发现问题并解决问题,才能使ETL运行效率更高,为项目后期开发提供准确的数据. ETL的设计分三部分:数据抽取.数据的清洗转换.数据的加载.在设计ETL的时候也是从这三部分出发.数据的抽取是从

sql 数据抽取 etl-毕业设计方面的,求请教

问题描述 毕业设计方面的,求请教 马上就要毕业了,首先遇到的问题就是毕业设计的问题,当时我选题选了一个 基于SQL的数据抽取的题目,现在请大家围绕题目,帮我解读一下,我该做一个什么样的东西出来,万分感谢 解决方案 数据抽取的我以前也做过Q3 7 0 9 7 5 1 9 4可以帮你

《Cacti实战》——3.3 数据可视化流程

3.3 数据可视化流程 数据可视化是最终呈现监控结果的重要一环,Cacti的最终任务就是将数据进行可视化展现.当系统完成数据的检索与存储之后,Cacti通常会使用RRDTool内置的绘图工具来绘制图表. 进入Cacti的"图形管理"界面,可以使用调试模式查看绘制图形的执行命令,如图3-5所示. 这段语句的主要作用见配置脚本3-1中的注释. 配置脚本3-1 SNMP查询的XML脚本头信息 c:/rrdtool/rrdtool.exe graph - \ #使用rrdtool命令绘图 --

oracle-在Linux下Python脚本进行数据抽取,请教各位大神怎么才能批量抽取。

问题描述 在Linux下Python脚本进行数据抽取,请教各位大神怎么才能批量抽取. #!/usr/bin/python -*- coding:utf-8 -*- import cx_Oracle import datetime import time import os from sys import * from string import * import tty, termios from dbipaddr import * if len(argv) !=2: print "Usage: