仓酷云

标题: MSSQL编程:经由过程功课,准时同步两个数据库 [打印本页]

作者: 深爱那片海    时间: 2015-1-16 22:28
标题: MSSQL编程:经由过程功课,准时同步两个数据库
Cluster/NDB高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用准时|数据|数据库

--准时同步服务器上的数据

--例子:
--测试情况,SQLServer2000,远程服务器名:xz,用户名为:sa,无暗码,测试数据库:test
--服务器上的表(查询剖析器毗连到服务器上创立)
createtable[user](idintprimarykey,numbervarchar(4),namevarchar(10))
go
--以下在局域网(本机操纵)
--本机的表,state申明:null暗示新增纪录,1暗示修正过的纪录,0暗示无变更的纪录
ifexists(select*fromdbo.sysobjectswhereid=object_id(N[user])andOBJECTPROPERTY(id,NIsUserTable)=1)
droptable[user]
GO
createtable[user](idintidentity(1,1),numbervarchar(4),namevarchar(10),statebit)
go
--创立触发器,保护state字段的值
createtriggert_stateon[user]
afterupdate
as
update[user]setstate=1
from[user]ajoininsertedbona.id=b.id
wherea.stateisnotnull
go

--为了便利同步处置,创立链接服务器到要同步的服务器
--这里的远程服务器名为:xz,用户名为:sa,无暗码
ifexists(select1frommaster..sysserverswheresrvname=srv_lnk)
execsp_dropserversrv_lnk,droplogins
go
execsp_addlinkedserversrv_lnk,,SQLOLEDB,xz
execsp_addlinkedsrvloginsrv_lnk,false,null,sa
go

--创立同步处置的存储历程
ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[p_synchro])andOBJECTPROPERTY(id,NIsProcedure)=1)
dropprocedure[dbo].[p_synchro]
GO
createprocp_synchro
as
--setXACT_ABORTon
--启动远程服务器的MSDTC服务
--execmaster..xp_cmdshellisql/S"xz"/U"sa"/P""/q"execmaster..xp_cmdshellnetstartmsdtc,no_output",no_output

--启动本机的MSDTC服务
--execmaster..xp_cmdshellnetstartmsdtc,no_output

--举行散布事件处置,假如表用标识列做主键,用上面的办法
--BEGINDISTRIBUTEDTRANSACTION
--同步删除的数据
deletefromsrv_lnk.test.dbo.[user]
whereidnotin(selectidfrom[user])

--同步新增的数据
insertintosrv_lnk.test.dbo.[user]
selectid,number,namefrom[user]wherestateisnull

--同步修正的数据
updatesrv_lnk.test.dbo.[user]set
number=b.number,name=b.name
fromsrv_lnk.test.dbo.[user]a
join[user]bona.id=b.id
whereb.state=1

--同步后更新本机的标记
update[user]setstate=0whereisnull(state,1)=1
--COMMITTRAN
go

--创立功课,准时实行数据同步的存储历程
ifexists(SELECT1frommsdb..sysjobswherename=数据处置)
EXECUTEmsdb.dbo.sp_delete_job@job_name=数据处置
execmsdb..sp_add_job@job_name=数据处置

--创立功课步骤
declare@sqlvarchar(800),@dbnamevarchar(250)
select@sql=execp_synchro--数据处置的命令
,@dbname=db_name()--实行数据处置的数据库名

execmsdb..sp_add_jobstep@job_name=数据处置,
@step_name=数据同步,
@subsystem=TSQL,
@database_name=@dbname,
@command=@sql,
@retry_attempts=5,--重试次数
@retry_interval=5--重试距离

--创立调剂
EXECmsdb..sp_add_jobschedule@job_name=数据处置,
@name=工夫布置,
@freq_type=4,--天天
@freq_interval=1,--天天实行一次
@active_start_time=00000--0点实行
go



也就是说在php本地调用pdoprepare中的mysql_real_escape_string来操作query,使用的是本地单字节字符集,即编码为xbfx5cx27,并带入到mysql中查询,由于使用setnames设置了连接字符集.
作者: 若天明    时间: 2015-1-19 14:07
你可以简单地认为适合的就是好,不适合就是不好。
作者: 海妖    时间: 2015-1-26 10:13
对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。
作者: 深爱那片海    时间: 2015-2-4 14:28
你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。
作者: 小女巫    时间: 2015-2-10 02:06
对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。
作者: 爱飞    时间: 2015-2-28 15:15
如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。
作者: 若相依    时间: 2015-3-10 00:50
我们学到了什么?思考问题的时候从表的角度来思考问
作者: 莫相离    时间: 2015-3-17 04:07
习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。
作者: 不帅    时间: 2015-3-23 18:40
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2