Мы только что прошли через это, хотя мы сделали два этапа - с 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).