SQL Server 中心订阅模型(多发布单订阅)
来源:互联网 发布:java类的初始化 编辑:程序博客网 时间:2024/06/10 03:03
大多数SQL Server 复制拓扑都是基于中心发布模型,它是由一个发布复制到一个或者多个订阅。另一个复制模型是中心订阅模型,它使用事务复制由多个发布复制到一个订阅中。
中心订阅模型用于从多个数据源中合并数据,例如:
》从多个数据仓库中汇总库存到企业总部的中心服务器;
》同一个公司中从持续发送远程办公数据到中心办公系统中;
》合并订单信息到同一个地方集中处理。
解决这个问题的方法是水平分区,设置静态行筛选器,设置属性 “名称已被使用时的操作”为 “删除数据,如果目标有行筛选器,仅删除与该筛选器匹配的数据(Delete data,If article has a row filter, delete only data that matches the filter)”
现在,本人使用2个分库数据,合并到另一个数据库中:
【设置水平分区标志】
默认情况下,表结构如下:
CREATE TABLE [dbo].[DemoTab]([id] [int] IDENTITY(1,1) NOT NULL,[name] [varchar](10) NOT NULL,[value] [decimal](18, 4) NULL,CONSTRAINT [PK_DemoTab] PRIMARY KEY CLUSTERED ([id] ASC))GO
如果这样,id 自增量肯定有重复键,因此增加一个标志列 [LocationID],并如 id 列作为组合键。如下,分别在两个发布数据表中创建表。
--数据库:[TestDBSubA]USE [TestDBSubA]GOCREATE TABLE [dbo].[DemoTab]([id] [int] IDENTITY(1,1) NOT NULL,[name] [varchar](10) NOT NULL,[value] [decimal](18, 4) NULL,[LocationID] INT NOT NULL DEFAULT(1)CONSTRAINT [PK_DemoTab] PRIMARY KEY CLUSTERED ([id] ASC,[LocationID] ASC))GO--数据库:[TestDBSubB]USE [TestDBSubB]GOCREATE TABLE [dbo].[DemoTab]([id] [int] IDENTITY(1,1) NOT NULL,[name] [varchar](10) NOT NULL,[value] [decimal](18, 4) NULL,[LocationID] INT NOT NULL DEFAULT(2)CONSTRAINT [PK_DemoTab] PRIMARY KEY CLUSTERED ([id] ASC,[LocationID] ASC))GO
此时就可以使用字段 [LocationID] 来确定是不同数据库的数据了,在同一个订阅表中就不会有主键重复问题了。但是当在其中一个发布初始化时,或者操作数据时,怎么区分来自不同的发布数据库的数据呢?接下来设置静态行筛选器,非常重要!
【设置静态行筛选器】
此时可以在 数据库 [TestDBSubA] 或 [TestDBSubB] 的服务器中创建发布了,使用的是事务复制,选择需要发布的表,如下图:
下一步,设置行筛选器,筛选条件为 [LocationID]=1(这个是数据库 [TestDBSubA] 的发布),同理设置 [TestDBSubB] 的发布!
接下来一步步完成即可。还有一步重要的设置,发布表对象的属性。其实在上一步在操作中也可以设置。
【设置表项目的应用属性】
右键刚创建完成的发布,选择属性,选择项目,可以选择设置一个表或者所有表。如图:
选择设置所有表,设置属性 “名称已被使用时的操作”为 “删除数据,如果目标有行筛选器,仅删除与该筛选器匹配的数据(Delete data,If article has a row filter, delete only data that matches the filter)”
设置完成后确定推出!
同理设置 [TestDBSubB] 的发布!(注意 [LocationID] = 2)
订阅正常设置,两个发布的订阅都是同一个数据库。
先后分别初始化应用快照,正常!
现在测试,分别在两发布数据库中插入数据。
INSERT INTO [TestDBSubA].[dbo].[DemoTab]([name],[value]) SELECT 'TestDBSubA',0INSERT INTO [TestDBSubB].[dbo].[DemoTab]([name],[value]) SELECT 'TestDBSubB',0SELECT * FROM [TestDB].[dbo].[DemoTab]
结果合并了!!所有DML操作正常同步!数据可以正常操作同步,但是字段增删改则有问题!!
- SQL Server 中心订阅模型(多发布单订阅)
- SQL Server 复制订阅
- Sql Server 订阅发布
- sql server 订阅和发布
- SQL SERVER发布与订阅
- sql server 2005 发布订阅
- SQL SERVER 手动删除订阅
- SQL Server + Oracle订阅发布
- sql server 2005 连接故障一例(复制,订阅)
- SQL Server 2008 数据库同步 (发布、订阅)
- SQL SERVER 2012 使用订阅发布同步数据库(一)
- SQL SERVER 2012 使用订阅发布同步数据库(二)
- SQL SERVER 2012 使用订阅发布同步数据库(三)
- SQL SERVER 2012 使用订阅发布同步数据库(四)
- SQL Server 2008 数据库同步 (发布、订阅)
- SQL Server 2008定时数据库同步(发布、订阅)
- Sql Server 2005 发布和订阅
- SQL Server 2000订阅与发布
- android实现之高清音频录制编码
- jQuery插件之ajaxFileUpload
- attrib设置磁盘的隐藏属性
- OC_04_01
- vaadin系列(一)框架和spring整合
- SQL Server 中心订阅模型(多发布单订阅)
- android TextView中间删除线显示
- cv::Exception问题
- OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类
- 如何当好一枚交际花,且看汪涵的人际关系学
- OC_04_02
- Solr配置与简单Demo
- 比JDK高效的array equals
- 缓冲技术