将Oracle从Solaris迁移并升级到Linux,包括存储过程

时间:2010-08-30 10:18:10

标签: linux oracle stored-procedures migration solaris

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

目前的版本是Oracle SE 9.2。我们仍然可以使用Oracle SE,可能还有RAC。

在这之前我们还有什么需要考虑的吗?这样做时遇到的任何问题?所有可以帮助我们的信息都是有价值的。

提前致谢!

/尼古拉斯

2 个答案:

答案 0 :(得分:3)

我们刚刚经历了这个,尽管我们已经两步走了 - 去年从9到10,然后今年从10到11。我会试着从记忆中回忆起我们发现的东西:

一个。如果您对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下生成的计划进行比较.11x中的优化程序可以非常不同地评估某些查询而不是9.x或10 .x会的。我们发现,我们为10.x正确暗示的一个较大的查询在11.x下运行得非常缓慢。经过一个下午的开发人员和DBA的撕裂后,我们发现ORDERED提示恢复了原来的计划和性能。

℃。如果您有任何代码明确设置为通过执行类似

的操作来使用基于规则的优化器
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 - &gt; 11几乎是一个明智的选择(除了一些有问题的查询 - 见B)。

答案 1 :(得分:1)

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