designs\project\database-OGG

Agnes ·
更新时间:2024-09-20
· 913 次阅读

目录简介OGG 关键特性OGG 用途OGG 的几种架构方式OGG 工作原理概览扩展性检查点OGG 的配置OGG环境搭建数据库端配置OGG 端配置抽取进程配置无 Pump 抽取进程示栗有 Pump 抽取进程示栗初始同步复制进程配置并行优化双向复制的问题 简介

OGG 是一个数据库 Replication 工具

如果您的来源库和目标仅是Oracle数据库,使用Data Guard就可以了,如果我的源端是Oracle,而目标是任何其他数据库之一,最受欢迎且受支持的工具,最可行的方案是OGG(OGG 还支持从 mysql 同步到 sqlserver 之类)

OGG 关键特性 实时性 主服务器和从服务器之间的同步,几乎是实时进行的(0.1秒级别,调优后) 异构系统数据库同步 保证事物的完整性 这意味着事物,从源端到目标端的顺序是不会改变的 OGG 用途 构建高可用性系统 实时的同步,当源数据库宕机时,应用程序可以仍然连接到副本集数据库并继续 热更,零停机时间的版本升级或迁移 源数据库升级时,让应用程序迁移到副本集上 分离应用,提供单独的报送服务器 我们将源端数据库 replication 到我们的目标数据库,在目标端,我们将配置,目标报送程序 源端中的资源全部很好地用于确保 OLTP 程序的高效执行 数据库产品集成 我们一般喜欢建立一个数据仓库,从所有不同的位置提取数据,并将来源数据整合,进入数据仓库 它还提供转换数据的能力 您可以已编程的方式,使用它还提供可扩展的解决方案,通过它可以完成转换,非常快且经过优化 博主个人觉得: OGG 是一个 replication 中间件,但还算不上分布式中间件。最近 Apache 开源了分布式数据库 shardingsphere(又要学 (╬▔皿▔)╯) OGG 支持完全冗余,支持基于 SQL 的部分冗余 不支持分布式事务 不支持并行查询 OGG 的检查点机制保证 Replication 的有序性 OGG 应该不支持分布式的并发,因为我没看到过有时钟同步! OGG 提供可伸缩性 Scalibility OGG 支持故障恢复 Fault tolerance 非分布式架构,无协调器的概念 OGG 内部实现对用户透明 Transparency 博主个人觉得:想要将 OGG 组分布式系统,可以将 OGG 的数据在一个 Memocache 或者 MongoDB 中集中转发,这样,共享内存的分布式数据库的特性就基本有了。博主想想而已。老板要是听说我想造个轮子,他该吐血了 ⊙﹏⊙∥ 安全可靠?宕了就停了 冗余数据的一致性?有的 并发事务支持?找 MongoDB 容错性?有的 OGG 的几种架构方式 单向复制 双向复制 广播 数据集成 级联 OGG 工作原理 概览

我们都知道 OGG 是基于日志更改的捕获

扩展性

trail 文件 可以是

Flat File —— 呃,不认识 Adapters —— 用户自定义的适配器 DB Load Utility Format —— 目标端数据库能识别的规格文件

用户可以自由的开发扩展应用

检查点

OGG 通过类似逻辑时钟同步(内部有序CSN号/事务号)的机制,提升实时冗余 Replication 的容错性

OGG 的配置 环境准备 配置抽取进程 初始同步 配置复制进程 OGG环境搭建 数据库端配置 注意当需要配置多个数据库的时候,请把窗口排齐整,确保我们正在连接到正确的数据库,不要问我为啥知道

在源端和目标端创建一个数据库用户

-- 创建用户这种事情 …… 请使用想象力解决

OGG 从Redo日志文件中读取信息,而 redo 文件仅具有有关对象ID的信息,所以OGG软件需要访问数据库

可以直接实用 as sysdba 的角色授权 不过 Oracle 的 DBA 角色数量好像最多 5 个还是 6 个吧!还是老老实实配置权限吧 grant unlimited tablespace to ogg; grant create session, alter session to ogg; grant alter system to ogg; grant select any dictionary to ogg; grant flashback any table to ogg; grant select any table, insert any table, update any table, delete any table, drop any table to ogg; grant create table, create sequence to ogg; grant select on dba_clusters to ogg; grant select on v_$database to ogg; grant select on sys.logmnr_buildlog to ogg; grant select any transaction to ogg; grant lock any table to ogg; grant ggs_ggsuser_role to ogg; grant execute on dbms_flashback to ogg; grant execute on dbms_logmnr_d to ogg; grant execute on dbms_capture_adm to ogg; grant execute on dbms_streams to ogg; grant execute on utl_file to ogg; exec dbms_streams_auth.grant_admin_privilege(‘ogg’);

OGG 必须在目标数据库执行 DML,这个用户拥有在目标端数据库执行 DML 权限

开启supplemental日志,并立即切换为 supplemental 日志模式

启用数据库级别的 supplemental 日志 a) 查看归档日志使用情况select * from v$flash_recovery_area_usage; --查看空间占用率,如果 ARCHIVED LOG 超过90%,Oracle随时有宕机的危险 select * from v$recovery_file_dest; --查看归档日志大小及使用情况 select group#, bytes, status from v$log; --查看现有日志 select sequence#,first_time from v$loghist;--列出所有归档redo日志文件的顺序和产生的时间 select * from v$archived_log; --查看v$archive_log select count(*) from v$archived_log where archived='YES' and deleted='NO'; --查看所有归档,未删除的归档日志 b) 修改闪回区大小show parameter db_recovery -- 首先是关闭数据库:以SYS身份链接到oracle,执行 shutdown immediate; -- 启动数据库到mount状态: startup mount -- 查看回闪恢复区的大小和存放目标: show parameter db_recovery_file_dest -- 修改回闪恢复区的大小 alter system set db_recovery_file_dest_size = 4G -- (缺省是2G,可以根据实际情况调整大小) -- 最后打开数据库: alter database open; c) 方法二:重定向归档日志的位置
生产环境建议将归档目录和oracle产品的安装目录分开。最后的目录名称需要为archive_log! alter system set log_archive_dest_1='location=/oralog/NC65/archivelog' scope=spfile; d) 实际上从Oracle 10g开始,可以生成多份一样的日志,保存多个位置,以防不测 alter system set log_archive_dest_2='location=/data/oracle/log2/archive_log'; e) 开启归档日志 shutdown immediate; startup mount alter database archivelog; alter database open; archive log list; alter database force logging; alter database add supplemental log data -- 如果启用DDL 支持,必须关闭recycle bin alter system set recyclebin=offscope=spfile; alter system switch logfile; -- 切换一下日志,最好还能重启一下 OGG 端配置 番外 a) 使用CMD定位到OGG安装目录,输入GGSCI进入OGG配置终端 b) Windows2012服务器上报错,运行GGSCI找不到MSVCP100 MSVCP100.dll = Visual C++ 2010 Runtime c) Windows2012服务器上报错,运行GGSCI找不到MSVCR100 MSVCR100.dll = Visual C++ 2010 Runtime d) Windows2012服务器上报错,运行GGSCI找不到MSVCR120 MSVCR120.dll = Visual C++ 2013 Runtime e) 其他版本依次类推,记得去微软官网下 www.microsoft.com 别装上其他东西了 源端将需要同步的表加入trandata。 默认的重做日志只记录 rowId,所以一个额外的主键信息也应该被记录 重做日志对加入 trandata 的表额外记录主键-- 运行GGSCI,进入OGG管理控制台 dblogin userid admin password admin add trandata xxxx.* 配置源端和目标端的 manager 进程 manager 是 OGG 的主线程管理全局的东西 建议编辑全局配置文件,在全局文件中指定使用检查点表的表名 全局配置文件应该存在于安装在的默认位置,OGG根目录 如果是异构环境,数据库类型不一致 在源端中定义数据源格式 在目标端定义数据格式 这可以通过使用一个称为 defgen 的实用程序,通过它可以显示的指定映射 Manager 配置方法参见:designs\project\database-windows下OGG的部署 抽取进程配置 OGG 的基于日志的捕获对于源系统的性能影响很小 启用 pump 如果目标端是再网络的另一端,则我们可以启用单独的 pump 进程来将本地 trail 发布到远程 trail 使用 pump 的另一个好处是,如果网络断了抽取进程不会受到影响,OGG继续运行 如果使用一个 pump 来发送给多个目标,如果其中一个网络掉线,则 pump 会停止 所以一般我们为一个 trail 启用多个独立的 pump 来 pump 到不同目的地,且多个 pump 的检查点相互独立 无 Pump 抽取进程示栗 add extract extwest, tranlog, begin now edit param extwest EXTRACT extwest USERID admin,PASSWORD oracle RMTHOST 127.0.0.1, MGRPORT 7809 RMTTRAIL .\dirdat\ew dynamicresolution gettruncates TABLE admin.*; STATOPETIONS RESETREPORTSTAS REPORT AT 00:01 REPORTROLLOVER AT 00:01 REPORTCOUNT EVERY 60 SECONDS, RATE -- add exttrail ./dirdat/ew, extract extwest, megabytes 50 有 Pump 抽取进程示栗 edit param extwest EXTRACT extwest EXTRAIL ./dirdat/ew USERID gguser, PASSWORD gguser TABLE west.*; STATOPETIONS RESETREPORTSTAS REPORT AT 00:01 REPORTROLLOVER AT 00:01 REPORTCOUNT EVERY 60 SECONDS, RATE add extract extwest, tranlog, begin now add exttrail ./dirdata/ew, extract extwest, megabytes 50 -- 创建 pump edit param pwest EXTRACT pwest RMTHOST 192.168.1.110, MGRPORT 15001, COMPRESS RMTTRAIL ./dirdat/pe PASSTHRU TABLE west.*; add extract pwest, extrailsource ./dirdata/ew add rmttrail ./dirdata/pe, extract pwest, megabytes 50 start extract extwest start extract pwest 初始同步 对比手动备份恢复,OGG 执行初始同步之后,不管源代码发生了什么变化,都可以被捕获并同步到目标中

再执行初始同步之前,请确保从源端的抽取进程已经是开启状态,以防初始同步期间的数据丢失

初始同步时的冲突解决 collisior 由于初始同步和数据同步同时运行,我们会遇到许多的冲突,我们可以尝试停止同步,如果实在没有办法停止源端事务,则考虑处理初始同步持续期间的冲突 记录重复:在 Replciate 中使用 SEND HANDLECOLLISIONS 来解决问题 找不到记录:(数据被用户删除了)在 Replciate 中添加 SEND NOHANDLECOLLISIONS 来解决问题 复制进程配置 DBLOGIN USERID ogg, PASSWORD ogg ADD CHECKPOINTTABLE ogg.checkpoint edit param rep1 REPLICAT rep1 USERID root,PASSWORD oracle ASSUMETARGETDEFS REPERROR default,discard DISCARDFILE .\repsz.dsc,append,megabytes 100 // 请将目录更换成自己的, MAP admin.*, TARGET root.*; add replicat rep1 exttrail .\dirdat\pe, checkpointtable ogg.checkpoint 并行优化

如果数据之间没有依赖(通过 range 函数,或者分表),可以开启多个抽取进程,进行优化

双向复制的问题 loop 循环复制:使用 Exclude User 来避免。A 传递给 B ,B 再传回给 A conflicts 冲突:如果两边的用户同一时间使用同一行记录的时候。 使得同步足够的快 通过数据分片来避免两边同时处理同一记录 手动处理冲突监测并解决冲突 序列不能同步 可以在以边时用偶数序列,另一边使用奇数序列 禁用 Truncate

文档翻译?CSDN 审核中啊


作者:踢踢vip



designs DATABASE project

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章