【问题标题】:Oracle - side-by-side schema update technology...is there any?Oracle - 并行模式更新技术……有吗?
【发布时间】:2013-05-11 18:16:24
【问题描述】:

是否有任何技术可以让您对生产模式进行并行更新?

目标是在将更新应用于生产中的架构时实现零停机时间。 Weblogic 10 为其 Java EE 应用程序提供了类似的功能,您可以在其中部署新版本的应用程序,新连接会转到新应用程序,而现有连接会继续连接到旧应用程序。当所有旧连接完成/超时时,旧应用程序将停用,新应用程序继续运行……零停机时间。

Oracle中有类似的东西吗?

【问题讨论】:

    标签: oracle


    【解决方案1】:

    是的。有在线重定义包。

    DBMS_Redefinition

    但我怀疑这会给您零停机时间,这并不能说明对架构的所有可能更改。这使您可以进行一些表更改。我认为您需要定义零以及您想要进行的更改的范围。通常,如果您更改数据库,您也必须更改您的客户端。如果您更改了数据库,客户端如何自动从旧的 proc 签名切换到新的 proc 签名 - 即时?

    数据库不像应用程序那样工作。从 tableA 到 tableB 要么有一个 FK,要么没有......它不能不存在当前连接,并且仅以与您的应用程序相同的方式存在于新连接。数据库不一样。

    话虽如此,有传言称 Oracle 正在开发包版本控制……因此您可以连接到包的特定版本以简化此类迁移。但同样......这适用于包,DBMS_redef 适用于表......但这不是您数据库的总和。

    【讨论】:

      【解决方案2】:

      Oracle 今天发布 11gr2,它有基于版本的重新定义:http://download.oracle.com/docs/cd/E11882_01/server.112/e10881/chapter1.htm#NEWFTCH1

      【讨论】:

        【解决方案3】:

        取决于您在“模式”中的意思或包含的内容。 如果要添加或删除索引,可以“进行中”完成,尽管它需要一个可能会暂停活动一段时间的锁。在最新的 Oracle 版本中,它不需要在构建索引的整个时间内都持有锁,只需片刻即可锁定更改。如果您有短期交易,则不应引起注意。 在某些情况下,这也适用于表(例如添加可为空的列或默认列)。

        如果您使用 PL/SQL(尤其是包),事情可能会稍微复杂一些。为 11gR1 提出了增强功能以​​支持进行中的应用程序升级,但它已被推出,现在预计在 11gR2 中(可能在明年上半年推出)。 同时,一种解决方法是一种多模式解决方案。假设您的数据位于一个模式(“黄色”)中,并且您当前的应用程序代码在“蓝色”模式中运行,您将新应用程序加载到“绿色模式”中。您将连接一个一个地从蓝色切换到绿色。一旦您的连接全部使用“绿色”,您就可以停用“蓝色”,直到下一次升级(当“蓝色”成为新应用程序而“绿色”停用时)。

        如果您拥有真正的 24/7 系统,您可能总是需要进行一些升级。例如,添加一个新列作为可选,升级应用程序以设置它,然后使其成为强制性(可能与一些预先存在的行的数据更改脚本)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-23
          • 2020-10-31
          • 1970-01-01
          • 2013-09-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多