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

《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
MySQL的许可与其他数据库系统相比如何?MySQL的许可与其他数据库系统相比如何?Apr 25, 2025 am 12:26 AM

MySQL使用的是GPL许可证。1)GPL许可证允许自由使用、修改和分发MySQL,但修改后的分发需遵循GPL。2)商业许可证可避免公开修改,适合需要保密的商业应用。

您什么时候选择InnoDB而不是Myisam,反之亦然?您什么时候选择InnoDB而不是Myisam,反之亦然?Apr 25, 2025 am 12:22 AM

选择InnoDB而不是MyISAM的情况包括:1)需要事务支持,2)高并发环境,3)需要高数据一致性;反之,选择MyISAM的情况包括:1)主要是读操作,2)不需要事务支持。InnoDB适合需要高数据一致性和事务处理的应用,如电商平台,而MyISAM适合读密集型且无需事务的应用,如博客系统。

在MySQL中解释外键的目的。在MySQL中解释外键的目的。Apr 25, 2025 am 12:17 AM

在MySQL中,外键的作用是建立表与表之间的关系,确保数据的一致性和完整性。外键通过引用完整性检查和级联操作维护数据的有效性,使用时需注意性能优化和避免常见错误。

MySQL中有哪些不同类型的索引?MySQL中有哪些不同类型的索引?Apr 25, 2025 am 12:12 AM

MySQL中有四种主要的索引类型:B-Tree索引、哈希索引、全文索引和空间索引。1.B-Tree索引适用于范围查询、排序和分组,适合在employees表的name列上创建。2.哈希索引适用于等值查询,适合在MEMORY存储引擎的hash_table表的id列上创建。3.全文索引用于文本搜索,适合在articles表的content列上创建。4.空间索引用于地理空间查询,适合在locations表的geom列上创建。

您如何在MySQL中创建索引?您如何在MySQL中创建索引?Apr 25, 2025 am 12:06 AM

toCreateAnIndexinMysql,usethecReateIndexStatement.1)forasingLecolumn,使用“ createIndexIdx_lastNameEnemployees(lastName); 2)foracompositeIndex,使用“ createIndexIndexIndexIndexIndexDx_nameOmplayees(lastName,firstName,firstName);” 3)forauniqe instex,creationexexexexex,

MySQL与Sqlite有何不同?MySQL与Sqlite有何不同?Apr 24, 2025 am 12:12 AM

MySQL和SQLite的主要区别在于设计理念和使用场景:1.MySQL适用于大型应用和企业级解决方案,支持高性能和高并发;2.SQLite适合移动应用和桌面软件,轻量级且易于嵌入。

MySQL中的索引是什么?它们如何提高性能?MySQL中的索引是什么?它们如何提高性能?Apr 24, 2025 am 12:09 AM

MySQL中的索引是数据库表中一列或多列的有序结构,用于加速数据检索。1)索引通过减少扫描数据量提升查询速度。2)B-Tree索引利用平衡树结构,适合范围查询和排序。3)创建索引使用CREATEINDEX语句,如CREATEINDEXidx_customer_idONorders(customer_id)。4)复合索引可优化多列查询,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。5)使用EXPLAIN分析查询计划,避

说明如何使用MySQL中的交易来确保数据一致性。说明如何使用MySQL中的交易来确保数据一致性。Apr 24, 2025 am 12:09 AM

在MySQL中使用事务可以确保数据一致性。1)通过STARTTRANSACTION开始事务,执行SQL操作后用COMMIT提交或ROLLBACK回滚。2)使用SAVEPOINT可以设置保存点,允许部分回滚。3)性能优化建议包括缩短事务时间、避免大规模查询和合理使用隔离级别。

See all articles

热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

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

热工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器