标签归档:MSSQL数据同步

批量删除MSSQL 中主外键约束

在制作 MSSQL同步工具的时候,发现由于主外键的约束,导致数据同步异常,所有我们需要把 读数据库里面的主外键约束,进行批量删除操作.
表同步

1 如何批量查询数据库的主外键?
在MSSQL2005以上版本中,系统提供一个系统视图 sys.foreign_keys 可以查询出系统所有的外键约束
外键查询
2 如何批量删除数据库的主外间键?
————————————————————————–

create table #t (keyId int identity,name varchar(200),tbname varchar(200))

insert into #t (name,tbName) 
select a.name,b.name from  sys.foreign_keys  a 
left join sysobjects b on a.parent_object_id = b.id 
 

declare @i int,@imax int,@name varchar(200) ,@tbName varchar(200)

select @i=MIN(keyId) from #t 
select @imax=MAX(keyid) from #t 

while @i<=@imax
begin
 set @name='' 
 set @tbName =''
 select @name =name,@tbName=tbname from #t where keyId=@i
 --print @name 
 --print @tbName 
 
 print(' ALTER TABLE ['+@tbname +'] DROP CONSTRAINT ['+@name+']')
 exec(' ALTER TABLE ['+@tbname +'] DROP CONSTRAINT ['+@name+']')
 
set @i=@i+1
end


truncate table #t 
drop table #t  

----------------------------------------------------------

表同步成功

MSSQL基于数据变化的高级复制方法[2]

MSSQL基于数据变化的高级复制方法[2]

MSSQL数据同步方法
1 如何通过MSSQL日志将数据进行同步:
trc 文件保存 反运行的方式?

2 通过业务数据主动获取

2.1 如果业务数据发生变化将业务数据写入待传送表
2.2 按待传送服务器数据列表 进行数据传送[让系统支持多服务同步传送]
2.3

—–数据库设计
表一 table1[待传送列表]
列名[业务类型,业务类型唯一标识ID,操作类型]{操作类型分为”add/mdf/del”}
数据示例[“customInfo”,”B7C3FFFB-0899-4DE1-A1EC-D0A4895D0B59″,”add”]
表二 table2[待传数据结构表]{当操作类型为del 请采用倒系的方式删除}
列名[业务类型,表名,顺序]
数据示例[“customInfo”,”customCheZhuMain”,1]
[“customInfo”,”customCheLiang”,1]
[“customInfo”,”customCheLiangExtend”,1]

—–代码设计思路
业务数据(add/mdf/del)–>
写入待传送数据列表
触发代码待传传送日志
mssqltongBu-1

—-接口端
获取待传日志–>
根据操作类型获取待传数据
写入Slave/写入日志

SQL同步数据写入
——此操作模式将于2014-12-20 并于正式系统测试

MSSQL基于数据变化的高级复制方法[1]

MSSQL基于数据变化的高级复制方法[1]
工具开发背景 :
系统平均在线200人,月底 月初时大量报表查询时候 导致系统严重超时,
所以需要开发基于MSSQL的读写分离方案,分散系统压力,避免由于查询业务导致正常的业务不能操作。
操作步骤:
1 首先将需要同步的表的主键值及表ID 放入待同步表

2 需要同步表必须具有标识一系列数据的关键Id

3 拥有外键关联表,需先将主键表同步

由控制程序 从Master中查找需要同步的数据 依次同步之Slave1,Slave2,Slave3…

按照上面的操作方式就可以实现数据库读写分离,避免正常业务被查询业务所影响
master-slave