STANDBY STEP-BY-STEP
Форум о СУБД Oracle, базы данных, запросы SQL. Обучение, курсы Oracle для чайников, начинающих и профессионалов
Конференция Oracle
; Логин:
  Пароль:
Обычный
Безопасный
Запомнить пользователя



Зарегистрироваться
Забыли пароль?
 
 
  




Объявление форума

Вы находитесь на сайте, на котором обсуждаются все вопросы, имеющие прямое или косвенное отношение к Системе управления базами данных Oracle. Мы постарались собрать в одном месте все необходимое для изучения данной темы: статьи, документацию по разным напрвлениям и, конечно же, лучший инструмент IT-специалиста - форум. Мы постараемся решить любой Ваш вопрос и надеемся, что Вы станете постоянным участником нашего сообщества.

Предлагаем Вам посетить отдельный раздел для новичков - клуб новичков - раздел, в котором смогут обмениваться опытом начинающие ораклоиды как насчет Oracle, так и насчет процесса обучения: что полезно почитать, где можно достать литературу, на какие курсы записаться. Удачного общения.



Форум о СУБД Oracle, базы данных, запросы SQL. Обучение, курсы Oracle для чайников, начинающих и профессионалов »   Статьи »   Статьи, относящиеся к Oracle »   STANDBY STEP-BY-STEPRSS

STANDBY STEP-BY-STEP

Автор статьи: NITRO
Первоисточник: NITRO


STANDBY STEP-BY-STEP

22.08.2007 – исправлено некорректное объяснение при создании службы имен.

19.10.2007 – исправлена опечатка в команде создания контрольного файла для standby. Статья дополнена инструкциями по переводу STANDBY в режимы READ ONLY и PRIMARY.

Данное руководство создано с целью объяснить «на пальцах» всю процедуру организации STANDBY-базы под ОС Windows для версии СУБД Oracle 10g без ссылки на внешние источники.

Цель: Организовать передачу заархивированных файлов изменений, с «боевой» БД на резервную, посредством локальной сети, с целью последующего «наката» резервной БД до «боевой».

Исходные данные:

1. Два ПК, находящихся под управлением ОС Windows, между которыми установлено соединение по локальной сети.

2. Дистрибутив СУБД Oracle 10g.

3. Свободное время – не менее 3-ех часов.

4. Ангельское терпение и крепкий кофе ;)

Несмотря на то, что основной темой руководства является STANDBY, я затрону установку СУБД Oracle, а так же конфигурирование файловlistener.ora и tnsnames.ora.

Часть I : Установка и первоначальная настройка Oracle.

Запустите инсталяцию Oracle 10g на ПК, который вы выбрали в качестве хоста для «боевой» (PRIMARY) базы.

Из двух предложенных вариантов Basic и Advanced – выбираем Advanced. На следующем экране выбираем тип СУБД – «Custom», чтобы отсечь ненужные пока модули. Затем предлагается выбрать имя и путь к данной версии СУБД. Я выбрал

Name: OraDb10g

и

Path: C:\oracle\product – забегая вперед, скажу, что на ПК со STANDBY будет такой же путь – для удобства.

Теперь выбираем какие компоненты установить: оставим Oracle Database 10g, Enterprise Manager Console, Net Listener и Call Interface.

В следующем окошке кликаем NEXT, а когда появится предложение о создании БД (Create Database) – выберем вариант «Install database Software only» – БД мы создадим позже. Еще раз просмотрим, что мы выбрали для установки и нажмем «Install». Собственно теперь можно пойти и заварить себе кофе, если вы этого еще не сделали.

Итак, система управления базами данных установлена, осталось только установить объект этого самого управления.

Находим в меню «Пуск» папку «Oracle – OraDb10g» (или как вы там её назвали) и запускаем утилиту «Database Configuration Assistant». Выбираем опцию «Create Database», затем, в окне выбора типа БД, опять же выбираем «Custom». После этого появится предложение указать глобальное имя БД («Global DBName») и системный идентификатор для экземпляра («SID»). В качестве имени БД я выбрал «TEST», а в качестве SID-а «PRIMARY»- чтобы было понятнее что где. В следующем окне все оставляем без изменений, так как пока нам не нужны ни уведомления на e-mail ни осуществление ежедневного бэкапа. После этого наступает еще один отвественный момент – определение пароля. Вы можете вписать свой пароль для каждой служебного пользователя отдельно, либо задать одинаковый для всех(как я и сделал, установив его равным «123») . В следующем окне(это уже 6-ой шаг установки БД) опять ничего не меняем, впрочем, как и на 7-ом шаге ))). На 8-ом шаге предлагается определить место под log-файлы, на случай если вы забудете потом прописать для них его явно. Также предлагается сразу включить режим архивирования логов. Я отказался от обоих вариантов, сняв галочки. Теперь кликаем на «NEXT» до 12 шага, где наконец жмем на «FINISH». Вот теперь можно не только сходить выпить кофе, но даже пообедать ;)

После установки БД, необходимо настроить сервисы Listener и Local Net Service Name, чтобы можно было подключаться к инстанции. Для этого запустите Net Configuration Assistant из того же раздела что и Database Configuration Assistant. Сначала создадим и настроим Listener: зададим имя(я оставил стандартное) и протокол – как правило TCP/IP. Порт тоже оставим стандартным.

Затем настроим сервис имен: зададим имя сервиса – он должен быть равным глобальному имени БД – TEST, протокол так же TCP, имя хоста – я указал IP адрес ПК 192.168.0.1, порт стандартный, пока сервис не тестируем.

После конфигурирования сервисов, в папке D:\oracle\product\network\ADMIN\ должны появиться файлы listener.ora и tnsnames.ora.

Листинг listener.ora:

SID_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

(SID_NAME=PLSExtProc)

(ORACLE_HOME=С:\oracle\product)

(PROGRAM = extproc)

)

)

LISTENER=

(DESCRIPTION_LIST=

(DESCRIPTION=

(ADDRESS = (PROTOCOL=TCP)(HOST=ИМЯ_КОМПА)(PORT=1521))

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

)

)

Листинг tnsnames.ora:

TEST =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = TEST)

)

)

EXTPROC_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

)

(CONNECT_DATA =

(SID = PLSExtProc)

(PRESENTATION = RO)

)

)

Подправим listener.ora:

SID_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

(SID_NAME=PLSExtProc)

(ORACLE_HOME=С:\oracle\product)

(PROGRAM = extproc)

)

(SID_DESC=

(GLOBAL_DBNAME=TEST

(ORACLE_HOME=С:\oracle\product)

(SID_NAME=PRIMARY)

)

)

LISTENER=

(DESCRIPTION_LIST=

(DESCRIPTION=

(ADDRESS = (PROTOCOL=TCP)(HOST=IP PRIMARY-ПК)(PORT=1521))

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

)

)

Имя компьютера заменил на IP просто для ясности – можно было оставить без изменений. Теперь необходимо перезапустить сервис листенера. Это можно сделать в Панель инструментов\Администрирование\Сервисы (Control Panel\Administrative Tools\ Services).

Проверить работу сервиса имен можно выдав в командную строку: tnsping IP компа – если пришел отклик в милисекундах, значит связь есть(если нет – скорее всего настройки фаервола не позволяют это сделать, лучший вариант – отключить фаервол на тестовых машинах)

Попробуем подключиться к инстанции и выдадим в командную строку: sqlplus sys/123@test as sysdba. Должно произойти подключение к инстанции.

Итак, первоначальная настройка «боевой» базы завершена. Теперь установим СУБД на второй STANDBY-ПК(только СУБД – без БД) следуя тому же плану что и при установке на PRIMARY(пути должны совпадать).

Часть II: Собственно организация STANDBY.

Для того чтобы менять параметры инстанции, я буду использовать pfile init.ora, так как его можно менять из текстового редактора, в отличие от spfile-а. Готовый pfile init.ora возьмем из папки C:\oracle\admin\PRIMARY\pfile\. Удалим в расширении цифры и переименуем, получим iniPRIMARY.ora, который скопируем в C:\oracle\product\database\. А находящийся там spfilePRIMARY.ora нужно удалить.

Теперь перейдем к созданию копии основной БД. Я это делаю с помощью «холодного» резервирования.

«Холодное» резервирование:

  1. 1. Остановить Oracle командой в sqlplus: shutdown transactional или shutdown immediate.
  2. 2. Скопировать с PRIMARY на STANDBY папки admin и oradata, которые находятся в c:\oracle (учитывая, что oracle_home у меня С:\oracle\product)

Контрольные файлы для STANDBY нужно создавать отдельно. Для этого запустим инстанцию и выдадим sqlplus: alter database create standby controlfile as ‘c:\control01.ctl’ – в корневом каталоге диска C появится контрольный файл. Так как, при создании БД, Oracle автоматически создает 3 контрольных файла, мы тоже создадим файлы control02.ctl и control03.ctl путем простого копирования и переименования файла control01.ctl, который мы только что получили(создать 2-ой и 3-ий файл тем же способом что и 1-ый можно, но тогда не будут совпадать их версии и инстанция не стартует). Полученные контрольные файлы, необходимо скопировать на STANDBY-ПК в папку c:\oracle\oradata\TEST с заменой уже существующих.

Теперь скопируем initPRIMARY.ora на STANDBY-ПК (c:\oracle\product\database) и переименуем в initSTANDBY.ora

Следующим шагом будет перевод PRIMARY-БД в режим архивирования журнальных файлов:

  1. 1. Остановить Oracle командой в sqlplus: shutdown transactional или shutdown immediate.
  2. 2. Заведем папку для архивных журнальных файлов C:\oracle\oradata\TEST\ARCHIVE
  3. 3. Добавить в файл initPRIMARY.ora следующие строки:

log_archive_dest_1=”location= C:\oracle\oradata\TEST\ARCHIVE”

log_archive_dest_state_1=enable

log_archive_format=”test_%s_%t_%r.arc”

  1. 4. Выдать в sqlplus:

startup mount pfile= C:\oracle\product\database\initPRIMARY.ora

  1. 5. SQL> alter database archivelog;
  2. 6. SQL> alter database open;
  3. 7. SQL> archive log start;
  4. 8. SQL> archive log list; - убедимся что все работает.

Пришло время «оживить» STANDBY-базу. Необходимо сначала создать файл паролей. Для этого выдадим в командную строку (Для пользователей ОС Windows Vista, сеанс должен быть запущен в режиме “as administrator”, иначе всплывет сообщение “Access denied”):

orapwd file=PWDSTANDBY.ora password=123 – полученный файл вы найдете в папке которая указана в командной строке (например у меня C:\Documents and Settings\Alexey). Скопируйте его в c:\oracle\product\database.

Теперь, нужно создать службу ОС для STANDBY-инстанции. Выдадим в командную строку:

oradim -new –sid STANDBY -startmode m -pfile c:\oracle\product\database\initSTANDBY.ora

Создадим сервис листенера так же как мы это делали для PRIMARY, подправим listener.ora и перезапустим cлужбу.

Листинг listener.ora для STANDBY:

SID_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

(SID_NAME=PLSExtProc)

(ORACLE_HOME=С:\oracle\product)

(PROGRAM = extproc)

)

(SID_DESC=

(GLOBAL_DBNAME=TEST

(ORACLE_HOME=С:\oracle\product)

(SID_NAME=STANDBY)

)

)

LISTENER=

(DESCRIPTION_LIST=

(DESCRIPTION=

(ADDRESS = (PROTOCOL=TCP)(HOST=IP STANDBY-ПК)(PORT=1521))

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

)

)

Так же заведем службу имен, для связи с PRIMARY-инстанцией, подправим tnsnames.ora.

Листинг tnsnames.ora:

STANDBY =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = TEST)

)

)

TEST =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = TEST)

)

)

EXTPROC_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

)

(CONNECT_DATA =

(SID = PLSExtProc)

(PRESENTATION = RO)

)

)

Изменим tnsnames.ora на PRIMARY-ПК, чтобы мы могли подключаться к STANDBY-инстанции. Он будет таким же как и для STANDBY.

Теперь можете проверить настройки, подключившись к каждой инстанции с каждого ПК. Должно произойти корректное подключение к инстанциям, без ошибок. При подключении к инстанции STANDBY вам выдаст предупреждение, что:«connected to idle instance» – это нормально.

Создаем папку, в которую будут складываться полученный архивные журнальные файлы: C:\oracle\oradata\TEST\STANDBY_ARCH

Теперь открываем initSTANDBY.ora и дописываем в него:

log_archive_format=”test_%s_%t_%r.arc”

standby_archive_dest= C:\oracle\oradata\TEST\STANDBY_ARCH

fal_server=TEST - имя ПК с PRIMARY

Цепляемся к инстанции standby: sqlplus sys/123@standby as sysdba.

SQL> startup nomount pfile= C:\oracle\product\database\initSTANDBY.ora

SQL> alter database mount standby database;

SQL> recover managed standby database – на этом месте сеанс зависает – это нормально, теперь база находится в состоянии STANDBY и готова к приему архивов.

Осталось только прописать в initPRIMARY.ora куда пересылать архивы, для этого добавим в него:

log_archive_dest_2=’SERVICE=STANDBY reopen=60’

log_archive_dest_state_2=enable

fal_client=STANDBY - имя ПК со STANDBY

Теперь остановим PRIMARY-БД и снова запустим – для применения изменений.

Внимание: не забудьте снова запустить создание архивных логов, выдав в sqlplus: archive log start; так как оно отключилось при перезапуске инстанции.

Чтобы убедиться, что архивы пересылаются подключимся к primary:

sqlplus sys/123@test as sysdba

и выдадим в SQL> alter system switch logfile;

Произойдет принудительная смена журнального файла, на PRIMARY-ПК в папке C:\oracle\oradata\TEST\ARCHIVE появится новый (скорее всего первый) архив и, практически сразу, он же появится в папке C:\oracle\oradata\TEST\STANDBY_ARCH на STANDBY-ПК.

Если файлы пересылаются – поздравляю – вы добились своего и организовали STANDBY!

Теперь можете проверить применяются ли полученные архивлоги к базе, выдав: SQL> select name, applied from v$archived_log;

Вы получите имя и статус архивных логов, значение applied=yes означает, что лог был успешно применен к БД.

P.S.

STANDBY будет работать и без параметров fal_client/server, но если вдруг, по каким-либо причинам, она «упадет» на некоторое время и пропустит несколько архивов, то при получении следующего архива, не удовлетворяющего последовательности, STANDBY будет остановлен. Чтобы этого избежать и используются эти параметры, которые позволяют проверять целостность последовательности и, в случае нарушения, автоматически досылают нехватающие архивы.

Перевод STANDBY в READ ONLY:

Соединяемся со STANDBY и выдаем:

SQL> alter database recover managed standby database cancel;

Media recovery complete.

Теперь логи все еще поступают на STANDBY, но она уже не «подкатывается».

SQL> alter database open read only;

Database altered.

Теперь с базой можно работать, но только в режиме чтения.

Вернуть базу в режим «подката» логов можно следуя тому же алгоритму, что был описан ранее.

Перевод STANDBY в PRIMARY:

Соединяемся со STANDBY и выдаем:

SQL> alter database recover managed standby database cancel;

Media recovery complete.

SQL> alter database activate standby database;

Database altered.

SQL> shutdown immediate

ORA-01507: database not mounted

Oracle instance shut down.

SQL> startup

Oracle instance started.

Database mounted.

Database opened.

Вернуть PRIMARY обратно в STANDBY теоретически можно, но сложно ;) в данной статье это не рассматривается.





Текущий рейтинг темы: 3.0000





Время выполнения скрипта: 0.0950. Количество выполненных запросов: 13, время выполнения запросов 0.0394