2012-01-11 62 views
1

我有一个Oracle数据库,它有两个相同的模式。一个本质上是“on”模式,另一个是“off”模式。我们更新关闭架构中的数据,然后将模式切换到我们的生产服务器使用的别名后面。这不是一个好的解决方案,但这是我得到的。同时更新两个相同的数据库模式

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

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

任何人都可以指示我同时更新“on”和“off”模式,不涉及使用Spring JDBC重写整个DAO层来加载两个单独的连接池?我一直无法找到任何有关让冬眠来做到这一点。提前致谢!

+0

等待,你在数据库之间_toggling_?为什么?多久?这使我感到比其他任何问题都更加严重...... – 2012-01-11 16:45:14

+0

这就是我的问题,正是我交给他时。数据加载非常庞大,需要花费几个小时,并且需要在暴露于生产之前进行测试 - 所以我们在“关闭”模式(大约4-8小时)上执行加载,测试它,然后将数据库连接别名指向“关闭”模式,使其成为“在”模式,使其生存于生产中。这个流媒体数据应该取代“大规模负载”模型。 – ogradyjd 2012-01-11 17:14:02

+0

是的,这是非常有问题的。相信我 - 你不知道。但是,你用你所得到的东西来工作(直到你可以说服更高层的人去布置钱来改变它)。 – ogradyjd 2012-01-11 17:15:41

回答

0

你不应该更新两个单独的数据库,这样一来,特别是从应用程序的观点。所有它应该知道/关心的是数据是否在那里,而不必混淆两个单独的数据库。

坦率地说,这听起来像您可能需要购买一个ETL工具。即使你无法从'off'更新'on'模式(尽快足够实用),你仍然可以使用来保持两者同步(镜像从'开'到'关')。

+0

为了确保我们在同一页面上,数据来自第三方,并被加载到关闭模式中。一旦在关闭架构中进行测试,我们将其切换为“开启”,然后在新“关闭”架构上执行相同的负载。然后我们开始将新数据加载到“关闭”模式。清洗,冲洗,重复。由于时间和现金限制,使用新的建筑工具在这种情况下不会帮助我。我只需要一个快速的方法来将插入复制到新的提要中的两个模式,最好是使用Hibernate,因为这是我交给我的代码所使用的。 – ogradyjd 2012-01-11 18:47:17

0

HA-JDBC是我们在短时间内调查过的复制JDBC驱动程序。它会自动复制所有插入和更新,并分发所有选择。还有其他数据库特定的主从解决方案。

另一方面,我不会建议这样做4-8小时的程序。更好地锁定数据库,更新一个数据库,然后备份 - 恢复副本,然后再解锁。

相关问题