配置OGG 如何批量修改源端及目标端序列值_满足客户变态需求学会这招你就赚了

本文主要是介绍配置OGG 如何批量修改源端及目标端序列值_满足客户变态需求学会这招你就赚了,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

欢迎您关注我的公众号【尚雷的驿站】
****************************************************************************
公众号:尚雷的驿站
CSDN :https://blog.csdn.net/shlei5580
墨天轮:https://www.modb.pro/u/2436
PGFans:https://www.pgfans.cn/user/home?userId=4159
****************************************************************************

一、背景描述

最近,我需要对一套 Oracle 11g 数据库进行迁移。这次迁移不是将源库的所有表数据同步至目标库,而是只需要迁移部分表的数据。

此外,业务要求迁移过程中不能停机,并确保迁移前后的数据一致性,以便在失败时能够回退。因此,我采用了 Oracle GoldenGate (OGG) 来同步数据,并进行了双向同步的配置(关于双向同步的详细内容将在后续进行补充)。

不仅如此,更为苛刻的要求是源端和目标端的序列必须满足以下需求:

  1. 调整新库的序列和步长,并记录当前操作时间:
  • 确保新库的序列号尾数为偶数
  • 将所有序列的步长调整为2
  • 导出调整后的序列信息,以确认调整是否成功
  1. 确认新库的正常执行后,调整旧库的序列和步长,并记录当前操作时间:
  • 确保旧库的序列号尾数为奇数
  • 将所有序列的步长调整为2
  • 导出调整后的序列信息,以确认调整是否成功
    尽管这些要求有些过分,但客户坚持这样要求。虽然这个数据库平时的业务量不大,但是迁移过程中不允许停机,必须实时同步数据,同时源端和目标端必须保持连接,还要保证应用程序可以花费相当长的时间来调整数据源。

通过以上序列的修改,我保证了当应用程序同时连接源端和目标端,并对数据进行修改时,不会因为序列问题导致数据冲突,从而影响了 OGG 的同步过程。因此,我费尽九牛二虎之力,最终编写了一个 PL/SQL 脚本,批量修改了源端和目标端的序列值,以使两端都能满足业务需求。

二、PL/SQL脚本

要分别在源端和目标端执行如下pl/sql脚本:

2.1 源端pl/sql

源端执行如下pl/sql脚本

sqlplus / as sysdba
-- 然后执行如下脚本
SET SERVEROUTPUT ON
DECLARECURSOR c_sequences ISSELECT sequence_owner,sequence_name,increment_by,last_numberFROM dba_sequencesWHERE sequence_owner in ('XXX','XXX') AND (increment_by <> 2 or MOD(last_number, 2) != 1);
BEGINFOR r_sequence IN c_sequences LOOPDECLAREcurrent_val NUMBER;BEGINEXECUTE IMMEDIATE 'ALTER SEQUENCE ' || r_sequence.sequence_owner||'.'||r_sequence.sequence_name || ' INCREMENT BY 1 NOCACHE';EXECUTE IMMEDIATE 'SELECT ' || r_sequence.sequence_owner||'.'||r_sequence.sequence_name || '.NEXTVAL FROM DUAL' into current_val;EXECUTE IMMEDIATE 'ALTER SEQUENCE ' || r_sequence.sequence_owner||'.'||r_sequence.sequence_name || ' INCREMENT BY 2 CACHE 20';DBMS_OUTPUT.PUT_LINE(r_sequence.sequence_name);END;END LOOP; DBMS_OUTPUT.PUT_LINE('序列修改完成');
END;
/

2.2 目标端pl/sql

目标端执行如下pl/sql脚本

sqlplus / as sysdba
-- 然后执行如下脚本
SET SERVEROUTPUT ON
DECLARECURSOR c_sequences ISSELECT sequence_owner,sequence_name,increment_by,last_numberFROM dba_sequencesWHERE sequence_owner in ('XXX','XXX') AND (increment_by <> 2 or MOD(last_number, 2) != 0);
BEGINFOR r_sequence IN c_sequences LOOPDECLAREcurrent_val NUMBER;BEGINEXECUTE IMMEDIATE 'ALTER SEQUENCE ' || r_sequence.sequence_owner||'.'||r_sequence.sequence_name || ' INCREMENT BY 1 NOCACHE';EXECUTE IMMEDIATE 'SELECT ' || r_sequence.sequence_owner||'.'||r_sequence.sequence_name || '.NEXTVAL FROM DUAL' into current_val;EXECUTE IMMEDIATE 'ALTER SEQUENCE ' || r_sequence.sequence_owner||'.'||r_sequence.sequence_name || ' INCREMENT BY 2 CACHE 20';DBMS_OUTPUT.PUT_LINE(r_sequence.sequence_name);END;END LOOP; DBMS_OUTPUT.PUT_LINE('序列修改完成');
END;
/

2.3 比对序列

可通过用在源端和目标端创建一个dblink,通过dblink来比对源端和目标端的序列值。
脚本如下:

conn xxx/xxx
WITH source_seq AS (SELECT sequence_name, last_number, increment_byFROM all_sequencesWHERE sequence_owner in ('XXX','XXX')
),
target_seq AS (SELECT sequence_name, last_number, increment_byFROM all_sequences@XXX.XXXWHERE sequence_owner in ('XXX','XXX')
)
SELECT 'SOURCE' AS seq_type, sequence_name, last_number, increment_by
FROM source_seq
UNION ALL
SELECT 'TARGET' AS seq_type, sequence_name, last_number, increment_by
FROM target_seq;

这篇关于配置OGG 如何批量修改源端及目标端序列值_满足客户变态需求学会这招你就赚了的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/824038

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

uva 10131 最长子序列

题意: 给大象的体重和智商,求体重按从大到小,智商从高到低的最长子序列,并输出路径。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vect

POJ1631最长单调递增子序列

最长单调递增子序列 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.StringTokenizer;publ