SQL SERVER 2005数据库镜像(1)
2007-05-15 09:30:28 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佺粯鍔﹂崜娆撳礉閵堝洨纾界€广儱鎷戦煬顒傗偓娈垮枛椤兘骞冮姀銈呯閻忓繑鐗楃€氫粙姊虹拠鏌ュ弰婵炰匠鍕彾濠电姴浼i敐澶樻晩闁告挆鍜冪床闂備胶绮崝锕傚礈濞嗘挸绀夐柕鍫濇川绾剧晫鈧箍鍎遍幏鎴︾叕椤掑倵鍋撳▓鍨灈妞ゎ厾鍏橀獮鍐閵堝懐顦ч柣蹇撶箲閻楁鈧矮绮欏铏规嫚閺屻儱寮板┑鐐板尃閸曨厾褰炬繝鐢靛Т娴硷綁鏁愭径妯绘櫓闂佸憡鎸嗛崪鍐簥闂傚倷鑳剁划顖炲礉閿曞倸绀堟繛鍡樻尭缁€澶愭煏閸繃宸濈痪鍓ф櫕閳ь剙绠嶉崕閬嶅箯閹达妇鍙曟い鎺戝€甸崑鎾斥枔閸喗鐏堝銈庡幘閸忔﹢鐛崘顔碱潊闁靛牆鎳愰ˇ褔鏌h箛鎾剁闁绘顨堥埀顒佺煯缁瑥顫忛搹瑙勫珰闁哄被鍎卞鏉库攽閻愭澘灏冮柛鏇ㄥ幘瑜扮偓绻濋悽闈浶㈠ù纭风秮閺佹劖寰勫Ο缁樻珦闂備礁鎲¢幐鍡涘椽閸愵亜绨ラ梻鍌氬€烽懗鍓佸垝椤栫偛绀夐柨鏇炲€哥粈鍫熺箾閸℃ɑ灏紒鈧径鎰厪闁割偅绻冨婵堢棯閸撗勬珪闁逞屽墮缁犲秹宕曢柆宥呯闁硅揪濡囬崣鏇熴亜閹烘垵鈧敻宕戦幘鏂ユ灁闁割煈鍠楅悘鍫濐渻閵堝骸骞橀柛蹇旓耿閻涱噣宕橀纰辨綂闂侀潧鐗嗛幊鎰八囪閺岋綀绠涢幘鍓侇唹闂佺粯顨嗛〃鍫ュ焵椤掍胶鐓紒顔界懃椤繘鎼圭憴鍕彴闂佸搫琚崕鍗烆嚕閺夊簱鏀介柣鎰緲鐏忓啴鏌涢弴銊ュ箻鐟滄壆鍋撶换婵嬫偨闂堟刀銏犆圭涵椋庣М闁轰焦鍔栧鍕熺紒妯荤彟闂傚倷绀侀幉锟犲箰閸℃稑妞介柛鎰典簻缁ㄣ儵姊婚崒姘偓鐑芥嚄閸撲礁鍨濇い鏍仜缁€澶愭煥閺囩偛鈧摜绮堥崼鐔虹闁糕剝蓱鐏忣厾绱掗埀顒佸緞閹邦厾鍘梺鍓插亝缁诲啫顔忓┑鍫㈡/闁告挆鍕彧闂侀€炲苯澧紒鐘茬Ч瀹曟洟鏌嗗鍛唵闂佺鎻俊鍥矗閺囩喆浜滈柟鐑樺灥閳ь剛鏁诲畷鎴﹀箻閺傘儲鐏侀梺鍓茬厛閸犳鎮橀崼婵愭富闁靛牆楠搁獮姗€鏌涜箛鏃撹€块柣娑卞櫍瀹曟﹢顢欑喊杈ㄧ秱闂備線娼ч悧鍡涘箠閹板叓鍥樄闁哄矉缍€缁犳盯骞橀崜渚囧敼闂備胶绮〃鍡涖€冮崼銉ョ劦妞ゆ帊鑳堕悡顖滅磼椤旂晫鎳冩い顐㈢箻閹煎湱鎲撮崟顐ゅ酱闂備礁鎼悮顐﹀磿閸楃儐鍤曢柡澶婄氨閺€浠嬫煟閹邦厽绶查悘蹇撳暣閺屾盯寮撮妸銉ョ閻熸粍澹嗛崑鎾舵崲濠靛鍋ㄩ梻鍫熷垁閵忕妴鍦兜妞嬪海袦闂佽桨鐒﹂崝鏍ь嚗閸曨倠鐔虹磼濡崵褰熼梻鍌氬€风粈渚€骞夐敓鐘茬闁糕剝绋戝浠嬫煕閹板吀绨荤紒銊e劦濮婂宕掑顑藉亾瀹勬噴褰掑炊椤掑鏅梺鍝勭▉閸樺ジ宕归崒鐐茬婵烇綆鍓欐俊鑲╃磼閳ь剟宕橀鐣屽弳濠电娀娼уΛ娆撍夊⿰鍫熺厽闁挎洖鍊烽幉鐐叏婵犲偆鐓肩€规洘甯掗埢搴ㄥ箳閹存繂鑵愬┑锛勫亼閸婃垿宕硅ぐ鎺撴櫇闁靛牆顦悡婵堚偓骞垮劚椤︻垶宕¢幎鑺ョ厪闊洦娲栧暩濡炪倖鏌ㄩˇ闈涱潖濞差亜绠归柣鎰絻婵爼姊洪崨濠冨鞍闁荤啿鏅犻獮鍐潨閳ь剟鐛惔銊﹀殟闁靛/鍐ㄧ闂傚倷绀侀幉锟犲礉閹达箑绀夐幖娣灪濞呯娀鏌¢崶鈺佇ョ痪鎯с偢閺屽秷顧侀柛鎾跺枎閻e嘲顫滈埀顒勫春閻愭潙绶為柛婵勫劤濞夊潡姊婚崒姘g湅闁稿瀚叅闁靛牆鎮胯ぐ鎺撳€婚柛鎾崇仢濞差參寮崘顔肩劦妞ゆ帒瀚粻鎺撶節閻㈤潧孝闁挎洏鍊濋幃褑绠涘☉娆忎患濠电偛妯婃禍婵嬫偂濞戙垺鍊堕柣鎰邦杺閸ゆ瑥鈹戦垾鐐藉仮闁哄苯绉堕幉鎾礋椤愩倓绱濋柣搴ゎ潐濞叉牕鐣烽鍕厺閹兼番鍊楅悿鈧梺瑙勫劤椤曨厼危濡ゅ啰纾介柛灞捐壘閳ь剚鎮傚畷鎰版倻閼恒儮鎸冮悗骞垮劚椤︻垳绮堟径鎰閺夊牆澧介崚浼存煕閵婏妇绠栭柕鍥у瀵粙顢曢~顓犳崟濠碘剝顨呴幊妯侯潖濞差亜宸濆┑鐘插暙椤︹晠姊洪幖鐐插濠㈢懓妫涢崚鎺撶節濮橆剛顔呴梺鍏间航閸庨亶鍩€椤掑倹鏆柡灞诲妼閳规垿宕卞▎蹇撴瘓缂傚倷闄嶉崝蹇撐涢崟顖涚畳闂備胶绮灙鐎规洜鏁婚幃楣冩倻濡寮挎繝鐢靛Т閸燁垶濡靛┑鍥︾箚妞ゆ劑鍨归弳娆撴煃閽樺妲搁柍璇查叄楠炲洭顢橀悙鈺佷壕闁绘垼濮ら埛鎴︽偣閸ャ劌绲绘い鎺嬪灲閺岋綁顢樿濞呭秶鈧娲╃换婵嬬嵁鎼淬劍鍤嶉柕澶堝劙缁勪繆閻愵亜鈧牕煤瀹ュ纾婚柟鎯х亪閸嬫挾鎲撮崟顒傤槬闂佺粯鐗曢妶鎼佸Υ娴h倽鏃€鎷呴崫銉х嵁闂佽鍑界紞鍡涘磻閸涘瓨鍋熸い鎰ㄦ噰閺€浠嬫煟濡澧柛鐔风箻閺屾盯鏁愭惔锛勪化閻庡灚婢橀敃顏勭暦濠婂棭妲烽梺绋款儐閹稿墽鍒掗鐐╂婵☆垳绮幃娆戠磽娴e搫校闁绘搫绻濆璇测槈閵忕姈銊︺亜閺冨倸甯舵い顐熸櫊濮婃椽鎸婃径濠冩闂佸摜濮甸悧鐘差嚕婵犳碍鏅插璺猴攻椤ユ繈姊洪崷顓€鍦偓娑掓櫊瀹曚即骞囬悧鍫氭嫼闂佺厧顫曢崐鏇㈠几鎼达絿纾界€广儱鎷戦煬顒傗偓娈垮枦椤曆囧煡婢舵劕鐓戦柍瑙勫劤娴滈箖鏌ㄩ弴鐐测偓鍝ョ不閿濆棛绡€闂傚牊绋掑婵喢瑰⿰搴濈凹濞e洤锕幃娆擃敂閸曘劌浜鹃柕鍫濐槸缁€鍫熺箾閸℃ɑ灏伴柛瀣儔閺屾盯鍩勯崘顏佹灁闂侀€炲苯澧俊顐㈠暙閻e嘲顫滈埀顒勩€佸▎鎾冲簥濠㈣鍨板ú銈囩不閸︻厾纾兼い鏃傚帶鐢劑鏌涚€n偅宕岄柟宕囧█椤㈡鍩€椤掑嫬鍚规い鎺戝€荤壕浠嬫煕鐏炴崘澹橀柍褜鍓熼ˉ鎾斥枎閵忋倖鏅搁柣妯垮皺閻涖儱鈹戞幊閸婃洟骞婃惔锝囦笉濞寸厧鐡ㄩ悡娆撴⒒閸屾凹鍤熼柛鏂跨Ч閺屾稓鈧急鍕彋闂佸搫鐭夌紞渚€鐛€n喗鏅查柛鈾€鏅滈ˉ澶岀磽娴i缚妾搁柛妯绘倐瀹曟垿骞樼紒妯锋嫽婵炶揪缍€濞咃絿鏁☉銏$厱闁哄啠鍋撴繛鍙夌矌閸掓帡寮崼鐕佹濠电偟顥愬▍鏇㈡儎椤栨氨鏆︽慨妞诲亾妞ゃ垺鐟╁畷妤呭礂婢惰宀稿缁樼瑹閳ь剟鍩€椤掑倸浠滈柤娲诲灡閺呭爼顢涢悙瀵稿帾闂佹悶鍎滈崘鍙ョ磾婵°倗濮烽崑鐐垫暜閿熺姷宓侀悗锝庝簴閺€浠嬫煙闁缚绨界痪鎯ь煼濮婅櫣鎷犻崣澶婃敪濡炪値鍋勯ˇ鐢哥嵁閹邦収妲归幖杈剧悼閻掑吋绻涢幘鏉戠劰闁稿鎹囬弻娑㈠煛閸愩劋妲愬Δ鐘靛仜椤戝寮崒鐐村癄濠㈣泛顦伴惈蹇涙⒒閸屾瑧顦︽繝鈧潏鈺佸灊妞ゆ牗绮嶉弳婊堟煃閸濆嫬鈧悂顢氶柆宥嗙厓鐟滄粓宕滃☉姘潟闁规儳鐡ㄦ刊鎾煟閻斿憡绶插┑顔哄灲閹嘲饪伴崟顐闂佺ǹ顑囬崰鏍х暦濮樿泛绠抽柟瀛樻⒐閻庡姊虹憴鍕姢闁汇倕娲獮妤呭即閻愨晜鏂€闂佺粯鍔栧ḿ娆撴倶閿曞倹鐓熸い鎾楀啯鐏堥梺瀹狀唺缁瑩銆侀弮鍫濋唶闁绘柨鎼獮宥夋⒑閼姐倕鏋戦柣鐔村劤閳ь剚鍑归崜姘跺箞閵娾晛鐐婇柕濠忕导缁ㄥ姊洪棃娑辨濠碘€虫川缁鎮欑€涙ê寮挎繝鐢靛Т閸燁垶濡靛┑瀣厸閻忕偠濮ら崵鍥煙椤旂晫鎳囬柟宕囧Х閹瑰嫭绗熼娆戠>濠电姷鏁告慨顓㈠箯閸愵喖纾兼慨姗嗗墰閵堫噣姊绘担鍛婃儓闁活剙銈稿畷浼村冀椤撶偟顔愰悷婊呭鐢晠寮崘顔界叆婵犻潧妫欓崳浠嬫煥濞戞瑦宕屾慨濠勭帛閹峰懘鎮烽柇锕€娈濈紓鍌欐祰椤曆呪偓姘緲閻g兘骞嬪┑鍐╊潔闂侀潧绻掓慨鐑藉储閹绢喗鈷戦柣鐔煎亰閸ょ喎鈹戦鍛籍鐎规洘鍨块獮妯肩磼濡粯鐝抽梺鍦帶閻°劑鏁嬫繛瀛樼矌閸嬫捇濡甸崟顖氱閻庣數纭舵慨鍥р攽閻愬弶鍣归柨鏇ㄤ邯瀵鏁嶉崟顏呭媰闂佷紮绲介惈妤呮晲閸℃瑧顔曠紒鐐緲瑜板鏌囬娑辨闁绘劘灏欑粻鍐裁归悪鍛暤闁圭ǹ锕ュ鍕節閸涱厼缂氶梻鍌氬€搁崐鎼佸磹閻戣姤鍊块柨鏇炲€归崕鎴犳喐閻楀牆绗掔痪鎯х秺閺岋繝宕堕妷銉т患缂備胶濮锋繛鈧柡宀€鍠栭弻鍥晝閳ь剟寮搁悢鎼炰簻妞ゆ劧绲剧粈瀣煛瀹€鈧崰鏍嵁閸℃凹妲鹃梺鍦櫕婵挳鍩為幋锔绘晬婵炴垶鐟ラ崬澶愭⒑閸濆嫭婀伴柣鈺婂灦閻涱喖顫滈埀顒€顕i崼鏇炵闁绘ḿ鍋i崑锟犳⒒閸屾瑧顦﹂柟璇х節楠炴劗绮欑捄銊︽濡炪倖甯掔€氀囧焵椤掍焦顥堢€规洘锕㈤、娆撳床婢诡垰娲﹂悡鏇㈡煃閳轰礁鏋ゆ繛鍫熋湁闁绘ǹ娅曢崐鎰叏婵犲啯銇濋柟绛圭節婵″爼宕ㄩ鐣屾И闂傚倷绀侀幖顐﹀箠韫囨稒鍎庢い鏍仜缁犳牕螖閿濆懎鏆為柛濠傤煼閺岋箑螣閻氬绀嗛梺闈浤涢崟顐g€惧┑鐘灱閸╂牠宕濋弴鐘差棜濠电姵纰嶉悡娆撴煕閹炬鎳庣粭锟犳⒑閸濆嫭鍣洪柣鎿勭節閻涱噣寮介銏犵亰闂佽崵鍠愬姗€鍩涙径鎰拺閻犲洩灏欑粻鎵磼婢跺本鍤€妞ゎ偄绻橀幖褰掑捶椤撶媴绱叉繝纰樻閸ㄧ敻顢氳濡嫬顓奸崨顏呮杸闂佺粯鍔栬ぐ鍐棯瑜旈弻銊╁即濡櫣浠炬繛锝呮搐閿曨亪骞冮悾宀€鐭欓悹渚厛濡茶淇婇悙顏勨偓鏍偋濡も偓椤繈濡搁埡鍌氫痪闂侀€炲苯澧存慨濠傤煼瀹曟帒顫濋钘変壕闁归棿鐒﹂崑瀣攽閻樻彃顏柣顓熺懇閺岀喖鏌囬敃鈧弸锕€鈹戦钘夆枙闁哄被鍊曢湁閻庯綆鍋呴悵鏍磼閻愵剙绀冩俊顐㈠濠€渚€姊洪幐搴g畵闁绘锕棢濠㈣埖鍔栭悡鐔兼煙閻愵剚缍戝┑顔肩墦閺岀喐绗熼崹顔碱瀳闁句紮绲跨槐鎺斺偓锝庝簽娴犮垺銇勯鈧鍛村煘閹达箑鐏抽柛鎰皺妤犲洭姊洪崨濠冣拹闁荤啿鏅犻幃浼搭敊閸㈠鍠栧畷妤呮偂鎼达絽閰遍梻鍌欐祰閸嬫劙鍩涢崼銉ョ闁挎洍鍋撻崡鍗灻归悡搴f憼闁抽攱甯掗湁闁挎繂姣ヨぐ鎺戞辈闂侇剙绉甸悡娆戠棯閺夊灝鑸瑰ù婊勫閳ь剝顫夊ú姗€宕濋弽顐e床婵犻潧鏌婇幒鏃傜煓闁圭ǹ楠搁弸鐘绘倵濞堝灝鏋﹂柛鈺傜墵楠炲棝寮崼婵堫啋闁诲孩绋掕摫婵犮垺鍨甸埞鎴︽晬閸曨偂鏉梺绋匡攻閻楁洟锝炶箛鏃傜瘈婵﹩鍎甸妷鈺傚€甸柨婵嗙凹閹查箖鏌涢悢閿嬪殗闁哄本娲樺鍕槈濠婂拋妲瑰┑鐐茬摠缁秶鍒掑澶娢﹂柛鏇ㄥ灠缁犲鎮规ウ鎸庛€冪紒顔挎硾閳规垿鍩勯崘銊хシ濡炪値鍘鹃崗妯侯嚕婵犳碍鏅插璺侯儐濞呮粓姊洪幖鐐插妧闁告劑鍔庨鍝勨攽鎺抽崐妤佹叏閻戣棄纾婚柣鎰仛閺嗘粓鏌ㄩ悢鍝勑ョ€规挷绶氶幃妤呮晲鎼粹剝鐏堢紓渚囧亜缁夊綊寮诲鍫闂佸憡鎸鹃崰鏍嵁閸愩剮鏃€鎷呴搹鍦婵犳鍠楅敃鈺呭储閹间礁绠繛宸簼閻撶喖鏌i弬鎸庢喐闁瑰啿鍟撮幃妤€顫濋悡搴$睄閻庤娲樺ú鏍亙闂佸憡渚楅崰姘跺储閸楃偐鏀介柍钘夋閻忋儵鏌曢崱蹇撲壕闂備胶枪椤戝棝骞戦崶顒€绠栭柕蹇嬪€曠粻鐢告煙閻戞ê鐏╅梻鍐e亾婵犵數濮烽弫鍛婃叏閻戣棄鏋侀柛娑橈攻閸欏繘鏌i幋锝嗩棄闁哄绶氶弻娑樷槈濮楀牊鏁鹃梺鍛婄懃缁绘﹢寮婚敐澶婄闁挎繂妫Λ鍕⒑閸濆嫷鍎庣紒鑸靛哺瀵鈽夊Ο閿嬵潔濠殿喗顨呴悧濠囧极妤e啯鈷戦柛娑橈功閹冲啰绱掔紒妯虹伌濠碉紕鏁诲畷鐔碱敍濮橀硸鍟嬮梻浣告啞椤ㄥ牓宕戦悢鍝ヮ浄闁兼祴鏅濈壕濂告煟閹伴潧澧柛鏂诲€栭妵鍕敇閻樻彃骞嬮悗娈垮枛椤兘骞冮姀銈嗗亗閹艰揪缍嗗Σ鍫曟煟閻斿摜鐭婄紒缁樺浮瀵偊顢欑亸鏍潔闂侀潧楠忕槐鏇㈠储閹剧粯鈷掑ù锝呮憸娴犮垺銇勯幋婵囧殗闁诡喗锕㈤弫鍐磼濞戞艾甯鹃梻浣规偠閸庢粓宕橀崣銉х>濠德板€楁慨鐑藉磻閻愬灚鏆滈柍銉ョ-閺嗭箓鏌涘Δ鍐ㄥ壉婵炴挸顭烽弻鐔碱敍閸℃婀版い銉磿缁辨捇宕掑顑藉亾閹间礁纾归柟闂寸绾剧懓顪冪€n亝鎹i柣顓炴閵嗘帒顫濋敐鍛闂佽姤蓱缁诲牆顫忓ú顏嶆晢闁逞屽墰缁棃骞橀鐓庡殤婵炶揪绲跨涵鍫曞绩娴犲鐓熸俊顖涘閻濐亪鏌i妸锕€鐏╅柍褜鍓濋~澶愬箰妞嬪孩顐芥慨妯挎硾閽冪喐绻涢幋娆忕仼闁绘帗妞介弻娑㈠箛閸忓摜鎸夋繝娈垮枛濞差厼顫忛搹鍦煓闁告牑鈧啿顫犻梻浣呵圭换鎴︽晝閵忕媭鍤曢悹鍥ㄧゴ濡插牊淇婇鐐存暠闁哄倵鍋撻梻鍌欒兌绾爼宕滃┑瀣ㄢ偓鍐疀閺傛鍤ら梺閫炲苯澧ǎ鍥э躬閹瑩顢旈崟銊ヤ壕闁哄诞灞剧稁閻熸粎澧楃敮鎺旂矆婢舵劖鐓涢柛銉e劚閻忊晠鏌i幘杈捐€块柡宀€鍠愬ḿ蹇斻偅閸愨晩鈧秹姊虹粙鍖″伐妞ゎ厾鍏樺璇测槈閵忕姈銊╂煏韫囧﹤澧查柣婵囩墵閺屸€愁吋韫囨洜鐦堝┑顔硷功缁垶骞忛崨鏉戝窛濠电姴鍊瑰▓姗€姊绘担鍛婅础閺嬵亝銇勯鐘插幋妤犵偛鍟撮幃婊堟嚍閵夛附鐝曢梻浣风串缁茶姤寰勯崶顒€缁╅柧蹇e亞缁♀偓闂佹眹鍨藉ḿ褍鐡繝鐢靛仩椤曟粎绮婚幘宕囨殾闁汇垻枪缁€鍐┿亜閺冨倹娅曢柛妯绘崌濮婃椽宕ㄦ繝鍕暤闁诲孩鍑归崜鐔奉嚕閹惰姤鍋勯柛蹇氬亹閸欏棗鈹戦悙鏉戠仸闁荤啙鍥ㄥ剹闁圭儤鎸婚崣蹇撯攽閻樺弶宸濈紒鍙樺嵆閺屾洟宕堕妸銉ヮ潚濡ょ姷鍋炵敮锟犵嵁鐎n亖鍫柛鎰ㄦ櫇閳ь剚濞婂濠氬磼濞嗘埈妲梺纭咁嚋缁绘繈骞冮悜钘壩ㄩ柨鏃傜帛椤旀棃姊鸿ぐ鎺擄紵缂佲偓娓氣偓閹€斥攽鐎n偆鍘甸梺缁樺姦閸撴岸鎮橀柆宥嗙厱妞ゆ劦鍋傞柇顖炴煛鐏炲墽娲存い銏℃礋婵″爼宕ㄩ鍙ョ按闂傚倷绀侀幉陇鎽梺璇″枛閸婂灝顕f繝姘櫜闁割偁鍨婚弶鎼佹⒑閸濆嫭宸濋柛瀣耿楠炲顦版惔锝囷紲缂傚倷闄嶉崹褰掔嵁閺嶎厽鐓熼柡宥庡亜鐢爼鏌i敐鍥у幋妤犵偛顑夐弫鍐焵椤掑倻涓嶅┑鐘崇閸嬶綁鏌涢妷顔荤盎闁汇劍妞介弻锝夊Χ閸屾矮澹曟繝鐢靛Х閺佹悂宕戦悩璇茬妞ゅ繐妫楃欢銈吤归悩宸剰缂佺姷鍠栭弻銊╂偄閸濆嫅銏㈢棯閹规劦娼愰柕鍥у瀵粙顢曢~顓熷媰闂備焦濞婇弨閬嶅垂瑜版帗鍎夋い蹇撶墱閺佸洭鏌i幇顓熺稇婵炲拑绲剧换娑氣偓娑欋缚閻﹦绱撳鍜冭含妤犵偛鍟伴幑鍕偘閳╁喚娼旈梻浣告惈鐠囩偤宕橀妸鎰礋濮婄粯鎷呴搹骞库偓濠囨煛閸屾瑧绐旂€规洘鍨块獮姗€骞囨担鐟扮槣闂備線娼ч悧鍡椢涘Δ鍐當闁圭儤顨嗛悡鏇㈡煟閺囨氨顦﹀ù婊€鍗抽弻鐔碱敍濮橆剚娈柣鎾卞€栭妵鍕疀閹炬潙娅ч梺鍛娒幉锛勬崲濞戞瑦缍囬柛鎾楀啫鐓傛繝鐢靛Л閸嬫捇寮堕崼娑樺婵炲懐濮甸妵鍕疀閹捐泛顤€闂佺粯鎸搁崯鎾箖瀹勬壋鏋庨煫鍥ㄦ惄娴犲ジ姊虹拠鑼闁瑰憡濞婂濠氭偄绾拌鲸鏅╅梺浼欑到閺堫剟宕虫导瀛樺€垫繛鍫濈仢閺嬫盯鏌i弽褋鍋㈤柣娑卞枤閳ь剨缍嗛崰妤呭磻閹版澘绾ч柛顐亞閸樻盯鏌℃担鍛婂枠婵﹤顭峰畷鎺戭潩椤戣棄浜惧瀣捣閻棗霉閿濆浜ら柤鏉挎健瀵爼宕煎☉妯侯瀷婵炲濮靛畝绋款潖缂佹ɑ濯村〒姘煎灡閺侇垱绻濆▓鍨灁闁稿﹥顨婂畷姘跺箳閹炬潙鍔呴梺闈浨归崕鎶剿囬锔解拺闁革富鍘奸崝瀣亜閵娿儲鍣介柣姘劤椤撳吋寰勭€n剙骞堟俊鐐€栭崝鎴﹀磹閺囥垹鍑犻幖绮瑰煑瑜版帗鍋愰柣鎴烇供娴犫晝绱撴担浠嬪摵闁圭ǹ顭烽獮蹇涘川閺夋垹顦梺鍦帛鐢帗绔熷鍡曠箚闁绘劦浜滈埀顒佺墪鐓ゆ俊顖濆吹缁犳儳鈹戦悩鍙夋悙闁哄绶氶弻娑㈠箛闂堟稒鐏堢紒鐐劤閸氬鎹㈠☉銏犵闁绘劘娉涢ˉ婵單旈悩闈涗粶闁绘鎸搁~蹇曠磼濡顎撻梺鍛婄☉閿曘儵宕曢幘鏂ユ斀闁绘劘灏欏﹢鎾煕閵娿劍顥夐柣锝呭槻閳规垿宕卞▎鎰暦闂備礁鎲″ú锕傚礈濞嗘挸鐒垫い鎺嗗亾闁绘牕銈稿濠氭晲閸涘倻鍠栭幊鏍煛娴d警鍋ч梻鍌欒兌缁垶骞愮拠瑁佹椽鎮㈤悡搴ゆ憰闂佺粯鏌ㄩ崥瀣吹鐎n偁浜滈柟鍝勬娴滅偓绻濈喊澶岀?闁告鍥ㄧ畳婵犵數濮撮敃銈団偓姘煎墴瀹曟繈濡舵径瀣帗闁荤喐鐟ョ€氼剟鎮橀幘顔界厸濞达絽鎽滄晥閻庤娲滈崰鏍€侀弴銏犵労闁告劏鏅濈粣鏃堟⒒閸屾艾鈧兘鎳楅懜鐢典粴闂備焦瀵уú蹇涘磿閻㈢ǹ绠栫憸鏃堝箖閳哄懏鍤戞い鎺嶇劍椤旀洘绻濋悽闈涒枅婵炰匠鍥舵晞闁糕剝绋戦悿鐐節闂堟侗鍎愰柣鎾冲暟閹茬ǹ饪伴崼婵堫槶闂佺粯姊婚崢褔鎮橀幎鑺ョ叆闁哄洨鍋涢埀顒佹倐閺屻劑濡堕崱鏇犵畾闂侀潧鐗嗛崐鍛婄妤e啯鈷戠紓浣姑粭鎺楁煟韫囨柨鍝哄┑锛勬暬瀹曠喖顢涘槌栧敽闁诲骸绠嶉崕閬嶆偋閸℃稑鍌ㄩ柨娑樺绾捐棄霉閿濆懏鎯堢€涙繃绻濋埛鈧崒婊呯厯闂佺硶鏂侀崑鎾愁渻閵堝棗鍧婇柛瀣崌閺屾稑螣閼姐倗鐓夐悗瑙勬礃閸ㄥ潡鐛鈧顒勫Ψ閿旇姤婢戦梻鍌欒兌缁垱鐏欐繛瀛樼矤閸撴稓鍒掗敐澶婄睄闁割偆鍠撻崢閬嶆煟鎼搭垳绉甸柛瀣笒閳绘捇寮崼鐔哄帗闁荤喐鐟ョ€氼剟鎮樼€涙ǜ浜滈柕蹇ョ磿閹冲懏绻涢幋鐘虫毈闁诡喗绮撻幃鍓т沪閽樺鍞ㄥ┑鐘垫暩婵兘寮幖浣哥;婵炴垯鍨圭粻顖炴煙鐎电ǹ孝缂佽翰鍊濋弻娑⑩€﹂幋婵囨疇闂佹寧绻傞ˇ顖滅不濞戙垺鐓涘璺哄绾埖銇勯弬鍖¤含婵﹥妞介幃鐑藉级閹稿孩鐦g紓浣稿⒔閾忓酣宕i崘銊ф殾濞村吋娼欑粻濠氭偣閸ヮ亜鐨烘い鏂挎濮婅櫣绱掑Ο鍓佺窗缂備緡鍣崹璺虹暦閻㈢ǹ绠i柨鏃傛櫕閸樺墽绱撴担鍓插創婵炲娲樼粋鎺戔槈濞嗘劕寮块梺鎸庣箓濡鎱ㄥ鍡樺弿濠电姴鍋嗛悡鑲┾偓瑙勬礃鐢帡锝炲┑瀣垫晞闁芥ê顦竟鏇㈡⒑缂佹ê鐏卞┑顔哄€濆畷鐢稿礋椤栨稓鍘鹃梺鍛婄缚閸庢煡寮抽埡浼卞綊鎮╁畷鍥舵殹缂備胶绮换鍫ュ箖娴犲顥堟繛鎴烆殘閹规洘淇婇悙顏勨偓鏍洪敃鍌氱煑闁告劑鍔庨弳锔戒繆閵堝倸浜鹃柧浼欑到閵嗘帒顫濋悡搴d哗濠电偛鐗勯崝宀勨€旈崘顔嘉ч柛鈩冾殔椤洭姊虹粙鍖℃敾闁绘绮撻崺鈧い鎺嶈兌椤e弶鎱ㄥΟ绋垮闁糕斁鍋撳銈嗗笒閸婂綊宕甸埀顒佺節閵忋垺鍤€闁挎洦浜滈悾閿嬪閺夋垵鍞ㄩ悷婊冾樀瀵悂寮崼鐔哄帾婵犵數濮寸换鎰般€呴鍌滅<闁抽敮鍋撻柛瀣崌濮婄粯鎷呴崷顓熻弴闂佹悶鍔忓Λ鍕幓閼愁垼妲奸梺缁橆殔濞撮妲愰幘瀛樺闁告繂瀚竟鏇炩攽閻橆喖鐏畝锝堟硶閸掓帡寮崼鐔蜂画闂備緡鍙忕粻鎴濃枔閵娾晜鈷戦柛婵嗗椤箓鏌涙惔銈勫惈缂侇喖顭烽幃浠嬪川婵犲嫬骞嶉梻浣虹帛閸ㄨ泛鐜荤捄銊т笉婵せ鍋撻柡灞剧洴閹瑩宕归锝嗙槗闂備礁鎼惌澶岀礊娓氣偓楠炲啴鍩¢崨顔尖偓缁樻叏濡も偓濡棃宕Δ鍛拺閻犲洩灏欑粻鎵磼鐠囪尙澧︾€规洘绻傞悾婵嬪礋閸偅娅撻梻濠庡亜濞诧妇绮欓幋婵囨殰闂佽崵鍠愮划宀勊囬棃娑氭殾闁硅揪绠戠粻濠氭煠閹间焦娑ч柡瀣€垮娲川婵犲啫顦╅梺鍛婃尰閻熝囧窗婵犲偆鍚嬮柛娑变簼閺傗偓闂備礁鐤囧Λ鍕涘Δ浣侯洸婵犻潧鐗忕壕濂告偣閸ャ劌绲婚柍褜鍓欏ḿ锟犲极閹扮増鍊烽柛鎾茶兌閺夌ǹ鈹戦悙鏉戠仸闁荤噦绠撳畷鏇㈩敂閸啿鎷洪梻鍌氱墐閺呮盯鎯佸⿰鍫熺厱婵せ鍋撶紒鐘崇墵瀵偄顓奸崨顏勭墯闂佸憡鍔х徊楣冨棘閳ь剟姊绘担鍝ユ瀮婵☆偄瀚灋婵°倕鎳忛崐鍫曟煟濡偐甯涢柣鎾寸懅閻ヮ亪寮堕崹顔垮煘婵炲瓨绮堥崡鎶藉蓟閵娿儮鏀介柛顐g箑缁泛顪冮妶鍡樺碍闁靛牏枪閻g兘宕奸弴鐐靛幐闂佸憡鍔樺▔鏇㈡⒒椤栨稓绡€闁汇垽娼ф禒鈺呮煙濞茶绨界紒杈╁仦缁楃喖鍩€椤掑啯锛傞梻浣筋潐瀹曟﹢顢氳缁牊寰勭仦绋夸壕妤犵偛鐏濋崝姘亜閿斿灝宓嗛柟顔光偓鏂ユ瀻闁瑰濮烽敍婊堟煟鎼搭垳绉靛ù婊呭仦缁傛帡濮€閵堝棛鍘搁梺绯曞墲缁嬫劙骞夋ィ鍐╃厸鐎光偓鐎n剛袦闂佽桨鐒﹂崝娆忕暦閹偊妲诲Δ鐘靛仜椤戝懓鐏冮梺缁橈耿濞佳勭濠婂嫨浜滈柟瀛樼箥濡偓閻庢鍣崑濠傜暦濮椻偓椤㈡瑩鎳栭埡浣感曞┑锛勫亼閸婃牜鏁幒妤€纾圭紓浣贯缚閳绘梻鈧箍鍎遍幊澶愬绩娴犲鐓熸俊顖濇閿涘秵銇勯敐鍡欏弨闁哄本绋撻埀顒婄到婢у海绮旈鈧弻锛勪沪閸撗勫垱婵犵绱曢崗姗€鐛€n亖鏀介柛鈩兩戦宥呪攽鎺抽崐妤佹叏閺夋嚚娲敇閵忕姷鐣哄┑掳鍊曢崯顖炲窗閸℃稒鐓曢柡鍥ュ妼婢ь喚鐥弶璺ㄐょ紒杈ㄦ尰閹峰懘宕滈崣澹囨⒑閻熺増鍟炲┑鐐诧躬瀹曡銈i崘銊х潉闂佸壊鍋呯换鍕囬妸銉富闁靛牆妫欓悡銉︿繆閹绘帞澧fい锕€缍婇弻锛勪沪閸撗勫垱闂佺硶鏅涚€氭澘鐣峰Δ鍛亼闁逞屽墯缁傚秹顢旈崟搴㈢洴瀹曠喖顢曢銏″€梻浣规偠閸庮噣寮插┑瀣櫖婵犻潧娲ㄧ粻楣冨级閸繂鈷旈柛鎺撴緲椤潡鎮风敮顔垮惈閻庤娲樺ú鐔肩嵁閸ヮ剚鍋嬮柛顐犲灩楠炲牓姊绘笟鈧ḿ褎鐏欓梺绋块叄娴滃爼濡撮崒姘辨殾闁搞儮鏅濋敍婊冾渻閵堝棙鈷掗柍宄扮墦瀹曟洝绠涢弬璁崇盎闂佽鍎抽崯鍧楀箖閹寸姭鍋撻崹顐g凡閻庢凹鍣i崺鈧い鎺戯功缁夐潧霉濠婂嫮澧电€规洘鍨块獮妯肩磼濡厧寮抽梺璇插嚱缁插宕濈€n剝濮冲┑鐘崇閳锋垿鏌i悢鍝勵暭闁诡垰鐗忕槐鎺撳緞婵犲嫬鐓熼柦妯荤箞閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鎼佸煝閹捐鍨傛い鏃傛櫕娴滎亪姊绘担绛嬪殭缂佺粯鍨归幑銏ゅ醇閵夈儲妲梺缁樺姇閹碱偆绮婚敐澶嬬叆闁哄洦顨呮禍楣冩⒑缂佹ɑ鎯堢紒缁樼箞瀵鈽夐姀鐘靛姶闂佸憡鍔楅崑鎾绘偩閸忚偐绠鹃悗鐢登归宀勬煕閵娿劍纭炬い顐㈢箰鐓ゆい蹇撳缁愭稒绻濋悽闈浶㈡繛瀵稿厴瀹曟繈宕奸弴鐔叉嫼闂佸憡绋戦敃銉﹀緞閸曨垱鐓曟繛鍡楃箻椤庢鎮¢妶澶嬬厱婵炴垶锕妤冪磼鐠囧弶顥㈤柡灞炬礋瀹曠厧鈹戦崼銏╁敽闂備礁鎲$敮濠囧础閹惰棄钃熸繛鎴欏灪閸嬪棗霉閿濆懏鎲稿ù鐘虫倐閹鎲撮崟顒傤槰闂佸憡姊归悷銉╂偩閻ゎ垬浜归柟鐑樼箖閺呮繈姊洪幐搴g畵闁瑰啿瀛╃€靛吋鎯旈姀銏㈢槇缂佸墽澧楄摫妞ゎ偄锕弻娑㈠Ω閿曗偓閳绘洜鈧娲忛崹濂杆囧畷鍥╃<闁稿本姘ㄦ牎闂侀潧鐗炵紞浣哥暦濮椻偓閸┾剝鎷呴幓鎺嶅闂佸壊鐓堥崑鍛村矗韫囨柧绻嗘い鏍ㄧ矊鐢泛霉濠婂牏鐣洪柟顔筋殔椤繈鎮欓鈧锟�

本文对SQL SERVER 2005数据库镜像进行了教程式的讲解,具体内容包括:介绍、动态、可用性场景、实现和高可用性技术,供大家参考!
概述
数据库镜像是SQL SERVER 2005用于提高数据库可用性的新技术。数据库镜像将事务日志记录直接从一台服务器传输到另一台服务器,并且能够在出现故障时快速转移到备用服务器。可以编写客户端程序自动重定向连接信息,这样一旦出现故障转移就可以自动连接到备用服务器和数据库。
自动进行故障转移并且使数据损失最小化通常包括昂贵的硬件和复杂的软件。但是,数据库镜像可以在不丢失已提交数据的前提下进行快速故障转移,无须专门的硬件,并且易于配置和管理。
数据库镜像介绍
在数据库镜像中,一台SQL Server 2005实例连续不断的将数据库事务日志发送到另一台备用SQL Server实例的数据库副本中。发送方的数据库和服务器担当主角色,而接收方的数据库和服务器担当镜像角色。主服务器和镜像服务器必须是独立的SQL Server 2005实例。
在所有SQL Server数据库中,在对真正的数据页面进行修改之前,数据改变首先都记录在事务日志中。事务日志记录先被放置在内存中的数据库日志缓冲区中,然后尽快地输出到磁盘(或者被硬化)。在数据库镜像中,当主服务器将主数据库的日志缓冲区写入磁盘时,也同时将这些日志记录块发送到镜像实例。
当镜像服务器接收到日志记录块后,首先将日志记录放入镜像数据库的日志缓冲区,然后尽快地将它们硬化到磁盘。稍后镜像服务器会重新执行那些日志记录。由于镜像数据库重新应用了主数据库的事务日志记录,因此复制了发生在主数据库上的数据改变。
主服务器和镜像服务器将对方视为数据库镜像会话中的伙伴。数据库镜像会话包含了镜像伙伴服务器之间的关系。一台给定的伙伴服务器可以同时承担某个数据库的主角色和另一个数据库的镜像角色。
除了两台伙伴服务器(主服务器和镜像服务器),一个数据库会话中可能还包含第三台可选服务器,叫做见证服务器。见证服务器的角色就是启动自动故障转移。当数据库镜像用于高可用性时,如果主服务器突然失败了,如果镜像服务器通过见证服务器确认了主服务器的失败,那么它就自动承担主服务器角色,并且在几秒钟之内就可以向用户提供数据库服务。
数据库镜像中需要注意的一些重要事项:
◆主数据库必须为FULL还原模型。由于bulk-logged操作而导致的日志记录无法发送到镜像数据库。
◆初始化镜像数据库必须首先使用NORECOVERY还原主数据库,然后再按顺序还原著数据库事务日志备份。
◆镜像数据库和主数据库名称必须一致。
◆由于镜像数据库处于recovering状态,因此不能直接访问。通过在镜像数据库上创建数据库快照可以间接读取某一个时刻点的镜像数据库。(参阅该白皮书后面“数据库镜像和数据库快照”部分)
注意: 要想获取更多与数据库镜像术语有关的信息,请参阅SQL Server 2005 Books Online中关于“Overview of Database Mirroring”。
操作模式
数据库镜像会话有三种可能的操作模式。根据事务安全性的设置以及镜像会话中是否需要见证服务器来决定精确的操作模式。
表1:数据库镜像操作模式
操作模式 |
事务安全性 | 传输机制 | 需要Quorum | 见证服务器 | 故障转移类型 |
高可用 | FULL | 同步 | Y | Y | 自动或者手动 |
高保护 | FULL | 同步 | Y | N | 只能手动 |
高性能 | OFF | 异步 | N | N/A | 只能forced |
如果safety设置为FULL,那么通过同步方式传输数据,并且需要一台镜像服务器才能提供数据库服务。quorum投票表决要求至少两台服务器的参与才能够决定两个伙伴服务器各自承担什么角色,主角色还是镜像角色。
为了更深入研究这三种操作模式,首先来更进一步研究一下事务安全性和quorum的角色。
事务安全性
If 事务安全性(或者'safety')设置为FULL,那么主服务器和镜像服务器工作在同步传输模式下。当主服务器硬化其主数据库日志记录到磁盘时,也同时将日志发送到镜像服务器。然后主服务器等待镜像服务器的回答。镜像服务器将那些相同的日志记录硬化到镜像日志所在磁盘后,对主服务器进行答复。当safety设置为OFF时,主服务器不会等待来自服务器的确认,因此主数据库和镜像数据库可能不是完全同步的(也就是,镜像可能滞后于主数据库)。
同步传输方式保证镜像数据库事务日志中所有事务与主数据库事务日志中的事务同步,因此可视为事务是安全传输的。要将safety设置为FULL,使用
ALTER DATABASE [<dbname>] SET SAFETY FULL;
当safety设置为OFF,主服务器和镜像服务器之间的通信是异步的。主服务器不会等待镜像服务器已将事务记录硬化的确认信息。镜像服务器通过尽快记录事务日志的来试图保持与主服务器同步,但是如果主服务器突然失败同时强制镜像服务器提供服务,那么某些事务还是有可能丢失(参阅SQL Server Books中的'Forced Service')。
Quorum和见证服务器
当safety设置为FULL,数据库镜像需要quorum才能提供数据库服务。quorum是在同步数据库镜像会话中要求的所有连接起来的服务器之间的最小关系。由于一个quorum至少需要两台服务器,因此当safety为FULL时,主服务器必须和其他某至少一台服务器组成quorum才能够提供数据库服务。
见证服务器帮助主服务器或者镜像服务器组成quorum。如果存在见证服务器,那么主数据库或者镜像数据库失败时,其余两台服务器还可以组成quorum。如果主服务器无法看到镜像服务器,那么它可以和见证服务器组成quorum,并保持提供数据库服务。类似地,如果镜像服务器和见证服务器看不到主服务器,那么这两台服务器可以组成quorum,镜像服务器担当新主服务器的角色。
见证服务器失败不被视为数据库镜像绘画中的单点失败。因为如果见证服务器失败了,那么主服务器和镜像服务器还可以组成quorum(更多信息请参阅SQL Server Books Online中的“Quorum in Database Mirroring Sessions”主题)。
高可用操作模式
高可用操作模式支持最大程度的数据库可用性,如果主数据库失败将自动转移到经销数据库。它要求将safety设置为FULL并且定义一台见证服务器作为数据库镜像会话中的一员。
高可用操作模式最适合于那些服务器之间具有高速且可靠的通信线路,同时要求在单一数据库上实现自动故障转移的场景。当safety为FULL时,主服务器必须短暂等待来自镜像服务器的回答,主服务器性能也因此受到镜像服务器能力的影响。由于单数据库失败将导致自动故障转移,因此如果有多数据库应用程序,那么就应该考虑其他操作模式(参阅该白皮书中实现数据库镜像部分介绍的“多数据库问题”)
高可用模式中数据库镜像是自监视的。如果主数据库突然不可用,或者主服务器停机,那么见证服务器和镜像服务器将组成quorum,然后镜像的SQL Server将进行自动故障转移。此时,竞相服务器实例将其角色转换为新主服务器并恢复数据库。由于镜像数据库已经重新执行了主数据库的事务日志并且其事务日志也与主数据库同步,因此镜像服务器可以快速提供数据库服务。
此外,SQL Server 2005可以在数据库恢复前就向用户提供数据库服务。SQL Server数据库恢复包括三个阶段:分析阶段、redo阶段、以及最后的undo阶段。在SQL Server 2005中,只要redo阶段完成,新恢复的数据库就可以让用户访问。因此如果数据库镜像故障转移发生,新恢复的主数据库只要完成了redo阶段就可以向用户提供服务了。因为镜像数据库自始至终都在重新执行事务日志记录,因此所有镜像服务器只须完成redo过程就可以了,通常几秒钟就可以完成。
高保护操作模式
高保护操作模式中事务安全性设置为FULL,但是镜像会话中没有见证服务器。主服务器必须组成quorum,可是没有见证服务器,因此只能和镜像服务器配合在一起。这种模式下由于没有见证服务器来担当平局决胜的角色,因此只能手动完成故障转移。行自动故障转移是不可能的,因为如果主服务器失败,镜像服务器没有见证服务器来组成quorum。
safety设置为FULL,如果主服务器突然间失去了和镜像服务器的quorum,那么镜像服务器必须使其数据库停止服务。不推荐使用高保护模式的数据库镜像配置,除非在高可用模式下必须临时移除见证服务器时,可以使用该模式作为一种临时过渡。
高性能操作模式
在高性能操作模式下,事务安全性设置为OFF,以异步方式传输日志记录。主服务器无须等待镜像服务器所有日志记录已被硬化的确认信息。镜像服务器尽自己最大可能保持与主服务器数据的一致,但不能保证在任何时刻来自主数据库的所有最新事务日志记录都能够被硬化到镜像数据库的事务日志中。
在高性能模式下,见证服务器不承担任何角色,也不需要quorum。因此高性能模式无法启用自动和手动的故障转移。唯一允许的故障转移方式就是forced service ,它同样也是一种手工操作:
ALTER DATABASE <dbname> SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS
forced service故障转移导致立刻恢复镜像数据库。如果某些主数据库的事务日志记录还没有被镜像服务器接收,那么恢复镜像数据库将导致潜在的数据丢失。高性能模式特别适合于远距离的数据传输(换句话说,用于远程站点的灾难恢复),或者对那些活动频繁且可以容忍某种程度数据丢失的数据库进行镜像。
数据库快照和数据库镜像
由于镜像数据库处于recovering状态,因此不可访问也不可读。在SQL Server 2005企业版和开发人员版中可以创建数据库快照来读取某个时点的镜像数据库。数据库快照提供了一个只读的数据库视图,开放数据给用户访问。这些数据与创建快照时刻的数据库数据相一致。
对数据库快照的访问如同访问一个其他的数据库。查询数据库快照时,从数据库快照文件中读出那些自快照创建后被修改的数据,从原始数据库中读出未修改的数据。最终效果就是读取了在创建快照时刻数据库当时的数据。(更多信息请参阅SQL Server Books Online中"Using Database Snapshots with Database Mirroring"主题。)
由于数据库快照确实增加了镜像服务器的负担,因此需要当心它们对数据库镜像性能可能造成的影响。由于只能镜像到一个数据库,因此如果需要将数据扩充到多个只读的报表服务器上,那么事务复制是更好的选择。(更新信息请阅读后面实现数据库镜像部分的“数据库镜像和复制”)
客户端重定向
在SQL Server 2005中,如果使用ADO.NET或者SQL Native Client连接配置了镜像的数据库,那么应用程序就可以利用驱动程序的能力在发生数据库镜像故障转移时自动重定向数据库连接。必须在连接字符串中指定原始主服务器和数据库名称,以及可选的故障转移伙伴服务器名称。
连接字符串的写法有许多种,以下只给出一个例子,指定server A作为主服务器,server B作为镜像服务器,AdventureWorks作为数据库名称:
"Data Source=A;Failover Partner=B;Initial Catalog=AdventureWorks;
Integrated Security=True;"
如果连接到原始主服务器失败,那么就使用连接字符串中的failover partner作为备用服务器名称。如果连接到原始主服务器成功,那么就不使用连接字符串中的failover partner名称,但是会从主服务器上查询其故障转移伙伴的名称并将结果存放在客户端缓存中。
假设客户端成功连接到主服务器,然后一个数据库镜像故障转移发生(自动地、手动的、forced)。当下一次应用程序尝试使用连接时,ADO.NET或者SQL Native Client驱动程序将会检测到与旧主服务器的连接已经失败,然后自动重新连接由failover partner名称指定的新主服务器。如果连接成功并且新的镜像服务器存在,那么驱动程序从新主服务器处获取新的故障转移伙伴名称并将其存放在客户端缓存中。如果无法连接到备用服务器,那么驱动程序将交替尝试与每个服务器的连接直道连接超时。
使用内置在ADO.NET和SQL Native Client驱动程序中的数据库镜像支持的最大优点就是无须重新编写应用程序,或者在应用程序中编写特殊代码来处理数据库镜像的故障转移。
如果不使用ADO.NET或者SQL Native Client自动进行重定向,那么也可以使用其他技术使应用程序进行故障转移。例如,如果客户端连接到一台虚拟服务器,可以使用Network Load Balancing手动重定向一台服务器到另一台服务器的连接。还可以编程实现自己的重定向代码和连接重试逻辑。
但是,所有这些用于协调客户端重定向和数据库镜像的技术都有一些重要限制。数据库镜像只能工作在数据库级别,而不是服务器级别。如果应用程序查询一台服务器上的多个数据库,或者使用完全限定对象名称进行跨数据库查询,那么就需要多加小心了。如果多个数据库位于一台服务器并且都配置了和备用服务器的镜像,就有可能出现其中一个数据库故障转移到备用服务器而其他数据库依然在原始服务器的情况。如果是那样的话,可能就要求每个数据库查询都使用一个单独的连接,这样将无法进行跨数据库查询,因为在镜像服务器上只有一个数据库是主数据库,其余都是镜像数据库。
数据库镜像与SQL SERVER 2005版本
下表显示各种版本的SQL SERVER 2005支持的数据库镜像功能。
表2:数据库镜像和SQL SERVER 2005版本
数据库 镜像功能 |
企业版 |
开发人员版 |
标准版 |
工作组版 |
SQL Express |
镜像伙伴 |
√ |
√ |
√ |
||
见证服务器 |
√ |
√ |
√ |
√ |
√ |
Safety = FULL |
√ |
√ |
√ |
||
Safety = OFF |
√ |
√ |
|||
故障转移后UNDO期间数据库可用性 |
√ |
√ |
√ |
||
并行redo |
√ |
√ |
|||
数据库快照 |
√ |
√ |
少数几个数据库镜像功能要求使用SQL SERVER 2005企业版或者开发人员版:
◆高性能模式下safety设置为OFF (异步数据传输);
◆数据库快照;
◆使用多线程在镜像数据库上应用事务日志(并行REDO)。
SQL Express和工作组版本可以作为数据库镜像的见证服务器,但不能作为伙伴服务器。
数据库镜像动态
要深入理解SQL SERVER 2005 数据库镜像,了解数据库镜像会话如何变化将对您大有帮助。这一部分内容包括数据库镜像会话中不同的数据库状态、同步和异步的日志记录传输机制、以及故障转移次序。
配置和安全性
一旦确定了主服务器、镜像服务器、以及可选的见证服务器,设置数据库镜像主要包括三个步骤。
1.必须备份数据库并使用norecovery在镜像数据库上还原该数据库。
注意:在备份数据库并还原到镜像数据库之前,主数据库必须设置为FULL还原模型。如果必须在事务日志中传输Bulk-logged记录,那么数据库镜像将无能为力。镜像服务器必须有足够的磁盘空间以允许和主数据库同样的文件增长。如果希望在镜像服务器中创建数据库快照,那么还必须为快照提供额外的磁盘空间。
如果备份、拷贝、以及还原数据库耗费了相当长的时间,那么可能需要现在原始数据库上进行一次事务日志备份来控制日志的大小。但是,如果通过日志到日志的备份清理了日志记录,数据库镜像将无法初始化。因此必须在初始化数据库镜像之前在镜像数据库上按顺序恢复那些事务日志记录备份。
2.参与数据库镜像会话的服务器必须彼此信任。对于本地通信而言,例如一个域内的通信,信任意味着SQL Server实例登陆账号必须有权限连接到其他镜像服务器,也包括endpoints。首先在每个服务器上使用CREATE LOGIN命令,然后使用GRANT CONNECT ON ENDPOINT命令(参阅" in SQL Server Books Online中“Example of Setting Up Database Mirroring Using Windows Authentication”)
非信任域之间的通信必须使用证书。如果使用CREATE CERTIFICATE语句创建自签名的证书,基本上所有数据镜像证书的要求都可以满足。确认在CREATE CERTIFICATE语句中将证书标记为ACTIVE FOR BEGIN_DIALOG。
3.下一步是创建数据库镜像的endpoints。创建endpoints要求您必须具有SQL Server instance的系统管理员权限。必须在每台服务器上创建专门用于数据库镜像的endpoints. 创建endpoints最简单的方式就是使用Configure Database Mirroring Security向导,可以在Database Properties对话框中Mirroring页面上单击Configure Security按钮启动该向导。Configure Security对话框会在构造和执行CREATE ENDPOINT命令之前,提示您输入正确的计算机名称和端口号,以及可选的登陆帐号。(参阅SQL Server Books Online中 “How to: Create a Mirroring Endpoint (Transact-SQL)”)
如果在域中设置数据库镜像,并且所有的SQL Server实例使用相同的服务帐号和密码,那么就不需要在每个服务器上创建登陆帐号。类似的,如果在工作组中,并且所有的SQL Server实例使用相同的服务帐号和密码,也不需要在每个服务器上创建登陆帐号。设置endpoints时将Configure Database Mirroring Security向导中的登陆帐号保留为空就可以了。
每个数据库endpoint必须指定服务器上一个唯一的端口号。如果使用不同服务器上的SQL Server实例,那么这些端口号可以是相同的。Configure Database Mirroring Security向导会自动建议您使用5022作为端口号。如果任何SQL Server实例运行在同一台服务器上,那么每个实例的端口号必须唯一,所有的镜像端口号也必须唯一。
假设在高可用镜像会话中有三台服务器。Server A是主服务器,server B是镜像服务器,server W作为见证服务器。对于server A而言,下面的命令在5022端口创建endpoint:
CREATE ENDPOINT [Mirroring]
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = PARTNER, ENCRYPTION = ENABLED);
注意:角色被指定为PARTNER,这样该服务器可以担当数据库镜像的主服务器或者镜像服务器。在server B上执行相同的命令。因为server B是独立物理服务器上的SQL Server实例,因此可以使用相同的端口号。然后对于server W,使用
CREATE ENDPOINT [Mirroring]
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = WITNESS, ENCRYPTION = ENABLED);
注意:对于server W,角色被指定为WITNESS。
默认不启动endpoint。接下来在每个服务器上使用下面的命令来启动endpoint:
ALTER ENDPOINT [Mirroring] STATE = STARTED;
可以在CREATE ENDPOINT命令中插入可选的STATE选项。在每台服务器上反复执行该选项。
使用CREATE ENDPOINT创建endpoint时,可以通过协议特定的参数根据IP地址来限制对endpoint的访问。结合RESTRICT_IP with ALL选项和EXCEPT_IP加上那些允许访问的特殊IP地址可以对一组IP地址作限制。(参阅SQL Server Books Online中的See “CREATE ENDPOINT”)。
查询每个服务器的sys.database_mirroring_endpoints目录视图来检查数据库镜像的endpoints:
SELECT *
FROM sys.database_mirroring_endpoints;
4. 要启动数据库镜像,接下来指定指定伙伴服务器和见证服务器。 必须具有数据库管理员权限才可以启动和管理一个给定的数据库镜像会话。在server A,即打算作主服务器的机器上设置主数据库角色以及伙伴(镜像)服务器:
-- Specify the partner from the principal server
ALTER DATABASE [AdventureWorks] SET PARTNER =
N'TCP://B.corp.mycompany.com:5022';
镜像伙伴的名称必须为完全限定计算机名。决定机器的完全限定名称可能有些难,不过Configure Database Mirroring Security向导会在建立endpoint时自动找出它们。
从命令行提示中运行下面的命令也可以找出一台机器的完全限定名称:
IPCONFIG /ALL
将"Host Name"和"Primary DNS Suffix"连接到一起。如果您看到的信息类似于:
Host Name . . . . . . . . . . . . : A
Primary Dns Suffix . . . . . . . : corp.mycompany.com
那么计算机名就是A.corp.mycompany.com。加上'TCP://'前缀然后再附加':<端口号>' ,就是镜像伙伴名称。
在镜像服务器上重复相同的命令,但是要指定主服务器名称:
-- Specify the partner from the mirror server
ALTER DATABASE [AdventureWorks] SET PARTNER =
N'TCP://A.corp.mycompany.com:5022';
接下来在主服务器上指定见证服务器:
-- Specify the witness from the principal server
ALTER DATABASE [AdventureWorks] SET WITNESS =
N'TCP://W.corp.mycompany.com:5026';
执行完CREATE ENDPOINT后见证服务器上就不需要执行其他命令了。
最后,在主服务器上指定会话的safety级别:
-- Set the safety level from the principal server
ALTER DATABASE [AdventureWorks] SET SAFETY FULL;
此时,镜像将自动启动,然后主服务器和镜像服务器将进行同步。
可以调整判定镜像伙伴是否故障的超时值,使用ALTER DATABASE命令的TIMEOUT参数。例如将TIMEOUT值改为20秒(默认是10),在主服务器上执行:
-- Issue from the principal server
ALTER DATABASE [AdventureWorks] SET PARTNER TIMEOUT 20;
最后,在主服务器上使用ALTER DATABASE和REDO_QUEUE选项可以镜像服务器上redo队列的大小。下面的查询将镜像服务器的redo队列设置为100兆:
-- Issue from the principal server
ALTER DATABASE [AdventureWorks] SET PARTNER REDO_QUEUE 100MB;
只要指定了镜像伙伴,镜像将立即启动。
数据库镜像目录视图
数据库镜像会话包括组成伙伴的服务器,可能还有见证服务器之间的关联。每台参与镜像的服务器都保存关于镜像会话和当前数据库状态的元数据。可以在主服务器和镜像服务器上通过查询sys.database_mirroring目录视图来检查会话状态。使用另一个视图sys.database_mirroring_witnesses可是返回见证服务器的信息(要想获得两个目录视图中所有列的更完整的描述,请参阅 SQL Server Books Online的“sys.database_mirroring" and "sys.database_mirrroing_witnesses”)。
了解数据库镜像会话如何工作以及数据库处于何种状态的一种不错的方法就是检查目录视图里的数据。我们从高可用配置开始(safety设置为FULL,有一台见证服务器)。下面的查询返回了主服务器或者见证服务器上数据库镜像会话的基本描述信息。
SELECT
DB_NAME(database_id) AS 'DatabaseName'
, mirroring_role_desc
, mirroring_safety_level_desc
, mirroring_state_desc
, mirroring_safety_sequence
, mirroring_role_sequence
, mirroring_partner_instance
, mirroring_witness_name
, mirroring_witness_state_desc
, mirroring_failover_lsn
FROM sys.database_mirroring
WHERE mirroring_guid IS NOT NULL;
在见证服务器上运行下面类似的查询,可以返回见证服务器的相关描述信息。
SELECT
Database_name
, safety_level_desc
, safety_sequence_number
, role_sequence_number
, is_suspended
, is_suspended_sequence_number
, principal_server_name
, mirror_server_name
FROM sys.database_mirroring_witnesses;
现在来比较在一个典型的数据库镜像会话中两个查询的输出结果。假设已经设置了server A到 server B的数据库镜像,使用safety为FULL。(设置以下配置的示例代码,请参阅后面的实现数据库镜像“配置和安全性”)见证服务器是server W,对AdventureWorks数据库做镜像。表3显示了两个查询的输出结果:
表3:高可用镜像会话,两个伙伴服务器sys.database_mirroring输出结果
镜像伙伴的 元数据列 |
主服务器值: Server A |
镜像服务器值: Server B |
db_name(database_id) |
AdventureWorks |
AdventureWorks |
mirroring_role_desc |
PRINCIPAL |
MIRROR |
mirroring_safety_level_desc |
FULL |
FULL |
mirroring_state_desc |
SYNCHRONIZED |
SYNCHRONIZED |
mirroring_safety_sequence |
1 |
1 |
mirroring_role_sequence |
1 |
1 |
mirroring_partner_instance |
TCP://B.corp.mycompany.com:5022 |
TCP://A. .corp.mycompany.com:5022 |
mirroring_witness_name |
TCP://W.corp.mycompany.com:5022 |
TCP://W.corp.mycompany.com:5022 |
mirroring_witness_state_desc |
CONNECTED |
CONNECTED |
mirroring_failover_lsn |
95000000007300001 |
95000000007300001 |
注意数据库镜像会话中的每个伙伴保存的所有元数据从另一个伙伴的角度来看是完全相同的。每个伙伴保存其数据库名称、整个会话的safety设置、数据库的镜像状态、以及两个序列计数器。
◆mirroring_safety_sequence计数器保存在两个伙伴上,只要safety设置改变时将增加该计数器的值。
◆mirroring_role_sequence计数器保存在两个伙伴以及见证服务器上,只要发生故障转移就增加该计数器的值。
伙伴数据库的状态以及见证服务器的状态都保存在每个伙伴服务器上:
◆mirroring_state_desc显示了会话中伙伴数据库的状态。
◆mirroring_witness_state_desc显示了会话中见证服务器的状态。
最后,每个伙伴都包含一个mirroring_failover_lsn。LSN是一个日志序列号,用于唯一标识每条事务日志记录。 镜像伙伴将上次硬化的最后一组日志记录的最高LSN +1保存起来。在上表中,由于主数据库中只有为数不多的活动,因此 镜像转移故障的lsn和主服务器以及见证服务器的lsn相同。当传输大量数据时,可能就会发现主服务器的lsn值大于镜像服务器的值,因为镜像服务器的运行有些滞后。
现在比较一下在见证服务器上找到的元数据。下表显示了来自见证服务器元数据的一些可比较信息:
表4:见证服务器上sys.database_mirroring_witnesses的输出,关联了伙伴的元数据
见证服务器的元数据列 |
见证服务器值 |
相应的镜像伙伴元数据列 |
database_name |
AdventureWorks |
db_name(database_id) |
safety_level_desc |
FULL |
mirroring_safety_level_desc |
safety_sequence_number |
1 |
mirroring_safety_sequence |
role_sequence_number |
1 |
mirroring_role_sequence |
is_suspended |
0 |
|
is_suspended_sequence_number |
1 |
|
principal_server_name |
TCP://A. .corp.mycompany.com:5022 |
|
mirror_server_name |
TCP://B.corp.mycompany.com:5022 |
注意见证服务器的元数据包含了safety的描述、safety的序列号、以及角色序列号。见证服务器还保存了会话是否被挂起的信息,以及主服务器和镜像服务器的名称。注意见证服务器的目录视图并没有报告镜像故障转移的lsn,而且也不保存数据库状态。
数据库镜像所需的全部元数据(特别是故障转移lsn和伙伴服务器名称)都保存在镜像伙伴上。见证服务器只保存在高可用模式下作为见证者必须保存的那些数据,特别是用于跟踪会话中角色转换数目的角色序列号。该计数器用于帮助判定何时一台主服务器可以做角色转换。相关知识会在下一部分介绍的场景中进行阐述。
数据库镜像状态和状态转换
在数据库镜像会话过程中,每台伙伴服务器都对数据库状态作记录和保存,可以通过sys.database_mirroring目录视图来查看。mirroring_state列返回状态号,mirroring_state_desc列返回状态的描述性名称。(要想获取关于数据库状态号和描述性名称的完整列表,请看SQL Server Books Online中的“sys.database_mirroring”)。同样的目录视图还用于报告见证服务器的状态信息。
除了为每个数据库报告状态信息以外,还有三个重要术语用来对数据库镜像中的服务器和数据库进行描述。
1.主服务器上的数据是exposed ,当它进行事务处理但是没有日志数据被发送到镜像服务器。
2.不能提供数据库服务 – 当主服务器不允许任何用户连接到数据库,不允许任何事务处理。
3.服务器被孤立 – 当它无法联系数据库镜像会话中任何其他服务器,同时别人也联系不上它。
当主数据库是exposed,它可以接收用户连接和进行事务处理,但是没有日志记录被发送到镜像数据库。因此如果主数据库失败了,那么镜像数据库不包含任何自主数据库进入exposed状态后主服务器上发生的事务。同样的,也不可以清理主数据库的事务日志,这导致日志文件的无限增长。
当safety设置为FULL时,如果主服务器无法和其他服务器组成quorum,它将停止提供数据库服务。主服务器将不允许主数据库上的用户连接和事务,并断开所有当前的用户。只要主服务器能再次组成quorum,就立刻重新提供数据库服务。
一台服务器可能运转正常但是它和数据库镜下会话中的其他服务器之间的通信连路中断了。如果那样的话,我们称服务器被孤立了。 当safety为FULL时,如果主服务器被孤立,那么它将无法提供数据库服务,因为会话中没有其他服务器可与之共同组成quorum。
- ››SQL Server 2008 R2 下如何清理数据库日志文件
- ››sqlite 存取中文的解决方法
- ››SQL2005、2008、2000 清空删除日志
- ››SQL Server 2005和SQL Server 2000数据的相互导入...
- ››sql server 2008 在安装了活动目录以后无法启动服...
- ››sqlserver 每30分自动生成一次
- ››sqlite 数据库 对 BOOL型 数据的插入处理正确用法...
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
更多精彩
赞助商链接