使用数据泵+ogg同步oracle数据

news2024/11/17 1:34:20

本次迁移背景:

机房要搬迁,新搭建了一套oracle数据库,计划不停机迁移,将源端旧库的数据迁移到目标端新库里。

原本想用RMAN方式迁移,但是由于旧库是AIX系统,新库是linux系统,用RMAN迁移会有问题,于是考虑用数据泵+ogg的方式实现不停机迁移。

这里计划按用户进行导出,给大用户单独配置一个ogg进程,将多个小用户弄一批ogg进程。这里以同步其中一个用户AMI为例。

/*

有时可能需要配置同步某个库的一些表到其他库,也经常用到ogg。

*/

一 数据库配置

1.1 开启归档(源端)

源端归档必须开启,目标端不开启不影响ogg同步,但是假如数据文件损坏后,无法恢复数据库到某个时间点,建议都开启下归档日志。

#检查归档日志是否开启

archive log list;

若Automatic archival是Enabled,则表示是开启状态。若是Disabled,则需要开启:

shutdown immediate;

startup mount;

alter database archivelog;

archive log list;

alter database open;

1.2 打开数据库级别的附加日志(源端)

通过以下sql语句检查数据库附加日志的打开状况:

SQL> select SUPPLEMENTAL_LOG_DATA_MIN,supplemental_log_data_pk,supplemental_log_data_ui,

force_logging from v$database;

返回值yes为打开,pk,ui都需要打开。注意force logging不需要打开,如果已经打开没关系。

如果没有开启,请执行如下命令打开

alter database add supplemental log data;

alter database add supplemental log data (primary key, unique,foreign key) columns;

alter system switch logfile;

#再次检查

select SUPPLEMENTAL_LOG_DATA_MIN,supplemental_log_data_pk,supplemental_log_data_ui,

force_logging from v$database;

注意:

如果数据库不能打开到force logging的模式下,则nologging的表无法进行同步。如果表创建的时候使用了nologging,则需要alter table tablename logging;

1.3 创建Goldengate用户和表空间(源端和目标端)

#给ogg创建单独的表空间

create tablespace OGGTBS datafile '/u01/app/oracle/oradata/orcl/oggtb1.dbf'  size 3g;

#给ogg创建单独的管理用户

CREATE USER GOLDENGATE IDENTIFIED BY "123456" DEFAULT TABLESPACE OGGTBS TEMPORARY TABLESPACE TEMP;

GRANT CONNECT,resource TO goldengate;

GRANT ALTER ANY  TABLE TO goldengate;

GRANT ALTER SESSION TO goldengate;

GRANT CREATE SESSION TO goldengate;

GRANT FLASHBACK ANY TABLE TO goldengate;

GRANT SELECT ANY DICTIONARY TO goldengate;

GRANT SELECT ANY TABLE TO goldengate;

GRANT drop ANY TABLE TO goldengate;

Grant insert any table to goldengate;

Grant update any table to goldengate;

Grant delete any table to goldengate;

Grant create any table to goldengate;

GRANT EXECUTE ON utl_file TO goldengate;

GRANT EXECUTE ON dbms_flashback TO goldengate;

GRANT SELECT ANY TRANSACTION TO goldengate;

1.4 开启ogg复制(源端和目标端)

alter system set enable_goldengate_replication=true;

1.5 确定数据库的字符集(源端)

$ sqlplus / as sysdba

SQL> show parameter nls_language

SQL> show parameter nls_territory

SQL> select name,value$ from sys.props$ where name='NLS_CHARACTERSET';

数据库的字符集为 NLS_LANGUAGE _ NLS_TERRITORY . NLS_CHARACTERSET

例如:

NLS_LANGUAGE 为AMERICAN

NLS_TERRITORY为 AMERICA

NLS_CHARACTERSET为ZHS16GBK

则数据库的字符集为AMERICAN_AMERICA.ZHS16GBK

二 安装Goldengate软件(源端和目标端)

在源端和目标端都安装下ogg软件。

软件下载地址: https://edelivery.oracle.com/osdc/faces/SoftwareDelivery

 点击文件名下载即可。

2.1 创建目录,配置环境变量

mkdir -p /goldengate

chown -R oracle:oinstall /goldengate

su - oracle

vi .bash_profile

新增:

export OGG_DIR=/goldengate

export PATH=$OGG_DIR:$ORACLE_HOME/bin:$ODI_HOME/oracledi/client:$ODI_JAVA_HOME/bin:$PATH

export LD_LIBRARY_PATH=$OGG_DIR:$ORACLE_HOME/lib:/usr/lib

#使修改生效

source .bash_profile

2.2 安装Goldengate软件

将安装介质包上传至此目录:/goldengate

cd /goldengate

tar xvf fbo_ggs_Linux_x64_ora11g_64bit.tar

./ggsci

#创建OGG工作目录

GGSCI (orasvr) 3> create subdirs

cd /goldengate/dirdat

mkdir database

2.3 添加checkpoint表

添加GLOBALS参数文件,加入检查表

GGSCI (fdpdb1) 1>edit params ./GLOBALS

checkpointtable goldengate.checkpoint

GGSCI (fdpdb1) 1>dblogin userid goldengate,password 123456

GGSCI (fdpdb1) 1>add checkpointtable goldengate.checkpoint

三 Goldengate配置

3.1 配置MGR进程(源端和目标端)

3.1.1 配置参数文件

GGSCI (fdpdb1) 2> edit params mgr

新增:

port 7839

DYNAMICPORTLIST 7850-7959

AUTOSTART ER *

AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 7

PURGEOLDEXTRACTS ./dirdat/database/*,usecheckpoints,minkeephours 2

USERID goldengate, PASSWORD 123456

--PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 4

--PURGEMARKERHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 10

LAGREPORTHOURS 1

LAGINFOMINUTES 30

LAGCRITICALMINUTES 45

3.1.2 启动mgr

start mgr

info all #确保进程是running状态

3.2 在源端配置ogg

3.2.1 增加复制表的附加日志信息

要复制哪些表,就增加哪些表的附加日志信息

$ cd /goldengate

$ ./ggsci

GGSCI> dblogin userid goldengate ,password 123456

如果是按用户导出,则 add trandata 用户.*

如果是按表导出,则add trandata 表名

--对每张表检查是否增加了附加日志配置

ggsci> info trandata 表名

3.2.2 配置抽取进程

这里抽取进程以ext开头,后面的AM为自定义字母缩写。

edit param EXT_AM

新增:

EXTRACT EXT_AM

SETENV (NLS_LANG = "AMERICAN_AMERICA.ZHS16GBK")

SETENV (ORACLE_SID = "orcl")

USERID goldengate, PASSWORD "123456"

GETTRUNCATES

REPORTCOUNT EVERY 1 MINUTES, RATE

DISCARDFILE ./dirrpt/EXT_AM.dsc,APPEND,MEGABYTES 1024

THREADOPTIONS  MAXCOMMITPROPAGATIONDELAY 60000 IOLATENCY 60000

TRANLOGOPTIONS _DISABLESTREAMLINEDDBLOGREADER

DBOPTIONS  ALLOWUNUSEDCOLUMN

WARNLONGTRANS 2h,CHECKINTERVAL 3m

EXTTRAIL ./dirdat/database/am

FETCHOPTIONS NOUSESNAPSHOT

TRANLOGOPTIONS DBLOGREADER

GETUPDATEBEFORES

NOCOMPRESSDELETES

CACHEMGR CACHESIZE 1G

TABLE AMI.*; 

3.2.3 创建抽取进程

add extract EXT_AM, tranlog, begin now, threads 1

add exttrail ./dirdat/database/am, extract EXT_AM, megabytes 1024

3.2.4 配置投递进程

这里抽取进程以dpe开头,后面的am为自定义字母缩写。

GGSCI> edit params dpe_am

EXTRACT dpe_am

PASSTHRU

RMTHOST 172.22.204.250, MGRPORT 7839, compress

RMTTRAIL ./dirdat/database/am

TABLE AMI.*;

3.2.5 创建投递进程

add extract dpe_am, exttrailsource ./dirdat/database/am

ADD RMTTRAIL   ./dirdat/database/am, EXTRACT dpe_am, MEGABYTES 1024

3.2.6 启动抽取进程和传输进程

GGSCI> start extract EXT_AM

GGSCI> start extract dpe_am

info all #确保进程都处于RUNNING启动状态

造几条测试数据,查看投递进程是否捕获到变更:

stats dpe_am

示例:

 #在目标端检查下有没有投递过来,看看能否看到文件

cd /goldengate/dirdat/database

ls -ltr

假如能看到上面自定义的队列文件,则为正常:

 

3.3 初始化数据

DML操作包括INSERT、UPDATE、DELETE、SELECT操作,而在这些操作中UPDATE、DELETE操作Redo只记录了变更的数据列以及行ID(ROWID),GoldenGate抽取数据后将其转换为自己的格式发送都目标端。在同步开始前目标端没有初始化数据(目标端为空数据),那么事物产生的UPDATE、DELETE DML操作发送到目标端,目标端GoldenGate Replicat进程会因为找不到数据而报错从而导致Replicat进程崩溃停止(ABENDED),所以这就需要我们在同步前初始化数据,初始化完后再同步,这样大大降低错误率。同步数据的方式可以通过DBLINK、EXP/IMP、SQLLDR或者表空间迁移等方式同步。

3.3.1 expdp备份源端数据目标端配置

3.3.1.1 在源端查询SCN号

SELECT a."CURRENT_SCN" FROM v$database a ;  #记录查出来的scn,这里是1343313

3.3.1.2 导出时加上SCN号

vi expdp_ami_alldata_20230621.par

新增:

userid='/ as sysdba'

directory=DMP

dumpfile=expdp_ami_alldata_20230621_%U.dmp

logfile=expdp_ami_alldata_20230621.log

schemas=ami

compression=ALL

CLUSTER=N

parallel=8

exclude=statistics

FLASHBACK_SCN=1343313  #上面查出来的scn,表示从这个位置开始导出

#开始导出

nohup expdp parfile=expdp_ami_alldata_20230621.par >nohup_expdp_ami_alldata_20230621.log &

tail -100f  nohup_expdp_ami_alldata_20230621.log

检查日志是否有报错。

3.3.2 将备份文件拷贝到目标端

3.3.2 在目标端导入数据

vi impdp_ami_alldata_20230621.par

新增:

userid='/ as sysdba'

directory=dmp

dumpfile=expdp_ami_alldata_20230621_%u.dmp

logfile=impdp_ami_alldata_20230621.log

table_exists_action=replace

cluster=n

parallel=8

#导入

nohup impdp parfile=impdp_ami_alldata_20230621.par >nohup_impdp_ami_alldata_20230621.log &

tail -100f  nohup_impdp_ami_alldata_20230621.log

检查日志是否有报错。

3.4 在目标端配置复制进程

3.4.1 配置复制进程

edit param rep_am

新增如下内容:

REPLICAT rep_am

SETENV (NLS_LANG = "AMERICAN_AMERICA.ZHS16GBK")

SETENV (ORACLE_SID = "orcl")

USERID goldengate, PASSWORD 123456

SQLEXEC "ALTER SESSION SET CONSTRAINTS=DEFERRED"

REPORT AT 01:59

REPORTCOUNT EVERY 30 MINUTES, RATE

REPERROR DEFAULT, ABEND

HANDLECOLLISIONS

--DBOPTIONS_NOAUTOMATICSEQUENCEFLUSH

batchsql BATCHESPERQUEUE 100, OPSPERBATCH 8000

--GROUPTRANSOPS 2000

--MAXTRANSOPS 500

assumetargetdefs

DISCARDFILE ./dirrpt/rep_am.dsc, APPEND, MEGABYTES 1024

DISCARDROLLOVER AT 02:30

GETTRUNCATES

ALLOWNOOPUPDATES

---SOURCEDEFS ./dirdef/cj.def

assumetargetdefs

map                ami.*  ,target                ami.*;

/*

假如是要同步多个表,则这样写:

map 用户.表1,target 用户.表1;

map 用户.表2,target 用户.表2;

*/

3.4.2 添加复制进程

ADD REPLICAT rep_am, EXTTRAIL ./dirdat/database/am , nodbcheckpoint

3.4.3 启动目标端复制进程

start replicat rep_am,aftercsn 上面查的scn

示例:

start replicat rep_am,aftercsn 1343313

info all  #检查,确保命令是running状态

3.5 测试数据同步

3.6 期间遇到的问题

快照过旧

调大undo_retention:

若还是不行,则将大表找出来,单独配置大表的ogg同步。

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

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

相关文章

SpringBoot2.3集成Spring Security(二) JWT认证

项目背景 紧接上文,我们已经完成了 SpringBoot中集成Spring Security,并且用户名帐号和密码都是从数据库中获取。但是这种方式还是不能满足现在的开发需求。 使用JWT的好处: 无状态认证:JWT本身包含了认证信息和声明&#xff0…

仓库管理软件哪个好?一键解决仓库出入库、管理库存,选这些软件

仓库管理软件哪个好? 仓库管理企业进销存的重要组成部分之一,现代物流中不可缺少的重要环节,对于企业管理的重要性不言而喻。 到底该如何选择仓库管理软件?让进销存老研究员帮你搞定 选择一个好的软件,首先明白他的作用。 向你…

【操作系统】生产者消费者问题实现

目录 实验原理: 实验内容: 实验器材(设备、元器件): 实验步骤: 实验数据及结果分析: 实验原理: 考虑n个缓冲区的缓冲池作为一个共享资源,当生产者进程从数据源—文…

高级数据结构——二叉搜索树

目录 1. 二叉搜索树的概念 2. 二叉搜索树的实现 结点类 二叉搜索树的类 2.1 默认成员函数 2.1.1 构造函数 2.1.2 拷贝构造函数 2.1.3 赋值运算符重载函数 2.1.4 析构函数 2.2 中序遍历 2.3 insert插入函数 2.3.1 非递归实现 2.3.2 递归实现 2.4 erase删除函数 2…

App Inventor 2 语音交互机器人Robot,使用讯飞语音识别引擎

应用介绍 App Inventor 2 语音识别及交互App。识别语言指令并控制机器人运动,主要用到语音识别器及文本朗读器组件,语音识别相关开发最佳入门。代码逻辑简单,App交互性及趣味性非常强~ 视频预览 语音Robot教程(难度系数&#xf…

中科院、中科大团队精确测量子引力对量子自旋的影响

光子盒研究院 由中国科学院盛东教授、陆征天教授和中国科学技术大学的合作研究小组利用高精度氙气同位素磁力仪研究了中子自旋和引力之间的耦合效应。5月15日,这项题为Search for Spin-Dependent Gravitational Interactions at Earth Range的研究发表在《物理评论快…

three.js常用几何体介绍以及自定义几何体

一、自定义三角形几何体 核心代码&#xff1a; // 添加物体 // 创建几何体 for (let i 0; i < 50; i) {// 每一个三角形&#xff0c;需要3个顶点&#xff0c;每个顶点需要3个值const geometry new THREE.BufferGeometry();const positionArray new Float32Array(9);for …

Java创建多线程的五种写法

目录 一.lambda表达式(强烈推荐,最简单) 基础格式 举例 运行结果 二.继承 Thread, 重写 run 基础格式 举例 运行结果 三.实现 Runnable, 重写 run 基础格式 举例 运行结果 四.使用匿名内部类,继承 Thread, 重写 run 基础格式 举例 运行结果 五.使用匿名内部类,实…

locust学习教程(8) - event 事件

目录 1、对请求的测试前置、后置处理 2、在web界面添加新内容 3、监听测试的失败率或阀值 4、汇总总结 &#x1f381;更多干货 1、对请求的测试前置、后置处理 请求有一个上下文参数&#xff0c;通过数据有关的请求&#xff08;之类的用户名&#xff0c;标签等&#xff09…

Leaflet实现要素点击查询弹窗展示属性

leaflet是一个非常轻量的webgis框架,同时呢代码结构也比较简单。 如果项目上有需求需要大家实现对于个行政区点击查询相关属性并且展示,就像下图这样: 我们可以这样做。首先要清楚leaflet框架的构造,leaflet在加载图层的时候是对图层添加了事件监听的,也就是说用户对于图…

C++基础强化项目-职工管理系统

通过本项目练习c的基础知识 项目界面头文件workermanager.h&#xff08;管理类&#xff09;worker.h&#xff08;职工抽象类&#xff09;manager.h&#xff08;经理类&#xff09;employee.h&#xff08;普通职工类&#xff09;boss.h&#xff08;老板类&#xff09; 源文件emp…

多传感器时频信号处理:多通道非平稳数据的分析工具(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

新浪微博“私信留言收费”:私域引流危险了

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 从今日起很多新浪微博用户发现&#xff1a;微博用私信要收费了&#xff0c;确切的说是对方没有回关或回复你之前&#xff0c;你只能发送一条消息。开通会员后能发送更多留言。如下图所示&#xff1…

卷积计算加速方法--slice卷积

文章目录 1、前言2、分块卷积存在的问题3、分块卷积问题的解决方案--slice卷积4、slice卷积每层所需切分尺寸计算4、结论及加速效果 1、前言 我们在上一篇卷积计算加速方法中讨论过&#xff0c;当卷积的输入太大导致内存不够用时&#xff0c;考虑将一大块卷积分成多个小块分别进…

多快好省!硫元素循环分析内容又升级啦!

元素循环是生物地球化学循环的重要环节&#xff0c;主要涉及碳、氮、磷、硫等元素的循环过程。凌恩生物强势推出基于宏基因组的硫循环研究方案&#xff0c;构建了完整的硫循环循环模式图&#xff0c;对宏基因组数据进行深入挖掘&#xff0c;各部分结果图可直接用于文章发表&…

iOS 开发 | 自定义不规则 label

把我之前发布在简书的博客搬运过来。 目录 场景思路具体实现1. 自定义一个继承自UILabel的IrregularLabel2. 在初始化方法中进行相应初始化和设置3. 在layoutSubviews方法中进行路径的设置 最终效果箭头 label 场景 最近 App 改版&#xff0c;以下是截取的部分 UI 设计图&…

报表测试如何做?软件测试实战,超详细测试点分析(全覆盖)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 报表测试是一项重…

qt学习 tcp实现 c++

这里写目录标题 qt网络编程qt下的TCP 编程设计ui界面监听关闭和发送调试 查找网络调试助手&#xff0c;用助手当客户端测试 编写的服务端newConnection()newConnection_Slot() Tcp Client界面设计代码部分1关闭客户端发送客户端整体疑惑 https://www.bilibili.com/video/BV1tp4…

Android CMake

首先了解几个名词 NDK The Android Native Development Kit The Android NDK is a toolset that lets you implement parts of your app in native code, using languages such as C and C. For certain types of apps, this can help you reuse code libraries written in t…

虚实相生的元宇宙,不仅仅是在做虚拟社交?

互联网迭代速度已经超出了人们的想象&#xff0c;从Web1.0到Web 2.0&#xff0c;以及紧随其后的 Web 3.0。 不管我们愿不愿意承认&#xff0c;元宇宙的时代已经真真切切地到来了&#xff0c;它的兴起也是社会发展到一定阶段的必然现象。随着时代的发展&#xff0c;如今创作者的…