|
|
|||||||||||||||||||||||||||||
|
STANDBY STEP-BY-STEPИсточник: oracloid
Данное руководство создано с целью объяснить «на пальцах» всю процедуру организации 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 нужно удалить. Теперь перейдем к созданию копии основной БД. Я это делаю с помощью «холодного» резервирования. «Холодное» резервирование:
Контрольные файлы для 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-БД в режим архивирования журнальных файлов:
log_archive_dest_1="location= C:\oracle\oradata\TEST\ARCHIVE" log_archive_dest_state_1=enable log_archive_format="test_%s_%t_%r.arc"
startup mount pfile= C:\oracle\product\database\initPRIMARY.ora
Пришло время «оживить» 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 теоретически можно, но сложно ;) в данной статье это не рассматривается. Автор статьи: NITRO Ссылки по теме
|
|