主数据库每10分钟拥有所有原始数据,但它只存储1周。我想在另一个数据库中保留1年的所有原始数据,它是不同的服务器。怎么可能?
我创建了T-query以从Primary DB中选择所需的数据。如何继续更新主数据库中的数据并相应地插入辅助数据库?该表具有Datetime,是否能够插入最新日期时间的新数据?
备注:源数据SQL 2012 辅助db SQL 2005
答案 0 :(得分:0)
如果您使用的是sql2008或更高版本,merge command (ms docs)在您的实际更新过程中可能非常有用。请务必理解。
包含全年数据的表听起来像是OLAP,所以我偶尔会这样说(如果你不知道OLAP是什么,请在某个时候查找,但这个答案无关紧要)
如果您只更新1或2个表,则日志传送复制和故障转移可能不适合您,特别是因为您没有复制表,因为不同的保留策略。因此,在走这条路之前,请确保了解复制等的工作原理。如果这些表超过总数据库的50%,则日志传送方式可能仍然是您最好的方法。它们运行良好并为您处理停机问题 - 您只需将源数据库复制到OLAP服务器,然后从重复数据库更新到OLAP数据库。
每秒进行一次更新是一项不寻常的要求。但是,如果创建链接服务器,则可以将所选行插入远程服务器上的临时表中,并将它们从它们更新到OLAP表。如果您可以在1秒内可靠地更新远程服务器上的OLAP表,则可以使用一种可能有用的方法。如果没有,您可能会落后于将数据发布到OLAP表。如果你可以每分钟更新一次,你可能会发现你不太可能在更新周期中落后(代价是总是略微减少电流)。
您希望考虑在源表上放置after触发器,将更改复制到临时表(仍在源数据库上)到具有此临时表上标识的登台表以及标记到指示插入,更新或删除,您就可以为一个或几个表而不是整个数据库发送更新。您不需要重复查询源数据库以确定需要传输的数据,只需从登台表中选择前1000(按登台ID排序)并将它们移动到远程登台表。
如果您落后,前1000名循环将不会尝试在任何一个跨服务器调用中发布大量数据。
根据您的数据,您可以优化存储并减少日志流失,方法是不将所有列复制到临时表,只复制staging id和源表的主键,并假装源中的任何数据您将其发布到OLAP数据库时的记录准确反映了记录播放时的数据。它在任何时候都不会在您的OLAP表上100%准确,但最终会准确。
不能过分强调您需要适应设计中的停机时间 - 除非您可以忍受数据丢失或数据错误。即使可靠的连接也不是100%可靠。