【问题标题】:Migrating and upgrading Oracle form Solaris to Linux, including stored procedures将 Oracle 从 Solaris 迁移和升级到 Linux,包括存储过程
【发布时间】:2010-08-30 10:18:09
【问题描述】:

我们计划将 Oracle 安装从 Solaris 迁移到 Linux。同时我们将升级到最新版本的Oracle。还有几百个存储过程也应该被迁移。

当前版本是 Oracle SE 9.2。我们仍将使用 Oracle SE,可能还会使用 RAC。

在执行此操作之前我们必须考虑什么?您在执行此操作时遇到过任何问题吗?所有可以帮助我们的信息都是有价值的。

提前致谢!

/尼克拉斯

【问题讨论】:

    标签: linux oracle stored-procedures migration solaris


    【解决方案1】:

    我们刚刚经历了这个,尽管我们分两步完成了——去年从 9 到 10,然后今年从 10 到 11。我会尽量回忆我们的发现:

    A.如果您有带有 GROUP BY 的查询,您需要添加匹配的 ORDER BY,因为较新版本的 Oracle(通常)不会在 GROUP BY 处理期间放入 SORT 步骤。换句话说,如果有类似的查询

    SELECT * FROM SOME_TABLE
      GROUP BY FIELD_1, FIELD_2
    

    您需要将其更改为

    SELECT * FROM SOME_TABLE
      GROUP BY FIELD_1, FIELD_2
      ORDER BY FIELD_1, FIELD_2
    

    B.我建议您将 9.x 数据库的副本保留一段时间,以便将在 9 下生成的计划与在 11 下生成的计划进行比较。11.x 中的优化器可以评估一些与 9.x 或 10 截然不同的查询.x 会。我们发现我们为 10.x 适当提示的较大查询之一在 11.x 下运行非常缓慢。经过一个下午的开发人员和 DBA 的努力,我们发现 ORDERED 提示恢复了原来的计划和性能。

    C.如果您有任何代码明确设置为通过执行类似的操作来使用基于规则的优化器

    alter session set optimizer_goal = rule
    

    您将收到一条错误消息,告诉您基于规则的优化器已过时。

    D.创建集合但不对其进行初始化的 PL/SQL 代码可能在 9.x 下工作,但在 11.x 下会失败。一个例子是

    TYPE tMyArray IS VARRAY(100) OF VARCHAR2(100);
    
    arrMyArray  tMyArray;    -- <-- uninitialized array
    

    要解决此问题,您需要将变量声明更改为

    arrMyArray  tMyArray := tMyArray('');
    

    出于参考目的,9 -> 10 升级是最多的工作。 10 -> 11 几乎是不费吹灰之力的(除了一些有问题的查询 - 见 B)。

    【讨论】:

      【解决方案2】:

      Dataguard 本身实际上是一个Enterprise Edition 功能。

      【讨论】:

      • 是的,之前被错误地告知...感谢您的信息!更新了我的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 2011-12-15
      • 1970-01-01
      相关资源
      最近更新 更多