¡¡¡¡¸´ÖƵĸÅÄî
¡¡¡¡
¡¡¡¡¸´ÖÆÊǽ«Ò»×éÊý¾Ý´ÓÒ»¸öÊý¾ÝÔ´¿½±´µ½¶à¸öÊý¾ÝÔ´µÄ¼¼Êõ£¬Êǽ«Ò»·ÝÊý¾Ý·¢²¼µ½¶à¸ö´æ´¢Õ¾µãÉϵÄÓÐЧ·½Ê½¡£Ê¹Óø´ÖƼ¼Êõ£¬Óû§¿ÉÒÔ½«Ò»·ÝÊý¾Ý·¢²¼µ½¶ą̀·þÎñÆ÷ÉÏ£¬´Ó¶øʹ²»Í¬µÄ·þÎñÆ÷Óû§¶¼¿ÉÒÔÔÚȨÏÞµÄÐí¿ÉµÄ·¶Î§ÄÚ¹²ÏíÕâ·ÝÊý¾Ý¡£¸´ÖƼ¼Êõ¿ÉÒÔÈ·±£·Ö²¼ÔÚ²»Í¬µØµãµÄÊý¾Ý×Ô¶¯Í¬²½¸üУ¬´Ó¶ø±£Ö¤Êý¾ÝµÄÒ»ÖÂÐÔ¡£
¡¡¡¡
¡¡¡¡SQL¸´ÖƵĻù±¾ÔªËØ°üÀ¨
¡¡¡¡
¡¡¡¡³ö°æ·þÎñÆ÷¡¢¶©ÔÄ·þÎñÆ÷¡¢·Ö·¢·þÎñÆ÷¡¢³ö°æÎï¡¢ÎÄÕÂ
¡¡¡¡
¡¡¡¡SQL¸´ÖƵŤ×÷ÔÀí
¡¡¡¡
¡¡¡¡SQL SERVER Ö÷Òª²ÉÓóö°æÎï¡¢¶©Ôĵķ½Ê½À´´¦Àí¸´ÖÆ¡£Ô´Êý¾ÝËùÔڵķþÎñÆ÷Êdzö°æ·þÎñÆ÷£¬¸ºÔð·¢±íÊý¾Ý¡£³ö°æ·þÎñÆ÷°ÑÒª·¢±íµÄÊý¾ÝµÄËùÓиıäÇé¿öµÄ¿½±´¸´ÖƵ½·Ö·¢·þÎñÆ÷£¬·Ö·¢·þÎñÆ÷°üº¬ÓÐÒ»¸ö·Ö·¢Êý¾Ý¿â£¬¿É½ÓÊÕÊý¾ÝµÄËùÓиı䣬²¢±£´æÕâЩ¸Ä±ä£¬ÔÙ°ÑÕâЩ¸Ä±ä·Ö·¢¸ø¶©ÔÄ·þÎñÆ÷
¡¡¡¡
¡¡¡¡SQL SERVER¸´ÖƼ¼ÊõÀàÐÍ
¡¡¡¡
¡¡¡¡SQL SERVERÌṩÁËÈýÖÖ¸´ÖƼ¼Êõ£¬·Ö±ðÊÇ£º
¡¡¡¡
¡¡¡¡1¡¢¿ìÕÕ¸´ÖÆ£¨´ô»áÎÒÃǾÍʹÓÃÕâ¸ö£©
¡¡¡¡2¡¢ÊÂÎñ¸´ÖÆ
¡¡¡¡3¡¢ºÏ²¢¸´ÖÆ
¡¡¡¡
¡¡¡¡Ö»Òª°ÑÉÏÃæÕâЩ¸ÅÄîŪÇå³þÁËÄÇô¶Ô¸´ÖÆÒ²¾ÍÓÐÁËÒ»¶¨µÄÀí½â¡£½ÓÏÂÀ´ÎÒÃǾÍÒ»²½Ò»²½À´ÊµÏÖ¸´ÖƵIJ½Öè¡£
¡¡¡¡
¡¡¡¡µÚÒ»ÏÈÀ´ÅäÖóö°æ·þÎñÆ÷
¡¡¡¡
¡¡¡¡(1)Ñ¡ÖÐÖ¸¶¨[·þÎñÆ÷]½Úµã
¡¡¡¡(2)´Ó[¹¤¾ß]ÏÂÀ²Ëµ¥µÄ[¸´ÖÆ]×Ӳ˵¥ÖÐÑ¡Ôñ[·¢²¼¡¢¶©ÔÄ·þÎñÆ÷ºÍ·Ö·¢]ÃüÁî
¡¡¡¡(3)ϵͳµ¯³öÒ»¸ö¶Ô»°¿òµã[ÏÂÒ»²½]È»ºó¿´×ÅÌáʾһֱ²Ù×÷µ½Íê³É¡£
¡¡¡¡(4)µ±Íê³ÉÁ˳ö°æ·þÎñÆ÷µÄÉèÖÃÒÔºóϵͳ»áΪ¸Ã·þÎñÆ÷µÄÊ÷ÐνṹÖÐÌí¼ÓÒ»¸ö¸´ÖƼàÊÓÆ÷¡£Í¬Ê±Ò²Éú³ÉÒ»¸ö·Ö·¢Êý¾Ý¿â(distribution)
¡¡¡¡
¡¡¡¡µÚ¶þ´´½¨³ö°æÎï
¡¡¡¡
¡¡¡¡(1)Ñ¡ÖÐÖ¸¶¨µÄ·þÎñÆ÷
¡¡¡¡(2)´Ó[¹¤¾ß]²Ëµ¥µÄ[¸´ÖÆ]×Ӳ˵¥ÖÐÑ¡Ôñ[´´½¨ºÍ¹ÜÀí·¢²¼]ÃüÁî¡£´Ëʱϵͳ»áµ¯³öÒ»¸ö¶Ô»°¿ò
¡¡¡¡(3)Ñ¡ÔñÒª´´½¨³ö°æÎïµÄÊý¾Ý¿â£¬È»ºóµ¥»÷[´´½¨·¢²¼]
¡¡¡¡(4)ÔÚ[´´½¨·¢²¼Ïòµ¼]µÄÌáʾ¶Ô»°¿òÖе¥»÷[ÏÂÒ»²½]ϵͳ¾Í»áµ¯³öÒ»¸ö¶Ô»°¿ò¡£¶Ô»°¿òÉϵÄÄÚÈÝÊǸ´ÖƵÄÈý¸öÀàÐÍ¡£ÎÒÃÇÏÖÔÚÑ¡µÚÒ»¸öÒ²¾ÍÊÇĬÈϵĿìÕÕ·¢²¼(ÆäËûÁ½¸ö´ó¼Ò¿ÉÒÔÈ¥¿´¿´°ïÖú)
¡¡¡¡(5)µ¥»÷[ÏÂÒ»²½]ϵͳҪÇóÖ¸¶¨¿ÉÒÔ¶©Ôĸ÷¢²¼µÄÊý¾Ý¿â·þÎñÆ÷ÀàÐÍ£¬SQLSERVERÔÊÐíÔÚ²»Í¬µÄÊý¾Ý¿âÈç ORACLE»òACCESSÖ®¼ä½øÐÐÊý¾Ý¸´ÖÆ¡£µ«ÊÇÔÚÕâÀïÎÒÃÇÑ¡ÔñÔËÐÐ"SQL SERVER 2000"µÄÊý¾Ý¿â·þÎñÆ÷
¡¡¡¡(6)µ¥»÷[ÏÂÒ»²½]ϵͳ¾Íµ¯³öÒ»¸ö¶¨ÒåÎÄÕµĶԻ°¿òÒ²¾ÍÊÇÑ¡ÔñÒª³ö°æµÄ±í
¡¡¡¡(7)È»ºó[ÏÂÒ»²½]Ö±µ½²Ù×÷Íê³É¡£µ±Íê³É³ö°æÎïµÄ´´½¨ºó´´½¨³ö°æÎïµÄÊý¾Ý¿âÒ²¾Í±ä³ÉÁËÒ»¸ö¹²ÏíÊý¾Ý¿â¡£
¡¡¡¡
¡¡¡¡µÚÈýÉè¼Æ¶©ÔÄ
¡¡¡¡
¡¡¡¡(1)Ñ¡ÖÐÖ¸¶¨µÄ¶©ÔÄ·þÎñÆ÷
¡¡¡¡(2)´Ó[¹¤¾ß]ÏÂÀ²Ëµ¥ÖÐÑ¡Ôñ[¸´ÖÆ]×Ӳ˵¥µÄ[ÇëÇó¶©ÔÄ]
¡¡¡¡(3)°´ÕÕµ¥»÷[ÏÂÒ»²½]²Ù×÷Ö±µ½ÏµÍ³»áÌáʾ¼ì²éSQL SERVER´úÀí·þÎñµÄÔËÐÐ״̬£¬Ö´Ðи´ÖƲÙ×÷µÄÇ°ÌáÌõ¼þÊÇSQL SERVER´úÀí·þÎñ±ØÐëÒѾÆô¶¯¡£
¡¡¡¡(4)µ¥»÷[Íê³É]¡£Íê³É¶©ÔIJÙ×÷¡£
¡¡¡¡
¡¡¡¡Íê³ÉÉÏÃæµÄ²½ÖèÆäʵ¸´ÖÆÒ²¾ÍÊdzɹ¦ÁË¡£µ«ÊÇÈçºÎÀ´ÖªµÀ¸´ÖÆÊÇ·ñ³É¹¦ÁËÄØ£¿ÕâÀï¿ÉÒÔͨ¹ýÕâÖÖ·½·¨À´¿ìËÙ¿´ÊÇ·ñ³É¹¦¡£Õ¹¿ª³ö°æ·þÎñÆ÷ÏÂÃæµÄ¸´ÖÆ----·¢²¼ÄÚÈÝ----ÓÒ¼ü·¢²¼ÄÚÈÝ----ÊôÐÔ----»÷»î----״̬ȻºóµãÁ¢¼´ÔËÐдúÀí³ÌÐò½Ó×ŵã´úÀí³ÌÐòÊôÐÔ»÷»îµ÷¶È°Ñµ÷¶ÈÉèÖÃΪÿһÌì·¢Éú£¬Ã¿Ò»·ÖÖÓ£¬ÔÚ0£º00£º00ºÍ23£º59£º59Ö®¼ä¡£½ÓÏÂÀ´¾ÍÊÇÅжϸ´ÖÆÊÇ·ñ³É¹¦ÁË´ò¿ªC:\Program Files\Microsoft SQL Server\MSSQL\REPLDATA\unc\XIAOWANGZI_database_databaseÏÂÃæ¿´ÊDz»ÊÇÓÐһЩÒÔʱ¼ä×öΪÎļþÃûµÄÎļþ¼Ð²î²»¶àÒ»·ÖÖоͲúÉúÒ»¸ö¡£ÒªÊÇÄ㻹²»ÐŵĻ°¾Í´ò¿ªÄãµÄÊý¾Ý¿â¿´ÔÚ¶©ÔĵķþÎñÆ÷µÄÖ¸¶¨¶©ÔÄÊý¾Ý¿âÏ¿´ÊDz»ÊÇ¿´µ½ÁËÄã¸Õ²ÅËù·¢²¼µÄ±í--
¡¡¡¡Ò»¸öÊÖ¹¤Í¬²½µÄ·½°¸
¡¡¡¡
¡¡¡¡--¶¨Ê±Í¬²½·þÎñÆ÷ÉϵÄÊý¾Ý
¡¡¡¡
¡¡¡¡--Àý×Ó:
¡¡¡¡
¡¡¡¡--²âÊÔ»·¾³,SQL Server2000,Ô¶³Ì·þÎñÆ÷Ãû:xz,Óû§ÃûΪ:sa,ÎÞÃÜÂë,²âÊÔÊý¾Ý¿â:test
¡¡¡¡
¡¡¡¡--·þÎñÆ÷Éϵıí(²éѯ·ÖÎöÆ÷Á¬½Óµ½·þÎñÆ÷ÉÏ´´½¨)
¡¡¡¡
¡¡¡¡create table [user](id int primary key,number varchar(4),name varchar(10))
¡¡¡¡go
¡¡¡¡
¡¡¡¡--ÒÔÏÂÔÚ¾ÖÓòÍø(±¾»ú²Ù×÷)
¡¡¡¡
¡¡¡¡--±¾»úµÄ±í,state˵Ã÷:null ±íʾÐÂÔö¼Ç¼,1 ±íʾÐ޸ĹýµÄ¼Ç¼,0 ±íʾÎޱ仯µÄ¼Ç¼
¡¡¡¡
¡¡¡¡if exists (select * from dbo.sysobjects where id = object_id(N'[user]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
¡¡¡¡drop table [user]
¡¡¡¡GO
¡¡¡¡create table [user](id int identity(1,1),number varchar(4),name varchar(10),state bit)
¡¡¡¡go
¡¡¡¡
¡¡¡¡--´´½¨´¥·¢Æ÷,ά»¤state×ֶεÄÖµ
¡¡¡¡
¡¡¡¡create trigger t_state on [user]
¡¡¡¡after update
¡¡¡¡as
¡¡¡¡update [user] set state=1
¡¡¡¡from [user] a join inserted b on a.id=b.id
¡¡¡¡where a.state is not null
¡¡¡¡go
¡¡¡¡
¡¡¡¡--ΪÁË·½±ãͬ²½´¦Àí,´´½¨Á´½Ó·þÎñÆ÷µ½ÒªÍ¬²½µÄ·þÎñÆ÷
¡¡¡¡
¡¡¡¡--ÕâÀïµÄÔ¶³Ì·þÎñÆ÷ÃûΪ:xz,Óû§ÃûΪ:sa,ÎÞÃÜÂë
¡¡¡¡
¡¡¡¡if exists(select 1 from master..sysservers where srvname='srv_lnk')
¡¡¡¡exec sp_dropserver 'srv_lnk','droplogins'
¡¡¡¡go
¡¡¡¡exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','xz'
¡¡¡¡exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa'
¡¡¡¡go
¡¡¡¡
¡¡¡¡--´´½¨Í¬²½´¦ÀíµÄ´æ´¢¹ý³Ì
¡¡¡¡
¡¡¡¡if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_synchro]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
¡¡¡¡drop procedure [dbo].[p_synchro]
¡¡¡¡GO
¡¡¡¡create proc p_synchro
¡¡¡¡as
¡¡¡¡--set XACT_ABORT on
¡¡¡¡
¡¡¡¡--Æô¶¯Ô¶³Ì·þÎñÆ÷µÄMSDTC·þÎñ
¡¡¡¡
¡¡¡¡--exec master..xp_cmdshell 'isql /S"xz" /U"sa" /P"" /q"exec master..xp_cmdshell ''net start msdtc'',no_output"',no_output
¡¡¡¡
¡¡¡¡--Æô¶¯±¾»úµÄMSDTC·þÎñ
¡¡¡¡
¡¡¡¡--exec master..xp_cmdshell 'net start msdtc',no_output
¡¡¡¡
¡¡¡¡--½øÐзֲ¼ÊÂÎñ´¦Àí,Èç¹û±íÓñêʶÁÐ×öÖ÷¼ü,ÓÃÏÂÃæµÄ·½·¨
¡¡¡¡
¡¡¡¡--BEGIN DISTRIBUTED TRANSACTION
¡¡¡¡--ͬ²½É¾³ýµÄÊý¾Ý
¡¡¡¡
¡¡¡¡delete from srv_lnk.test.dbo.[user]
¡¡¡¡where id not in(select id from [user])
¡¡¡¡
¡¡¡¡--ͬ²½ÐÂÔöµÄÊý¾Ý
¡¡¡¡
¡¡¡¡insert into srv_lnk.test.dbo.[user]
¡¡¡¡select id,number,name from [user] where state is null
¡¡¡¡
¡¡¡¡--ͬ²½Ð޸ĵÄÊý¾Ý
¡¡¡¡
¡¡¡¡update srv_lnk.test.dbo.[user] set
¡¡¡¡number=b.number,name=b.name
¡¡¡¡from srv_lnk.test.dbo.[user] a
¡¡¡¡join [user] b on a.id=b.id
¡¡¡¡where b.state=1
¡¡¡¡
¡¡¡¡--ͬ²½ºó¸üб¾»úµÄ±êÖ¾
¡¡¡¡
¡¡¡¡update [user] set state=0 where isnull(state,1)=1
¡¡¡¡--COMMIT TRAN
¡¡¡¡go
¡¡¡¡
¡¡¡¡--´´½¨×÷Òµ,¶¨Ê±Ö´ÐÐÊý¾Ýͬ²½µÄ´æ´¢¹ý³Ì
¡¡¡¡
¡¡¡¡if exists(SELECT 1 from msdb..sysjobs where name='Êý¾Ý´¦Àí')
¡¡¡¡EXECUTE msdb.dbo.sp_delete_job @job_name='Êý¾Ý´¦Àí'
¡¡¡¡exec msdb..sp_add_job @job_name='Êý¾Ý´¦Àí'
¡¡¡¡
¡¡¡¡--´´½¨×÷Òµ²½Öè
¡¡¡¡
¡¡¡¡declare @sql varchar(800),@dbname varchar(250)
¡¡¡¡select @sql='exec p_synchro' --Êý¾Ý´¦ÀíµÄÃüÁî
¡¡¡¡,@dbname=db_name() --Ö´ÐÐÊý¾Ý´¦ÀíµÄÊý¾Ý¿âÃû
¡¡¡¡exec msdb..sp_add_jobstep @job_name='Êý¾Ý´¦Àí',
¡¡¡¡@step_name = 'Êý¾Ýͬ²½',
¡¡¡¡@subsystem = 'TSQL',
¡¡¡¡@database_name=@dbname,
¡¡¡¡@command = @sql,
¡¡¡¡@retry_attempts = 5, --ÖØÊÔ´ÎÊý
¡¡¡¡@retry_interval = 5 --ÖØÊÔ¼ä¸ô
¡¡¡¡
¡¡¡¡--´´½¨µ÷¶È
¡¡¡¡
¡¡¡¡EXEC msdb..sp_add_jobschedule @job_name = 'Êý¾Ý´¦Àí',
¡¡¡¡@name = 'ʱ¼ä°²ÅÅ',
¡¡¡¡@freq_type = 4, --ÿÌì
¡¡¡¡@freq_interval = 1, --ÿÌìÖ´ÐÐÒ»´Î
¡¡¡¡@active_start_time = 00000 --0µãÖ´ÐÐ
¡¡¡¡go