Миграция и обновление Oracle с Solaris на Linux, включая хранимые процедуры - PullRequest
0 голосов
/ 30 августа 2010

Мы планируем миграцию установки Oracle с Solaris на Linux. В то же время мы будем обновлять до последней версии Oracle. Есть несколько сотен хранимых процедур, которые также должны быть перенесены.

Представлена ​​версия Oracle SE 9.2. Мы все еще будем использовать Oracle SE, возможно, с RAC.

Есть ли что-то, что мы должны рассмотреть, прежде чем сделать это? Есть какие-то проблемы, с которыми вы столкнулись при этом? Вся информация, которая может нам помочь, является ценной.

Заранее спасибо!

/ Никлас

Ответы [ 2 ]

3 голосов
/ 30 августа 2010

Мы только что прошли через это, хотя мы сделали два этапа - с 9 до 10 в прошлом году, затем с 10 до 11 в этом году.Я постараюсь вспомнить из памяти, что мы нашли:

A.Если у вас есть запросы с GROUP BY, вы захотите добавить соответствующий ORDER BY, поскольку более новые версии Oracle (обычно) не пропускают шаг SORT во время обработки GROUP BY.Другими словами, если есть запрос типа

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.После полудня разработчиков и администратора баз данных мы обнаружили, что подсказка 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).

1 голос
/ 31 августа 2010

Dataguard собственно является функцией Enterprise Edition .

...