《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

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

MySQL是一個開源的關係型數據庫管理系統,適用於數據存儲、管理、查詢和安全。 1.它支持多種操作系統,廣泛應用於Web應用等領域。 2.通過客戶端-服務器架構和不同存儲引擎,MySQL高效處理數據。 3.基本用法包括創建數據庫和表,插入、查詢和更新數據。 4.高級用法涉及復雜查詢和存儲過程。 5.常見錯誤可通過EXPLAIN語句調試。 6.性能優化包括合理使用索引和優化查詢語句。

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

InnoDB的鎖機制包括共享鎖、排他鎖、意向鎖、記錄鎖、間隙鎖和下一個鍵鎖。 1.共享鎖允許事務讀取數據而不阻止其他事務讀取。 2.排他鎖阻止其他事務讀取和修改數據。 3.意向鎖優化鎖效率。 4.記錄鎖鎖定索引記錄。 5.間隙鎖鎖定索引記錄間隙。 6.下一個鍵鎖是記錄鎖和間隙鎖的組合,確保數據一致性。

MySQL查询性能不佳的原因主要包括没有使用索引、查询优化器选择错误的执行计划、表设计不合理、数据量过大和锁竞争。1.没有索引导致查询缓慢,添加索引后可显著提升性能。2.使用EXPLAIN命令可以分析查询计划,找出优化器错误。3.重构表结构和优化JOIN条件可改善表设计问题。4.数据量大时,采用分区和分表策略。5.高并发环境下,优化事务和锁策略可减少锁竞争。

在數據庫優化中,應根據查詢需求選擇索引策略:1.當查詢涉及多個列且條件順序固定時,使用複合索引;2.當查詢涉及多個列但條件順序不固定時,使用多個單列索引。複合索引適用於優化多列查詢,單列索引則適合單列查詢。

要優化MySQL慢查詢,需使用slowquerylog和performance_schema:1.啟用slowquerylog並設置閾值,記錄慢查詢;2.利用performance_schema分析查詢執行細節,找出性能瓶頸並優化。

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。