首页 数据库 mysql教程 《Oracle 高级复制技术介绍及应用》-HA技术-应用场景-实战演练

《Oracle 高级复制技术介绍及应用》-HA技术-应用场景-实战演练

Jun 07, 2016 pm 05:36 PM
队列

《Oracle高级复制技术介绍及应用》引言:Oracle高级复制技术是Oracle最早提出的HA容灾解决方案,起源于Oracle8i系统,至今在11G官方文档上依然可以找到高级复制

高级复制技术是Oracle最早提出的HA容灾解决方案,起源于Oracle 8i系统,至今在11G官方文档上依然可以找到高级复制说明文档。这个技术因为其古老我想大多数80后童靴只闻其声~未闻其形。在生产环境下可能更没有使用过。由于高级复制技术在当下已经属于非主流渐渐的退出了其历史舞台,逐步被Data Guard、Golden Gate、Streams等新技术所代替,导致其没落的原因是由于其本身机制问题,后面我们会介绍其原理和应用场景。虽说这种技术非常的原始,但可能还有一些老系统会继续使用着。一种技术我们需要知道其优点、应用场景、局限性、风险性,这样才能得心应手,有针对性的去使用,例如 原始的汇编语言现在几乎没有人在使用了,但由于其接近硬件的特点,在某些嵌入式系统中效率是最快的。所以说非主流技术我们也应该去了解一下,好的架构师就是需要具备在N种不同技术簇中,选择出最适合的。始终问自己:能不能压缩成本,能不能解决问题,能不能更易用。

《心得体会》

系统不同,架构不同,发现问题解决问题

好架构是系统演进出来的

保持简洁

易于扩展,监控,容错

一 高级复制技术应用架构

,当操作完之后马上触发->传递->应用

(4)和相关复制环境

(6)Master to Master提供节点冗余,负载均衡的复制方式

所有节点关系是对等的,数据是对等的,当其中一个Master不可用时,可以直接切换到其他Master

负载均衡,例如有三个Master相互复制,用户1&2&3可以分别连接这三个Master主节点,实现负载均衡

常用于容灾场景

(7)支持同步和异步复制

同步:可以实时推送,操作后立马触发->复制->应用,因为复制的表上就建立了trigger和package。

异步:可以设置定时job(后台进程控制),定时、批量的复制数据,使用Deferred Transaction Queue实现。

(8)事务和依赖

高级复制自动处理事务的依赖关系,如果B事务访问A事务,并且A事务有更新,称作B事务对A事务有依赖

高级复制自动解决数据的约束关系

高级复制根据分布式事务方式,解决事务的一致性问题,比GG、Streams对事务的控制力更强,对用户操作参与更多,我们应该尽量把用户操作和数据复制分离开来,不要混淆在一起,提高系统的稳定性、健壮性。

(9)基于物化视图的高级复制

对网络质量要求不高,由于非实时传递,因此可以中断

定时、批量的复制数据,直接利用解析物化视图日志的方式复制数据

原理图

------------------------------ ---------------------------------------------------------------------------------

REP LEO1.COM 源库 Y 发送主节点 Y

REP LEO2.COM 目标库 N 接收主节点 Y

目标端也应该可以查出

REPADMIN@leo2> select gname,dblink,masterdef,master from dba_repsites where gname='REP';

GNAME DBLINK MASTERDEF MASTER

------------------------------ -------------------------------------------------------------------------------------------------------------------------------- - -

REP LEO1.COM Y Y

REP LEO2.COM N Y

检查源端和目标端t表内容,应该都没有数据

源端

AR@leo1> select * from t;

no rows selected

目标端

AR@leo2> select * from t;

no rows selected

10.启动复制组rep(就可以实现高级复制了)

REPADMIN@leo1> execute ' 不能访问源库LEO1.COM

ORA-06550: line 1, column 8:

PLS-00201: identifier 'SYS@LEO1.COM' must be declared 必须声明到源库dblink

ORA-06550: line 1, column 8:

PL/SQL: Statement ignored

ORA-06550: line 1, column 7:

PLS-00352: Unable to access another database 'LEO1.COM'

ORA-06550: line 1, column 7:

PLS-00201: identifier 'SYS@LEO1.COM' must be declared

ORA-06550: line 1, column 7:

PL/SQL: Statement ignored

ORA-06512: at "SYS.DBMS_REPCAT_MAS", line 864

解决方法

目标端创建到源端dblink,因为两端有信息交互,必须相通

REPADMIN@leo2> create database link leo1.com connect to repadmin identified by oracle using 'leo1';

Database link created.

必须重启复制组rep

REPADMIN@leo1> execute dbms_repcat.suspend_master_activity('rep'); 暂停

PL/SQL procedure successfully completed.

REPADMIN@leo1> execute dbms_repcat.resume_master_activity('rep',true); 重启

PL/SQL procedure successfully completed.

直到源端和目标端的t表上都生成内部触发器、存储过程、基表才能正常复制

REPADMIN@leo1> select sname,oname,gname,status from dba_repobject where gname='REP';

SNAME ONAME GNAME STATUS

------------------------------ ------------------------------ ------------------------------ ----------

AR T REP VALID

AR T$RP REP VALID

AR T$RP REP VALID

参考官方文档地址:Database Advanced Replication Management API Reference书中的DBMS_REPCAT部分

目标端,当目标库t表上有这些东西时就可以正常复制了

REPADMIN@leo2> select sname,oname,gname,status from dba_repobject where gname='REP';

SNAME ONAME GNAME STATUS

------------------------------ ------------------------------ ------------------------------ ----------

AR T REP VALID

AR T$RP REP VALID

AR T$RP REP VALID

再次测试

源库,插入两条记录,当提交之后才会复制到目标库

AR@leo1> insert into t values(1);

1 row created.

AR@leo1> select * from t;

X

----------

1

AR@leo1> insert into t values(2);

1 row created.

AR@leo1> select * from t;

X

----------

1

2

AR@leo1> commit;

Commit complete.

目标库

AR@leo2> select * from t;

X

----------

1

2

源端,更新操作,提交之后才会传到目标库

AR@leo1> update t set x=10 where x=1;

1 row updated.

AR@leo1> update t set x=20 where x=2;

1 row updated.

AR@leo1> commit;

Commit complete.

目标端

AR@leo2> select * from t;

X

----------

10

20

DDL操作测试,上面我们说过了高级复制是不支持DDL操作的

源端

AR@leo1> truncate table t;

Table truncated.

AR@leo1> select * from t;

no rows selected

目标端并没有被清空,源端的DDL操作并不会影响到目标端的

AR@leo2> select * from t;

X

----------

10

20

自动解决数据的约束关系,GG、Streams就不会自动解决

源库

AR@leo1> insert into t values(10);

insert into t values(10)

*

ERROR at line 1:

ORA-00001: unique constraint (AR.SYS_C007046) violated 违反唯一约束

ORA-02063: preceding line from LEO2 来自于LEO2

说明:这个约束警告并不是源库t表上的有问题,而是当事务发生后高级复制会立刻自动检查两端的数据约束关系,

当发现目标库t表中有10这个值时,会立刻发出警告,,这个警告说明的是目标库上违反了约束关系~全局约束。

AR@leo2> select * from t;

X

----------

10

20

全局约束:这是由分布式事务引起的,如果发现整个分布式环境中有约束冲突的话,就会告警。

我们插入30,就没有问题,感觉比GG、streams速度还要快

AR@leo1> insert into t values(30);

1 row created.

AR@leo1> commit;

Commit complete.

AR@leo2> select * from t;

X

----------

10

20

30

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Python中的Deque: 实现高效的队列和堆栈 Python中的Deque: 实现高效的队列和堆栈 Apr 12, 2023 pm 09:46 PM

Python 中的 deque 是一个低级别的、高度优化的双端队列,对于实现优雅、高效的Pythonic 队列和堆栈很有用,它们是计算中最常见的列表式数据类型。本文中,云朵君将和大家一起学习如下:开始使用deque有效地弹出和追加元素访问deque中的任意元素用deque构建高效队列开始使用Deque向 Python 列表的右端追加元素和弹出元素的操作,一般非常高效。如果用大 O 表示时间复杂性,那么可以说它们是 O(1)。而当 Python 需要重新分配内存来增加底层列表以接受新的元素时,这些

怎样使用Supervisor管理ThinkPHP6队列? 怎样使用Supervisor管理ThinkPHP6队列? Jun 12, 2023 am 08:51 AM

随着Web应用的不断发展,我们需要处理大量的任务来保持应用的稳定性和可用性。使用队列系统就是一种解决方案。ThinkPHP6提供了内置的队列系统来管理任务。然而,处理大量的任务需要更好的队列管理,这时候可以使用Supervisor来实现。本文将介绍如何使用Supervisor管理ThinkPHP6队列。在此之前,我们需要了解一些基础的概念:队列系统队列系统是

队列技术在PHP与MySQL中的消息延迟和消息重试的应用 队列技术在PHP与MySQL中的消息延迟和消息重试的应用 Oct 15, 2023 pm 02:26 PM

队列技术在PHP与MySQL中的消息延迟和消息重试的应用摘要:随着Web应用程序的不断发展,对于高并发处理和系统可靠性方面的需求越来越高。队列技术作为一种解决方案,被广泛应用于PHP与MySQL中,以实现消息延迟和消息重试的功能。本文将介绍队列技术在PHP与MySQL中的应用,包括队列的基本原理、使用队列实现消息延迟的方法和使用队列实现消息重试的方法,并给出

对Java Queue队列性能的分析和优化策略 对Java Queue队列性能的分析和优化策略 Jan 09, 2024 pm 05:02 PM

JavaQueue队列的性能分析与优化策略摘要:队列(Queue)是在Java中常用的数据结构之一,广泛应用于各种场景中。本文将从性能分析和优化策略两个方面来探讨JavaQueue队列的性能问题,并给出具体的代码示例。引言队列是一种先进先出(FIFO)的数据结构,可用于实现生产者-消费者模式、线程池任务队列等场景。Java提供了多种队列的实现,例如Arr

在Java中,add()方法和offer()方法在队列中有什么区别? 在Java中,add()方法和offer()方法在队列中有什么区别? Aug 27, 2023 pm 02:25 PM

Java中的队列是一种线性数据结构,具有多种功能。队列有两个端点,它遵循先进先出(FIFO)原则插入和删除其元素。在本教程中,我们将了解Java中队列的两个重要函数,它们是add()和Offer()。什么是队列?java中的队列是一个扩展了util和collection包的接口。元素在后端插入并从前端移除。java中的队列可以使用链表、DeQueue、优先级队列等类来实现。优先级队列是普通队列的扩展形式,每个元素都有一个优先级。队列的add()方法该方法用于向队列中插入元素。它将定义的元素(作为

队列在PHP与MySQL中的任务监控和任务调度的实现方案 队列在PHP与MySQL中的任务监控和任务调度的实现方案 Oct 15, 2023 am 09:15 AM

队列在PHP与MySQL中的任务监控和任务调度的实现方案引言在现代的Web应用程序开发中,任务队列是非常重要的一项技术。通过队列,我们可以将一些需要在后台执行的任务排队,并通过任务调度来控制任务的执行时间和顺序。本文将介绍如何在PHP与MySQL中实现任务的监控和调度,并提供具体的代码示例。一、队列的工作原理队列是一种先进先出(FIFO)的数据结构,可以用来

PHP邮件队列系统的原理和实现方式是什么? PHP邮件队列系统的原理和实现方式是什么? Sep 13, 2023 am 11:39 AM

PHP邮件队列系统的原理和实现方式是什么?随着互联网的发展,电子邮件已经成为人们日常生活和工作中必不可少的通信方式之一。然而,随着业务的增长和用户数量的增加,直接发送电子邮件可能会导致服务器性能下降、邮件发送失败等问题。为了解决这个问题,可以使用邮件队列系统来通过串行队列的方式发送和管理电子邮件。邮件队列系统的实现原理如下:邮件入队列当需要发送邮件时,不再直

Yii框架中的队列:高效地处理异步操作 Yii框架中的队列:高效地处理异步操作 Jun 21, 2023 am 10:13 AM

随着互联网的快速发展,应用程序对于处理大量并发请求和任务变得越来越重要。在这样的情况下,处理异步任务是必不可少的,因为这可以使应用程序更加高效,并更好地响应用户请求。Yii框架提供了一个方便的队列组件,使得处理异步操作更加容易和高效。在本篇文章中,我们将探讨Yii框架中队列的使用和优势。什么是队列队列是一种数据结构,用于处理数据的先进先出(FIFO)顺序。队

See all articles