У меня довольно простой оператор SQL, который выполняется в базе данных Oracle 10g. Он перемещает некоторые данные из одной схемы в другую:Oracle заявление висит
CREATE TABLE TARGET.BIG_TABLE AS SELECT * FROM SOURCE.BIG_TABLE
WHERE (COLUMN1, COLUMN2) IN (SELECT COLUMN1, COLUMN2 FROM TARGET.HELP_TABLE);
Существует единственное ограничение в TARGET.HELP_TABLE для COLUMN1 и COLUMN2. В SOURCE.BIG_TABLE имеется только комбинированный первичный ключ (COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5).
Нет проблем с самим утверждением, поскольку он уже выполнялся несколько раз во время тестирования в аналогичной тестовой среде.
Однако в реальной среде это заявление не проводило никаких операций ввода-вывода примерно через 3 часа. Через 8 часов мы прекратили казнь.
В чем причина такого поведения? И что я могу сделать, чтобы добраться до корня проблемы? У меня определенно нет подсказки!
Заблокирован ли он незафиксированной транзакцией? –
Теоретически это невозможно. Перед выполнением оператора все процессы, делающие транзакции в исходной схеме, отключены. Однако есть ли возможность узнать, почему заявление висит или почему оно ждет? – user3783827
Запрос может занять так много времени. Вы проверили «EXPLAIN PLAN» [результат вашего запроса выбора] (http://www.orafaq.com/wiki/Explain_Plan) в производственной среде. –