Сайт Игоря Гаршина Главная страница
Письмо автору сайта 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-проект.

Глава 2

Генерация Базы данных

 

В этой главе…

 

·        Вариант распределенной базы данных

·        Настройка конфигурационных параметров (в файле INIT<SID>.ORA)

·        Создание инстанса Oracle

·        Особенности создания на сервере нескольких экземпляров Oracle

·        Создание основных физических объектов БД

·        Создание Словаря данных, табличных пространств и сегментов отката

·        Создание основного и дополнительного пользователей

·        Смена паролей

·        Создание связей между базами данных

·        Генерация и проверка тестовых снимков

·        Создание БД с помощью утилиты ORADIM80.EXEMS Windows NT)

 

 


Вариант распределенной базы данных

В концептуальная модели распределенной базы данных за основу можно принять базы данных Объединений (филиалов среднего уровня), либо Компании (высший уровень). Администратор (и пользователи, если это разрешает администратор) имеет право удалять, изменять и добавлять записи в любые кодификаторы собственной БД. Синхронизацию кодификаторов и других таблиц можно выполнять на уровне Компании средствами клиентской части СИСТЕМЫ.

Предприятия можно перевести на работу по двум вариантам:

·         По стандартному механизму удаленного доступа к БД Oracle Объединения

·         По механизму отложенного экспорта всех изменений из БД Предприятий в БД Объединения

При низкой скорости работы для ряда Предприятий возможна поставка оптимизированной клиентской части СИСТЕМЫ. Кроме того, для первого варианта необходимо распределить приоритеты работы в сети, т.к. удаленный доступ при наличии процесса пересылки почты становится практически невозможным из-за крайне низкой скорости всех операций с удаленной БД (можно также разграничить по времени эти процессы).

 

Настройка конфигурационных параметров (в файле INIT<SID>.ORA)

            Корректировка параметров в конфигурационном файле INIT<SID>.ORA является основным способом настройки и оптимизации экземпляра БД Oracle (подробнее о способах настройки – в гл. 5.6). Файл INIT<SID>.ORA рекомендуется располагать в каталоге %ORACLE_HOME%\DATABASE. Имя и расширение файла могут быть, в принципе, любыми, но по установленным соглашениям он имеет форму INIT+SID (идентификатор экземпляра БД Oracle) и расширение ORA. SID рекомендуется делать 4-значным (часто используют ORCL, ORC1 или другие, начинающиеся на ORC, OR, либо сокращенное имя БД). Поэтому этот файл может называться, например, INITORCL.ORA. В дальнейшем будем называть его INIT<SID>.ORA.

            Вообще говоря, этот файл необходим для запуска БД и последующей генерации ее объектов. Поэтому править конфигурационный файл можно после создания инстанса (экземпляра Oracle – см. Часть 1, Глава 2: Создание инстанса Oracle), но перед генерацией БД (см. Часть 1, Глава 2: Создание основных физических объектов БД). Но обычно программисты начинают сразу с правки этого и других конфигурационных файлов (TNSNAMES.ORA, LISTENER.ORA, иногда также CONFIG.ORA), а затем уже принимаются работать с Oracle SQL*Plus или SVRMGR30. Рекомендуется именно такой способ, который удобен также тем, что затем генерацию БД и другие необходимые действия можно выполнить одним нажатием на клавишу. Для этого можно воспользоваться командными файлами PLI_GEN.BAT и PLI_GEN.NCF, в которых последовательно выполняются нужные скрипты с помощью SVRMGR30:

 

Листинг скрипта на создание Словаря данных, табличных пространств и сегментов отката БД Oracle

 

@ECHO OFF

REM Создание БД Oracle СИСТЕМЫ

rem Создание файла паролей

CSID

Rem ====================================================================

rem Затем нужно:

rem 1) создать или поправить файлы в подкаталоге \NET80\ADMIN:

rem    * TnsNames.ora (доб-ть TNS - обяз-но с TCP и IPC-протоколами)

rem    * Listener.ora (добавить сервисы SIDов)

rem 2) создать или поправить файл InitORC1.ora в подкат. \DATABASE

rem 1. Запуск инстанции (экземпляра) Oracle (без монтирования)

rem    (можно также с клиента через Instance Manager)

load svrmgr30 @VOL1:ORANW804\DATAPLIS\Start.sql

rem ====================================================================

rem 2. Создание основных файлов БД (управл., журн., для ТП SYSTEM)

LOAD SVRMGR30 @VOL1:ORANW804\DATAPLIS\CDB.SQL

rem 3. Запуск постпроцедур; созд.других ТС; созд.сегментов отката

LOAD SVRMGR30 @VOL1:ORANW804\DATAPLIS\CTS.SQL

rem 4. Запуск скриптов для функций репликации (снимки и т.д.)

LOAD SVRMGR30 @VOL1:ORANW804\DATAPLIS\REP.SQL

rem 5. Создание таблиц профилей пользователей и продукта

LOAD SVRMGR30 @VOL1:ORANW804\DATAPLIS\PUP.SQL

rem ===================================================================

rem 6. Создание основного пользователя

rem    (для генерации рабочих таблиц в его схеме)

LOAD SVRMGR30 @VOL1:ORANW804\DATAPLIS\CUSER.SQL

rem 7. Замена паролей для INTERNAL, SYS и SYSTEM

LOAD SVRMGR30 @VOL1:ORANW804\DATAPLIS\CHPSW.SQL

rem ===================================================================

rem 8. Создание связей между БД (dblink)

LOAD SVRMGR30 @VOL1:ORANW804\DATAPLIS\CDBL.SQL

rem 9. Создание снимков-тестов, проверка их работы, их удаление

LOAD SVRMGR30 @VOL1:ORANW804\DATAPLIS\SNAPTEST.SQL

pause Генерация БД Oracle завершена. Нажмите любую клавишу...

 

Перед генерацией БД Oracle файл INIT<SID>.ORA подвергается, главным образом, следующей корректировке (см. в [5] гл. 20 и др.):

·         Исправляется параметр DB_NAME (имя БД).

·         Корректируется параметр CONTROL_FILES (имена и путь управляющих файлов – далее УФ). Можно установить один УФ, можно несколько (причем, для надежности расположив их на разных дисках). Рекомендуется для начала установить два УФ в каталоге %ORACLE_HOME%\DATABASE, назвав их CTL1+SID и CTL2+SID с расширениями ORA (иногда используют расширения CTL). Если на сервере будет устанавливаться несколько БД Oracle, то целесообразно для их файлов создать отдельные подкаталоги внутри подкаталога DATABASE.

·         Правится параметр DB_FILES, определяющий максимальное количество открытых файлов.

 

ВНИМАНИЕ !

Параметр db_files должен быть больше параметра maxdatafiles в конструкции create database при будущей генерации Вашей БД. Рекомендуется его установить не меньше 100.

 

·         Устанавливается параметр COMPATIBLE равным релизу серверной части Oracle. Установите его равным 8.0.4.2.0 (если Ваша БД разбита на Oracle Enterprise Edition 8.0.4.2.0).

 

Затем корректируются параметры, которые после генерации БД уже невозможно изменить:

·         Правится параметр DB_BLOCK_SIZE (размер блока БД в байтах). Его надо делать кратным размеру блока используемой на сервере операционной системы, лучше степенями 2 (2, 4, 8). Как правило, его делают равным 1-2 блокам ОС. Можно сделать 4 или 8, но производительность чтения и записи при этом уже может перестать существенно расти. Для описываемой СИСТЕМЫ было рекомендовано выбрать одно из следующих значений: 2048, 4096, 8192. Если БД небольшая (к примеру, Объединение включает 1-2 Предприятия), укажите первое значение, если большая (например, 5 и более Предприятий) – третье значение, для средней БД возьмите второе значение.

 

Далее настраиваются параметры, в первую очередь влияющие на производительность (можно их также оставить по умолчанию, а исправить в любое другое время):

·         Правится параметр SHARED_POOL_SIZE, существенно влияющий на производительность, т.к. определяет размер памяти (в байтах) для области разделяемого пула экземпляра БД Oracle (наиболее важной его части). В «Соглашениях…» рекомендуется делать его равным 18 000 000, но рекомендовать конкретное значение этого параметра лишено  смысла, т.к. не известны размер ОЗУ на сервере, имеются ли на нем другие экземпляры Oracle, а также характер регулярной рабочей нагрузки сервера. В целом, здесь рекомендация такая: установите это значение как можно большим, но так, чтобы размер Системной Глобальной Области (SGA) экземпляра БД Oracle не был больше 50% ОЗУ сервера. А т.к. разделяемый пул – лишь часть SGA (причем наибольшая) и вне SGA существует также область сортировки и некоторые другие области экземпляра, то будет правильным делать значение этого параметра равным 40 – максимум 45% размера ОЗУ. Причем, если на сервере запускается несколько экземпляров, то общий размер их разделяемого пула не должен превышать этой величины, т.е. значение этого параметра для каждого экземпляра должно быть еще меньше.

·         Правится параметр DB_BLOCK_BUFFERS, определяющий количество блоков для Буферного кэша (еще одной части SGA). Умножив этот параметр на параметр DB_BLOCK_SIZE, получим размер области Буферного кэша в байтах (например, 550 * 4096 ~ 2 М, а 3200 * 8192 ~ 25 М). Эта величина вместе с величинами, указанными в SHARED_POOL_SIZE и LOG_BUFFER (размер Буфера Журнала в SGA, см. ниже), как выше пояснялось, не должны превышать 50% ОЗУ сервера (в случае одного экземпляра на сервере). Для Вашей системы можно для начала установить его равным 550.

·         Правится параметр LOG_BUFFER, определяющий размер Буфера Журнала (в SGA). Эта величина, вместе с величинами SHARED_POOL_SIZE и DB_BLOCK_BUFFERS * DB_BLOCK_SIZE, не должна превышать 50% ОЗУ сервера. Также рекомендуется устанавливать его не меньше, чем DB_BLOCK_SIZE * 4.

·         Правится параметр SORT_AREA_SIZE, определяющий размер область сортировки (в байтах). Эта область предназначена для выполнения DDL-команды create index и выполнения запросов с  выражениями order by и group by. Значение по умолчанию - 64К (65535). Этого размера явно недостаточно. Установите его для начала равным, например, 512К (524288 байт) или 128К (131072 байт).

·         Правится параметр PROCESSES, определяющий максимальное количество процессов, способных одновременно подключаться к БД. Установите 200.

·         Правится параметр SESSIONS, определяющий максимальное количество одновременных сеансов работы с БД. По умолчанию – 115. Для СИСТЕМЫ в Объединении этого пока хватит.

·         Правится параметр OPEN_CURSORS, определяющий максимальное количество одновременно открытых курсоров (по умолчанию 50). Установите для начала 250.

·         Правится параметр CHECKPOINT_PROCESS, управляющий запуском процесса сброса контрольных точек (CKPT) и разгружающий от этого процесс записи журнала (LGWR). Можете попробовать установить его как TRUE (некоторые версии Oracle на это «ругаются»).

·         Правится параметр DB_WRITERS, определяющий количество одновременно работающих процессов записи в БД (DBWR). Если операционная система это позволяет, рекомендуется установить по 2 процесса на каждый файл данных.

·         Правится параметр TIMED_STATISTICS, определяющий режим сбора статистики. Рекомендуется установить TRUE при отладке БД (например, в первое время после генерации) и отключить в рабочем варианте.

·         Опытными администраторами правится также параметр OPTIMIZER_MODE, определяющий режим оптимизации, т.е. порядок выполнения SQL-предложений. Крайне важный параметр (см. Часть1, Глава 5: Настройка БД Oracle). По умолчанию равен CHOOSE. Возможны также значения: RULE – на основе правил (использование продукционного оптимизатора), FULL_ROWS, предписывающий выбирать план выполнения, увеличивающий производительность, и ALL_ROWS, заставляющий выбирать план выполнения, сокращающий общее время выполнения (на основе издержек).

·         Если для SGA (параметр SHARED_POOL_SIZE) отведено много памяти так, что можно быть уверенным, что все разбираемые SQL-предложения не будут перезаписываться, то можно использовать параметр CURSOR_SPACE_FOR_TIME = TRUE. При этом разделяемые области  SQL не вытесняются из  пула, пока существует  открытый курсор,  ссылающийся на  них. Но при нехватке памяти будет выдаваться ошибка.

 

Устанавливаются параметры, необходимые для распределенной БД Oracle в Вашей системе и функционирования моментальных снимков:

·         GLOBAL_NAMES            = TRUE

·         OPEN_LINKS               =   10

·         DISTRIBUTED_LOCK_TIMEOUT =  300 (60 при испытаниях)

·         DISTRIBUTED_TRANSACTIONS =    5

·         JOB_QUEUE_INTERVAL      =  600

·         JOB_QUEUE_PROCESSES      =    4 (при репликации: 2 * кол-во мастер-сайтов)

·         REPLICATION_DEPENDENCY_TRACKING = TRUE

·         PARALLEL_MAX_SERVERS     =   10

·         PARALLEL_MIN_SERVERS     =    2

·         PROCESSES               =  300 (на destination-site),

   400 (на definition-site)

Кроме того, можно установить значения для параметров (см. Oracle8 Parallel Server Concepts Manual и Oracle8 Administration Guide):

·         PARALLEL_DEFAULT_MAX_INSTANCES,

·         PARALLEL_MIN_PRECENT,

·         PARALLEL_SERVER_IDLE_TIME.

 

Параметр JOB_QUEUE_INTERVAL определяет интервал перезапуска неудачной попытки репликации в секундах. Чтобы не загружать сервер, лучше сделать это значение не менее 600 (10 мин), либо максимальным – 3600 (1 час).

Кроме того, для параметра DML_LOCKS необходимо установить значение не менее 300 (без этого нельзя запускать скрипт удаления всех таблиц).

 

Если при будущей генерации БД в команде create database Вы хотите установить параметр ARCHIVELOG (или впоследствии будет выполнена команда alter database archivelog) для запуска режима архивирования журналов повтора, то необходимо также установить следующие параметры (не забудьте при этом вручную создать подкаталог DATABASE\ARCHIVE в каталоге Oracle на сервере):

·         LOG_ARCHIVE_START       = TRUE

- это обязательный параметр для режима архивации

·         LOG_ARCHIVE_DEST        = %ORACLE_HOME%\DATABASE\ARCHIVE

- это также обязательный параметр

·         LOG_ARCHIVE_BUFFERS     =    4

- этот параметр можно настроить, либо закомментировать

·         LOG_ARCHIVE_BUFFER_SIZE      =  127

- также можно настроить, либо закомментировать

 

Можно также отредактировать другие параметры, влияющие на производительность (см. Часть1, Глава 5: Настройка БД Oracle):

·         Параметр CURSOR_SPACE_FOR_TIME можно установить в TRUE. Это повышает производительность программ, использующих курсоры (а это все программы, т.к. курсоры неявно открываются при любом запросе) и влияет на совместно используемые и приватные области SGA.

·         Параметр DB_FILE_MULTIBLOCK_READ_COUNT определяет максимальное кол-во блоков, считываемых в одной операции ввода-вывода в ходе последовательного чтения. Не должен превышать максимального значения для операционной системы, и рекомендуется, чтобы не превышал DB_BLOCK_BUFFERS / 4.

·         Параметр PRE_PAGE_SGA можно установить в YES, что заставляет Oracle переносить все страницы SGA в память, повышая производительность, но увеличивая время запуска БД.

·         Параметр  TRANSACTION_PER_ROLLBACK_SEGMENTS определяет максимальное число транзакций, которые могут использовать один сегмент отката одновременно.

·         Параметр LOG_SIMULTANEOUS_COPIES. определяет максимальное количество защелок копирования буферов восстановления, доступных для одновременной записи входов журнала. По умолчанию равен 0. Повысьте это значение, чтобы снизить конкуренцию за защелку копирования Журнала (рекомендуется установить равным кол-ву процессоров * 2).

·         Параметр LOG_SMALL_ENTRY_MAX_SIZE. По умолчанию равен 80. Понизьте это значение, чтобы снизить конкуренцию за защелку выделения Журнального буфера (можно установить в 0 – см. [5] гл.30).

·         Параметр LOG_CHECKPOINT_INTERVAL, определяющий количество блоков Журнала, которые система должна заполнить. Надо сделать больше наибольшего Журнального Файла. При этом контрольная точка создается только тогда, когда Oracle переключает журналы восстановления, что способствует повышению производительности.

·         Параметр LOG_CHECKPOINT_TIMEOUT, определяющий время между выполнением контрольных точек. Можно сделать равным 0.

·         Параметр LOG_CHECKPOINTS_TO_ALERT можно временно установить в YES. При этом Oracle будет заносить контрольную точку в файл ALERT.LOG, что позволит определить, не вводятся ли КТ слишком часто.

 

Для параметров, где описываются пути, можно использовать как переменные %ORACLE_HOME% (для параметров CONTROL_FILES, LOG_ARCHIVE_DEST), %RDBMS80% (для BACKGROUND_DUMP_DEST, USER_DUMP_DEST), так и полностью описывать пути с указанием тома (например, BACKGROUND_DUMP_DEST = VOL1:ORANW804\RDBMS80\TRACE). Первый способ уменьшает ручной ввод при запуске утилит командной строки или правке командных файлов и позволяет не корректировать файл INIT при смене версии Oracle (когда создается новый каталог для Oracle). Но если при смене версии файлы Вашей БД остались в старом каталоге, файл INIT придется править. Привычка использовать эти переменные приводит к такому способу задания команд и в скриптах генерации БД. И хоть физически при этом в управляющих файлах прописываются полные пути (как декларируется), но при переводе БД на другую версию все равно возникают неприятности. Лучше, все же, придерживаться правила не использовать переменные %ORACLE_HOME% и %RDBMS80%. Впрочем, при запуске скриптов в SVRMGR30 (через @) путь к скрипту можно задать через переменную %ORACLE_HOME% (чтобы не вспоминать том и каталог). Здесь не будет нежелательных эффектов.

 

Создание инстанса Oracle

Создание SID и файла внутреннего пароля PWD<SID>.ORA

            Для создания БД используется существующий SID (если при инсталляции Oracle Server была задана опция для создания учебной БД) или создается новый.

Если использовать существующий SID, то перед генерацией новой БД необходимо остановить существующую (на этом SID) БД командой SHUTDOWN NORMAL и физически удалить файлы БД (за исключением файла паролей PWD<SID>.ORA и конфигурационного файла INIT<SID>.ORA). Впрочем, для опытного администратора Oracle не возбраняется использовать существующие табличные пространства учебной БД, настроив их параметры и  создав дополнительные табличные пространства и сегменты отката (с помощью Oracle Storage Manager), а также прогнав скрипт CATREP8M.SQL (см. Часть1, Глава 2: Создание основных физических объектов БД; Создание Словаря данных, табличных пространств и сегментов отката). Таблицы и другие объекты из табличных пространств можно удалить с помощью утилиты Oracle Scheme Manager, пользователей – утилитой Oracle Security Manager.

Для создания нового SID в среде Novell Netware 5 необходимо на сервере в каталоге %ORACLE_HOME%\DATABASE создать файл внутреннего пароля командой:

 

LOAD ORAPWD80 FILE=VOL1:ORANW804\DATAPLIS\PWD<SID>.ORA PASSWORD=<ПарольINTERNAL> ENTRIES=4

 

            Указанная команда находится в прилагаемых файлах CSID.BAT (для исполнения на клиенте) и CSID.NCF (для исполнения на сервере либо на клиенте в RCONSOLE).

            Для создания и запуска нового SID в среде MS Windows NT 4 необходимо последовательно выполнить 2 команды  (угловые скобки ставить не надо, а нужно поставить собственные значения для SID и пароля пользователя INTERNAL):

 

ORADIM80 -NEW -SID <SID> -INTPWD <ПарольINTERNAL> -STARTMODE AUTO -PFILE D:\ORANT\DATABASE\INIT<SID>.ORA

 

ORADIM80 -STARTUP -SID <SID> -STARTTYPE SRVC, INST -USRPWD <ПАРINTERNAL> -PFILE D:\ORANT\DATABASE\INIT<SID>.ORA

 

При этом автоматически создается файл паролей и запускается БД.

 

ПРИМЕЧАНИЕ.

После создания SID указание на него можно прописать в файле CONFIG.ORANetware) или системном реестре (в NT), например: ORACLE_SID = BONN. Иначе после загрузки SVRMGR30 будет появляться сообщение:

 

ORA-12154: TNS:Could not resolve service name

 

Создание строки соединения TNS  (корректировка TNSNAMES.ORA)

            После создания SID, необходимо прописать соединение с ним в файле TNSNAMES.ORA (в каталоге %ORACLE_HOME%\NET80\ADMIN на сервере и клиентах). В файле TNSNAMES.ORA прописывается TNS (другие названия: строка соединения, сервис, вход, DBQ) – псевдоним для соединения с БД Oracle по определенному протоколу(ам). Если TNS не прописан, то не будет выполняться коннект (подсоединение к БД), а нам сейчас это необходимо для запуска БД и ее последующей генерации (не говоря вообще о работе с БД). Файл TNSNAMES.ORA должен находиться как на сервере, так и на всех клиентских местах.

Опишите TNS Вашей БД в файле TNSNAMES.ORA примерно следующим образом:

 

NYORK.WORLD =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS =

        (COMMUNITY=TCP.world)

        (PROTOCOL=TCP)

        (Host=171.15.36.6)

        (Port=1521)

      )

     (ADDRESS=(COMMUNITY=IPC.world)(PROTOCOL=IPC)(KEY=ORC1))

     (ADDRESS=(COMMUNITY=SPX.world)(PROTOCOL=SPX)(Service=NVG5_LSNR))

    )

    (CONNECT_DATA =

      (SID=ORC1)

      (GLOBAL_NAME=NYORK.world)

    )

  )

 

Прежде всего необходимо прописатьTCP/IP-адрес для первого параметра ADDRESS, а также SID и GLOBAL_NAME для раздела CONNECT_DATA. Адресов по другим протоколам может не быть. Если же описано несколько протоколов, то соединение с БД начинает выполняться поочередно. Если, например, связь по первому протоколу не работает, то Вы будете ждать около минуты, пока не настанет очередь следующего протокола. Поэтому в данном случае поставьте рабочий протокол на первое место. После исправления технических неполадок, можете опять эти строки поменять местами.

            Проверить корректность исправлений в файле TNSNAMES.ORA (по протоколу TCP/IP) можно, задав команду: TNSPING ВашTNS.

Пример файла TNSNAMES.ORA дан в приложении 7.4.

Создание сервиса «прослушивания» (корректировка LISTENER.ORA)

После создания SID также необходимо описать сервис «прослушивания» в файле LISTENER.ORA (в каталоге %ORACLE_HOME%\NET80\ADMIN на сервере). Список адресов ADDRESS_LIST должен быть аналогичен таковому в TNSNAMES.ORA. В списке наименований параметров SID_DESC параметру GLOBAL_DBNAME должен соответствовать параметр GLOBAL_NAME из CONNECT_DATA в TNSNAMES.ORA, а параметру SID_NAME – параметр SID:

 

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = NYORK.world)

        (SID_NAME = ORC1)

        (ORACLE_HOME = VOL1:ORANW804)

        (PRESPAWN_MAX = 10)

      )

   )

 

ПРИМЕЧАНИЕ 1.

Не удаляйте текст внизу файла:

 

(SID_DESC =

  (SID_NAME = extproc)

  (program = extp80)

)

 

 

ПРИМЕЧАНИЕ 2.

Файл LISTENER.ORA должен находиться только на сервере.

 

После корректировки этого файла его необходимо перезагрузить с помощью утилит LSNRCTL80.EXENT), LSNCTL80.NLMNovell Netware) или lsnrctlLinux). Для этого используется команда RELOAD или последовательность команд STOP и START (см. Часть 1, Глава 6: Lsnrctl80.exe (NT), Lsnctl80.nlm (Netware) и Lsnrctl (Linux)).

 

ВНИМАНИЕ !

Если Вы неправильно откорректировали этот файл и попытка его перегрузить с помощью LSNCTL80.NLM приводит к зависанию сервера Novell, то выгрузить утилиту можно попытаться с помощью команды UNLOAD LSNCTL80. Если и это не помогает, то в Novell Netware есть недокументированная возможность перезагрузки сервера: нажать одновременно 4 клавиши: Ctrl+Alt+Shift+Esc, - и затем выбрать пункт меню 1 – Down the File Server and Exit to DOS (для отмены – нажать Esc).

 

ПРИМЕЧАНИЕ.

После инсталляции Oracle Enterprise Edition 8.0.5 в ОС MS Windows NT 4 могут быть проблемы с прослушиванием. В этом случае могут помочь одни из следующих действий:

·         Уберите строку PASSWORD в конце файла LISTENER.ORA (этот пароль запрашивается при операции STOP);

·         Замените имя сервера на сетевой адрес в строке HOST =… в файле TNSNAMES.ORA;

·         С помощью инсталлятора Oracle убрать Parallel Option;

·         Перезапустить сервис OracleListenerTNS (рис. 2.1).

 

 

 

Рис. 2.1. Сервисы MS Windows NT.

 

Пример файла LISTENER.ORA дан в приложении 7.4.

 

Особенности создания на сервере нескольких экземпляров Oracle

            При создании нескольких SID, файлы БД можно располагать как вместе в подкаталоге DATABASE, так и в собственных подкаталогах (отдельно или внутри DATABASE). Но в любом случае файлы внутреннних паролей PWD<SID>.ORA должны находиться в подкаталоге DATABASE (Хотя и декларируется возможность задания путей к ним в файле LISTENER.ORA), но реальными испытаниями это пока не подтверждается.

 

ВНИМАНИЕ !

SID-ы, имена БД и TNS-имена должны быть уникальными.

 

            Также необходимо объединить файлы TNSNAMES.ORA и прописать сервисы прослушивания в LISTENER.ORA. Поэтому все TNS-имена всех БД должны быть уникальными.

Файл INIT<SID>.ORA по установленным соглашениям лучше располагать там же, где и файлы собственной БД.

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

            Подкаталог RDBMS80\TRACE можно оставить единым для протоколов трассировки разных БД, поскольку в именах файлов этих протоколов присутствует SID каждой БД. А вот в подкаталоге ARCHIVE (как правило, в подкаталоге DATABASE) отличить файлы различных БД невозможно, что является большим минусом, и поэтому располагать файлы различных БД лучше все же в разных каталогах, а внутри каталога каждой БД создавать подкаталог ARCHIVE).

            Положительные моменты при использовании на одном сервере нескольких инстансов:

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

·         Использование только одной лицензии (если по лицензии можно установить Oracle на нескольких серверах, то и это преимущество теряется)

Отрицательные моменты:

·         Если базы данных ведутся разными разработчиками то правка единых файлов TNSNAMES.ORA и LISTENER.ORA может иногда приводить (по невнимательности) к отсутствию соединения с соседней БД

·         50% ОЗУ сервера принадлежит уже не одному экземпляру, а поделено для разных экземпляров (в соответствии с настройками в файле INIT.ORA)

·         Если администратор Oracle доверяет разработчикам, и они, зная пароль INTERNAL только своей БД, работают с ней, то им будет неудобно, т.к. иногда необходимо выгружать и загружать сам Oracle, а перед этим останавливать чужую БД, пароль INTERNAL которой они не знают (а потом и загружать ее). Администратор может сообщить все пароли INTERNAL всем разработчикам, но тогда грубо нарушается сама идея защиты БД от постороннего вмешательства.

·         Также могут возникнуть проблемы (к счастью, преодолимые) из-за несовпадения кодовых страниц различных БД, что описывается в едином для всех БД файле CONFIG.ORA (в подкаталоге %ORACLE_HOME%\NLM). Например, если для одной БД установлена при create database (см. далее Часть 1, Глава 2: Создание основных физических объектов БД) «виндовая» страница CL8MSWIN1251, а для другой – «досовская» RU8CP866, то в CONFIG.ORA придется только прописать одну.

В целом, два оракловых инстанса (в т.ч. различных разработчиков) на одном сервере располагать можно, но это может время от времени приводить к некоторым неудобствам.

 

Создание основных физических объектов БД

После создания инстанса на сервере с помощью утилиты ORAPWD80 последовательно выполнятся нижеописанные скрипты. Некоторые из этих скриптов можно получить также с помощью утилиты Oracle DB Assistant (в программной группе Oracle for Windows 95) и затем отредактировать, либо за основу взять файл BUILD_DB.SQL в каталоге ORANW804\RDBMS80\ADMIN.

Прилагаемые файлы скриптов относятся к генерации объектов БД в некотором Объединении, причем на сервере с уже существующей БД (поэтому при описании используется название каталога DATABASE, а в приводимых примерах используется имя реального каталога DATAPLIS. После правки SID, имен пользователей, сервиса, БД, путей и добавления собственнх паролей (при коннекте), этими файлами можно пользоваться.

 

ВНИМАНИЕ !

Следует иметь ввиду, что для генерации БД Oracle на Novell Netware необходимо как минимум 96 Мбайт памяти. Для нормальной – от 128. При 64 Мбайт генерация БД невозможна.

 

Перед созданием БД сначала запустите экземпляр Oracle в немонтированное состояние (по-другому нельзя: БД пока состоит из одной памяти). Для этого запустите с клиента START.BAT либо на сервере START.NCF, в которых вызывается скрипт START.SQL следующего содержания:

 

Листинг скрипта на создание экземпляра Oracle

 

REM Запуск инстанции (экземпляра) Oracle (без монтирования)

spool VOL1:ORANW804\DATAPLIS\START

set echo on

connect INTERNAL@NYORK

startup nomount pfile=VOL1:ORANW804\DATAPLIS\INITORC1.ORA

spool off

 

                В результате выполнения скрипта в файле спулинга START.LOG будет находиться информация о структуре Системной Глобальной Области (SGA) запущенного экземпляра Oracle (впоследствии эту информацию можно посмотреть, задав в SVRMGR30 команду SH(OW) SGA, предварительно подключившись как SYSTEM):

 

ORACLE instance started.

Total System Global Area      27451892 bytes

Fixed Size                       41460 bytes

Variable Size                 22634496 bytes

Database Buffers               4505600 bytes

Redo Buffers                    270336 bytes

 

            Данная информация показывает размер  4 областей SGA (в скобках указывается перевод, а далее – термины-синонимы из различной литературы):

·         Fixed Size (Фиксированная область) – (то, что остается)

·         Variable Size (Область переменных) – Управляющая информация Oracle (22104 К)

·         Database Buffers (Буферы данных) – Кэш-буфер данных / Кэш (буферов) данных – формируется как db_block_buffers * db_block_size = 550 * 8192 = 450560 байт (4400 К)

·         Redo Buffers (Журнальные буферы) – Журнальный кэш / Буфер повтора (264 К)

 

Затем для создания БД (минимальный набор файлов) выполните скрипт следующего содержания:

 

Листинг скрипта на создание системного табличного пространства БД Oracle

 

connect INTERNAL@NYORK

spool VOL1:ORANW804\DATAPLIS\CDb

set echo on

create database NYORK

logfile 'VOL1:ORANW804\DATAPLIS\Log1ORC1.ORA' size 8192K,

        'VOL1:ORANW804\DATAPLIS\Log2ORC1.ORA' size 8192K

maxlogfiles 32

maxlogmembers 5

maxloghistory 1

archivelog

datafile ' VOL1:ORANW804\DATAPLIS\DATABASE\Sys1ORC1.ORA' size 96M

autoextend on next 16M

maxsize unlimited

maxdatafiles 254

maxinstances 1

character set CL8MSWIN1251

national character set CL8MSWIN1251;

spool off

 

            Первая команда необходима, чтобы соединиться с БД Oracle как Внутренний пользователь (наделенный максимальными правами). ИмяСервиса – одно из имен сервисов для соединения с БД, указанные в файле TNSNAMES.ORA. Часто указывают один сервис, и называют его тем же именем, что и БД. После данной команды Oracle попросит ввести пароль (выдаст на экран сообщение Password: и перейдет в режим ожидания ввода). Можно эти строки в скриптах изменить, задав пароль явно:

 

connect INTERNAL/<ПарольINTERNAL>@<ИмяСервиса>

 

            Команда spool направляет вывод экранных сообщений в указанный файл. Если путь не указан, а запуск происходит с сервера (через утилиту SVRMGR30), то протокол формируется в подкаталоге %ORACLE_HOME%\RDBMS80, расширение по умолчанию - LOG. Если запуск происходит с клиента, то протокол формируется в подкаталоге BIN, расширение по умолчанию - LST. При этом, если в файле CONFIG.ORA (если скрипт выполняется на сервере) или в Системном Реестре (если скрипт выполняется на клиенте) указана страница RUSSIAN_CIS.CL8MSWIN1251, то на экран будет выводится «абракадабра», зато в файле сообщения будут записываться на русском языке. Рекомендуется оставить этот режим. Можно установить AMERICAN_AMERICA - тогда и на экран и в файл сообщения будут выводиться по-английски.

Команда set echo on указывает, что выводиться будут не только сообщения, но и сами команды. Если этого не сделать, то можно увидеть сообщение об ошибке и не понять, к какой команде это относится.

            При этом будут созданы управляющие файлы, указанные в файле INIT<SID>.ORA, журнальные файлы, указанные в параметре logfile данного скрипта и файл с начальным размером 50 М для табличного пространства SYSTEM (где располагается Словарь данных, хранимые процедуры и др. объекты, принадлежащие пользователю SYS, но многие из которых имеют общие синонимы) в параметре datafile. Если в дальнейшем намечается генерить другую базу данных, можно уменьшить этот параметр. В частности, для Ваших небольших БД можно указать 30 М. Если Вы не хотите включать процесс архивирования, то удалите параметр archivelog (вообще же, его рекомендуется ставить).

 

ВНИМАНИЕ !

Подкаталог ARCHIVE надо регулярно чистить, удаляя самые старые файлы, иначе и сервер может заполниться. То же, впрочем, относится и к файлам трассировки в подкаталоге TRACE (если трассировка включена), но их чистят по-другому. Трассировка записывается в файлы <SID>ALRT.LOG, <SID>ARCH.TRC, <SID>CRPT.TRC, <SID>DBW0.TRC, <SID>LGWR.TRC, <SID>PMON.TRC, <SID>RECO.TRC, <SID>SMON.TRC, <SID>SNP0.TRC, <SID> SNP1.TRC, <SID> SNP2.TRC, <SID> SNP3.TRC и некоторые другие. Объем этих файлов регулярно растет. Поэтому желательно старые записи этих файлов также удалять (по записанным в них датам).

 

Описанный скрипт находится в прилагаемом файле CDb.sql (на примере некоторого Объединения), который (после правки) можно запускать с помощью утилит SVRMGR30 (на сервере и на клиенте), Oracle SQL*Plus или Oracle SQL Worksheet (на клиенте), либо с помощью командных файлов CDb.bat (на клиенте, причем CDb.sql должен лежать там же, где и BAT) или CDB.NCF (на сервере, причем CDb.sql должен лежать в каталоге DATAPLIS).

 

Создание Словаря данных, табличных пространств и сегментов отката

            Далее запустите скрипт следующего содержания:

 

Листинг скрипта на создание Словаря данных, табличных пространств и сегментов отката БД Oracle

 

connect INTERNAL/<ПарольINTERNAL>@<TNS>

set echo on

 

REM *** Генерация объектов Словаря Данных (представления и др.) ***

rem *********** RBS на время выполнения начала скрипта *************

spool %ORACLE_HOME%\DATABASE\CROL<SID>

create rollback segment SYSROL tablespace "SYSTEM"

  storage (initial 1M next 1M minextents 8);

alter rollback segment "SYSROL" online;

spool off

rem Создание представлений (V_$,ALL_,DBA_,USER_ из V$ и X$)

spool %ORACLE_HOME%\DATABASE\CAT<SID>

@%ORACLE_HOME%\RDBMS80\ADMIN\CATALOG.SQL

spool off

rem Запуск скриптов для создания встроенных модулей (DBMS и др.)

spool %ORACLE_HOME%\DATABASE\PROC<SID>

@%ORACLE_HOME%\RDBMS80\ADMIN\CATPROC.SQL

spool off

rem Отключение временного RBS после создания Словаря

alter rollback segment "SYSROL" offline;

 

spool %ORACLE_HOME%\DATABASE\CTS<SID>

REM Создание и изменение табличных пространств и сегментов отката

rem ************ Изменение основного ТП (SYSTEM) *****************

alter tablespace SYSTEM

  default storage

    (initial 128K next 128K minextents 1

    maxextents unlimited pctincrease 0);

 

rem ****** Создание файла ТП для хранения таблиц СИСТЕМЫ *********

create tablespace PLIS

  datafile '%ORACLE_HOME%\DATABASE\PLI1<SID>.ORA'

  size 256M autoextend on next 32M

  default storage

    (initial 128K next 64K minextents 1

    maxextents unlimited pctincrease 0);

 

rem ** Создание файла ТП для доп.польз. (т-цы разработчика и др.) **

create tablespace USR

  datafile '%ORACLE_HOME%\DATABASE\USR1<SID>.ORA'

size 8M autoextend on next 512K

  default storage

    (initial 80K next 40K minextents 1

    maxextents unlimited pctincrease 10);

 

rem create tablespace TOOLS

rem datafile '%ORACLE_HOME%\DATABASE\Tls1<SID>.ORA '

rem size 16M autoextend on next 4M

rem   default storage

rem   (initial 80K next 40K minextents 1

rem   maxextents unlimited pctincrease 10);

 

rem ****** Создание файла ТП для основного сегмента отката ******

create tablespace RBS

  datafile '%ORACLE_HOME%\DATABASE\RBS1<SID>.ORA'

  256M autoextend on next 32M

  default storage

    (initial 1M next 1M minextents 2

    maxextents unlimited pctincrease 0);

 

rem *** Создание файла ТП для временного хранения запросов и др. ***

create tablespace TEMPORARY

  datafile '%ORACLE_HOME%\DATABASE\TMP1<SID>.ORA'

  size 16M autoextend on next 4M

  default storage

    (initial 200K next 200K minextents 1

    maxextents unlimited pctincrease 0) TEMPORARY;

 

rem ********* Создание файла ТП для создания индексов **********

create tablespace INDX

  datafile '%ORACLE_HOME%\DATABASE\IND1<SID>.ORA'

  size 8M autoextend on next 2M

  default storage

    (initial 200K next 200K minextents 1

  maxextents unlimited pctincrease 0);

 

REM ******** Создание и включение рабочих сегментов отката ********

create public rollback segment R01 tablespace "RBS"

  storage (initial 4M next 4M optimal 32M

  minextents 8 maxextents unlimited);

create public rollback segment R02 tablespace "RBS"

storage (initial 2M next 2M optimal 16M

minextents 8 maxextents unlimited);

create public rollback segment R03 tablespace "RBS"

storage (initial 2M next 2M optimal 16M

minextents 8 maxextents unlimited);

create public rollback segment R04 tablespace "RBS"

storage (initial 2M next 2M optimal 16M

minextents 8 maxextents unlimited);

create public rollback segment R05 tablespace "RBS"

storage (initial 2M next 2M optimal 16M

minextents 8 maxextents unlimited);

create public rollback segment R06 tablespace "RBS"

storage (initial 1M next 1M optimal 8M

minextents 8 maxextents unlimited);

create public rollback segment R07 tablespace "RBS"

storage (initial 1M next 1M optimal 8M

minextents 8 maxextents unlimited);

create public rollback segment R08 tablespace "RBS"

storage (initial 1M next 1M optimal 8M

minextents 8 maxextents unlimited);

create public rollback segment R09 tablespace "RBS"

storage (initial 1M next 1M optimal 8M

minextents 8 maxextents unlimited);

create public rollback segment R10 tablespace "RBS"

storage (initial 4M next 4M optimal 32M

minextents 8 maxextents unlimited);

alter rollback segment "R01" online;

alter rollback segment "R02" online;

alter rollback segment "R03" online;

alter rollback segment "R04" online;

alter rollback segment "R05" online;

alter rollback segment "R06" online;

alter rollback segment "R07" online;

alter rollback segment "R08" online;

alter rollback segment "R09" online;

alter rollback segment "R10" online;

 

rem Замена ТП для врем.хранения запросов SYS с SYSTEM на TEMPORARY

alter user SYS temporary tablespace TEMPORARY;

rem Замена ТП для собств.таблиц польз-ля SYSTEM с SYSTEM на USR

alter user SYSTEM default tablespace USR;

 

rem Создание предст-й Словаря для распределенных сервисов (HS$_)

spool %ORACLE_HOME%\DATABASE\CATH<SID>

@%ORACLE_HOME%\RDBMS80\ADMIN\CATHS.SQL

spool off

rem Создание предст-й Словаря для репликаций

spool %ORACLE_HOME%\DATABASE\CATR<SID>

@%ORACLE_HOME%\RDBMS80\ADMIN\CATREP8M.SQL

spool off

 

rem CREATE PRODUCT AND USER PROFILE TABLES

connect SYSTEM/<ПарольSYATEM>@<TNS>

rem Для Novell Netware

@VOL1:\ORANW804\RDBMS80\ADMIN\PUPBLD.SQL

rem Для Windows NT

--@C:\ORANT\DBS\pupbld.sql

rem Для Linux

--@/opt/app/oracle/product/8.0.5/sqlplus/admin/pupbld.sql

spool off

 

            При этом будут созданы файлы для табличных пространств, а также сегменты отката.

Описанный скрипт находится в прилагаемом файле CTS.SQL (на примере некоторого Объединения), который после правки можно запускать с помощью утилит SVRMGR30 (на сервере и на клиенте), Oracle SQL*Plus или Oracle SQL Worksheet (на клиенте), либо с помощью командных файлов CTS.BAT (на клиенте) или CTS.NCF (на сервере).

Далее необходимо прогнать скрипт CATREP8M.SQL из каталога %RDBMS80%\ADMIN для создания объектов в БД, необходимых для репликации. Для этого можно использовать командные файлы CREP.NCF или CREP.BAT, которые запускают сначала CREP.SQL. Предварительно, в CREP.SQL поправьте спулинг.

 

Создание основного и дополнительного пользователей

            Основной пользователь Вашей системы - это тот, в схеме которого будут находиться рабочие объекты БД (таблицы, снимки, первичные индексы, последовательности, триггеры, функции и др.). В этой схеме основной пользователь может создавать, модифицировать и удалять эти объекты. Можно также создать дополнительного пользователя (например, с учебной целью или для создания собственных приложений), который также сможет выполнять эти действия, но со своими объектами, которые будут принадлежать его схеме, а физически хранится не в табличном пространстве PLIS, а в табличном пространстве USER. Далее предстоит также создать пользователей для операторов СИСТЕМЫ в Объединении и Предприятиях, но предварительно нужно создать для них роли PLIREAD и PLIWRITE для чтения и модификации таблиц.

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

 

Листинг скрипта на создание владельца и дополнительного пользователя СИСТЕМЫ в БД Oracle

 

connect INTERNAL@<ИмяСервиса>

 

spool %ORACLE_HOME%\DATABASE\CUSER<SID>

set echo on

 

REM Создание пользователя, его рабочего и временного ТП и квот

create user PLINYORK identified by PLIN

  default tablespace PLIS

  temporary tablespace TEMPORARY

  quota unlimited on PLIS

  quota unlimited on TEMPORARY;

 

REM Присвоение ролей

  grant connect, resource to PLINYORK;

 

REM Присвоение системных привилегий

  grant create any sequence, create snapshot to PLINYORK;

  revoke unlimited tablespace from PLINYORK;

 

REM Создание доп.пользователя, его рабочего табл. простр-ва и квот

create user IVANOV identified by IVAN

  default tablespace USR

  quota 2M on USR;

 

REM Присвоение ролей (нужно также PLIWRITE, PLIREAD)

grant connect, resource to IVANOV;

revoke unlimited tablespace from IVANOV;

 

spool off

 

При этом будут созданы пользователь PLINYORK с паролем PLIN и пользователь IVANOV с паролем IVAN. При этом роли CONNECT и RESOURCE содержат следующие привилегии:

 

CONNECT              RESOURCE

     alter session

     create cluster       create cluster

     create database link

                           create procedure

     create sequence      create sequence

     create session

     create synonym

     create table         create table

                           create trigger

                           create type

     create view

 

Описанный скрипт находится в прилагаемом файле CUSER.SQL, который можно запускать с помощью утилит SVRMGR30 (на сервере и на клиенте), Oracle SQL*Plus или Oracle SQL Worksheet (на клиенте), либо с помощью командных файлов CUSER.BAT (на клиенте) или CUSER.NCF (на сервере).

 

Смена паролей

            При генерации базы данных Oracle автоматически создаются пользователи  SYS и SYSTEM с паролями по умолчанию CHANGE_ON_INSTALL и MANAGER, соответственно. Рекомендуется сразу же их заменить. Замену может производить только пользователь INTERNAL, задав (в SVRMGR30, Oracle SQL*Plus или Oracle SQL Worksheet)  команду:

 

alter user ИМЯ_ПОЛЬЗОВАТЕЛЯ identified by НОВЫЙ_ПАРОЛЬ

 

У самого пользователя INTERNAL также имеется пароль по умолчанию ORACLE. Поэтому его также нужно затем сменить утилитой ORAPWD80.

Ниже приводится командный файл CHPSW.BAT (имеется также аналогичный файл CHPSW.NCF) для смены паролей пользователей SYS, SYSTEM и INTERNAL:

 

Листинг командного файла для смены паролей пользователей SYS, SYSTEM и INTERNAL БД Oracle

 

REM Замена паролей для SYS и SYSTEM

SVRMGR30 @CHPSW.SQL

REM Замена пароля для INTERNAL

DEL D:\ORANT\DATABASE\PWDORCT.OLD

ATTRIB -H D:\ORANT\DATABASE\PWDORCT.ORA

REN D:\ORANT\DATABASE\PWDORCT.ORA PWDORCT.OLD

ORAPWD80 FILE=D:\ORANT\DATABASE\PWDORCT.ORA PASSWORD=ILOND ENTRIES=4

ATTRIB +H D:\ORANT\DATABASE\PWDORCT.ORA

PAUSE

 

            В описанном командном файле вызывается скрипт CHPSW.SQL, который предназначен для смены паролей у пользователей SYS и SYSTEM и имеет следующее содержание:

 

Листинг скрипта для смены паролей пользователей SYS и SYSTEM БД Oracle

 

spool %ORACLE_HOME%\DATABASE\CHPSW

set echo on

connect INTERNAL/ILOND@LONDON

alter user SYS identified by SLOND;

alter user SYSTEM identified by MLOND;

spool off

 

 

Создание связей между базами данных

            Связь между БД Предприятий и Объединения необходима для создания в Предприятии моментальных снимков таблиц Объединения в случае выбора последними 3-уровневой модели.

            Создание связей между двумя БД требует знания ряда тонкостей. В частности, после параметра using надо указывать именно имя сервиса для другой БД (описанное в TNSNAMES.ORA и называемое также строкой соединения), а после параметра database link – именно имя другой БД (если в файле INIT<SID>.ORA указано GLOBAL_NAMES = TRUE). Впрочем, часто имя сервиса делают идентичным имени БД.

            Еще одно предостережение: после создания связи не следует менять пароль пользователя (указываемый после параметра identified by), для которого (указано после параметра connect to) эта связь предназначена, потому что возникнет проблема, связанную с пересозданием связи и переобновлением снимков. При необходимости смены пароля нужно обратиться к разработчикам Вашей системы.

            Вот пример создания связи Объединение - Компания и связи Компания - Объединение:

 

Листинг скрипта на создание dblink между БД Oracle

 

spool %ORACLE_HOME%\CDBL

set echo on

 

connect PLILOND/PLIL@LONDON;

create database link ORACLE

  connect to PLIMADRID

  identified by STOLICA

  using 'ORACLE';

 

connect PLIMADRID/STOLICA@ORACLE

create database link LONDON

  connect to PLILOND

  identified by PLIL

  using 'GB_PL';

 

spool off

 

Описанный скрипт находится в прилагаемом файле CDBL.SQL, который можно запускать с помощью утилит SVRMGR30 (на сервере и на клиенте), Oracle SQL*Plus или Oracle SQL Worksheet (на клиенте), либо с помощью командных файлов CDBL.BAT (на клиенте) или CDBL.NCF (на сервере). Перед этим его необходимо откорректировать (заменить строку конекта к своей БД, имя связи, схему, пароль, строку соединения (TNS) с чужой БД, а также закомментировать создание второй связи).

 

Генерация и проверка тестовых снимков

            Если в архитектуре Вашей системы будет использоваться распределенная БД, основанная на моментальных снимках, то перед генерацией реальных объектов рекомендуется прогнать тест по созданию и проверке обновления таких снимков. Следует заметить, что создание снимков («снапшотов») требует большой аккуратности. Один неправильно созданный снимок от небольшой таблицы может занять 98% ресурсов сервера, если его обновление происходит неудачно. Также следует тщательно проверить время обновления снимков. Кроме того, при создании снимков в БД1 необходимо предварительно создавать журналы снимков («снапшот-логи») в БД2.

            Создание тестовых таблиц и снимков демонстрируется в следующем примере (файл SNAPTST1.SQL):

 

Листинг скрипта на создание тестовых таблиц и снимков

 

REM Создание снимков-тестов (с обновлением в 1 минуту)

spool %ORACLE_HOME%\DATABASE\SNAPTST1

set echo on

 

REM ***** 1. Создание таблицы в Компании и снимка в Объединении *******

connect PLIMADRID/COMPANY@ORACLE;

drop table TESTSNAP cascade constraints;

create table TESTSNAP

  (ID number(10) constraint PK_ID primary key, NAME varchar2(60));

insert into TESTSNAP (ID, NAME) values (1,'REC.1 IN MADRID');

select to_char(SYSDATE,’DD.MM.YY HH24:MI:SS') MAD_INS_TIM from DUAL;

drop snapshot log on TESTSNAP;

create snapshot log on TESTSNAP;

 

connect PLILOND/PLIL@LONDON;

drop snapshot TESTSNAP01;

create snapshot TESTSNAP01

  refresh fast next SYSDATE+1/1440 start with SYSDATE as

  select * from PLIMADRID.TESTSNAP@ORACLE;

REM ORA-12014: TABLE 'TESTSNAP' DOES NOT CONTAIN A PRIMARY KEY CONSTRAINT

rem (ошибка возникает,если не указана схема снимка - запомните это!)

select to_char(SYSDATE,'DD.MM.YY HH24:MI:SS') LON_SNP_TIM from dual;

 

connect PLIMADRID/COMPANY@ORACLE;

insert into TESTSNAP (ID, NAME) values (2, 'REC.2 IN MADRID');

select to_char(SYSDATE,'DD.MM.YY HH24:MI:SS') MAD_INS_TIM from dual;

 

REM ***** 2. Создание таблицы в Объединении и снимка в Компании ******

connect PLILOND/PLIL@LONDON;

drop table TESTSNAP cascade constraints;

create table TESTSNAP (ID number(10), NAME varchar2(60));

alter table TESTSNAP add (primary key (ID));

insert into TESTSNAP (ID, NAME) values (1, 'REC.1 IN LON');

select to_char(SYSDATE,'DD.MM.YY HH24:MI:SS') LON_INS_TIM from dual;

drop snapshot log on TESTSNAP;

create snapshot log on TESTSNAP;

 

connect PLIMADRID/COMPANY@ORACLE;

drop snapshot TESTSNAP01;

create snapshot TESTSNAP01

  refresh fast next SYSDATE+1/1440 start with SYSDATE as

  select * from PLILOND.TESTSNAP@LONDON;

select to_char(SYSDATE,'DD.MM.YY HH24:MI:SS') MAD_SNP_TIM from dual;

 

connect PLILOND/PLIL@LONDON;

insert into TESTSNAP (ID, NAME) values (2, 'REC.2 IN LON');

select to_char(SYSDATE,'DD.MM.YY HH24:MI:SS') LON_INS_TIM from dual;

spool off

 

            В следующем примере проверяется обновление записей в снимках (файл SNAPTST2.SQL):

 

Листинг скрипта на проверку обновления записей в снимках

 

REM Проверка работы снимков-тестов

spool %ORACLE_HOME%\DATABASE\SNAPTST2

set echo on

connect PLILOND/PLIL@LONDON;

select * from TESTSNAP01;

CONNECT PLIMADRID/COMPANY@ORACLE;

select * from TESTSNAP01;

spool off

 

            Затем проводится удаление тестовых таблицы и снимка (файл SNAPTST3.SQL):

 

Листинг скрипта на удаление тестовых таблиц и снимков

 

REM Удаление снимков-тестов

spool %ORACLE_HOME%\DATABASE\SNAPTST3

set echo on

connect PLILOND/PLIL@LONDON;

drop snapshot TESTSNAP01;

connect PLIMADRID/COMPANY@ORACLE;

drop snapshot log on TESTSNAP;

drop table TESTSNAP;

--connect PLIMADRID/COMPANY@ORACLE;

drop snapshot TESTSNAP01;

connect PLILOND/PLIL@LONDON;

drop snapshot log on TESTSNAP;

drop table TESTSNAP;

spool off

 

 

            Данные скрипты следует выполнять последовательно. Перед запуском второго скрипта требуется подождать, по-крайней мере, 1 мин. Можно запустить также командный файл SNAPTEST.BAT (с клиента) либо SNAPTEST.NCF (с сервера) простейшего содержания (замените только пути):

 

Листинг общего скрипта на создание тестовых таблиц и снимков, проверки обновления снимков и их удаления

 

@ECHO OFF

REM Создание снимков-тестов, проверка их работы, удаление снимков-тестов

REM 1. Создание снимков-тестов

D:\ORAWIN95\BIN\SVRMGR30 @SNAPTST1.SQL

PAUSE Снимки созданы. Подождите минуту и нажмите любую клавишу…

REM 2. Проверка работы снимков-тестов

D:\ORAWIN95\BIN\SVRMGR30 @SNAPTST2.SQL

PAUSE Снимки проверены. Нажмите любую клавишу…

REM 3. Удаление снимков-тестов

D:\ORAWIN95\BIN\SVRMGR30 @SNAPTST3.SQL

PAUSE Снимки удалены Нажмите любую клавишу…

 

            Имеются также отдельные командные файлы BAT и NCF: SNAPTST1, SNAPTST2 и SNAPTST3. Предпочтительней запускать их, т.к. ошибки могут возникнуть уже на первой стадии и остальным скриптам выполняться нет смысла – сэкономите на этом время.

 

Создание БД с помощью утилиты Oradim80.exeMS Windows NT)

            С помощью утилиты ORADIM80.EXE в графическом режиме в ОС MS Windows NT можно быстро создать необходимые сервисы MS Windows NT (для инстанса Oracle и его автозапуска при загрузке), сам инстанс Oracle, все основные файлы БД Oracle: файл паролей (Pwd<SID>.ora), файл для автозапуска (Start<SID>.cmd), один управляющий файл (Ctl1<SID>.ora), два журнальных файла (Log1<SID>.ora и Log1<SID>.ora), файл для табличного пространства SYSTEM (SYS<SID>.ORA), а также Словарь Данных (запуск постпроцедур CATALOG.SQL и CATPROC.SQL).

            Для создания сервисов MS Windows NT и БД Oracle выполните следующее:

·         Запустите ORADIM80 (рис. 2.2.);

·         Нажмите кн. New... (рис. 2.3.);

·         В окне New Instance введите SID, пароль пользователя INTERNAL (с подтверждением), укажите автоматический режим запуска, введите имя конфигурационного файла с путем (предварительно он должен быть создан) и нажмите кн. OK;

·         Нажмите кн. Advanced... и в новом окне введите имя БД, имя с путем и размер журнального файла, имя с путем и размер файла для табличного пространства SYSTEM, исправьте кодовую страницу на CL8MSWIN1251 (по умолчанию стоит US7ASCII) (рис. 2.4.);

·         Нажмите кн. OK в окне Advanced Parameters – Database Creation, затем - в окне New Instance;

·         В появившемся окне Create Instance Information Dialog нажмите кн. OK;

·         После создания файла паролей, файла автозапуска, файла для табличного пространства SYSTEM, управляющего и двух журнальных файлов – опять появляется окно Create Instance Information Dialog с предупреждением, что будут запущены скрипты CATALOG.SQL и  CATPROC.SQL. Нажмите кн. OK;

·         Закройте утилиту (кн. Close).

Теперь только остается создать файлы остальных табличных пространств, запустить постпроцедуры CATHS.SQL, PUPBLD.SQL и CATREP8M.SQL (описание см.  в: Часть 1, Глава 2: Создание Словаря данных, табличных пространств и сегментов отката), а затем выполнить другие действия (см.  в: Часть 1, Глава 2: Создание основного и дополнительного пользователей и далее).

 

 

Рис. 2.2. Графическая утилита ORADIM80. Окно сервисов и экземпляров Oracle.

 

 

 

Рис. 2.3. Графическая утилита ORADIM80. Окно создания нового экземпляра Oracle.

 

 

 

Рис. 2.4. Графическая утилита ORADIM80. Окно дополнительных установок.

 


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

Страницы со статьей: Репликация Oracle | Все статьи
Я.Метрика: просмотры, визиты и хиты сегодня
На правах рекламы (см. условия):