Сен 012015
 

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

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

Скриншот из Enterprise Manager

Единственное, что удалось заметить - большинство сессий висят по событию log file sync. Догадались также собрать hanganalyze dump. Потенциальные проблемы с массивом и SAN быстро исключили.

Дело оказалось вот в чём. Continue reading »

Авг 112015
 

Частенько бывает ситуация, когда надо поставить на новый хост ПО Oracle с набором из 15 патчей, последним PSU, и кучей всего. Самое неприятное, если его надо поставить не на один хост, а на несколько. В таком случае крайне удобно будет иметь технологию клонирования существующих Home'ов прямо со всем содержимым. Такая технология есть и описана в Doc ID 1221705.1. Данная статья описывает последовательность действий для версий 11.2.0.x.

Вот последовательность действий (важно помнить, что на целевом хосте должны быть сделаны все настройки из пункта Preinstallation Requirements): Continue reading »

Авг 112015
 

Удалить Oracle Home из inventory всегда можно с помощью Oracle Universal Installer. Запускаем его, выбираем пункт Deinstall Products и удаляем ненужный home.
Но есть способ сделать это проще, из командной строки:

cd $ORACLE_HOME/oui/bin
./runInstaller -detachHome ORACLE_HOME=/ora/app/11.2.0/db_home
cd /ora/app/11.2.0
rm -rf db_home
Янв 132015
 

Никто не любит рекламу в Интернете, в том числе и я. На ПК проблема элементарно решается путём установки правильного браузера (например, Firefox) и расширения Adblock или подобного, но на различных embedded-устройствах это не всегда возможно. Хотя у Firefox для Android и есть возможность поставить Adblock, его производительность не всегда комфортна.
Хорошим решением будет прописать в файл /etc/hosts на домашнем маршрутизаторе адрес 0.0.0.0 для различных рекламных и баннерных сетей и т.д. Тогда любое устройство, подключённое к домашней сети при попытке разрешить DNS-имя хоста с рекламой, будет получать адрес 0.0.0.0 и соединение не произойдёт. Вот эти замечательные товарищи создали гигантский список нежелательных хостов (на момент написания статьи более 13000 имён!). Мы его и возьмём, а заодно напишем скрипт для еженедельного обновления (чаще не имеет смысла). Continue reading »

Дек 122014
 

Режим FORCE LOGGING нужно обязательно устанавливать на каждой вновь созданной базе, чтобы исключить проведение нелогируемых операций. Это абсолютно необходимо для нормальной работы DataGuard, репликации и успешного восстановления из резервных копий. Но бывают базы (обычно это хранилища данных), на которых ведётся обработка больших объёмов данных, потеря которых некритична (эти данные берутся, например, из других источников, и в случае потери их можно восстановить за приемлемое время, не прибегая к полному восстановлению из бэкапа). В таком случае было бы удобно отключить режим FORCE LOGGING на некоторых табличных пространствах, чтобы получить выигрыш в скорости обработки и уменьшить объём генерации redo-логов.
Проблема в том, что когда FORCE LOGGING включён на уровне всей БД, параметры логирования для отдельных табличных пространств игнорируются. Если же FORCE LOGGING на уровне базы отключить, чтобы создать табличное пространство для временных данных (не путать с temporary tablespace), то весьма велик риск при создании нового табличного пространства забыть явно включить для него FORCE LOGGING, и заметить это слишком поздно.
Решение - небольшой триггер, который не даст совершить подобную ошибку. Рассмотрим пример отключения FORCE LOGGING на одном из табличных пространств: Continue reading »

Авг 052014
 

Dblink - интересный и в то же время неприятный объект. Дело в том, что в синтаксисе Oracle нет способа просто проверить, работает он или нет, если он находится в другой схеме. Доступ через точку, в отличие от других объектов, не работает, т.к. точка может являться частью имени dblink'а.
Возникла задача: проверить работоспособность всех линков в базе. Просто SQL-запрос сделать не удалось (это, на мой взгляд, всегда немного элегантнее и удобнее, чем блок PL/SQL), но нашлось отличное решение индийского коллеги: вот. Скрипт хороший, но он пишет текстовый лог, что неудобно, если у нас действительно много линков. Я немного его модифицировал, теперь он создаёт табличку, в которую пишет имя линка, его владельца и статус проверки. Так будет удобнее работать со списком, можно будет применять к нему любые фильтры и сортировки и использовать его для генерации скриптов, например, для удаления лишних dblink'ов.
Итак, скрипт: Continue reading »

Мар 252014
 

О том, что делать в случае переполнения файловой системы и как определить, какой каталог занимает много места, я уже писал.
Но бывают и ситуации поинтереснее. Например, есть некий процесс, непрерывно пишущий огромный лог. Кто-то этот самый лог удаляет командой rm, и мы наблюдаем странные вещи: свободное место на разделе уменьшается, а файла, занимающего кучу места, нет! Дело в том, что даже после удаления файла из файловой системы, в структурах памяти ОС остаётся открытым т.н. дескриптор файла. А пока у файла остаётся хотя бы один дескриптор (и не важно, в памяти он или на файловой системе), место на диске не освобождается. Continue reading »

Янв 152014
 

С точки зрения usability незаменимая утилита SQL*Plus представляет собой насилие над пользователем, и к использованию человеком, хоть раз увидившим нормальный софт, написанный с использованием библиотеки readline, совершенно непригодна.
К счастью, существует великолепная утилита rlwrap. Она создаёт обёртку из readline для SQL*Plus, что позволяет нормально редактировать команды, искать по истории команд, и даже использовать автодополнение!
Просто установить rlwrap мало, его надо правильно приготовить. Об этом и будет статья.

Готовим rlwrap для SQL*Plus.

Continue reading »

Ноя 142013
 

Обнаружил, что по какой-то причине агент Enterprise Manager Cloud Control 12c на одном из серверов БД не запускается. При попытке запуска командой

emctl start agent

в логе видим такие строки (выделил красным интересное): Continue reading »

Сен 272013
 

Режим block change tracking в ORACLE 10g и выше позволяет уменьшить время инкрементального бэкапа за счёт ведения лога изменённых блоков с момента бэкапа предыдущего уровня.

Как это работает?

Continue reading »