0

我想用多个数据库进行更新,每个数据库都包含多个表。如果出现问题,我想将所有数据库和表回滚到原始状态。你能给我任何人建议我能为此做些什么吗?感谢您花时间阅读这个问题。

4

2 回答 2

1

您将需要一个程序来一次连接到所有数据库并在将要更新的表上启动锁定。

应用您的更改,并在发生异常时回滚当前数据库和所有先前完成的数据库。

目的是使一个会话在所有数据库上保持同步——这不是一件好事。

您的另一个选择是查看您是否可以配置零停机时间安装。这是您将安装分成几个部分的地方 - 可以先应用什么,之后可以应用什么。

即,您可以毫无问题地向所有表添加一列(希望如此),因此这将是预安装。在不再使用列之前,您不能删除它,因此这是一个后期步骤。这将涉及为视图和包等内容提供多个版本,以允许应用程序在没有任何影响的情况下进行转换。

于 2012-06-05T14:38:32.183 回答
0

如果您尝试在单个事务中更新多个 Oracle 数据库,最简单的选择是在它们之间创建数据库链接。这导致 Oracle 自动使用分布式事务。

在数据库 1 上,您创建数据库链接

CREATE DATABASE LINK to_db2
  CONNECT TO CURRENT_USER
  USING `<<TNS alias to db2>>`;

然后数据库 1 中的会话可以更新两个数据库中的表作为同一事务的一部分

UPDATE table1
   SET some_column = some_value
  ...

UPDATE table2@to_db2
   SET some_column = some_value
  ...

commit;  

可以使用异构服务创建从 Oracle 到非 Oracle 数据库的数据库链接,但这需要更多的工作,特别是如果您的 Oracle 数据库在 Unix 上运行并且可能需要购买透明网关产品之一。

现在,如果您尝试更新两个数据库中的相同表,您不应该为此编写代码。相反,您应该使用多种复制技术之一将一个数据库上的更改复制到另一个数据库。

于 2012-06-06T13:43:31.177 回答