标签: transactional-replication

SQL Server 2005事务复制无法发布包含索引创建的存储过程

我遇到过SQL Server 2005 Transactional Publication的一个奇怪问题.问题是:如果发布包含的文章是包含create index语句的存储过程,则在尝试将存储过程的模式复制到订阅服务器时会引发错误.

这种行为非常奇怪,因为即使创建索引语句被注释掉,它仍然会给出异常,并且只有在完全删除它时它才会起作用.

这是返回的确切错误:

尝试的命令:GRANT EXECUTE ON [dbo].[usp_Test] TO [CompanyDatabase_access]

(事务序列号:0x00000170000008B9000500000000,命令ID:5)

错误消息:找不到对象'us​​p_Test',因为它不存在或您没有权限.(来源:MSSQLServer,错误号:15151)获取帮助:http:// help/15151 无法找到对象'us​​p_Test',因为它不存在或您没有权限.(来源:MSSQLServer,错误号:15151)获取帮助:http:// help/15151

错误是准确的,因为当我检查订阅者时,存储过程未按预期创建...但这是出版物的目的......

此外,我可以在订阅服务器上手动创建存储过程,但是当我生成快照时,它会删除现有的存储过程,然后仍然会返回此错误消息.

这是一个创建此问题的示例出版物.

存储过程:

USE [CompanyDatabase]
GO

CREATE PROCEDURE [dbo].[usp_Test]

AS

CREATE TABLE #TempTable(ID INT)
CREATE NONCLUSTERED INDEX [IX_TempTable] ON [dbo].[#TempTable](ID)
SELECT 'Test'
GO

GRANT EXECUTE ON [dbo].[usp_Test] TO [CompanyDatabase_access]
GO
Run Code Online (Sandbox Code Playgroud)

出版脚本:

-- Adding the transactional publication
use [CompanyDatabase]
exec sp_addpublication 
    @publication = N'Replication Test', 
    @description = N'Publication of database ''CompanyDatabase''.', 
    @sync_method = N'concurrent', 
    @retention …
Run Code Online (Sandbox Code Playgroud)

sql sql-server replication sql-server-2005 transactional-replication

7
推荐指数
1
解决办法
2027
查看次数

是否可以使用Transact SQL监视事务复制

我正在尝试使用c#application中的transact sql监视连续复制状态.从我的c#应用程序我成功启动这项工作..

exec sp_startpushsubscription_agent
   @publication = 'myPublication',
   @subscriber = 'my_subscriber_server_name',
   @subscriber_db = 'my_subscriber_db'
Run Code Online (Sandbox Code Playgroud)

现在,我想知道我的同步是否完成或是否发生了任何错误.当过程完成时,我想向用户发出成功的消息.

有帮助吗?

sql-server replication transactional-replication

6
推荐指数
1
解决办法
1740
查看次数

使用LocalDB进行事务复制

我到处搜索但找不到答案.我知道LocalDB不能成为合并复制的订阅者.但是事务复制呢?

我已经尝试过SQL Server Management Studio和RMO编程来创建对具有事务复制类型的发布的pull订阅,但它一直告诉我" 这个SQL Server实例上没有安装复制 ".在安装过程中,我或用户无法选择复制功能.并重新安装LocalDB将不会提供任何帮助.

我知道可以使用同步框架来完成这项工作,但这对我来说是新的,我已经在我之前的软件版本中将LocalDB部署到了客户端计算机,所以我更喜欢在我知道之前坚持使用复制方法确保LocalDB不支持任何形式的复制.

总结我的问题:如何在LocalDB实例上创建一个pull订阅来订阅事务复制?

顺便说一下,使用Windows 8 SDK附带的引导程序将LocalDB部署到客户端计算机,如果安装了Windows 8 SDK,可以在此目录中找到:{C:\ Program Files(x86)\ Microsoft SDKs\Windows\v8.0A \引导程序\软件包\ SqlLocalDB2012}

如果我没说清楚,我很乐意提供更多信息.提前致谢!

sql-server transactional-replication localdb

6
推荐指数
1
解决办法
655
查看次数

T-SQL查找是否在事务复制中的订阅服务器上订阅了数据库

T-SQL查找是否在事务复制中的订阅服务器上订阅了数据库.我不想查询分发的详细信息.

以下不起作用.

SELECT is_subscribed FROM sys.databases

SELECT DATABASEPROPERTYEX('database', 'IsSubscribed')
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008 transactional-replication

5
推荐指数
1
解决办法
6521
查看次数

使用SQL Server进行实时聚合和非规范化的体系结构建议

我们有一个企业LOB应用程序,用于使用SQLServer(2008)管理数百万个书目(大量文本)记录.数据库非常规范化(完整记录可能很容易由十个连接表加上嵌套集合组成).写交易很好,我们现在有一个非常敏感的搜索解决方案,它慷慨地使用全文索引和索引视图.

问题是,在现实中,许多内容研究用户需要,可以更好地提供服务的只读仓储式拷贝数据,但它需要近乎实时地连续复制(几分钟的等待时间是精细).

我们的搜索已经通过几个计算列或复合表进行了优化,我们希望添加更多.索引视图由于其约束(例如没有外部联接)而无法满足所有需求.这些数据有许多"方面",就像只读数据仓库可能提供的那样,涉及权限,地理位置,类别,质量和相关文档的数量.我们还组成了相当静态的记录的复杂xml表示,可以组合和存储一次.

如果完全通过触发器完成,则非规范化,计算和搜索优化的总量会引起不可接受的延迟,并且还容易发生锁定冲突.

我已经研究了一些Microsoft的SQL Server建议,我想知道是否有任何具有类似要求经验的人可以提供以下三个建议(或其他使用SQL Server/.Net堆栈的建议):

  1. 事务性复制到只读副本 - 但是从文档中不清楚可以在订户端更改模式并添加触发器,计算列或组合表;

  2. 表分区 -不改变数据,但也许是为了数据的段大面积,目前正在不断重新计算,例如权限,记录类型(60),地理区域等...将允许在事务侧触发运行少锁?

  3. 离线批处理 - 微软经常使用该短语,但除了在交易复制的订户端"检查信用卡欺诈迹象"之外,没有提供很好的例子......这将是一个很好的样本,但是如何完成究竟在实践中?每5分钟运行一次的SSIS工作?服务经纪人?连续轮询的外部可执行文件?我们要避免"跑,晚上一个漫长的过程"解决方案,我们也想避免被交易服务器上运行的更新密集聚集/合成日常每5分钟的事情事务副锁定了.

    • 更新到#3:发布后,我发现这个SO答案带有使用变更跟踪,服务代理,SSIS和触发器的实时数据集成的链接- 看起来很有希望 - 这是推荐的路径吗?

    • 另一个更新:反过来,它帮助我找到rusanu.com - 所有东西ServiceBroker由SO用户Remus Rusanu.异步消息传递解决方案似乎比复制方案更好地匹配我们的场景......

sql-server full-text-search data-warehouse service-broker transactional-replication

5
推荐指数
1
解决办法
1611
查看次数

PostgreSQL 复制:多个 Master 到单个 Slave

我在不同的地理位置(本地站点)有几个 PostgreSQL 数据库。

  • 每个本地站点 DB 都具有相同的架构,但具有唯一的数据。例如,以包含以下列的表为例:Site_ID、Department_ID、Department_Name。Site_ID 对于每个站点都是唯一的。
  • 我想将本地站点数据库中的所有数据收集到充当数据仓库的集中式数据库(再次是 PostgreSQL)中。
  • 集中式数据库上的相应示例表将具有与上述相同的列。所有本地站点数据都将进入此表。当然,每个站点数据由 Site_ID 指定。

问题:如何使用 PostgreSQL 复制方法实现这一点?(流媒体/多主 UDR/BDR/等)

限制:本地站点只能进行传出网络连接(即由于防火墙限制不能进行入站连接)

postgresql replication database-replication transactional-replication

5
推荐指数
0
解决办法
621
查看次数

停止在SQL Server中复制大型事务

我有一个问题,试图阻止发布者分发给订阅者的大型交易.假设某人不小心更新了包含5000万条记录的表中的每条记录,然后在意识到错误后,将所有记录设置回来.在这种情况下,更改将在事务复制设置中分发给两个订户.在系统上,它表示将向用户复制2天,但是克服这个问题的最佳方法是什么?

我已经看到它可能并且实际上很容易使用事务跳过命令xact_seqno,sp_helpsubscriptionerrors并且sp_setsubscriptionxactseqno.但是,如果将其用于正在分发的交易,会发生什么?有什么需要停止的吗?

如果这不是解决问题的最佳方法,那会是什么?

sql sql-server replication sql-server-2008 transactional-replication

5
推荐指数
1
解决办法
573
查看次数

数据库复制SQL Server 2012到Bigrock服务器和AWS上的Windows Server

我发展,我想创建Windows应用程序SQL Server 2012数据库复制到Bigrock server在AWS上的Windows Server ,但未能数据库进行复制.

我发布数据库SQL Server 2012并尝试添加订阅Bigrock serverWindows Server on AWS服务器数据库,但它给我以下错误:

SQL Server复制需要实际的服务器名称才能建立与服务器的连接.指定实际的服务器名称

我还在SQL Server链接中引用了事务复制

任何人都可以告诉我这是可能的吗?如果是的话怎么样?

c# web-hosting amazon-web-services transactional-replication sql-server-2012

5
推荐指数
0
解决办法
73
查看次数

设置数据库复制时启动快照代理时出现异常

我正在尝试在数据库之间设置复制。我遵循了这个教程:

https://learn.microsoft.com/en-us/sql/relational-databases/replication/tutorial-preparing-the-server-for-replication?view=sql-server-ver15

之后:

https://learn.microsoft.com/en-us/sql/relational-databases/replication/tutorial-replicating-data- Between-Continously-connected-servers?view=sql-server-ver15

我先通过了,没有任何问题。几乎完成了第二个,但我停留在步骤查看快照生成的状态

当我尝试 strat 快照代理时,出现错误:

异常消息:本机 SQL Server 连接组件中发生未指定的错误。

我尝试在互联网上搜索 MSSQL_REPL55012 (这是我得到的错误代码),但没有成功。

我尝试查看 SQL Profiler、作业历史记录、复制监视器,甚至从 PowerShell 运行失败的作业步骤,但无法获得更多信息。

可能是什么问题?还有其他人偶然发现这一点吗?

我在用:

  • SSMS 版本 15.0.18206.0

  • SQL Server 引擎 15.0.2000.5

sql sql-server replication database-replication transactional-replication

5
推荐指数
1
解决办法
9898
查看次数

SQL Server双向事务复制 - 这是一个很好的用例吗?

我们在使用SQL服务器扩展时遇到了问题.这主要是由于以下几个原因:1)设计不良的数据结构,2)繁重的工作和业务/处理逻辑都是在T-SQL中完成的.这是由我们聘请的Redmond的Microsoft SQL人员在我们的服务器上进行分析验证的.我们通过不断增加命令超时来解决问题,这是荒谬的,而不是一个好的长期解决方案.此后,我们制定了以下战略和一系列阶段:

阶段1:在问题上抛出硬件/软件以止血.

这包括一些不同的东西,如缓存服务器,但我想在这里问每个人有关在新SQL服务器上实现双向事务复制的具体问题.我们有两个用例想要实现这个:

  1. 我们考虑在这个新的SQL"处理盒"上运行长时间运行(和表/行锁定)SELECT并将它们放入缓存层并让UI从缓存中读取它们.这些SELECT正在生成报告,并在Web上返回结果.

  2. 大多数业务逻辑都在SQL中.我们有一些LONG运行查询,用于执行处理逻辑的SELECT,INSERT,UPDATE和DELETE.最终结果实际上只是在处理完成后(大量游标)充满了INSERT,UPDATE和DELETE.我们的想法是平衡这两个服务器之间的负载.

我有一些问题:

  1. 这些用于双向事务复制的好用例吗?

  2. 我需要确保这个解决方案"正常工作"而不必担心冲突.在这个解决方案中会出现哪些冲突?我已经阅读了一些关于重置身份种子增量的文章,以防止冲突,这是有道理的,但它如何处理UPDATE/DELETE或其他可能发生冲突的地方?

  3. 我可能会遇到哪些其他问题,我们需要注意什么?

  4. 这个问题有更好的解决方案吗?

阶段2:将逻辑重写为.NET,它应该是,并优化SQL存储过程以仅执行基于集合的操作,因为它也应该如此.

这显然需要一段时间,这就是为什么我们想看看是否有一些初步步骤可以阻止用户遇到的痛苦.

谢谢.

sql-server replication sql-server-2008 database-replication transactional-replication

4
推荐指数
1
解决办法
2502
查看次数