Апр 202016
 

Разработчики зачастую народ беспокойный и суетливый. Иногда бывает, что они портят или удаляют пакет, замечают это не сразу, и потом просят меня восстановить его. В случае со строками в таблице помогает Flashback, но что делать с пакетами? Вариантов два. TSPITR - частично восстановить где-то на другом хосте базу (табличные пространства SYSTEM, SYSAUX, UNDO) и взять пакеты на полученной новой базе. Способ этот настолько трудоёмкий, что даже говорить не хочется. Второй вариант - таки использовать Flashback, но по-хитрому. Continue reading »

Мар 252016
 

Возникла задача подключить LUN'ы с массива EMC VNX (в девичестве - Clariion) к серверу на Oracle Linux Server release 6.7. Операция тривиальная за исключением нескольких мелочей.

Итак, сперва нам поднадобится пара пакетов. Названия говорят сами за себя.

yum install lsscsi device-mapper-multipath

Чтобы у нас сложился диалог с администраторами СХД (сети хранения данных), то нам понадобися узнать и сообщить им WWN портов адаптеров Fibre Cannel, установленных на сервере. WWN в СХД - это аналог MAC-адреса в Ethernet. Continue reading »

Янв 222016
 

Решил для себя поэкспериментировать с iSCSI. Не то, чтобы я являюсь большим фанатом подобных эрзац-решений (из SAN мне приходилось иметь дело только с Fibre Channel), но в свете недавних событий весьма вероятно, что многие покупатели оборудования Enterprise-уровня решат сэкономить, поэтому уметь пользоваться этой технологией весьма полезно.

iSCSI - это протокол, предназначенный для отдачи от сервера к клиенту блочных устройств по протоколу TCP/IP, в отличие от NFS и CIFS, отдающих готовую файловую систему. В iSCSI используется своя терминология, например, сервер называется target, а клиент - initiator. Я буду придерживаться этих терминов в статье. Для экономии ресурсов тестовый стенд сделал на двух виртуальных машинах под управлением VirtualBox 5.0.

Небольшое отступление: статья не претендует на всеобъемлющую инструкцию по администрированию SAN на iSCSI, это просто заметки для начинающих.

Итак, приступим. Continue reading »

Янв 182016
 

Столкнулся с интересной проблемой: RMAN при бэкапе очень долго (вплоть до многих часов) висит на стадии resync catalog. Полез смотреть, что происходит на базе, содержащей backup catalog, и увидел, что вот этот запрос работает большую часть времени:

DELETE FROM ROUT
WHERE
DB_KEY = :B2 AND ROUT_SKEY;

В самой таблице ROUT записей не очень много, всего несколько десятков тысяч, а занимала она у меня порядка 3 Гб без учёта индексов. Continue reading »

Сен 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 »