Сен 012015
 

Через несколько дней после апгрейда БД на версию 12.1.0.2.4 (IBM AIX), внезапно среди рабочего дня база подвисла. AWR-отчёт собрать не удалось, база перестала отвечать по сети.

В Enterprise Manager была такая картинка (пока база ещё была доступна):

Скриншот из 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) на момент, предшествующий возникновению проблемы.
Нам повезло, что база была не особо важная, это был слепок важной БД, используемый для отчётов. Восстанавливать не стали, просто пересоздали её готовым скриптом.

  2 комментария to “Взаимоблокировка LGWR в Oracle 12c”

  1. А какой AIX?

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)