Сайт Игоря Гаршина Главная страница
Письмо автору сайта garchine@mail.ru

Опыт орадмина: 1. Инсталляция 2. Генерация 3. Миграция 4. ODBC 5. Администрация 6. Утилиты 7. Netware 8. RedHat 9. NT
Синхронизация: 1. Механизмы 2. Архитектуры 3а. Снапшоты 3б. Мастер-сайт 4. Сравнение ОС 5. RepMan Пр1. Файлы ORA Пр2. CONFIG.ORA Пр3. API Пр4. Словарь данных
Практика работы с Oracle - книга о репликации распределенной базы данных Oracle 8
Вся книга: Практика работы с Oracle: генерация, администрирование, репликация. И.К.Гаршин.
ISBN 5-901314-02-6 (рус.). УДК 004.42Oracle. ББК 32.973.26-018.2. Г21.

В 1999-2000 г. программисты «Нефтегазсистемы» разработали и внедрили в большинство ОАО МН «Транснефти Информационную систему паспортизации магистральных нефтепроводов «СКУТОР». Сначала он был создан на базе MS Access, затем переведен на Oracle 8 с поддкржкой асинхронной репликации с помощью программы Oracle Multimaster. В книге подробно описан авторский опыт перевода и внедрения этой базы данных.

Автор признателен руководителям и сотрудникам ЗАО «Нефтегазсистемы», начальникам и персоналу вычислительных центров региональных управлений ОАО «Транснефть», c чьей помощью был разработан и внедрен данный Oracle-проект.

Глава 5

Основы администрирования баз данных Oracle

 

В этой главе…

 

·        Запуск и останов БД

·        Перенос БД на другой сервер (либо временное удаление БД)

·        Экспорт и импорт данных

·        Резервное копирование и восстановление

·        Перевод БД на другую версию сервера Oracle (upgrade и downgrade)

·        Настройка БД Oracle

·        Пути повышения производительности запросов СУБД Oracle

·        Некоторые полезные команды SQL

·        Использование встроенных модулей

·        Что применять для ввода команд: SVRMGR30, SQL Plus или SQL Worksheet?

·        Описание ряда особенностей при работе с Oracle

·        Что делать при изменении сетевого адреса сервера

·        Возможные аварийные ситуации

 

 

Запуск и останов БД

Запуск БД

Процесс запуска БД проходит 3 стадии:

·         NOMOUNT, когда открывается файл INIT<SID>.ORA и в ОЗУ компьютра создается экземпляр БД

·         MOUNT, когда открываются управляющие файлы (CTL1<SID>.ORA и т.д.)

·         OPEN, когда открываются файлы табличных пространств

 

Если запустить утилиту SVRMGR30 и ввести команду

 

startup pfile=%ORACLE_HOME%\DATABASE\INIT<SID>.ORA

 

то произойдет запуск БД до состояния OPEN (по умолчанию). Можно ввести команду ORASTART.NCF, что приведет к аналогичному эффекту. Можно ввести эту же команду, но добавить параметр NOMOUNT. При этим  произойдет запуск БД до первого состояния. Чтобы затем ее открыть, нужно последовательно задать команды:

 

alter database mount;

alter database open;

 

Останов БД

            Для останова БД можно запустить ORASTOP.NCF, но при этом БД будет останавливаться по технологии IMMEDIATE, что не очень желательно. Лучше в SVRMGR30 ввести команду SHUTDOWN NORMAL.

 

Перенос БД на другой сервер (либо временное удаление БД)

            Если не пользоваться механизмами экспорта / импорта или резервного копирования / восстановления, то общая схема такова («сюрпризы» в MS Windows NT 4 здесь не описаны):

            Для временного удаления (например, перед форматированием диска):

·         Остановите БД (можно запустить ORASTOP.NCF, лучше скомандовать SHUTDOWN NORMAL)

·         Запакуйте разделы %ORACLE_HOME%\DATABASE и %ORACLE_HOME%\ NET80\ADMIN с помощью архиватора, сохраняющего длинные имена файлов (например, PKZIP или WINZIP).

 

ВНИМАНИЕ !

Пакуйте с учетом скрытых файлов. Скопируйте архивы в безопасное место (не на диск, который будет форматироваться).

 

·         Если действительно предстоит форматирование диска, то на всякий случай, чтобы система не кричала:

·         Выгрузите Oracle (запустите ORAUNLD.NCF)

·         Деинсталлируйте Oracle Server

·         Удалите каталог %ORACLE_HOME%

Для восстановления БД (после форматирования диска):

·         Проинсталлируйте Oracle Server

·         Верните на место файлы из архивов

·         Загрузите Oracle (запустите ORALOAD.NCF)

При переносе БД на другой сервер:

·         Проинсталлируйте на нем Oracle Server

·         Создайте тот же SID

·         Установите в вышеупомянутые каталоги файлы из архивов

·         В файле %ORACLE_HOME%\NET80\ADMIN\TNSNAMES.ORA исправьте адреса Ваших сервисов (лучше с помощью Oracle Net8 Easy Config). Кстати, это необходимо делать также при изменении TCP/IP-адреса сервера c Oracle.

 

Экспорт и импорт данных

Экспорт данных

            Экспорт данных выполняется утилитой командной строки EXP80 (Часть 1, Глава 6, Утилиты командной строки, EXP80.EXE …) либо утилитой Oracle Data Manager пакета OEM (Часть 1, Глава 6: Утилиты из пакета Oracle Enterprise Manager, Oracle Data Manager).

Импорт данных

            Импорт данных выполняется утилитой командной строки IMP80 (Часть 1, Глава 6, Утилиты командной строки, IMP80.EXE …) либо утилитой Oracle Data Manager пакета OEM (Часть 1, Глава 6: Утилиты из пакета Oracle Enterprise Manager, Oracle Data Manager).

 

Резервное копирование и восстановление

            Это самые необходимые операции, которые должен уметь использовать администратор БД. Рекомендуется использовать не «горячее» (при запущенном экземпляре), а «холодное» (после останова БД) резервное копирование средствами используемой операционной системы.

            Резервное копирование БД Oracle удобно выполнять утилитой Oracle Backup Manager из пакета OEM (см. Часть 1, Глава 6: Oracle Backup Manager (Var.exe)).

 

Перевод БД на другую версию сервера Oracle (upgrade и downgrade)

            Перевод БД на старую версию сервера Oracle называется downgrade, на новую – upgrade. И то и другое обычно описывается в технической документации. Например, перевод БД с версии 8.0.3 на версию 8.0.4 сервера Oracle для Novell Netware 5 в [13] (в разделе Upgrading an Oracle8 Database) описывается слишком упрощенным способом (используя который без опыта, можно иногда «запороть» БД):

·         Шаг 1: Остановите БД версии 8.0.3.

·         Шаг 2: Создайте резервную копию БД версии 8.0.3.

·         Шаг 3: Поправьте параметр compatible в файле INIT<SID>.ORA для БД версии 8.0.3. (Имеется ввиду – введите номер новой версии сервера Oracle).

·         Шаг 4: Проинсталлируйте Oracle8 Enterprise Edition Release 8.0.4 (имеется ввиду серверная часть).

·         Шаг 5: Запустите скрипт CAT8004.SQL.

По-настоящему, все, конечно, значительно сложнее: например, в документации забыли указать, что необходимо перекомпилировать все модули, перезапустить некоторые постпроцедуры, перед запуском CAT8004.SQL необходимо запустить БД, причем она должна быть открытой (в состоянии OPENED), а присоединяться нужно как INTERNAL и т.д. А вообще, это все тоже может не привести к ожидаемому результату, потому что Словарь БД оказывается разрушенным, в результате чего Oracle не видит пользователя SYSTEM, а целый ряд постпроцедур и важных скриптов из-за этого не выполняется.

Существуют и другие способы для upgrade БД. Например, сделать полный экспорт БД, инсталлировать новую версию сервера и сделать импорт и пр.

 

Настройка БД Oracle

            Настройка БД Oracle включает в себя, в частности, настройку конфигурационных параметров (в файле INIT<SID>.ORA) и настройку параметров заполнения таблиц и расширения табличных пространств. Настройка конфигурационных параметров уже описывалась в Главе 2 Части 1, здесь же будут приведены некоторые методы определения их оптимальности. Далее эта глава будет постоянно дополняться и уточняться.

Определение оптимальности некоторых конфигурационных параметров

·         Для определения, нужно ли изменять размер буферного кэша, введите запрос:

 

select NAME, VALUE from V$SYSSTAT where NAME in

('CONSISTENT_GETS', 'DB_BLOCK GETS', 'PHYSICAL_READS');

 

Затем вычислите коэффициентт попадания в SGA по следующей формуле:

 

HIT_RATIO = 1-(PHYSICAL READS / (DB BLOCK_GETS + CONSISTENT_GETS)

 

Если HIT_RATIO меньше 0.7 - увеличьте параметр DB_BLOCK_BUFFERS

 

·         Для определения, нужно ли изменять размер разделяемого пула, введите запросы:

 

select sum(PINS) PINS, sum(RELOADS) RELOADS from V$LIBRARYCACHE;

 

Если PINS / RELOADS больше 1 – увеличте параметр SHARED_POOL_SIZE

 

select sum(GETS) GETS, sum(GETMISSES) GETMISSES from V$ROWCACHE;

 

Если GETS / GETMISSES больше 0.1 - увеличте параметр SHARED_POOL_SIZE

 

·         Для определения, нужно ли изменять размер области сортировки, введите запрос:

 

select NAME, VALUE from V$SYSSTAT where NAME like 'sort%'

 

Возможен такой результат запроса:

 

NAME                                                        VALUE

   ------------------------------------------------------ ----------

   sorts (memory)                                                231

   sorts (disk)                                                    0

   sorts (rows)                                                  340

 

Если sorts (disk) больше 0, значит для параметра SORT_AREA_SIZE требуется больше памяти

Для параметра SORT_AREA_SIZE_RETAINED можно установить минимальный размер

 

·         Для определения, имеется ли конкуренция за журнальные файлы, введите запрос:

 

select NAME,GETS,MISSES,SLEEPS,IMMEDIATE_GETS,IMMEDIATE_MISSES

   from V$LATCH where NAME in ('REDO ALLOCATION', 'REDO COPY')

 

Вычислите два значения:

 

IMM_CONTENT=(IMMEDIATE_MISSES/(IMMEDIATE_GETS+IMMEDIATE_MISSES))

   WAIT_CONTENTION=(MISSES/(GETS+MISSES))

       

Если любое значение больше 1, то имеетсяся конкуренцияция за защелку.

 

·         чтобы снизить конкуренцию за защелку выделения журнального буфера – уменьшите параметр LOG_SMALL_ENTRY_MAX_SIZE

·         чтобы снизить конкуренцию за защелку копирования журнала – увеличьте параметр LOG_SIMULTANEOUS_COPIES

Некоторые рекомендации по настройке объектов БД

1.      Рекомендуемые параметры для таблиц:

 

Параметр

По умолчанию

Общая рекомендация

Для относи-тельно статичных таблиц

Для таблиц с интенсив-ными изме-нениями

PCTFREE

10%

5-20% (15)

5 или меньше (но не 0)

Более 10

PCTUSED

40%

55-90% (60)

65 или даже 80

Даже 20

PCTINCREASE

50%

0%

 

 

INITIAL

10240 или 20480   

Все даннае должны помещаться в 1 экстенте с небольшим запасом

 

 

NEXT

10240 или 20480   

От 25% до размера INITIAL

 

 

 

ПРИМЕЧАНИЕ.

Должно выполняться всегда следующее: PCTFREE + PCTUSED < 100

 

2.      Рекомендации по количеству сегментов отката:

·         желательно на 5 пользователей 1 RBS;

·         обязательно MINEXTENTS не менее 2 и PCTINCREASE не может быть указан

·         Если количество одновременных транзакций:

·         меньше 16 - использовать 4 RBS

·         16-32 - использовать 8 RBS

·         более 32  использовать 1 RBS на 4 транзакции, но меньше 50

3.      Для определения, имеется ли конкуренция за сегменты отката, введите запрос:

 

select R.NAME, S.GETS, S.WAITS

from V$ROLLSTAT S, V$ROLLNAME R where S.USN=R.USN

 

Возможен такой результат запроса:

  

NAME                                 GETS      WAITS    

     ------------------------------ ---------- ----------

SYSTEM                                105          0

RB1                                   161          0

...

 

Если WAITS / GETS >= 2 - нужно сделать больше RBS

 

4.      Другие настройки:

·         Для определения, имеется ли конкуренция за ввод-вывод, введите запрос:

 

select D.NAME,F.PHYRDS,F.PHYWRTS

from V$DATAFILE D, V$FILESTAT F

where D.FILE#=F.FILE#

 

Возможен такой результат запроса:

 

NAME                                     PHYRDS     PHYWRTS  

---------------------------------------- ---------- ----------

D:\ORAWIN95\DATABASE\SYS1ORCL.ORA               648         34

D:\ORAWIN95\DATABASE\USR1ORCL.ORA                 0          0

D:\ORAWIN95\DATABASE\RBS1ORCL.ORA                65         75

D:\ORAWIN95\DATABASE\TMP1ORCL.ORA                 0          0

D:\ORAWIN95\DATABASE\PLIS1.ORA                    6         31

 

·         Для определения степени фрагментации, введите запрос:

 

select

  TABLESPACE_NAME, sum(BYTES), max(BYTES),

  COUNT(TABLESPACE_NAME)

   from DBA_FREE_SPACE GROUP BY TABLESPACE_NAME

   order by TABLESPACE_NAME

      

Если count(TABLESPACE_NAME) >10 -15, то необходима дефрагментация

 

·         Для определения, происходит ли чрезмерное динамическое расширение, введите запрос:

 

select OWNER, SEGMENT_NAME, SUM(EXTENTS)

from DBA_SEGMENTS

where SEGMENT_TYPE in ('TABLE','INDEX')

group by OWNER, SEGMENT_NAME

order by OWNER, SEGMENT_NAME

 

Рекомендации по уменьшению количества записей на диск и др.

            Если при эксплуатации БД Oracle происходят интенсивные транзакции (например, более 10 000 удалений-добавлений-изменений за 1 транзакцию, и более 10 таких транзакций друг за другом при участии нескольких таблиц с количеством записей 100 000 – 1 000 000), то для ускорения работы с жестким диском помогут приведенные ниже рекомендации.

 

РЕКОМЕНДАЦИЯ 1.

Рекомендуется увеличить размер (например, до 8-16 М) и количество журнальных файлов (например, до 4-8, причем для повышения надежности сделать их 2-4 группами на разных дисках). При этом уменьшится количество переключений журнальных файлов, а при включенной архивации уменьшится количество записей архивных копий журнальных файлов.

 

РЕКОМЕНДАЦИЯ 2.

Рекомендуется для очень больших таблиц с интенсивными транзакциями (в описываемой СИСТЕМЕ - BOOK, FEATURES, WORKS, PROFILES, KMCOL) установить режим прямой записи минуя журнальные файлы. Это выполняется командой (ATbNolog.sql):

 

alter table BIGTABLE nologging

 

 

РЕКОМЕНДАЦИЯ 3.

Для этих же таблиц рекомендуется отключить триггер на запись (ТАБЛИЦА_LOG) в Журнал изменений (EDITIONS). Это приведет как к уменьшению обращений к диску, так и замедлению роста Журнала изменений. Отключение триггера выполняется в утилите Oracle Schema Manager (см. Часть 1, Глава 6: Oracle Schema Manager (Vas.exe)) или с помощью команды (ATrigDis.sql):

 

alter trigger TABLE_LOG disable

 

 

РЕКОМЕНДАЦИЯ 4.

Рекомендуется в конфигурационном файле сделать установку для активизации всех сегментов отката при запуске БД. Это приведет к уменьшению количества процессов по активизации сегментов отката при большом количестве транзаций. Установка выполняется с помощью параметра ROLLBACK_SEGMENTS следующим образом (R01..R10 – имена сегментов отката):

 

ROLLBACK_SEGMENTS = (R01,R02,R03,R04,R05,R06,R07,R08,R09,R10)

 

 

РЕКОМЕНДАЦИЯ 5.

Рекомендуется установить параметр OPTIMAL для всех сегментов отката не менее 4 М. Можно, например, по следующей схеме: для первого сегмента 32, далее - 16, 16, 8, 8, 4, 4, 4, 4, 32 (если последний используется для процесса PURGE в репликационном механизме). Это приведет к тому, что после достижения данного размера, сегмент отката уже не будет сокращаться процессом Oracle меньше данного значения, и в дальнейшем не будет тратиться время на его расширение. Установку параметра удобно выполнять с помощью утилиты Oracle Storage Manager (вкладка Extents, опция Optimal Size - см. Часть 1, Глава 6: Oracle Storage Manager (Vag.exe)) или с помощью команды:

 

alter rollback segment R01 storage (optimal 4M)

 

 

РЕКОМЕНДАЦИЯ 6.

Если количество записей в БД постоянно увеличивается, рекомендуется заранее увеличить размер основного табличного пространства.

 

РЕКОМЕНДАЦИЯ 7.

Рекомендуется проанализировать транзакционную нагрузку таблиц и разделить их на группы, установив для каждой группы свои параметры PCTUSED и PCTFREE, например (ATabPct.sql):

·         Журнал изменений EDITIONS (большая таблица, много добавлений, удалений (очисток), нет правок): PCTUSED = 20, PCTFREE = 5;

·         Некоторые «тяжелые» таблицы, указанные в приведенных выше рекомендациях 2-3 (очень большие таблицы, очень много добавлений, правок, удалений): PCTUSED = 20, PCTFREE = 10;

·         Рабочие таблицы и справочники отдельных филиалов (среднее количество вводов, правок, удалений): PCTUSED = 30, PCTFREE = 30;

·         Общие справочники (очень мало ввода, правок, удалений): PCTUSED = 80, PCTFREE = 10;

Установка данных параметров выполняется с помощью утилиты Oracle Schema Manager (см. Часть 1, Глава 6: Oracle Schema Manager (Vas.exe)) или команды:

 

alter table ТАБЛИЦА pctused 20 pctfree 5

 

Пути повышения производительности запросов СУБД   Oracle

Пути сокращения времени поиска нужных записей в таблицах

Для улучшения временных характеристик процесса соединения таблиц (или поиска записей в таблицах) необходимо индексировать столбцы, на основании которых происходит соединение таблиц, или соединять таблицы в кластеры (в этом случае индексирование выполняет Oracle). Кроме того, во фразе FROM таблицы нужно указывать в порядке убывания числа строк таблиц (таблицу с наибольшим числом строк указывать первой, таблицу с наименьшим числом строк - последней и т.д.)

Оптимизация запросов Oracle

Даже не пользуясь индексами или кластерами, Oracle способен производить достаточно быстрый поиск в одной небольшой таблице. Однако, если во фразе where в операторе SELECT используется столбец, для которого установлен индекс или кластер, то выборка данных производится гораздо быстрее.

1. Если во фразах where встречается много столбцов, то определение того, какой столбец или столбцы будут “руководить” поиском в базе данных или служить отправной точкой для такого поиска, ведется по определенной схеме. Каждое из выражений (предикатов) во фразе where, связанных между через and, получает отдельную оценку в следующей последовательности:

 

·         where ROWID = константа;

·         where уникальный индексированный столбец = константа;

·         where полный уникальный составной ключ = константа;

·         where полный неуникальный составной ключ = константа;

·         where полный несжатый индекс >= нижняя граница;

·         where полный сжатый индекс >= нижняя граница;

·         where неуникальный индекс = константа

   and неуникальный индекс = константа

      and...;

·         where наибольший несжатый индекс >= нижняя граница;

·         where наибольший сжатый индекс >= нижняя граница;

·         where уникальный индексированный столбец between нижнее значение and верхнее значение или

·         where индексированный столбец like 'С%' (диапазон с границами);

·         where неуникальный индексированный столбец between нижнее значение and верхнее значение или

·         where индексированный столбец like 'С%' (диапазон с границами);

·         where уникальный индексированный столбец <или> константа (диапазон без границ);

·         where неуникальный индексированный столбец <или> константа (диапазон без границ);

·         order by полный индекс;

·         where max или min от одного индексированного столбца;

·         where неиндексированный столбец = константа или

·         where столбец is NULL или

·         where столбец like '%С%' (поиск по всей таблице).

 

ПРИМЕЧАНИЕ.

Термин «составной ключ» означает либо ключ, состоящий из многих столбцов одной и той же таблицы, либо ключ кластера.

 

2. Использование несжатых индексов иногда способно существенно ускорить выборку соединений и обработку фраз where, в которых указан полный ключ. (Это обусловлено тем, что Oracle может считывать полное значение ключа из индексного блока, не тратя времени на чтение и поиск его в блоке данных).

 

3. Другой способ оценки применяется для каждого соединения или внешнего соединения. Соединения оцениваются по числу таблиц, которые должны соединяться без пользования индекса и по числу декартовых произведений. Если какой-нибудь предикат во фразе WHERE имеет низкую оценку на поиск и он представляет собой лишь соединение таблиц без использования индексов, то для “ведущего” столбца будет выбран другой предикат, который выполняет соединение с использованием индексов. Оценка соединения всегда преобладает над суммарной оценкой предикатов.

 

4. Предикаты, связанные друг с другом через or , обрабатываются отдельно. Это означает, что предикаты, связанные через or или выражения in (список значений) будут обрабатываться медленнее, чем вложенные запросы.

 

ПРИМЕР:  

Запрос с индексированным DEPTNO:

 

select ENAME, SAL from EMP where DEPTNO in (10,20,40);

 

выполняются значительно медленнее, чем запрос :

 

select ENAME, SAL from EMP where DEPTNO in

  (select DEPTNO from TEMTABLE);

 

где таблица TEMTABLE содержит значения DEPTNO:10,20,40.

 

5. В данной версии все предикаты равноправны и первая таблица во фразе from будет “управляющей” таблицей. Если одна из таблиц в соединении значительно меньше, чем другая, то самую маленькую таблицу следует указать первой.

 

Некоторые полезные команды SQL

·         После создания БД, дабы в этом убедиться, можно выполнить запрос

 

select NAME from V$DATABASE;

 

(предварительно нужно приконнектиться как SYSTEM)

 

·         Если Вы хотите узнать версию установленного сервера Oracle с для установленной БД -  запустите утилиту Oracle SQL*Plus, присоединитесь к БД любым пользователем, и, при успешном соединении с БД, в окне Oracle SQL*Plus появятся сообщения с версией Oracle SQL*Plus и версией самой БД. Один из распространенных случаев, когда необходимо уточнить версию сервера Oracle – выдача сообщений утилитами экспорта/импорта о несовместимости версий. Это происходит, когда серверная часть старее клиентской.

 

·         Еcли с БД Oracle возникли проблемы, требующие внимательного изучения конфигурационных параметров, а у Вас нет доступа к файлу INIT<SID>.ORA, находящемуся на сервере в каталоге %ORACLE_HOME%\DATABASE - воспользуйтесь недокументированной командой утилиты SVRMGR30sh(ow) parameters. При этом на экран отобразяться все настройки, указанные явно в INIT<SID>.ORA и используемые Oracle по умолчанию. Удобнее предварительно задать команду SPOOL МойДиск.МойПуть.МойФайл.LST: тогда вывод будет дублирован в указанный протокол, который Вы сможете не торопясь изучить и сделать свои пометки. Можно также использовать команду show <параметр> для определения конкретного параметра. Можно также просмотреть конфигурационные параметры с помощью утилиты Oracle Instance Manager из пакета OEM (см. Часть 1, Глава 6: Oracle Instance Manager (Vai.exe)).

 

·         Запомните удобную команду spool <ФайлПротокола> – при этом не потребуется копировать результаты запросов из окна Oracle SQL*Plus или Oracle SQL Worksheet в файл через буфер обмена. Не забудьте только отключить спулинг после выполнения скрипта (spool off), т.к. файл протокола не будет закрыт и будет имееть нулевой размер. И не нужно ставить «;» после этой команды (как и после set echo on), т.к. это не SQL-команда, а команда самой утилиты.

 

·         Если Вы, например, отлаживаете хранимые процедуры в Oracle SQL*Plus или Oracle SQL Worksheet, то очень поможет команда show errors, показывающая, в каких строках и какие ошибки имели место. Имейте только ввиду: если процедура начинается с комментариев, они не посчитаются за строки. Чтобы этого не произошло, рекомендуется не очень красивый, но используемый профессионалами способ – сначала писать create procedure Процедура (…) as, затем вводить заголовочные комментарии, а затем продолжать описание процедуры.

 

·         После создания БД также удобно просматривать ее на наличие таблиц, например, такими командами:

 

desc МояТаблица;

 

(при этом выводится описание структуры таблицы)

 

select TABLE_NAME from USER_TABLES;  -- (ИЛИ … from TABS);

 

select OBJECT_NAME from USER_OBJECTS where OBJECT_TYPE=’TABLE’;

 

(или можно использовать представление OBJ вместо USER_OBJECTS)

 

·         Запросы к Словарю БД для просмотра описания или важных параметров пользовательских объектов:

·         Просмотр параметра LAST NUMBER в последовательности:

 

select LAST_NUMBER from USER_SEQUENCES

where SEQUENCE_NAME='BRANCH_SEQ';

 

·         Просмотр текста триггера:

 

select TRIGGERING_EVENT,TRIGGER_TYPE,STATUS,TRIGGER_BODY

from USER_TRIGGERS

where TABLE_OWNER='PLIPEKN' and TRIGGER_NAME='ACCID_LOG';

 

·         Просмотр текста функции:

 

select substr(TEXT,1,500) from USER_SOURCE

where TYPE='FUNCTION' and NAME='BRANCH_ID';

 

·         Просмотр прав для пользователя:

 

select PRIVILEGE from SESSION_PRIVS;

 

·         Просмотр ролей для пользователя:

 

select ROLE from SESSION_ROLES;

 

·         Просмотр прав для роли:

 

select GRANTED_ROLE from ROLE_ROLE_PRIVS where ROLE='DBA';

 

·         Просмотр ролей для роли:

 

select PRIVILEGE from ROLE_SYS_PRIVS

where ROLE='IMP_FULL_DATABASE';

 

 

Использование встроенных модулей

            В Oracle 8 существуют следующие встроенные модули (подчеркнутые – используемые в настоящей документации) [2, с.568]:

·         DBMS_ALERT – Синхронное взаимодействие соединений (сеансов)

·         DBMS_APPLICATION_INFO – Регистрация приложений для трассировки

·         DBMS_AQ и DBMS_AQADM – Управление средством Oracle8 Advanced Queuing

·         DBMS_DEFER, DBMS_QUERY и DBMS_DEFER_SYS – Создание отложенных вызовов удаленных процедур и управление этими вызовами (используется в репликационном механизме Multimaster)

·         DBMS_DDLPL/SQL-эквиваленты для некоторых команд DDL

·         DBMS_SESCRIBE – Описание хранимых подпрограмм

·         DBMS_JOB – Планирование выполнения процедур PL/SQL

·         DBMS_LOB – Работа с объектами LOB в Oracle8

·         DBMS_LOCKБлокировки, определяемые пользователями

·         DBMS_OUTPUT – Вывод информации на экран

·         DBMS_PIPE - Асинхронное взаимодействие соединений (сеансов)

·         DBMS_REFRESH и DBMS_SNAPSHOT – Работа с моментальными снимками

·         DBMS_REPCAT, DBMS_REPCAT_ADMIN, DBMS_REPCAT_AUTH – Работа со средством симметричного тиражирования Oracle (используется в репликационном механизме Multimaster)

·         DBMS_ROWID – Получение информации из идентификаторов строк (ROWID). Преобразование ROWID Oracle7 в ROWID Oracle8 и наоборот

·         DBMS_SESSION – PL/SQL-эквивалент команды alter session

·         DBMS_SHARED_POOL – Управление разделяемым пулом

·         DBMS_SQL – Динамические PL/SQL и SQL (пример в Главе 3 Части 1)

·         DBMS_TRANSACTIONКоманды управления транзакциями

·         DBMS_UTILITY – Дополнительные служебные процедуры

·         UTL_FILE – Файловый ввод-вывод

Эти модули иногда бывают очень полезны (вывод на экран, обмен сообщениями), а в ряде случаев без них не обойтись. Например, при импорте схемы в БД для замены устаревших данных в таблицах данного пользователя необходимо сначала отключить все триггеры и ограничения для этих таблиц, затем удалить все данные, и только после этого производить импорт. Затем нужно опять включить ограничения и триггеры. Чтобы в скрипте не перечислять имена всех таблиц, триггеров и ограничений, можно их выбрать из Словаря данных (USER_OBJECTS и др.) и затем использовать как параметры. Это достигается с помощью модуля DBMS_SQL (в Главе 5 Части 1 это будет подробно описано).

 

Что применять для ввода команд: SVRMGR30, SQL Plus или SQL Worksheet ?

            Указанные в заголовке утилиты предназначены для ввода команд SQL (DML и DDL), запуска скриптов, просмотра ошибок выполнения команд и ввода других команд, необходимых для управления БД. Следует отметить, что большинство «ручных» действий (т.е. выполняемых фактически в режиме командной строки), можно проще, нагляднее и быстрее осуществить в диалоговом режиме с помощью утилит пакета Oracle Enterprise Manager и других. В то же время, наиболее «тонкое» управление БД, также как и самую исчерпывающую информацию (находящуюся в Словаре БД, состоящим из многих групп таблиц и представлений), можно получить только в режиме командной строки.

Ниже вкратце перечислены лишь некоторые достоинства и недостатки описываемых утилит, что позволит гибко подойти к их выбору в конкретной ситуации.

·         SVRMGR30. Главное удобство – можно пользоваться на сервере Novell Netware. Имеется также удобная команда show parameters для просмотра конфигурационных параметров. Удобна для запуска больших скриптов (например, генерации БД или запроса к большой таблице), т.к. не имеет буфера для хранения исполненных команд. Недостатки – обычные недостатки утилит командной строки, где все действия нужно определять вводом команд. Но это также является  мощным достоинством – эту утилиту можно использовать в командных файлах (BAT и NCF), что позволяет набор однотипных действий выполнить одним нажатием клавиши. Впрочем, был обнаружен более существенный недостаток – выполняемый в этой утилите скрипт ломался на комментариях более 1000 символовOracle SQL*Plus все прошло нормально). Следовательно, и слишком длинные SQL-выражения (часто встречающиеся в insert и  update) также не пройдут.

·         Oracle SQL*Plus. Главные удобства: имеется везде; можно использовать для запуска больших скриптов (т.к. буфер ограничен); выводит после соединения версию БД. Неудобства: никаких удобств (нельзя «ползать» по вводимой строке для ее правки; нельзя повторить предыдущий ввод и т.д.). Еще один недостаток – при соединении нельзя указывать as dba (как в Oracle SQL Worksheet) – для этого нужно явно вводить команду (как и вообще последующие команды connect). И еще неудобство – по умолчанию длинные строки переносятся (в отличие от Oracle SQL Worksheet). Впрочем, при определенном навыке, работа с Oracle SQL*Plus перестает казаться неудобной.

·         Oracle SQL Worksheet. Это наиболее удобный «командный» пульт. Имеет неограниченный буфер выполненных команд и их результатов, имеет историю команд (Ctrl-P – ввод предыдущей комнды, Ctrl-N – ввод следующей команды), позволяет редактировать вводимую строку. Запуск команды осуществляется кнопкой с молнией или клавишей Ctrl-EnterSVRMGR30 и Oracle SQL*Plus надо было вводить «;», затем нажимать Enter). Имеется также кнопка для соединения с БД. Утилитой можно пользоваться только на клиенте, где установлен пакет OEM. Главный недостаток (запомните!) – нельзя использовать для запуска больших скриптов (например, генерации Словаря БД), т.к. при заполнении буфера происходит пропорциональное замедление обработки следующих команд. Если Вам не повезет и в голову придет идея запустить скрипт генерации БД (да еще без спулинга), то через несколько часов Вы все равно снимите эту задачу, а потом потратите не известно сколько времени, чтобы понять, что было создано, а что еще нет (и что надо удалять и заново пересоздавать). Еще один недостаток – если скрипт большой или запрос выполняется долго, а Вы переключились в другое окно, то, вернувшись, кроме песочных часов можете обнаружить белый экран. В Oracle SQL*Plus такая проблема возникает реже - Вы почти всегда видите весело бегущие строчки. Так что - да здравствует неудобный Oracle SQL*Plus. А если и он немеет – посмотрите, не «отвалилась» ли сетка. Такое, к сожалению, часто бывает.

 

Описание ряда особенностей при работе с Oracle

Некоторые особенности

ВНИМАНИЕ !

Прежде чем менять пароль основного пользователя в распределенной БД учтите  следующее:

·         Свойства связи между БД определены в объекте dblink, среди которых есть и пароль пользователя для основной схемы БД (которой принадлежат все таблицы). Смена этого пароля сделает dblink неверным.

·         Попытка обновления снимков от таблиц БД, где произошла описанная смена пароля будет, естесственно, неудачной, что может привести к зацикливанию таких попыток и приведению всей распределенной БД в нерабочее состояние.

Обнаруженные некорректности

·         Неточности и подводные камни в технической документации:

·         Никогда не делайте просто shutdown (как сплошь и рядом написано в документации) – компьютер виснет надолго, а, может, и навсегда (до перезагрузки, что чревато). Всегда указывайте конкретно, например, shutdown normal или shutdown immediate.

·         Для останова БД рекомендовано запускать ORASTOP.NCF, а для запуска – ORASTART.NCF. Посмотрите вызываемые в них файлы STOPDB.SQL и STARTDB.SQL – и Вы не всегда будете пользоваться этими командными файлами, либо их откорректируете:

·         в останове БД выполняется immediate (хотя при отсутствии сервисов лучше делать normal);

·         БД запускается как nomount (потом надо делать alter database open либо «переключить светофор» в Oracle Instance Manager из OEM).

·         Хотя и декларируется, что Novell Netware 5 допускает длинные имена файлов (и это на самом деле так), но при генерации БД имена файлов для табличных пространств следует задавать все-таки 8-значными (например, не INDX1ORCL.ORA, а IND1ORCL.ORA), иначе файл не будет создан.

·         Неприятности с версиями Oracle:

·         Если БД создана в Oracle Enterprise Edition 8.0.3. for Novell Netware 5, а на рабочем месте установлен Oracle Client 8.0.3. for Novell Netware, то Вы сможете лицезреть некорректную работу Oracle ODBC Driver: если в MS Access 97 в присоединяемой к Oracle таблице имеются пустые поля типа даты, то соответствующие записи могут отображаться как ошибочные (метка «Ошибка» в каждом поле такой записи), запросы к таким таблицам выполняться не будут, а формы, источниками строк в которых являются эти запросы, будут падать.

·         Если БД создана в Oracle Enterprise 8.0.3. for Novell Netware 5, а на рабочем месте установлен Oracle Client 8.0.4. for Novell Netware, то работа Oracle ODBC Driver исправляется, но утилиты EXP80.EXE и IMP80.EXE, а также Oracle Data Manager из пакета OEM выдают при работе ошибку: Не могу выполнить экспорт/импорт с БД устаревшей версии.

·         Единственная корректная версия Oracle для Novell Netware 5 – 8.0.4. Установите сервер и клиент именно этой версии и затем генерите БД. Не стоит создавать БД на сервере 8.0.3, а затем делать ее upgrade, т.к. этот процесс более трудоемкий, чем об этом написано в сопроводительной документации (в частности, там ничего не говорится о необходимости перекомпиляции хранимых процедур, модулей и других объектов).

·         Существуют свои засады и с версиями Oracle, серверная часть которого установлена на сервере MS Windows NT 4.0, а клиентская – на MS Windows NT 4.0, MS Windows 95 и MS Windows 98.

 

Что делать при изменении сетевого адреса сервера

            Сначала о своих намерениях сообщите разработчикам, поскольку при изменении сетевого адреса сервера необходимо откорректировать файл TNSNAMES.ORA - как в Компании, так и во всех Объединениях, а также перестроить в Компании все снимки на Ваши таблицы. Кроме того, это чревато перегрузкой сервера в Компании из-за многочисленных безуспешных попыток чтения таблиц в снимки, а также переполнением журналов снимков записями об ошибках. Т.е. дело это хлопотливое, опасное и делается по взаимному согласованию.

 

Возможные аварийные ситуации

Молния вывела из строя маршрутизатор

            При этом вышла из строя связь по TCP/IP-протоколу. Если другие протоколы работоспособны, введите их описание в файл TNSNAMES.ORA (см. Часть 1, Глава 2: Создание строки соединения TNS  (корректировка TNSNAMES.ORA)), причем строку описания работающего протокола переместите на первое место, а аварийного – на последнее.


Игорь Гаршин, E-mail: garchine@mail.ru, URL: garshin.ru.

Страницы со статьей: Репликация Oracle | Все статьи
Яндекс.Метрика
На правах рекламы (см. условия): [an error occurred while processing this directive]