我们有一个本地托管的第三方 SQL Server ERP 数据库,我已经使用了一段时间了。
对于我们的一份 KPI 报告,我们需要历史数据。此数据不是由任何地方的 ERP 数据库生成的。
现在,我们将日期序列松散地存储在每个受影响项目的纯文本“注释”字段中,但这由于多种原因而存在问题,我相信您可以立即想象其中的一些原因。
我想将这些数据正确存储在表中。一种选择是在我们的 Access DB 中创建一个表,但这样做会变成一团混乱,只会让事情变得更加困难。
所以我的问题是:我可以直接安全地将表添加到此 ERP 数据库中,并使用触发器维护新添加的内容,还是数据库中通常会存在某种垃圾收集/维护例程,从而使此操作变得不安全?我的数据库管理员很少。经验,所以我不知道如果我这样做可能会出现任何问题或其他任何问题。
非常感谢
首先,我同意 Dan 的观点,即通常最好与供应商沟通,了解他们对您可以进行的更改的同意程度。有些比其他更灵活,可以主动建议您避免什么。通常,您遇到的问题类型是由于软件与您所做的更改或供应商遵循的升级过程之间的兼容性问题。如果您进行了不兼容的更改,供应商很可能会在您以某种方式致电他们寻求支持时发现。
其次,即使获得了供应商的许可,最好还是尽可能减少侵入性。无法保证您创建的对象或在供应商数据库中所做的更改将始终不受供应商应用程序和/或升级过程的影响 - 即使供应商告诉您没问题。
因此,理想的解决方案是建立一个流程,将您关心的数据从供应商数据库复制到您自己的数据库中。该辅助数据库将与供应商的数据库分离,理论上供应商不应该访问它(例如在升级期间)。这样您就不必担心在辅助数据库中所做的更改。
有几种方法可以做到这一点,按侵入性从最小到最大的顺序排列:
编写一个单独的应用程序/脚本来安排并按特定时间间隔批量加载数据。缺点是数据不会实时同步(如果有要求的话)。
使用本机 SQL Server 数据同步功能将数据复制到单独的数据库。一些可用的功能包括:复制、AlwaysOn 可用性组和SSIS。优点是它们主要用于实时数据同步,并且作为一种开箱即用的解决方案,需要维护的代码更少。它们都有自己的局限性,而且并不总是最容易设置的。
触发器- 您也可以使用触发器将数据复制到其他数据库中。但现在这进入了在供应商数据库中创建对象的侵入性领域。无法保证您的触发器将始终存在。
将数据迁移到您自己的数据库后,您将完全控制如何维护历史数据。SQL Server 甚至提供了开箱即用的解决方案来为您维护表历史记录,包括临时表或更改数据捕获。