zoukankan      html  css  js  c++  java
  • OGG技术原理

    OGG架构

    在一个典型的OGG环境中,会有两个数据库存在,同时也会有两个GG实例运行,主要包括四个核心对象:源数据库、目标数据库、源GG、目标GG。
    数据复制运行流程大概如下:
    源数据库在运行过程中,LGWR进程会源源不断地把日志记录到联机日志中(online log)。源GG的工作起点或者整个GG数据库流的起点也就是从源数据库的联机日志开始。
    在源GG端:
    1) Extract进程从联机日志挖掘数据,记录到本地的Source Trail文件中。
    2) Data Pump进程从Source Trail文件把数据出来,然后通过网络,丢给目标GG上的Collector进程。
    在目标端:

    Collector进程从接收数据到一个本地文件(Remote Trail)中。
    2)另一个Replicate进程从这些文件中挖取数据,然后在目标数据库上更新数据。
    注:可以把源GG端步骤1,2合并成一个,直接把数据挖掘出来发送给目标端。
    Capture(Local Extract)Process
    捕获进程就是源GG把源数据库中变化(插入、更新、删除)数据抓出来的过程。通常指Local Extract进程,抽取进度还包括Data Pump Extract ,Inital-Load Extact和Discard File。
    Inital-Load:主要用于目标数据库的初始化,这个过程类似Oracle EXP/IMP,数据泵。

    Local Extract进程特点
    可以直接把挖掘的数据发给目标GG或者缓存本地Source Trail
    只会记录已经提交的变化,而把其他的活动(如回滚)过滤掉。
    可以捕获DML,也可以捕获DDL
    支持多进程或者单进程处理全部表或多个表
    支持Schema级别、表级别、列级别不同粒度的抓取
    Source Trail
    Source Trail作为一个中间文件,保存抓取进程捕获的数据,以大块方式进行存储,等待下一个环节(Data Pump Extract)处理。Trail文件是一种GG特有的文件,具有自己的元数据。在每个文件或者每条记录上,都一个“头”记录。为了跟踪事物和保证数据一致性,采用CSN(Commit Sequece Number)这个概念,把CSN写到检查点文件(checpoint)和Trail文件中。CSN类似Oracle SCN,在SQLserver复制中用虚拟日志文件号,虚拟日志段号和虚拟日志记录号的拼接形成。

    Source Trail进程特点
    可以控制Source Trail文件大小,保证写满后,创建新的Trail文件。
    支持Trail文件自动清理,按照保留时间或者Trail文件的总数量限制
    Data Pump
    Data Pump主要功能是用于抓取Source Trail,然后发送给目标GG。
    主要特点:
    1.支持多级Data Pump:可以通过Data Pump将数据引入一个中间区,这个中间区可以部署多个DataPump对数据进行过滤,再导向多个目标系统。
    2.对于不能处理的记录,同Extact进程一样写入discard文件。
    3.支持数据压缩和加解密

    Collector
    Collector进程主要用于接收源数据库发送数据的。

    Remote Trail
    Remote Trail文件和SourceTrail 类似,具有相同的特点,区分在于存放的位置不同,命名格式为xxnnnnn.

    发布(Delivery,Repalicate)
    所谓发布(复制),就是把抓到变化数据应用到目标数据库的过程。
    其特点:

    支持DDL,DML
    支持多进程、多表、多列灵活组合。
    对于不能处理的记录,同Extact进程一样写入discard文件。
    管理器和组
    管理器进程(Manager)管理所有GG进程和资源。通过GGSCI发送来的命令执行。
    组将抽取到应用整个流程的进程和文件,组成一个组。

    进程检查点(checkpoint)
    GG的各组进程都是独立工作的,都可以独立启动和关闭。为了解决断点和续传的问题,这些进程会记录各自的读写位置信息,从而防止进程因系统、网络崩溃而导致的数据丢失,这个记录动作就是“检查点”。检查点对GG保证数据一致性非常重要。
    GG的检查点由一个内部进程自动控制,与数据库检查点的概念类似。提取进程的检查点记录它在数据源中的读取位置和队列的写出位置,复制进程的检查点记录它读取队列的位置。每个提取进程和复制进程都由自己对应的检查点信息。当GoldenGate的进程重启时,由它记所记录的检查点决定需求读取的队列位置。
    GG的检查点信息由两种存放方式:
    1.文件形式:放在一个目录下,一个进程(或者一个组)对一个文件。源端GG的Extract进程只能使用这个模式。
    2.数据库表:目标GG推荐使用这种形式,记录量比较小,基本上是更新行,少量插入行。

    环境要求
    源数据库需求
    如果是Oracle

    附加日志(Supplemental Logging)。一般在逻辑Standby和stream这两个Oracle特性中用到。附加日志对修改记录精确定位起了非常关键的作用,对后续的表级、列级的抽取复制提供详细信息。
    日志设置
    归档日志:避免日志生产过快,未来得及抓取就被覆盖了。
    强制日志模式:避免有些操作(直接路径加载)会跳过redo,导致数据无法同步。
    开启附加日志(结合实际情况进行,详细配置)。
    目标数据库需求
    配置检查表信息(采用数据库形式)

    GG实战
    单向复制实践概述
    流程概述:
    1.CDC(Change Data Caputure):开启源端GG的Extract、Data Pump进程,记录初始加载过程数据变化。
    2.数据初始加载:将源数据库的历史数据一次性复制到目标数据库去。
    3.Change Delivery:启动Replicat进程,读取数据应用到目标端。

    GG配置
    GG配置注意点:

    可配置多用户针用于不同单复制流程
    配置附加日志
    配置目标数据库:关闭和禁用触发器和级联约束;配置检查表
    # GG高级用法

    典型拓扑结构
    单向(查询分流)
    双向(主用/备用或者主动-主动,实现高可用性)
    对等(负载平衡、多住)
    广播(数据分发)
    集成/整合(数据仓库)
    级联式(数据集市)
    RAC的特殊说明
    ASM文件的访问
    net8:基于TCP网络访问,需要配置TNS和账号密码
    BEQ方式:IPC机制(进程间直接通信),需要配置TNS
    DBLOGERADER:ASM API接口
    RAC节点部署
    可以放在任何一个节点上,可利用GRID实现节点间的Failover;通过ACFS,实现GG的共享安装。

    定义日志线程数
    GG与rac日志线程数统一

    数据过滤
    支持表、列、行过滤

    数据来源过滤
    在双向复制模式下,对两端抽取和应用进行针对性过滤,避免形成死循环。

    数据映射
    能够在目标端和源端不同表和不同列之间进行映射,实现同步复制。

    ##值的处理
    1.简单的赋值:对目标端某一列进行固定值赋值
    2.利用SQL语句和存储过程进行赋值

    Trail文件和清理
    数据压缩
    目前10.4不支持对压缩表的数据复制

  • 相关阅读:
    顺序表(线性表)操作的思想及实现之C#版
    基于CXF Java 搭建Web Service
    敏捷方法 – 灵活,可靠的软件 使用设计模式和敏捷开发
    使用HttpHanlder处理404: File not found
    关于js模块加载的尝试
    Tfs 自动部署 部署图
    jQuery能做到,PHP能做到,C#也能做到
    优化反射性能的总结(下)
    推荐系统
    10个前端开发必备的工具或使用方法
  • 原文地址:https://www.cnblogs.com/zhulimin/p/12642984.html
Copyright © 2011-2022 走看看