Сен 262017
 

Решив поддаться современным модным тенденциям, завёл свой канал в Телеграме: https://t.me/SingularityWitness.
Там буду писать свои мысли на свободные темы в области технологий, будущего и всякого такого. Добро пожаловать.

 Posted by at 14:15
Авг 162017
 

Пытаюсь переименовать дисковую группу в ASM (12.1.0.2) и получаю ошибку:

$ renamedg phase=both dgname=ODIN_CTL1 newdgname=LOKI_CTL1 verbose=true

Parsing parameters..

Parameters in effect:

         Old DG name       : ODIN_CTL1 
         New DG name          : LOKI_CTL1 
         Phases               :
                 Phase 1
                 Phase 2
         Discovery str        : (null) 
         Clean              : TRUE
         Raw only           : TRUE
renamedg operation: phase=both dgname=ODIN_CTL1 newdgname=LOKI_CTL1 verbose=true
Executing phase 1
Discovering the group
Performing discovery with string:
Identified disk UFS:/dev/rdsk/c0t600A098038304278789B4A5778504251d0s6 with disk number:0 and timestamp (33051402 -1063708672)
Checking for hearbeat...
Re-discovering the group
Performing discovery with string:
Identified disk UFS:/dev/rdsk/c0t600A098038304278789B4A5778504251d0s6 with disk number:0 and timestamp (33051402 -1063708672)
Checking if the diskgroup is mounted or used by CSS 
Checking disk number:0
Generating configuration file..

KFNDG-00305: failed to create configuration file

Terminating kgfd context 1001bb480

Поизучав вопрос, выяснил вот что. renamedg в процессе переименования дисковой группы создаёт временный файл конфигурации в текущем каталоге. Поэтому надо во время переименования либо находиться в каталоге, доступном на запись, либо использовать опцию -config для указания пути к этому временному файлу вручную.

Апр 202016
 

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

Сен 272013
 

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

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

Continue reading »