AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[merge-replication](dba)

Martin Hope
Eric Farr
Asked: 2022-05-12 11:33:27 +0800 CST

将公共数据同步到多个 MySQL 数据库

  • 1

我的情况

我有 MySQL 数据库,每个数据库都有相同的模式(表结构和关系完全相同)。

在此处输入图像描述

Green 数据库中的数据由其他三个共享。我有一个夜间进程,可以在 Green 数据库中查找更改并将它们 UPSERT 到其他三个数据库中。

将绿色数据库视为由一个单独的团队更新的参考数据,但它有很多,而且每天都在变化。

在此处输入图像描述

最终结果是,蓝色、红色和紫色数据库中的每一个都是其独有的可更新记录和绿色数据库中可能被引用但不能修改的记录的混合。

在此处输入图像描述

问题

自定义同步过程混乱且不可靠,对问题并不重要。

我的问题

有没有更好的方法将共享(绿色)数据与其他数据库结合起来?我希望对应用程序数据访问层的影响最小,该访问层专为通过夜间同步过程实现的交错数据而设计。

考虑的想法

我考虑将绿色数据保留在自己的模式中(在同一个 MySQL 服务器上)并为我的其他数据库中的每个表创建一个视图(用于查询),以产生原始合并表的错觉:

CREATE VIEW blue.vw_table001 AS
SELECT * FROM blue.table001 UNION 
SELECT * FROM blue.table001;

这将允许我简单地将我的 Hibername 映射到原始表的映射替换为到相应视图的映射。然后写入将像今天一样引用实际的表。

但是,这会产生两个问题......

  1. 我必须消除所有外键,因为 Blue 数据库中的记录可以引用 Green 数据库中的记录。
  2. 我被告知以这种方式组合数据的性能不会很好。重要的是要知道有一些复杂的查询会跨多个表连接,而这些表现在将跨视图连接。

最后的想法

虽然最好不要将绿色数据复制到其他三个中(并且有一天可能会超过三个),但只要机制相对简单可靠(我的 java 解决方案非常复杂),我就可以接受并且容易出错)。

此外,您可能想知道在 Green 数据库中创建的记录与其他三个记录之间的主键冲突。我们几乎同步的逻辑将绿色记录的原始 ID 记录在一个特殊的列中,然后为记录分配一个本地唯一的 ID。

mysql merge-replication
  • 1 个回答
  • 60 Views
Martin Hope
Savneet Kaur
Asked: 2020-07-30 03:42:32 +0800 CST

SQL 合并复制问题 - 备份和维护作业一直运行到早上并且大多数服务器作业都卡住的问题

  • 0

我们有一个合并复制环境,其中包括

Publisher:Server1,其中只有一个 125 GB 的复制数据库和 Distributor 也配置在 HyperV 环境中托管的同一服务器上。

订阅者:我们有大约 280 台带有 Distributor(推送订阅)配置的服务器。

注意:我们的环境每天都会发生大量 DML 更改,因此我们每天通过维护和备份作业对每台服务器执行许多检查,其中包括步骤 1:检查完整数据库的完整性步骤 2:重建/重组索引步骤 3:备份/验证step4:清理旧备份作业 step5:清理旧作业历史记录

此外,这项工作每天在 4-5 小时内完成,但有时会因服务器而异。

快照代理每天早上 00:05 运行

问题:

从周日晚上开始,我们遇到了这个问题,备份和维护工作一直运行到早上,并且大多数服务器工作都卡在 step1 dbcc checkdb ('my database') 上(并且客户也抱怨应用程序崩溃,不能登录,很慢)

检查后,我的备份 spid 正在等待 OLEDB 等待类型,我们没有在发布者和其他订阅者上配置链接服务器连接,除了少数是我们的总部服务器,我们从那里进行主要导入/小更新/如果我们需要推送出任何数据库更改。

在检查下面的查询时,我可以看到我的 dbcc spid id 的百分比正在移动,但并没有真正告诉我为什么它卡在这一步?

select session_id
, percent_complete 
from sys.dm_exec_requests 
where percent_complete > 0

我在什么时候运行这项工作或单步运行(即 dbcc checkdb)并不重要,它没有完成。

另请咨询我们的 Windows 团队,周末没有推出更新,也没有在应用程序方面进行任何更改。

关于可能是什么问题的任何建议?

sql-server-2008 merge-replication
  • 1 个回答
  • 44 Views
Martin Hope
Dratskapoo
Asked: 2017-09-27 06:00:38 +0800 CST

MsMerge_genhistory 有很多 pubid = null 的行

  • 0

我有一个合并复制,我担心元数据的清理可能还不够。我有 60 天的保留期,我可以看到元数据清理作业确实删除了 msmege_genhistory 中较旧的行,但仅适用于在 pubid 中具有正确 guid 的行。大多数行,大约 160 万行,在 pubid 中的值为 NULL,我不明白为什么。有人知道为什么有这么多空值吗?

null merge-replication
  • 1 个回答
  • 382 Views
Martin Hope
Jersey
Asked: 2017-05-24 05:33:29 +0800 CST

SQL 2008 R2 合并复制 - 清除跳过的架构更改

  • 1

开发人员对我们的生产数据库进行了更改,该数据库使用合并复制到表(活动)。该表有一个外部约束,它指向一个不属于复制的一部分并且在复制的数据库中不存在的表。这破坏了复制。为了启动并运行复制,我使用了 sp_markpendingschemachange 过程来跳过架构更改。这行得通,但现在我留下的记录仍在 sysmergeschemaarticles 表中,只是标记为已跳过。在这一点上,我想摆脱记录,以便将来执行它们。

我的解决方案是执行快照(在不那么繁忙的时间),假设这将清除任何 ddl 更改的 sysmergeschemaarticles 表,但没有找到任何支持文档来支持这个。任何人都有这种情况的经验可以支持这种解决方案或提出新的更好的解决方案?

谢谢!

sql-server-2008-r2 merge-replication
  • 1 个回答
  • 52 Views
Martin Hope
Mike Zalansky
Asked: 2016-09-02 13:07:03 +0800 CST

2 个相同的服务器/SQL 服务器处理带有合并复制的事务

  • 1

为了清楚起见,编辑了整个问题。

场景:在不同的服务器上有 2 个相同的 SQL Server,同时处理来自不同应用程序的事务,同时完全同步(例如移动应用程序服务器 1 和 Web 应用程序服务器 2)。

我们将使用 Always On 将一台服务器故障转移到另一台服务器进行维护,反之亦然,但是当维护完成后,两台服务器将再次在线处理来自我们各种应用程序的事务并同步。

试图解决来自客户端的在线请求,即使在维护期间,使用 2 个同步服务器,每个服务器处理来自不同应用程序的事务。

使它们保持同步的最佳方法是什么?倾向于合并复制。

在此处输入图像描述

当前版本。SQL Server 2012 SP3-CU4

谢谢

sql-server-2012 merge-replication
  • 2 个回答
  • 175 Views
Martin Hope
Charles Clayton
Asked: 2015-04-14 14:30:30 +0800 CST

合并复制两个 MDF 数据库文件的脚本?

  • 1

我在电脑和平板电脑上有一个程序。该程序使用 SQL Server Express 与.MDF文件中的本地数据库(两者的信息相同)进行交互。因此,如果我将平板电脑插入 PC,我有两个.MDF要同步的文件。

我希望两个用户都能够更改他们设备上的版本,然后我想获取这两个.MDF文件并运行一个合并它们的脚本。

数据库有一个 GUID 主键,以及DateTime上次更改的时间,所以如果有冲突,我会采用最新版本。

我该怎么做?

或者,如果我以错误的方式解决这个问题,您能否推荐一种替代方法来保持这两台机器的数据库在没有互联网连接的情况下同步?

提前致谢。

sql-server merge-replication
  • 4 个回答
  • 1629 Views
Martin Hope
Worldexe
Asked: 2015-03-12 14:26:59 +0800 CST

SQL Server 2012 合并复制在同步期间阻止其他插入/更新

  • 3

我通过 Pull 方法在两个 SQL Server 2012 数据库之间进行了合并复制设置。

有几个合并复制会影响不同的表集(实际上 3 组 2-5 个表)。没有外键将它们链接到 DB 中的另一个表之间或链接到另一个表。

订阅者和发布者都在更改复制表中的数据。通常,发布者每天 12 小时有超过 800k 的插入,订阅者大约有 300k;几乎没有更新。

此外,我启用了简单的过滤 -bit NULL检查几乎所有合并表的一列是否为 NULL;过滤器中没有joins。主数据库在这些表中有大约 80G 的数据,由于过滤,订阅者有大约 30G。所有过滤列都有索引。表按原样复制,没有选择性列。

大多数表的主键范围增加到 10M(以确保它们不会经常被替换)。

模式复制已启用,但不会发生模式更改。

合并复制保留期设置为 2 天(导致 3 天的存储数据 -MSmerge_contents表中约 300 万行)。

计划每 15 分钟启动一次的复制作业。

问题是 - 有时,当同步作业启动时,它会阻止此数据库中所有合并复制中所有表的所有插入/更新。它似乎只在复制过程结束时发生,无论同步的行数如何(对于某些运行,可能只有 1-2 个更改/添加的行),并且可以持续 5-10 分钟,这是不可接受的。

我使用 SQL Server Profiler 跟踪锁定时正在执行的程序并捕获阻塞报告并手动启动它(这似乎是安全的):

<blocked-process-report monitorLoop="201058">
 <blocked-process>
  <process id="process38d8dd0c8" taskpriority="0" logused="1268" waitresource="OBJECT: 5:690456609:0 " waittime="5002" ownerId="4004024182" transactionname="UPDATE" lasttranstarted="2015-03-11T16:08:39.890" XDES="0x1b253649e8" lockMode="IX" schedulerid="1" kpid="5132" status="suspended" spid="84" sbid="0" ecid="0" priority="0" trancount="1" lastbatchstarted="2015-03-11T16:08:39.880" lastbatchcompleted="2015-03-11T16:08:39.880" lastattention="2015-03-11T15:29:13.240" hostname="COMP-177" hostpid="2976" loginname="user" isolationlevel="read committed (2)" xactid="4004024182" currentdb="5" lockTimeout="4294967295" clientoption1="673316896" clientoption2="128056">
   <executionStack>
    <frame line="46" stmtstart="4398" stmtend="4936" sqlhandle="0x030005008910305b49b9150057a4000000000000000000000000000000000000000000000000000000000000"/>
    <frame line="1" stmtstart="30" sqlhandle="0x020000003f32c4168d189e55398799d8e66489e031b7fa8b0000000000000000000000000000000000000000"/>
    <frame line="1" stmtstart="30" sqlhandle="0x02000000538a8c182d9ff435ad6897538e470878728dfd940000000000000000000000000000000000000000"/>
   </executionStack>
   <inputbuf>
set nocount on;update [replicated_table] set CHECK_CI=&apos;1456&apos;,DATE_CHECK_CI=getdate(),DATE_MODIFY=getdate(),where R_ID=&apos;284598973&apos;
   </inputbuf>
  </process>
 </blocked-process>
 <blocking-process>
  <process status="running" spid="150" sbid="0" ecid="0" priority="-5" trancount="2" lastbatchstarted="2015-03-11T16:08:39.347" lastbatchcompleted="2015-03-11T16:08:21.833" lastattention="1900-01-01T00:00:00.833" clientapp="Microsoft SQL Server Management Studio - Query" hostname="COMP-120" hostpid="9460" loginname="userp" isolationlevel="read committed (2)" xactid="4004019824" currentdb="5" lockTimeout="4294967295" clientoption1="673319008" clientoption2="390168">
   <executionStack>
    <frame line="366" stmtstart="32078" stmtend="32458" sqlhandle="0x0300ff7fa885d0f933812f012ba3000001000000000000000000000000000000000000000000000000000000"/>
    <frame line="1" sqlhandle="0x010005002698da17601c849b1d00000000000000000000000000000000000000000000000000000000000000"/>
   </executionStack>
   <inputbuf>
exec sp_MSmakegeneration   </inputbuf>
  </process>
 </blocking-process>
</blocked-process-report>

sys.sp_MSmakegeneration执行会阻止所有其他活动。据我所知 - 此过程正在生成要复制的行列表。我可以理解它可以运行一段时间 - 但为什么它会阻止所有启用合并的表上的其他插入/更新?同步哪个发布并不重要 - 所有启用合并的表(即使来自此数据库中的另一个发布)也停止工作。

等待对象waitresource="OBJECT: 5:690456609:0 "是MSmerge_genhistory表。所以,它在这张桌子上以某种方式阻塞,但为什么呢?

我试图捕获该过程的实际执行计划——我得到了 14k 行 XML,但在那里没有发现任何可疑之处(没有明显的表扫描或其他繁重的活动)。

复制设置大部分是默认设置,除了generation_leveling_threshold在问题调查期间选项增加到 10000。它没有帮助。

SQL Server 2012 v 11.0.5058.0

默认隔离级别设置为 READ COMMITTED SNAPSHOT;这些插入/更新只是普通的插入/更新,不会更改隔离级别或启动显式事务。

我可以在工作日后成功同步服务器(当没有人接触数据库时),它在 20-30 分钟内运行正常(一次传输全天数据),但我需要持续同步(虽然延迟 15-20 分钟是可以的)。

我用谷歌搜索了这个问题 - 由于大量更改的数据(从 1M 行开始),有很多人的合并复制卡住了,但与我的问题没有任何相似之处。

sql-server-2012 merge-replication
  • 1 个回答
  • 2799 Views
Martin Hope
reticentKoala
Asked: 2014-07-30 01:34:13 +0800 CST

重新启动参与合并复制的发布者

  • 1

我们的托管服务提供商希望重新启动合并复制拓扑中发布者的 SQL Server。

我无法从 Microsoft 文档中清楚地理解执行此操作的最佳做​​法。

我们的拓扑由大约 40 个拉取订阅者组成。同步通过运行调用 RMO 的应用程序的 Windows 计划任务按计划每 5 分钟执行一次。

我的一些顾虑包括: 事务是否会安全地提示订阅者——我想这可能会导致事务日志增长?Publisher 下线的合理时间段是多少 - 我需要担心过期吗?

如果有人可以概述安全关闭 Publisher 所涉及的步骤,那将是一个很大的帮助。

非常感谢。

replication merge-replication
  • 1 个回答
  • 350 Views
Martin Hope
MrZander
Asked: 2014-07-18 15:34:47 +0800 CST

合并复制 - 合并包含在订阅者上的初始数据

  • 0

我在两个独立的服务器上有两个结构相同的数据库。两者都有不同的数据。

我已经通过合并复制将其中一个设置为发布者,我希望另一个成为订阅者。

问题是,当我创建订阅时,发布者将其快照发送给订阅者,并在开始同步过程之前清除订阅者数据库中的所有数据。

如何在两个数据库中保存数据并设置它们,以便一个是发布者,另一个是订阅者?

sql-server-2008-r2 merge-replication
  • 1 个回答
  • 62 Views
Martin Hope
MrZander
Asked: 2014-07-08 09:16:01 +0800 CST

SQL Server 合并复制更改分区定义

  • 0

我在一些 SQL Server 2008 R2 服务器上使用合并复制。有一台服务器,其余都是客户端。

我使用具有该HOST_NAME()功能的行过滤器将每个客户端放在不同的分区上。

这按预期工作,但我似乎无法弄清楚如何在创建订阅后更改此值。

我需要为所有订阅更改此值,并且我想避免删除和重新创建它们。

如何在HOST_NAME()不删除/重新创建的情况下更改订阅者的值?

sql-server merge-replication
  • 1 个回答
  • 438 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve