Через несколько дней после апгрейда БД на версию 12.1.0.2.4
(IBM AIX), внезапно среди рабочего дня база подвисла. AWR-отчёт собрать не удалось, база перестала отвечать по сети.
В Enterprise Manager была такая картинка (пока база ещё была доступна):
Единственное, что удалось заметить - большинство сессий висят по событию log file sync
. Догадались также собрать hanganalyze dump. Потенциальные проблемы с массивом и SAN быстро исключили.
Дело оказалось вот в чём. Начиная с 12 версии, Oracle по умолчанию использует несколько процессов LGWR
(они именуются LGnn
). Так вот, подобная архитектура может приводить (особенно повезло системам на IBM AIX) к взаимоблокировкам двух LGnn и потенцильной порче данных (см Doc ID 1957710.1 и эту статью).
В качестве решения рекомендуется заранее выставить параметр _use_single_log_writer = "TRUE"
и перезапустить базу (или все ноды кластера). Это вернёт прежнее поведение LGWR. Если проблема уже возникла, то решение - выставить этот параметр и восстановить базу (или выполнить flashback) на момент, предшествующий возникновению проблемы.
Нам повезло, что база была не особо важная, это был слепок важной БД, используемый для отчётов. Восстанавливать не стали, просто пересоздали её готовым скриптом.
А какой AIX?
$ uname -a
AIX my-aix-box 1 7 00F899B14C00