【问题标题】:Update two identical database schemas at the same time同时更新两个相同的数据库模式
【发布时间】:2012-01-11 16:23:44
【问题描述】:

我有一个 Oracle 数据库,其中有两个相同的模式。一个本质上是“on”模式,另一个是“off”模式。我们更新关闭模式中的数据,然后在生产服务器使用的别名后面切换模式。不是一个很好的解决方案,但这是我被赋予的工作。

我的问题是,现在有一个单独的应用程序将数据流式传输到数据库(也交给我),它目前只更新别名,这意味着它只在任何给定时间更新“on”模式.这意味着当模式切换时,来自这个单独应用程序的所有数据都会从生产中消失(它所在的模式现在是“关闭”模式)。

此应用程序正在使用 Hibernate 3.3.2 更新数据库。也有 Spring 3.0.6,但不是用于数据库更新。最后,我们在 Java 1.6 上运行。

谁能指出我同时更新“on”和“off”模式的方向,这不涉及使用 Spring JDBC 重写整个 DAO 层以加载两个单独的连接池?我还没有找到任何关于让休眠来执行此操作的信息。提前致谢!

【问题讨论】:

  • 等等,你在数据库之间切换?为什么?多久一次?这让我觉得比其他任何事情都更有问题......
  • 当我收到这个时,这正是我的问题。数据负载很大,需要花费多个小时,并且需要在投入生产之前进行测试 - 因此我们在“关闭”模式上执行负载(大约 4-8 小时),对其进行测试,然后将数据库连接别名指向“关闭”模式使其成为“开启”模式,使其能够投入生产。这个流数据的东西应该取代“海量负载”模型。
  • 是的,这是非常有问题的。相信我——你不知道。但是,你用你所拥有的东西工作(直到你能说服上级出钱来改变它)。

标签: java database hibernate database-schema


【解决方案1】:

您不应该以这种方式更新两个单独的数据库,尤其是应用程序的角度来看。它应该知道/关心的是数据是否存在,而不必弄乱两个单独的数据库。

坦率地说,这听起来您可能需要购买ETL 工具。即使您无法使用它从“关闭”模式更新“开启”模式(速度足够实用),您很可能能够使用它来保持两者同步(镜子从“开”变为“关”)。

【讨论】:

  • 只是为了确保我们在同一页面上,数据来自第三方,并被加载到关闭模式中。一旦在 off 模式中测试它,我们将其切换到“on”,然后在新的“off”模式上执行相同的加载。然后我们开始将新数据加载到“关闭”模式中。洗涤,冲洗,重复。在这种情况下,由于时间和现金的限制,使用新的架构工具对我没有帮助。我只需要一种快速的方法将插入从新提要复制到两个模式,最好使用 Hibernate,因为这是我收到的代码所使用的。
【解决方案2】:

HA-JDBC 是我们研究了一小会儿的复制 JDBC 驱动程序。它将自动复制所有插入和更新,并分发所有选择。还有其他特定于数据库的主从解决方案。

另一方面,我不建议在 4-8 小时的程序中执行此操作。最好先锁定数据库,更新一个数据库,然后备份还原一份,然后再解锁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    相关资源
    最近更新 更多