仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1106|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL网页编程之SQL Server merge replication: 巧用Me...

[复制链接]
飘灵儿 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:39:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
上面我们说了DML的闪回方案。但对于DDL却无能为力,对于大多数的DDL,即使是rowbase格式,二进制日志binlog中仍只记录语句本身。对于删表操作,只记录一个语句droptablet。仅凭这句话,无法还原表的数据。server|创立
我们晓得,SQLServer2000的MergeReplication撑持dynamicfilter的功效。假如我们有多个subscriber,每一个subscriber只必要保护本人特定的数据,这时候候我们只需创立一个publication,然后使用dynamicfilter的功效,把每一个subscriber必要的特定命据复制已往。最经常使用的用于dynamicfilter的体系函数是SUSER_SNAME()和HOST_NAME(),针对每一个subscriber的mergeagent连到publisher时,SQLServer管帐算出么特定mergeagent毗连的SUSER_SNAME()或HOST_NAME()值,然后依据了局来过滤数据。



间接使用SUSER_SNAME()或HOST_NAME()时分,必要table中有响应SUSER_SNAME()或HOST_NAME()的值。好比假如我们的publisherserver叫shanghai来保护一切的数据,三个subscriber分离叫nanjing,suzhou和hangzhou来保护各自的数据,假如我们但愿使用HOST_NAME()把数据复制到三个subscriber,我们的表中应当有一列来存HOST_NAME()的值,然后我们才干用dynamicfilter如”filter_column=host_name()”来过滤数据:



createtableorders(orderIDintnotnull,filter_columnchar(20),Quantityint)

go

insertintoordersvalues(1,’nanjing’,100)

insertintoordersvalues(2,’suzhou’,200)

insertintoordersvalues(3,’hangzhou’,120)

insertintoordersvalues(4,’hangzhou’,100)

go



可是,假如我们的表中的数据没有刚好和SUSER_SNAME()或HOST_NAME()婚配的,我们该如何来做dynamicfilter呢?



好比下表,只要一个zoneID能够用来辨别分歧subscriber必要的数据,可是它的值和SUSER_SNAME()或HOST_NAME()都分歧。



createtableorders(orderIDintnotnull,zoneIDnvarchar(5),Quantityint)

go

insertintoordersvalues(1,N1,100)

insertintoordersvalues(2,N2,200)

insertintoordersvalues(3,N3,120)

insertintoordersvalues(4,N3,100)



要为这类数据做dynamicfilter,我们能够使用MergeAgent的一个参数,hostname,来完成。SQLServerBooksOnline没有很好注释该参数的用法。当我们没无为mergeagent指定该参数时分,针对mergeagent毗连的host_name()函数前往mergeagent地点服务器的盘算机称号;当我们为mergeagent指定了该参数时分,host_name()函数前往hostname参数指定的代价。



好比,假如我们想把zoneID=N’1’的纪录复制到nanjing,我们仍旧能够用”zoneID=host_name()”filter,只需为nanjing的mergeagent增加“-hostname=1”参数便可。



为了增加这个参数,右键单击mergeagent,选择AgentProperties,选择steps选项页,双击Runagent,然后在Command最初增加”-hostname1”便可。







关于mergeagent的一切可用参数,见MSDN.
其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
飘灵儿 该用户已被删除
沙发
 楼主| 发表于 2015-1-19 20:44:05 | 只看该作者
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。
admin 该用户已被删除
板凳
发表于 2015-1-27 19:30:32 来自手机 | 只看该作者
对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。
海妖 该用户已被删除
地板
发表于 2015-2-5 10:49:12 | 只看该作者
学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!
再现理想 该用户已被删除
5#
发表于 2015-2-11 09:55:35 | 只看该作者
财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
简单生活 该用户已被删除
6#
发表于 2015-3-2 10:18:51 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
山那边是海 该用户已被删除
7#
发表于 2015-3-11 03:11:35 | 只看该作者
备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
谁可相欹 该用户已被删除
8#
发表于 2015-3-24 21:45:44 | 只看该作者
对于微软系列的东西除了一遍遍尝试还真没有太好的办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-3 16:24

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表