数据库变更/故障?客户无感知,畅享稳定体验(TAC) -合毅科技
暂无图片
登录 注册
暂无图片
11
暂无图片
暂无图片
暂无图片

数据库变更/故障?客户无感知,畅享稳定体验(TAC)

甲骨文云技术 2023-08-01
722
在数据库运维工作中,难免会遇到打补丁、升级硬件等涉及停机的操作,我们可以采用RAC+ADG再配合上TAC服务来保障业务的连接性,做到应用无感的进行硬件维护、升级或打补丁操作

以前,大家可能对SELECT语句的断点续传(即登录一个数据库实例发出select查询,在输出结果过程中,此实例突然崩溃,RAC中存活实例继续输出查询结果,对用户来说完全无感知)十分熟悉,有了TAC,DML、DDL语句也可以做到类似的断点继传功能啦!

接下来就让我来带大家一起领略一下TAC的风采。

首先,需要解答:什么是TAC?

其次,需要了解:TAC的目标是什么?
目标:应对计划内维护和意外停机,为应用层屏蔽掉99%的异常.

最后,需要落地:具体如何实现TAC?

简单四步走起:

第一步,配置应用程序
    • 使用推荐的连接串
    • 使用支持的客户端版本
    • 应用程序满足条件
第二步,为您的工作负载配置数据库端服务(DBA)
    • 正确配置的数据库和集群架构
    • 为特定工作负载创建数据库服务
    • 确保连接字符串使用此数据库服务
第三步,为您应用程序使用的可变函数授权(DBA)
    • 识别应用程序中使用的可变函数,DBA授权正确权限
第四步,测试和评估重放保护
    • 检查相关视图、AWR以获取保护的统计信息
    • 使用ACCHK实用程序识别重放异常

为了让大家更加通俗易懂,我们把实现TAC的详细内容分解归类如下:

1) 要求使用推荐的连接串:

将连接串与内置的超时、重试和延迟一起使用,以便传入的连接在中断期间不会看到错误。

RAC环境:
Alias (or URL) =
(DESCRIPTION =
(CONNECT_TIMEOUT= 90)(RETRY_COUNT=50)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)
(ADDRESS_LIST = (LOAD_BALANCE=on)(ADDRESS = (PROTOCOL = TCP)(HOST=primary-scan)(PORT=1521)))

(CONNECT_DATA=(SERVICE_NAME = YOUR SERVICE)))

RAC+ADG环境:

Alias (or URL) =

(DESCRIPTION =

(CONNECT_TIMEOUT= 90)(RETRY_COUNT=50)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)

(ADDRESS_LIST = (LOAD_BALANCE=on)(ADDRESS = (PROTOCOL = TCP)(HOST=primary-scan)(PORT=1521)))

(ADDRESS_LIST = (LOAD_BALANCE=on)(ADDRESS = (PROTOCOL = TCP)(HOST=standby-scan)(PORT=1521)))

 (CONNECT_DATA=(SERVICE_NAME = YOUR SERVICE)))
2) 要实现TAC必须使用支持的客户端,具体罗列如下
  • Oracle JDBC Replay Driver 18c或更高版本

  • Oracle Universal Connection Pool (UCP) 18c or later with Oracle JDBC Replay Driver 18c or later.

  • Oracle WebLogic Server 18c, or third-party JDBC application servers using UCP with Oracle JDBC Replay Driver 18c or later

  • Java connection pools 或 standalone Java applications using Oracle JDBC Replay Driver 18c or later with Request Boundaries

  • OCI Session Pool 18c或更高版本

  • SQL*Plus 18c或更高版本

  • ODP.NET pooled, Unmanaged Driver 18c or later (“Pooling=true” default in 12.2 and later)

  • OCI-based applications using 19c OCI driver或更高版本
3) 需要使用推荐的应用程序实践:

应用程序在需要时从连接池中获取连接,然后在当前操作完成时将其归还到连接池中。

Oracle建议使用支持FAN的Oracle连接池来屏蔽计划内的维护。当应用程序使用带有FAN的Oracle连接池时,在请求之间将连接返回到池时,对用户没有影响。

当Oracle连接池接收到计划停机的FAN事件时,它会将实例上的所有连接标记为排空。立即关闭已归还的连接,以便不再使用它们。当正在使用的连接返回到池时,它们将被关闭。随着时间的推移会优雅地关闭所有连接。

如果您使用的是基于Java的第三方的Application Server,那么实现排空会话和故障转移的有效方法是用UCP替换现有的数据源连接。许多应用服务器都支持这种方法,包括IBM WebSphere、IBM Liberty、Apache Tomcat、Red Hat WildFly(WildFly(JBoss))、Spring、Hibernate等。Oracle和其他提供商(如IBM)的白皮书描述了如何在这些Application Server上使用UCP。使用UCP作为数据源,可以使用很多UCP的功能,如快速连接故障转移、运行时负载均衡、应用程序连续性和透明的应用程序连续性。

使用连接测试:分为客户端侧(驱动程序)连接测试 、数据库侧(SQL连接测试)。

4) 要求创建正确的数据库服务,详细的配置项如下:
  • CDB/PDB名

  • 首选节点,备用节点

  • 是否failback

  • 负载均衡的方式

  • 使用AC 或 TAC

  • 使用事务卫士

  • 重放的时间参数

  • TAF配置

  • FAN配置

  • 排空的配置

注意:不要使用默认数据库服务。不要使用默认的数据库服务来实现高可用性,因为此服务无法启用(enable)或禁用( disable ),也无法在Oracle RAC上重新定位或切换到Oracle Data Guard。此服务是为Oracle Enterprise Manager Cloud Control (OEMCC)和DBA保留的(用于管理的目的)。
5) 要求启用应用程序中的可变函数:

可变函数(Mutable functions ):是指每次执行时可能返回不同值的函数。

支持保留SYSDATE、SYSTIMESTAMP、LOCAL_TIMESTAMP、 SYS_GUID 、CURRENT_TIMESTAMP和sequence.NEXTVAL可变函数原始结果,如果不保留原始值,并且在重放时将不同的值返回给应用程序,则会拒绝重放。

针对SQL,应用程序连续性19c和更高版本自动启用可变函数的原值重放,因此不需要执行任何操作。

如果您使用PL/SQL的可变函数,或者您使用的是Oracle database 19c之前的数据库版本,那么DBA必须发出GRANT KEEP授权。当授予KEEP权限后,在重放时,会使用原始函数结果,例如:

对象的拥有者:

SQL> CREATE SEQUENCE.. [sequence object] KEEP;

SQL> ALTER SEQUENCE.. [sequence object] KEEP;

对其它用户授权:

SQL> GRANT KEEP DATE TIME TO USER;

SQL> GRANT KEEP SYSGUID TO USER;

SQL> GRANT KEEP SEQUENCE ON [sequence object] TO USER;

只有串行处理计划才支持保留SYS_GUID值。使用并行查询时,应用程序连续性无法恢复SYS_GUID的原始值。
6) 要求了解使用TAC或AC时的保护级别:

应用程序连续性从系统、会话和服务层面收集统计信息,使您能够监视保护级别。统计信息在V$SYSSTAT、V$SESSTAT中可用,并且在启用服务统计信息时,在V$SERVICE_STATS中可用。这些统计信息保存到自动工作负载存储库(AWR)中,并在AWR报告中可用。

a. AWR报告TAC相关统计信息如下图所示:

a. 使用SQL语句检查TAC的保护级别:

set pagesize 60

set lines 120

col Service_name format a30 trunc heading "Service"

break on con_id skip1

col Total_requests format 999,999,9999 heading "Requests"

col Total_calls format 9,999,9999 heading "Calls in requests"

col Total_protected format 9,999,9999 heading "Calls Protected"

col Protected format 999.9 heading "Protected %"

select con_id, service_name, total_requests,

total_calls,total_protected,total_protected*100/NULLIF(total_calls,0) as Protected

from(

select * from

(select a.con_id, a.service_name, c.name,b.value

FROM gv$session a, gv$sesstat b, gv$statname c

WHERE a.sid = b.sid

AND a.inst_id = b.inst_id

AND b.value != 0

AND b.statistic# = c.statistic#

AND b.inst_id = c.inst_id

AND a.service_name not in ('SYS$USERS','SYS$BACKGROUND'))

pivot(

sum(value)

for name in ('cumulative begin requests' as total_requests, 'cumulative end

requests' as Total_end_requests, 'cumulative user calls in requests' as

Total_calls, 'cumulative user calls protected by Application Continuity' as

total_protected) ))

order by con_id, service_name;

b. 使用ACCHK识别重放异常:

启用ACCHK收集保护数据:

第一步:开启acchk设置:
SQL> EXECUTE DBMS_APP_CONT_ADMIN.ACCHK_SET(TRUE);
或:指定收集保护数据的时间,默认是600秒,也就是说开启acchk之后默认600秒会自动关闭保护数据的收集,测试要求在这个时间段内完成,可以指定更少的时间来禁用收集,如下:
SQL> EXECUTE DBMS_APP_CONT_ADMIN.ACCHK_SET(TRUE, 300);
第二步:连接到AC或TAC的数据库服务上进行测试:运行客户端程序;
第三步:测试完成后,关闭acchk设置:
SQL> EXECUTE DBMS_APP_CONT_ADMIN.ACCHK_SET(FALSE);
注意:数据采集将在600秒后自动禁用(默认值),或者可以在启用数据采集时设置计时器。测试应在规定时间内完成;如果测试没有开始,或者在收集期内没有完成,则要求重新启用ACCHK进行数据收集。
第四步:生成acchk报告:

SQL> SET SERVEROUTPUT ON FORMAT WRAPPED;

SQL> EXECUTE DBMS_APP_CONT_REPORT.ACCHK_REPORT(DBMS_APP_CONT_REPORT.FULL);

注意:报告级别为FULL、WARNING和SUMMARY,默认报告为SUMMARY。
ACCHK报告示例:

想要了解更多内容,可以参考如下资源:

Oracle Technology Network (OTN) Home page for Application Continuity
http://www.oracle.com/goto/ac

编辑:范宏伟

最后修改时间:2023-08-02 11:18:32
文章转载自甲骨文云技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

相关内容推荐

富翁论文论文请教论文重要不论文卖水果油皮论文关于阅读的高中议论文关羽庙论文论文马屁携手论文柳江人论文论文义拼音23论文抽检朱红论文以虚心为话题的议论文点赞作文800字议论文销售社会实践论文范文回报一个微笑 议论文云游的论文画质感论文春耕论文苦难造就人才的议论文人力资源二级论文模板丝线论文尿闭论文反身论文飞跃的论文论文验案上海变迁论文高中关于仪式的议论文关键岗位论文还没论文论文误删追求的副产品议论文吹捧高考状元的议论文救治的论文大学生就业状况调查论文明清货币论文油桃论文论文预投稿出马仙论文师兄论文包头写论文施设计论文小学数学小论文四年级传承中国文化议论文猪肉运输论文论文对接方便品 论文杨行军论文丁醇论文柜员论文bb论文环境利益论文助人亦助己议论文800字关于时间的议论文高中独一无二的自己议论文论文缝合湛冰论文关于角度的议论文作文论文早就步骤sin论文秃杉论文Jfa论文论武术论文毕业论文学校怎么处理去括号论文疫情国家论文论文安慰论文女友检索论文价格苏州园林景观赏析论文大学生挫折心理论文2000字成无己论文抓住小偷挂牌子议论文浅谈长征论文ipq论文论文绪论简介人文地理毕业论文选题内卷论文波哥大论文勇于追梦的议论文素材论文识字写论文模拟微微交论文水球论文学妹论文论文置顶工商管理专科毕业论文范文大全崔波论文借网络论文泡茶的论文点赞作文800字议论文永争第一议论文提前论文付出与收获议论文800字写森林论文学术论文和硕士论文胡伟论文导师评语论文产前论文寸头论文短剧论文bgm论文论文雷区双减小论文论文 字号最美的时光议论文800字玫瑰花和日日春议论文幸福从何而来 议论文天珠论文有关水的议论文及题目大学论文和硕士论文论文再要论文总览骨头论文ins论文走红论文冰封论文粗盐论文老人与海议论文800边缘论文寻物器论文感知论文一千论文中国国论文某市的论文良医论文论文开题概要是字句论文明星鬼畜论文罗伊论文屈明论文论文可以加嘉善论文大学礼记论文导论文献湛冰论文匣钵论文不要盲目跟从的议论文论文风论文政法学论文网线论文治标不治本议论文事例外派论文重述论文吹棒师娘论文班卓琴论文项目贷款论文醒悟论文公马论文积极的生活态度议论文护理竞赛论文暖贴论文舍己为人的高中议论文论文救星exp论文论文的cite成无己论文熔断论文论文攻坚优势整合论文论文拍排版论文标准实例魂斗罗论文CRG论文论文问题点寡肽论文知足者常乐议论文素材本科毕业论文盲审不过支撑论文自媒体毕业论文选题特点论文论文吵架利尿论文任性议论文800字作文隐忍论文学前教育科学论文范文议论文 无规矩不成方圆晒秋论文刹那论文关于志向的议论文开头八达岭老虎伤人议论文论文uk伦理叙事论文小圆论文策论文广东IUC论文论文匿名活页台步论文国贸本科毕业论文选题关于碰瓷的道德议论文宣頔论文货币衍生论文毕业论文的小论文是什么论文短信您大论文魏捷论文树立规则意识的议论文汉服论文开题pr 论文

合作伙伴

合毅科技

www.7272w.cn
www.lpjfm.cn
www.bbswimming.cn
seo.xtcwl.com
www.urkeji.com
baidu.07yue.com
www.pifajia.net.cn
top1.urkeji.com
www.youpinhui.vip
www.lyhbj.cn
www.chaoshanxing.com
www.wangluohr.cn
kuai.urkeji.com
www.china185.com
www.jsfengchao.com
jl.urkeji.com
www.28j.com.cn
www.lpjfm.cn
www.te3.com.cn
www.he1tech.com