|
谢谢回复。
先就第三个问题说明下。
>>三、曾和某大型券商交流,从他们的证券集中交易系统HACMP+HADR使用经验看,最终只起到DR的作用,HA总是让人扼腕叹息。某人说NEAR-REAL-TIME-IN-SYNC是钱的问题,有多少钱就有多near。不清楚中国银联的高可用设计,感受不到钱多好办事^_^
<<这个问题客户是不是为了调侃你?据我的经验,我们的很多客户都对HADR的HA功能很认可,包括雀巢,百事等等。我没有听说过客户抱怨HACMP+HADR只能起到DR的作用。如果证券系统的使用感受真的这样的话,我想我们要必要拜访一下他们,好好听一下客户的痛苦点。如果确实是这种情况,我们可以想一些办法对产品进行改进;如果是因为客户的使用问题,我们也可以帮他们做一下部署上的调整。客户有没有告诉你证券商为什么这样抱怨?
看到回复中开头说的“客户”一词,刚开始觉得有点突兀,还愣了下才回过神来,我就职于一家上市银行的总行,“客户”这个词习惯上是银行业务服务的对象,比如取款的储户^_^
问题中写的“最终只起到DR的作用,HA总是让人扼腕叹息”无意表达“HACMP+HADR只能起到DR的作用”,文字上“只起到”是表示惋惜遗憾的意思,不是“只能起到”,绝无任何责难之意。这个问题背景来源于和09年和一家上市券商的信息技术部总经理助理的谈话,对方和你同姓,对DB2和ORACLE数据库甚为熟悉,你或许认识。因网上交流如果提及各方所工作的公司,沟通过程没那么自然,这里不指明了,站在个人兴趣爱好角度探讨吧。当时他问起银行这边HACMP+HADR的使用情况,这边因为用在管理系统,生产上切换演练是OK的,没有实际故障接管的案例;券商那边的集中交易系统地位相当于银行这边的核心业务系统,连续可用性要求非常严格,交易期间不幸碰到failover几分钟过不去,后一直改为手工离线做最近几分钟的log shipping,相关情况那边有报给供应商。当时还提到有交易高峰,主机busying相当一段时间,备机不确定主机是否fail,一直没去自动接管的案例,这个案例就不确定是券商那边的案例还是他那边有别的同业交流听来的,我没有深问细节,后面也没再有过这方面的交流。
关于第六个问题“范围集簇表(RCT)除了TPC-C外,有实际的使用案例吗”,因为DB2 8.1.4引入的Range Clustered Table需要预留空间,加上实际工作中没有这方面的需要,即使有相似的应用场景也有替代的设计方式得到RCT的优点,问这个问题是想知道有没有关于RCT的一些巧妙运用的实用案例。
第八个问题“关于transition table过渡表特性,如果在一条sql中定义多个含transition table的cte,因为是打开游标时提交,这些ctes的多个游标是同时打开的还是按定义时的先后次序打开的?如果是先后打开的,那么sql执行中间出错的话就会导致部分提交?这个特性据说正在sql标准化当中,目前进展如何?部分提交导致单条sql事务不完整是它的困难之一?”,是我非常关心的,能解答下吗?
问题背景来源于数年前看过Toronto Lab的Andreas Behm, Serge Rielau, Richard Swagerman合写的《Returning Modified Rows – SELECT Statements with Side Effects》,在sql的select语句中执行update、delete数据修改操作很漂亮,文中提到在公共表表达式CTE中定义的transition table过渡表是do-at-open的,如下:
with cte_tt1 as
(select id,name from new table
(insert into emp(name)
values 'Peter1', 'Paul1', 'Mary1')
)
select * from cte_tt1;
sql内部按照do-at-open语法执行是这样:
declare emp_cur cursor with hold for
select id,name from new table
(insert into emp(name)
values 'Peter1', 'Paul1', 'Mary1');
open emp_cur;
commit;
fetch emp_cur;
...
那么,当定义多个transition table过渡表的公共表表达式ctes:
with cte_tt1 as
(select id,name from new table
(insert into emp1(name)
values 'Peter1', 'Paul1', 'Mary1')
),
with cte_tt2 as
(select id,name from new table
(insert into emp2(name)
values 'Peter2', 'Paul2', 'Mary2')
)
select * from cte_tt1
union all
select * from cte_tt2;
内部实现do-at-open语法是按定义时的先后次序来的吗:
declare emp_cur1 cursor with hold for
select id,name from new table
(insert into emp(name)
values 'Peter1', 'Paul1', 'Mary1');
open emp_cur1;
commit;
fetch emp_cur1;
declare emp_cur2 cursor with hold for
select id,name from new table
(insert into emp(name)
values 'Peter2', 'Paul2', 'Mary2');
--假如这里出错,因cte_tt1插入的数据已经提交,这个sql不能重复执行,和db2 9.7引入的自治事务特性类似,不能rollback了,变成部分成功^_^ETL类应用经常单条sql用多个过渡表修改大量数据,使用上需要特别顾忌,高并发OLTP情况下常见的应用场景将一表的单条数据修改或删除的同时将旧记录插入到另外一张表亦如此,设计上不得不经常使用MERGE语句。(这里插一下题外话,db2 zos上最新V10的时光穿梭time travelling功能,把一表的记录进行插入或修改的同时,自动在历史表进行拉链记录,采用了和过渡表不一样的底层机制,从而保证整个事务的完整性?)
open emp_cur2;
commit;
fetch emp_cur2;
...
CTE因为实现递归的关系,舞动DB2系列关于开发的书想必会写进去。推荐把transition table(old final new)也写进去,因为是sql语法,比SQLSERVER和ORACLE在存储过程里使用old new触发器变量用起来简单。
原帖由 王飞鹏2011 于 2011-5-13 16:58 发表 ![]()
您好!首先感谢您对我们的支持。关于Infomix暂且不评论,下面回答几个,供参考:
>>一、DPF有什么好的高可用方案
ISAS里面集成了HA的方案。不知道好的程度能不能达到客户的要求。也就是有一台备机,当DPF中的一台机器出现问题的时候,就在备机上takeover那个机器上的所有资源。
DB2有一个工具叫db2haicu,里面配置的时候有DPF的高可用性方案,有两种:N+1和N+M。但是cluster manager是使用DB2集成的TSA。目前我们中国的客户还没有采用过这个方案。
>>二、HADR会向INFORMIX的MACH11发展吗
不会,没看出来MACH11有什么优势。
在下一个版本里面,HADR的功能得到了很大改善,包括监控上的增强。其中两个最大的功能是开始支持多点灾备,支持DPF和purescale。加上这两点,我的感觉是HADR的功能要强于INFORMIX MACH11.
>>三、曾和某大型券商交流,从他们的证券集中交易系统HACMP+HADR使用经验看,最终只起到DR的作用,HA总是让人扼腕叹息。某人说NEAR-REAL-TIME-IN-SYNC是钱的问题,有多少钱就有多near。不清楚中国银联的高可用设计,感受不到钱多好办事^_^
这个问题客户是不是为了调侃你?据我的经验,我们的很多客户都对HADR的HA功能很认可,包括雀巢,百事等等。我没有听说过客户抱怨HACMP+HADR只能起到DR的作用。如果证券系统的使用感受真的这样的话,我想我们要必要拜访一下他们,好好听一下客户的痛苦点。如果确实是这种情况,我们可以想一些办法对产品进行改进;如果是因为客户的使用问题,我们也可以帮他们做一下部署上的调整。客户有没有告诉你证券商为什么这样抱怨?
最后,是关于federation server。在下一个版本(代号为:Galileo)里做了改进, 不用创建nickname也能访问远程表。使用方式为:..
以后可能会做进一步,采用 “实例名@表名:机器名”的形式访问远程表。
另外federation server 支持drda数据源的两阶段提交。 |
|