WEB开发网      濠电姷鏁告慨鐑藉极閸涘﹦绠鹃柍褜鍓氱换娑欐媴閸愬弶鎼愮痪鍓ф嚀閳规垿鎮╃€圭姴顥濋梺姹囧€楅崑鎾诲Φ閸曨垰绠涢柛顐f礃椤庡秹姊虹粙娆惧剳闁哥姵鍔欐俊鐢稿礋椤栨艾鍞ㄩ梺闈浤涙担鎻掍壕闁圭儤顨嗛埛鎺楁煕閺囥劌浜滄い蹇e弮閺屸€崇暆鐎n剛鏆犻柧浼欑到閵嗘帒顫濋悡搴d画缂佹鍨垮缁樻媴缁涘娈┑顔斤公缁犳捇銆佸鎰佹▌濠电姭鍋撳ù锝囩《閺€浠嬫煟濡鍤嬬€规悶鍎辫灃闁绘ê寮堕崯鐐电磼閸屾氨效鐎规洘绮忛ˇ瀵哥棯閹佸仮鐎殿喖鐖煎畷鐓庘槈濡警鐎崇紓鍌欑劍椤ㄥ棗鐣濋幖浣歌摕闁绘棃顥撻弳瀣煟濡も偓閻楀棗鈻撳Δ鍛拺閻犲洠鈧櫕鐏€闂佸搫鎳愭慨鎾偩閻ゎ垬浜归柟鐑樼箖閺呮繈姊洪棃娑氬婵☆偅鐟╅、娆掔疀閺冨倻鐦堥梺姹囧灲濞佳勭閿曞倹鐓曢柕濞垮劤閸╋絾顨ラ悙鏉戝妤犵偞锕㈤、娆撴嚃閳哄骞㈤梻鍌欐祰椤鐣峰Ο鑲╃煋妞ゆ棁锟ユ禍褰掓煙閻戞ɑ灏ù婊冪秺濮婅櫣绱掑Ο铏逛桓闂佹寧娲嶉弲娑滅亱闂佸憡娲﹂崹閬嶅煕閹达附鐓欓柤娴嬫櫅娴犳粌鈹戦垾鐐藉仮闁诡喗顨呴埥澶愬箳閹惧褰囩紓鍌欑贰閸犳牠顢栭崨鎼晣闁稿繒鍘х欢鐐翠繆椤栨粎甯涙繛鍛喘濮婄粯鎷呴悷閭﹀殝缂備浇顕ч崐鍨嚕缂佹ḿ绡€闁搞儯鍔嶅▍鍥⒑缁嬫寧婀扮紒瀣崌瀹曘垽鎮介崨濠勫幗闁瑰吋鐣崹濠氬煀閺囥垺鐓ユ慨妯垮煐閻撶喖鐓崶銉ュ姢缂佸宕电槐鎺旂磼濡偐鐣虹紓浣虹帛缁诲牆鐣峰鈧俊姝岊槺缂佽鲸绻堝缁樻媴缁涘娈愰梺鎼炲妺閸楀啿鐣烽鐐茬骇闁瑰濮靛▓楣冩⒑缂佹ɑ鈷掗柍宄扮墦瀵偊宕掗悙瀵稿幈闂佹娊鏁崑鎾绘煛閸涱喚鎳呮俊鍙夊姇铻i悶娑掑墲閺傗偓闂備胶绮崝鏇炍熸繝鍥у惞闁绘柨鐨濋弨鑺ャ亜閺冨洦顥夐柛鏂诲€濋幗鍫曟倷閻戞ḿ鍘遍梺鍝勬储閸斿本鏅堕鐐寸厱婵炲棗绻掔粻濠氭煛鐏炵晫效鐎规洦鍋婂畷鐔碱敆閳ь剙鈻嶉敐鍥╃=濞达絾褰冩禍鐐節閵忥絾纭炬い鎴濇川缁粯銈i崘鈺冨幍闁诲孩绋掑玻璺ㄧ不濮椻偓閺屻劌鈽夊Ο澶癸絾銇勯妸锝呭姦闁诡喗鐟╅、鏃堝礋椤撴繄绀勯梻鍌欐祰椤曟牠宕伴弽顐ょ濠电姴鍊婚弳锕傛煙椤栫偛浜版俊鑼额嚙閳规垿鍩勯崘銊хシ濡炪値鍘鹃崗妯侯嚕鐠囨祴妲堥柕蹇曞閳哄懏鐓忓璺虹墕閸旀挳鏌涢弬娆炬Ш缂佽鲸鎸婚幏鍛矙鎼存挸浜鹃柛婵勫劤閻挾鎲搁悧鍫濈瑨闁哄绶氶弻鐔煎礈瑜忕敮娑㈡煛閸涱喗鍊愰柡灞诲姂閹倝宕掑☉姗嗕紦 ---闂傚倸鍊搁崐鎼佸磹閻戣姤鍊块柨鏃堟暜閸嬫挾绮☉妯哄箻婵炲樊浜滈悡娑㈡煕濞戝崬骞樻い鏂挎濮婅櫣鎹勯妸銉︾彚闂佺懓鍤栭幏锟�
开发学院数据库MSSQL Server SQL Server数据库技术(111) 阅读

SQL Server数据库技术(111)

 2007-11-11 08:34:30 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闂備礁婀遍搹搴ㄥ窗閺嶎偆涓嶆い鏍仦閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偛顦甸弫鎾绘偐閹绘帞鈧參姊哄Ч鍥х仼闁诲繑鑹鹃悾鐑藉蓟閵夛妇鍘甸梺瑙勵問閸犳牠銆傛總鍛婄厱閹艰揪绱曟牎闂侀潧娲ょ€氫即鐛幒妤€绠f繝闈涘暙娴滈箖鏌i姀鈶跺湱澹曟繝姘厵闁绘劦鍓氶悘杈ㄤ繆閹绘帞澧涚紒缁樼洴瀹曞崬螖閸愬啠鍓濈换娑樼暆婵犱胶鏁栫紓浣介哺閹瑰洤鐣烽幒鎴僵闁瑰吀鐒﹂悗鎼佹⒒娴g儤鍤€闁搞倖鐗犻獮蹇涙晸閿燂拷濠电姷鏁告慨鐑藉极閸涘﹥鍙忔い鎾卞灩缁狀垶鏌涢幇闈涙灈鐎瑰憡绻冮妵鍕箻鐎靛摜鐣奸梺纭咁潐濞茬喎顫忕紒妯肩懝闁逞屽墮宀h儻顦查悡銈夋煏閸繃鍋繛宸簻鎯熼梺瀹犳〃閼冲爼宕濋敃鈧—鍐Χ閸℃鐟愰梺鐓庡暱閻栧ジ宕烘繝鍥у嵆闁靛骏绱曢崢顏堟⒑閹肩偛鍔楅柡鍛⊕缁傛帟顦寸紒杈ㄥ笚濞煎繘鍩℃担閿嬵潟闂備浇妗ㄩ悞锕傚箲閸ヮ剙鏋侀柟鍓х帛閺呮悂鏌ㄩ悤鍌涘闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闂備礁婀遍搹搴ㄥ窗閺嶎偆涓嶆い鏍仦閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹  闂傚倸鍊搁崐鎼佸磹閻戣姤鍤勯柤鍝ユ暩娴犳氨绱撻崒娆掑厡缂侇噮鍨堕妴鍐川閺夋垹鍘洪悗骞垮劚椤︻垶宕¢幎鑺ョ厪闊洦娲栨牎闂佽瀵掗崜鐔奉潖閾忓湱纾兼俊顖氭惈椤秴顪冮妶鍡楀闁告鍥х叀濠㈣泛谩閻斿吋鐓ラ悗锝庡厴閸嬫挻绻濆顓涙嫼閻熸粎澧楃敮鎺撶娴煎瓨鐓曢柟鎯ь嚟閳藉鏌嶇紒妯荤叆妞ゎ偅绻堥幊婊呭枈濡顏归梻鍌欑閹诧紕绮欓幋锔哄亼闁哄鍨熼弸鏃堟煛閸愶絽浜剧紓浣虹帛缁嬫挻绂掗敃鍌氱<婵﹩鍓﹂悗鎶芥⒒娴e摜锛嶇紒顕呭灦楠炴垿宕堕鍌氱ウ闁诲函缍嗘禍鏍绩娴犲鐓欓梺顓ㄧ畱婢ь垱銇勯弬鍨偓瑙勭┍婵犲洦鍊锋い蹇撳閸嬫捇寮借濞兼牕鈹戦悩瀹犲闁稿被鍔庨幉姝岀疀濞戞ḿ鐤呴梺鍦檸閸犳寮查幖浣圭叆闁绘洖鍊圭€氾拷
核心提示:sql server(WINDOWS平台上强大的数据库平台) 2000 提供了比以前版本更多的复制选项,其中包括立即更新订购者,SQL Server数据库技术(111),排队更新,以排队更新作为热备份的立即更新,外键表的论文必须要有一个联合过滤器来代表其对主键表的依赖关系,联合过滤并不仅限于主键/外键关系,传递复制数据
 sql server(WINDOWS平台上强大的数据库平台) 2000 提供了比以前版本更多的复制选项,其中包括立即更新订购者,排队更新,以排队更新作为热备份的立即更新,传递复制数据,过滤出版数据等。其中前三个选项表示可在订购者处对复制数据进行修改,然后将修改以相应的方式反映到出版者那里。如果在复制中使用这些复制选项,将使复制的配置和管理更为困难,所以很有必要对这些复制选项有着更为清晰的认识和了解。

16.6.1 立即更新订购者
  所谓立即更新订购者是指在复制时使用了立即更新选项。通常而言,快照复制和事务复制都是单向数据复制即数据从出版者的源数据库复制到订购者的目标数据库。但是sql server(WINDOWS平台上强大的数据库平台) 通过允许订购者来修改复制数据而增强了这种模式的功能。立即更新订购者选项允许既可以在出版者也可以在订购者处对复制数据进行修改。立即更新是指对复制数据进行修改的订购者与出版者之间保持数据的立即更新,即立即将订购者的修改反映到出版者那里。并且提供了对其它订购者而言的潜在事务一致性,即订购者的修改在立即反映到出版者那里之后,允许这一修改不必马上同步到其它订购者那里。在创建出版物时对该选项进行设置。

  应该强调的是,在对数据进行修改的订购者与出版者之间使用了两阶段提交协议,从而要求当订购者对数据的修改在出版者那里被成功提交之后,这一修改才会在该订购者处被提交。如果提交成功,然后出版者才会在分发代理执行时(如果是快照复制,则也可以是在快照被刷新时),把这种修改分发到其它的订购者那里。

  与完全的两阶段提交协议相比,立即更新订购者选项降低了复制的复杂性以及事务提交失败的可能性。因为完全的两阶段协议要求所有参与事务的服务器之间必须有可靠的网络连接,并且对数据的修改只有在所有的参与者中都被成功提交才会生效但当设置立即更新订购者选项时,由于仅在对复制数据进行修改的订购者与出版者之间使用了二阶段提交协议,所以事务的完整性仍得到很好的维护,而在出版者和其它订购者之间并不使用二阶段提交协议,这样便取消了所有参与者必须保持数据同步的复杂性。
注意:合并复制不允许使用立即更新订购者选项。

在sql server(WINDOWS平台上强大的数据库平台) 2000 中,若设置了立即更新订购者选项则,需要以下组件的支持;
触发器
存储过程
Microsoft 的分布式事务协调器MS DTC
冲突检测
环路检测

1 触发器
触发器位于订购者,被用来捕捉在订购者上发生的事务并利用远程过程调用将事务提交给出版者。由于使用二阶段提交协议,从而保证事务在出版者被成功提交后才会在订购者那里提交,如果提交失败,则订购者事务将回滚,从而使订购者数据库与出版者数据库仍能保持同步。
2 存储过程
存储过程位于出版者上,如果自订购者上次接收复制数据以来,出版者数据库发生的变化与订购者提交的事务不发生冲突,才允许在出版者提交这些来自订购者的事务。若有冲突发生,则拒绝事务提交,两处的事务都将回滚。每篇论文都有为INSERT、 DELETE、 UPDATE 事务创建的存储过程。
3 Microsoft 的分布式事务协调器(MS DTC)
在触发器使用存储过程将订购者事务提交给出版者时,需要Microsoft 的分布式事务协调器(MS DTC) 来管理出版者与订购者之间的两阶段提交。远程存储过程使用BEGIN DISTRIBUTED TRANSACTION 来对MS DTC 进行初始化操作。
4 冲突检测
出版数据库中的存储过程使用时间戳来进行检测,以确定某列被复制到订购者之后是否又被修改。当订购者提交立即更新事务时,它会把某行的所有列(包括时间戳列)送回到出版者,出版者利用存储过程将该行当前(属于出版者数据库)的时间戳值与从订购者送回的时间戳值进行比较,如果相同,表明在复制给订购者之后没有发生修改,则接收事务(用从订购者送回的行值来修改该行的当前值)。
5 环路检测
环路检测主要是基于以下考虑而被提出的,即如果订购者的立即更新事务在出版者和订购者都被成功提交后,出版者要在以后的某一时刻将该事务复制到其它订购者,但是由于提交立即更新事务的订购者已成功提交了该事务,因此也就没有必要再将此事务从出版者那里复制给该订购者。如何解决该问题呢?环路检测就是用来确定一事务是否已在某订购者服务器处被成功提交,从而避免该事务又一次应用于订购者服务器,最终因破坏了完整性约束(如向同一表中插入同一行)导致复制中止。

16.6.2 排队更新订购者
排队更新选项是sql server(WINDOWS平台上强大的数据库平台) 2000 的新增功能。与立即更新订购者一样,排队更新允许快照复制或事务复制的订购者对复制数据的修改,然后将修改反映到出版者那里。但不同的是,排队更新并不要求订购者与出版者之间的网络连接一直处于激活状态。
  通常在创建出版物时对该复制选项进行设置,如果使用了排队更新选项,那么订购者对复制数据的修改是保存在一个队列中。当订购者与出版者之间的网络连接恢复时,这些队列中的事务将按先后顺序被应用到出版者。
  由于订购者对复制数据的修改是以异步的方式反映到出版者那里的,所以,一旦同一数据被出版者或其它的订购者修改,则容易出现复制数据的修改冲突。在创建出版物时,我们通常也要决定冲突的解决策略,从而对可以出现的冲突提供解决方案,保证复制数据的一致性。
  如果用户经常读到数据,并且偶尔修改数据,则在该情况下推荐使用排队修改,这样订购者即使在离线的情况下仍可以对复制数据进行修改。

在sql server(WINDOWS平台上强大的数据库平台) 2000 中,若设置了立即更新订购者选项,则需要以下组件的支持:
触发器
队列
存储过程
队列阅读代理

1 触发
触发器依附在订购者的出版表上,当进行排队更新时,触发器用来捕捉订购者上执行的事务,然后将这些事务包在消息中并传送到队列中。

2 存储过程
在创建出版物时,若指定了排队更新选项,则在出版数据库中对出版表执行插入、删除、更新的存储过程将自动生成。队列阅读代理将调用存储过程在出版者上执行队列中的事务,并进行冲突检,测如有必要则产生一些补充命令,这些命令首先传给分发数据库,然后传送给订购者。除此之外,在出版者上仍要创建记录冲突信息,并将冲突信息传递给相关订购者的存储过程,如果检测到冲突,这些存储过程将由队列阅读代理调用。

3 队列
队列主要用来存储包含订购者事务的消息,订购者与分发者都有一个消息队列。在网络断开的情况下,包含订购者事务的消息首先存储在订购者消息队列,然后在网络接通时被传送到分发者消息队列。队列阅读代理读到这些消息并将消息中的事务应用到出版者。

4 队列阅读代理
队列阅读代理运行在分发者上多线程代理,其主要任务就是从消息队列中读取信息并将事务应用到出版者。

16.6.3 转换复制数据
  转换复制数据是sql server(WINDOWS平台上强大的数据库平台) 2000 新增的功能。用可转换订购(Transformable subscriptions)来实现复制数据的转换。可转换订购主要是利用数据转换服务(DTS)所提供的功能,如数据移动、传递映射、过滤等,从而可以根据每个订购者的具体要求来定制、发送复制数据。它可以在快照复制和事务复制中使用。比如,在以下情况下我们应该使用转换复制数据选项:

  根据每一订购者对出版数据进行列或水平分割
  在sql server(WINDOWS平台上强大的数据库平台) 2000 以前的版本中,由于不同的订购者需要不同的数据(这里订购者所需要的数据是指表在垂直或水平分割后的某一部分),所以必须把数据分割成不同的数据块,从而在创建快照复制或事务复制时,也要分别为每一个订购者创建不同的出版物。这给复制的管理和配置带来极大的不便,由此可增加系统的负担。但是在sql server(WINDOWS平台上强大的数据库平台) 2000 中,可转换订购允许为同一出版物创建定制的数据分割(列或行分割),即同一出版物支持多个订购,从而满足不同订购者对出版数据的不同需求。

  创建数据转换,如数据类型匹配、列操作(如两列合成一列)、字符串操作、用户自定义函数等。
  使用可转换订购在出版者与订购者之间进行基本的、简单的数据转换和列操作主要包括以下几个方面:

  改变数据类型(除主键列外)
  重新命名某列
  从某列提取子字符串或向某列添加额外的字符
  对某列使用函数
  在创建出版物时设置该选项。完成该选项设置后,将创建一个复制DTS 包,订购者将把该DTS 包作为出版物的一部分。
  下面我们将介绍在Enterprise Manager 中如何创建可转换订购。
  首先,在创建出版物时要设置Transform Published Data 选项,在创建出版物的step6 (见16.3 快照复制图16-24),在Updatable Subscriptions 对话框中不选中任何选项,然后单击“下一步”,会打开Transform Published Data 对话框,如图16-55。 所示在该对话框中选择Yes, transform the data。 然后完成出版物的创建。
sql server<font class=reblank  style=(WINDOWS平台上强大的数据库平台)数据库技术(111)(图一)" />
  其次,在Enterprise Manager 创建可转换订购需要执行以下操作:

(1) 启动sql server(WINDOWS平台上强大的数据库平台) Enterprise Manager, 登录到指定的服务器,顺次打开 Replication、 Publication 文件夹。从中选择设置了Transform Published Data 选项的出版物。
(2) 右击该出版物,在弹出菜单中选择Define Transformation of Publication 选项,打开Welcome to Transform Published Data 对话框,如图16-56 所示。(有关该向导的余下操作请参看数据转换服务DTS 一章)。
sql server<font class=reblank  style=(WINDOWS平台上强大的数据库平台)数据库技术(111)(图二)" />
最后,按照订购出版物的步骤向订购者推出出版物。

16.6.4 代替同步伙伴(Alternate Synchronization Partners)
  代替同步伙伴的功能使用合并复制的订购者不仅可与创建订购的出版者进行数据同步,而且也可以与其它订购者服务器进行数据同步,即使主出版者不能继续使用。当使用交替同步伙伴时,需要注意以下要求:
  • 只有合并复制才可使用该新特征;
  • 代替同步伙伴必须有订购所需要的数据和论文结构;
  • 在代替同步伙伴上的出版物最好是在原始出版者上所创建的出版物的克隆;
  • 必须将出版物的属性定义为订购者可与其它出版者进行数据同步;
  • 对于命名订购,必须保证该订购者也是代替同步伙伴的订购者,这样订购者才能与其它出版者进行数据同步;
  • 对于命名订购,代替同步伙伴上自动添加与原始出版者上订购具有相同属性的新订购;
16.6.5 过滤复制数据
  过滤复制数据实质就是对出版表进行垂直、水平分割,在创建出版物时,我们需要确定使用怎样的过滤策略。虽然过渡复制数据与可转换订购都提供了对数据的分割功能,但两者仍存在一定的区别,主要表现在:可转换订购是根据每一订购者对复制数据的需求,对同一出版物进行分割,从而创建不同的订购,其中仅涉及到一个出版物;而过滤复制数据是在创建出版物时需要确定的选项,其分割的对象是出版表。
过滤复制数据主要能够带来以下几个好处:
  • 使通过网络传送的数据量最小化;
  • 减少订购者所需要的存储空间;
  • 根据每一个订购者具体的要求定制出版物;
  • 由于分割后的不同的数据块复制到不同的订购者,从而避免或减少了冲突产生的可能性。
   过滤复制数据包括四种过滤类型:列过滤、行过滤、动态过滤和联合过滤。其中列和行过滤可在快照复制、事务复制和合并复制中使用,但动态过滤和联合过滤却仅能在合并复制中使用。

1 行过滤(Row Filter)
  使用行过滤就是把某些特定的行发送给订购者,清除那些用户不必(或不应)看到的数据行,从而能为不同的订购者创建不同的出版物。同时,由于不同的订购者订购是来自同一表的不同数据行,因此有助于避免因多个订购者修改同一数据而导致的修改冲突。
  行过滤可在合并复制、快照复制和事务复制中使用,但是,在事务复制中由于针对版表的每一数据操作语句(INSERT、 DELETE、 UPDATA) 都要使用过滤条件语句来进行验证,以确定是否打上“复制”标志,所以,使用行过滤会极大地增加系统负载。

2 列过滤(Column Filter)
  列过滤实质就是对表进行垂直分割。使用列过滤能够减少订购者需要的存储空间,减少向订购者传送数据修改的时间。但是有些列不能从出版物中过滤出去,它们是:有主键约束的列;
  没有缺省值的非空列;
  包含在惟一索引中的列;
  合并复制以及立即更新订购者的快照复制或事务复制中的ROWGUID 列。

3 动态过滤(Dynamic Filter)
  动态过滤是指在合并复制的处理过程中,根据从订购者那里得到的数据值对出版表进行数据过滤。在合并复制中使用动态过滤能带来以下好处:
  出版者上几乎不必存储出版物从而减少因管理多个出版物而带来的系统负载;
  在动态过滤中使用用户自定义的函数,这样根据订购者的属性来进行数据过滤,从而使订购者仅获得必要的信息。

4 联合过滤(Joint Filter)
  联合过滤允许在合并处理过程中定义两个出版表中的关系。它常与行过滤一同使用,并在合并处理中保持联合出版表之间的参照完整性。如果某一使用笔过滤的出版表被另外的出版表的外键所引用,那么,外键表的论文必须要有一个联合过滤器来代表其对主键表的依赖关系。
  联合过滤并不仅限于主键/外键关系,事实上也可以针对任何两个不同的出版表的数据间的比较关系设置联合过滤。

Tags:SQL Server 数据库

编辑录入:coldstar [复制链接] [打 印]
赞助商链接