1

有没有人有从一个 DBMS 迁移到另一个 DBMS 的经验?如果你这样做了,你为什么要这样做?特征?成本?公司指令?

有时,我与坚持不使用特定于 DBMS 的特性(例如,SQL Server 中的 CLR 存储过程)的 DBA 合作。如果必须,切换到另一个 DBMS。但到目前为止,我从未被要求切换。

4

6 回答 6

4

在我看来,不利用您使用的数据库的所有功能是愚蠢的。无论您使用多少功能,都很难更改 DBMS。系统之间存在细微的差异(例如一些记录日期和一些记录日期和时间),这将导致令人头疼的变化。没有这样的事情只是切换到一个新的 dbms。

从商业角度来看,还有很多工作要做。分析要更改的新数据库。弄清楚更改数据库对新系统的影响。让开发更改现有系统,测试更改等。列表不胜枚举。在企业系统上进行这样的切换需要几个月甚至几年的时间。我工作的最后一个地方不得不改变 dbs,我们花了整整 11 个月的时间才完成,大约 200 万美元用于顾问、硬件、软件和员工工资。这是一件大事。如果有人说不要使用功能,因为那“可能”有一天会发生,并且会更容易做到,那么很可能,那个人已经不在他们的摇杆上了。与其他一切(很可能)相比,转换这些功能所需的额外时间和金钱是微不足道的。

我们这样做是因为我们在旧 dbms 上运行的系统太大了。数据太多,我们需要更强大的东西。另外,它不再受支持。

于 2008-11-14T18:49:15.380 回答
3

多次切换。主要是因为“非自愿转换”——旧产品不再受支持或不再适用。

  • DB2 到 Oracle。Pre-UDB 数据被保留并移至 Oracle。
  • MS-访问 Oracle。继续在 Oracle 表上使用 Access 前端。
  • 甲骨文到甲骨文。6到8,我觉得...

“你为什么要那么做?” 不是特征。不是成本。在所有情况下,都有一些东西坏了。

  • 旧产品不再有效。操作系统升级或其他原因导致旧产品中断。
  • 旧产品无法扩展。

切换很少是您选择做的事情。当供应商停业(Ingres 曾经这样做过)或停止支持您的版本(Microsoft 经常这样做)时,您会被迫这样做。

然后,当然,这是一场危机。触发器和存储过程更改的技术复杂性使情况更加复杂。如果只是数据,那不会是太大的危机。转储到某种标准格式(例如 CSV),重新加载,然后您就可以开始运行了。

更重要的是,数据库中的“东西”(存储过程、触发器等)越多,您的应用程序软件就越会变成一堆难以理解(和难以维护)的杂物。没有什么比等待数周才能找到存储过程名称更令人沮丧的了。如果它是 VB 代码,那么每个人都可以访问它。但由于它在数据库中,它变得——自相矛盾地——变得不那么明显了。代码就是代码,应该远离数据。

请参阅将代码放在哪里 - 数据库与应用程序?有关此主题的更多信息。

于 2008-11-14T19:04:01.230 回答
3

我在一家公司工作了多年,该公司的产品支持 Oracle 或 SQL Server。我们在 Erwin 中维护模型,并从中生成模式脚本、触发器和 Oracle 包。这些包用于使 Oracle 触发器的工作方式类似于 SQL Server 触发器(具有逻辑“插入”和“删除”表)。我们保留了两组存储过程脚本。

有了这些混乱,我建议您可以迁移大型项目,只要您可以成功地使您的数据层与任何逻辑代码完全分离。如果你能做到这一点,那么你就可以在不影响核心应用程序的情况下实现任何数据库功能来加速数据层中的应用程序。

于 2008-11-14T19:16:33.170 回答
2

我参与了几个将数据从一个数据库迁移到另一个数据库的项目。在每种情况下,迁移的是数据,而不是 RDMBS。如果应用程序正在运行,那么为了切换而切换数据库不会有任何压力。迁移的动力通常是因为旧系统的数据要么过时,要么不兼容,或者两者兼而有之,这也提供了切换 RDBMS 的机会。

最可能的变化是将参考数据(员工、客户等)整合到现有的主数据库中(为了一致性和易用性),然后修改所有其他表,以便键指向新的参考数据. 这需要在堆栈上下更改架构和相应的代码。这是一次数据迁移,而不是数据库迁移。您很可能希望利用这个机会添加数据,或标准化名称,或 (de)-normalize 表格等。

结果是这些项目几乎总是对数据、模式和代码产生巨大的影响,而任何将 T-SQL 翻译成 PL-SQL 所需的工作都只是项目的一小部分。 . 因此,如果您为一个不错的 RDBMS 付费,请使用它。否则,就像不使用新车的后备箱或手套箱一样,这样在购买新车时换车会更容易。

于 2008-11-14T19:14:05.017 回答
1

还有一点(支持 S.Lott)。根据您的开发环境,您的开发人员可能无法轻松开发甚至查看存储过程。在两组不同的开发工具和执行环境之间拆分您的应用程序代码可能会变得很复杂,并且会更难找到熟练的员工。

我不认为这是反对存储过程的论据,但在决定应用程序的给定组件的代码应该驻留在哪里时,这肯定是需要考虑的事情。

于 2008-11-14T19:18:34.027 回答
0

我们完成了从 HP3000 到 Oracle 的迁移。这让我们损失了 2500 万美元,还增加了损失 2 亿美元数据的成本,因为他们太匆忙了,根本没有考虑自己在做什么。此外,我发现很多地方只是将其视为一个举动。他们会在以后弄清楚其余的......很久以后。

于 2017-07-05T00:36:55.190 回答