Янв 152014
 

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

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

Continue reading »

Фев 282013
 

Возникла у меня такая задача: смигрировать базу c Linux x86-64 на AIX 7.1. Версия Oracle - 11.2.0.3. Можно было бы использовать expdp, но из-за приличного объёма базы (180Гб) процесс занял бы длительное время. Тут нам на помощь приходит технология Transportable Tablespaces. Суть её состоит в том, что файлы данных копируются целиком и все существующие сегменты данных "подключаются" напрямую, т.е. эта операция, в отличие от импорта, не генерирует redo информацию и не требует перестройки индексов. Технология эта годится только для относительно крупных баз, т.к. требует от администратора кучу действий, особенно при смене порядка бит (endianess), как в моём случае.
Заодно мы решили воспользоваться случаем и смигрировать данные сразу в ASM (раньше файлы просто лежали на большом дисковом разделе).

Итак, вот примерная последовательность действий. Continue reading »

Янв 282013
 

Утилита DataPump работает немного не так, как старинные exp/imp. В отличие от них, она не просто открывает сессию, по которой выкачивает/заливает данные, но создаёт несколько серверных процессов (они называются DataPump jobs, но путать их с заданиями, запускаемыми с помошью пакета dbms_job не стоит, тут другой механизм). Кстати, именно поэтому если убить процесс expdp/impdp командой kill -9, то сессии DataPump всё равно останутся в базе и могут помешать повторному запуску утилиты.
Иногда бывает необходимо убедиться, что сессии не подвисли и процесс перекачки данных идёт нормально. Раньше можно было просто поискать в v$session записи с полем program, содержащим строку 'imp%' или 'exp%' соответственно, но теперь всё немного хитрее. Для мониторинга сессий DataPump есть представление dba_datapump_sessions.

Вот так можно определить, на каком событии висят сессии DataPump и кто их блокирует: Continue reading »

Апр 172012
 

При использовании связки zabbix+orabbix для мониторинга ретро-баз (9i), в логе orabbix можно увидеть вот такие ошибки:

2012-04-17 18:24:01,157 [pool-1-thread-14] WARN Orabbix - Error while executing ->dbversion- on database ->mydb- Exception received ORA-02003: invalid USERENV parameter

2012-04-17 18:24:01,157 [pool-1-thread-14] ERROR Orabbix - Error on DBEnquiry on query=dbversion on database=mydb Error returned is java.lang.IllegalArgumentException: null value for key 'dbversion'

Причина такого непотребства в том, что запрос, получающий информацию о версии БД и компонентов, написан для БД 10-й версии и выше. Избавимся от этой проблемы: Continue reading »

Июн 172011
 

Иногда бывает, что нужно оценить размер некоторых таблиц в дампе, сделанном утилитой exp, но без импорта его в базу. Можно, конечно, сделать импорт с параметром show=y, но это не всегда удобно, т.к. imp в этом режиме показывает размеры таблиц в строках (а мы хотим в мегабайтах, к примеру), и требует подключения к базе данных, даже для имитации. Выход - написать свой скрипт для оценки размеров таблиц (прошу прощения за неряшливый код): Continue reading »

Июн 162011
 

Надолго завис импорт утилитой impdp. Завис и всё, никаких сообщений об ошибках. Посмотрев в v$session, узнал, что сессия висит по событию wait for unread message on broadcast channel. Не слишком информативно, посмотрим alert log, может, там что-то найдётся.
Нашлось: Continue reading »

Май 252011
 

При настройке SQL*Net бывает нужно посмотреть трассировку утилиты tnsping. Чтобы сделать это, надо добавить в файл $ORACLE_HOME/network/admin/sqlnet.ora две строчки:

TNSPING.TRACE_LEVEL=SUPPORT
TNSPING.TRACE_DIRECTORY=/usr/oracle/coredump

Continue reading »

Май 112011
 

При копировании OID'ов (например, в целях создания тестового окружения или для резервирования) ORACLE рекомендует использовать утилиту ldifwrite, которая выгружает данные в файл формата LDIF.

Примерно так (нам нужно выгрузить всё содержимое): Continue reading »

Мар 152011
 

В Solaris и HP-UX есть утилита iostat, которая позволяет посмотреть статистику ввода-вывода по дискам. Но если используется Veritas Volume Manager, то удобнее будет воспользоваться утилитой /usr/sbin/vxstat, т.к. она показывает статистику не только по дискам, но и по томам, субдискам, плексам, и т.д.

Вот, например, как можно посмотреть статистику ввода-вывода в группе test с использованием мегабайт вместо блоков в качестве единицы измерения: Continue reading »

Фев 282011
 

При создании дампа схемы с помощью утилиты exp иногда бывает нужно экспортировать не некоторые таблицы по списку, а все таблицы, кроме некоторого списка. При большом количестве таблиц в экспортируемой схеме удобно будет автоматизировать создание файла параметров (parfile) для exp.

Для этого создадим файл build_parfile.sh с таким содержимым: Continue reading »