|
Вся книга: Практика работы с 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.EXE (в MS Windows NT)
В концептуальная модели распределенной базы данных за основу можно принять базы данных Объединений (филиалов среднего уровня), либо Компании (высший уровень). Администратор (и пользователи, если это разрешает администратор) имеет право удалять, изменять и добавлять записи в любые кодификаторы собственной БД. Синхронизацию кодификаторов и других таблиц можно выполнять на уровне Компании средствами клиентской части СИСТЕМЫ.
Предприятия можно перевести на работу по двум вариантам:
· По стандартному механизму удаленного доступа к БД Oracle Объединения
· По механизму отложенного экспорта всех изменений из БД Предприятий в БД Объединения
При низкой скорости работы для ряда Предприятий возможна поставка оптимизированной клиентской части СИСТЕМЫ. Кроме того, для первого варианта необходимо распределить приоритеты работы в сети, т.к. удаленный доступ при наличии процесса пересылки почты становится практически невозможным из-за крайне низкой скорости всех операций с удаленной БД (можно также разграничить по времени эти процессы).
Корректировка параметров в конфигурационном файле 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% (чтобы не вспоминать том и каталог). Здесь не будет нежелательных эффектов.
Для создания БД используется существующий 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.ORA (в Netware) или системном реестре (в NT), например: ORACLE_SID = BONN. Иначе после загрузки SVRMGR30 будет появляться сообщение:
ORA-12154: TNS:Could not resolve service name
После создания 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.
После создания 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.EXE (в NT), LSNCTL80.NLM (в Novell Netware) или lsnrctl (в Linux). Для этого используется команда 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.
При создании нескольких 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.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. Окно дополнительных установок.