Что такое oracle restart

Обновлено: 05.07.2024

Oracle рекомендует следующий порядок действий для запуска БД: запуск Database Control, запуск listener-а, запуск БД. Запуск БД также является составным процессом. При запуске более сложного окружения, такого как cluster system или любого другого управляемого Enterprise Manager Grid Control могут быть дополнительные этапы, однако для Single Instance архитектуры этой последовательности вполне достаточно.

Запуск и подключение к Database Control

Для запуска Database Control необходимо запустить программу emctl, расположенную в папке $ORACLE_HOME/bin. Ниже перечислены команды для запуска, остановки и проверки состояния Database Control

emctl start dbconsole

emctl stop dbconsole

ecmtl status dbconsole

Для успешного выполнения этих команд должны быть установлены следующие системные переменные: PATH, ORACLE_HOME и ORACLE_SID. PATH используется операционной системой для поиска пути к программе emctl. ORACLE_HOME и ORACLE_SID используются для поиска командой emctl файлов конфигурации. Эти файлы расположены в трёх местах: папка ORACLE_HOME/sysman/config содержит общие настройки для всех экземпляров Database Control работающих с текущей домашней директорией Oracle. ORACLE_HOME/hostname_sid/sysman/config и ORACLE_HOME/oc4j/j2ee/ OC4J_DBConsole_ hostname_sid/config содержат дополнительные расширенные настройки для каждой БД(hostname – имя компьютера, sid – значение переменной ORACLE_SID).

На рисунке 3-3 показан результат выполнения команды запуска Database Control

16

Первая попытка запуска была неудачной так как не была установлена переменная ORACLE_SID. Без корректного значения этой переменной emctl не может найти необходимые файлы конфигурации (значение используется в названии папок). Команда проверки состояния ни что иное как запрос по адресу URL; доступность этого URL так же можно проверить в браузере

где hostname – это сетевое имя компьютера на котором запущен Database Control и port – это порт ответственный за входящие подключения. Если у вашего сервера несколько сетевых имён или несколько сетевых интерфейсов – можно использовть любой. Для определения порта можно использовать команду emctl либо посмотреть конфигурационный файл ORACLE_HOME/install/portlist.ini где указаны все порты настроенные OUI и DBCA. При незапущенном listener-е при подключении к Database Control вы увидите окно изображенное на рисунке 3-4.

Запуск listener-а БД

Listener – это процесс который следит за запросами к порту для подключения к базе данных. Запросы к БД (и весь остальной трафик после создания сессии) использует Oracle Net, закрытый протокол Oracle. Oracle Net – это прокотор который работает над любым низлежащим сетевым протоколом, обычно над TCP/IP. Управление listener-ом более детально расммотрим в главе 4, сейчас же рассмотрим как запустить listener. Это можно сделать двумя (в windows тремя) способами: используя программу lsnrctl, с помощью Database Control, запустить windows сервис.

Программа lsnrctl расположена в каталоге ORACLE_HOME/bin. Параметрами могут быть

lsnrctl start [listener name]

lsnrctl status [listener name]

17

Обратите внимание на первую строчку – там указаны сетевое имя и порт listener-а, а также на пятую снизу строку, которая обозначает что listener будет принимать подключения для сервиса ocp11g который создан для экземпляра ocp11g. Это критически важная информация для подключения к БД. Если БД была успешна создана с помощью DBCA значит listener настроен и запущен. Если нет вы увидите другой ответ команды lsnrctl status, тогда используйте команду lsnrctl для запуска или нажмите кнопку START LISTENER в окне Database Control показанном на рисунке 3-4.

Запуск SQL *Plus

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

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

Если быть точным – нельзя запустить и остановить БД: только экземпляр может быть запущен и остановлен, а база данны может быть подключена, открыта, отключена и закрыта. Данные операции можно совершить с помощью SQL *Plus выполнив команды STARTUP и SHUTDOWN или используя Database Control. В Windows это можно сделать также с помощью управления сервисом созданным для экземпляра БД. Системный журнал содержит подробную информацию об этих операциях когда бы они не были вызваны. Запуск и остановка – очень важные операции, информация об их выполнении всегда записывается и они могут быть инициированы только пользователями с особым уровнем доступа.

Подключение с повышенными правами доступа

Обычный пользователь не может запустить или остановить БД – потому что он авторизуется используя словарь данных. Это логически невозможно поскольку в момент запуска словарь данных ещё не доступен. Таким образом для запуска необходимо подключаться к серверу используя механизм внешней авторизации: системная авторизация пользователя как члена группы Oracle, или авторизация с использованием файла паролей. Тип авторизации указывается при выполнении команды CONNECT. Ниже представлены различные комбинации команды CONNECT после подключения к серверу используя программу SQL *Plus с параметром /NOLOG

connect user/pwd[@connect_alias] as sysdba

connect user/pwd[@connect_alias] as sysoper

connect / as sysdba

connect / as sysoper

где user – имя пользователя, pwd – пароль, connect_alias – сетевой идентификатор (рассмотрим в главе 4). Первый пример использует авторизацию с помощью словаря данных, база данных должны быть открыта или команда вернёт ошибку. Любой пользователь после подключения к БД используя данный синтаксис не сможет выполнить команды запуска и остановки базы данных. Два следующих примеры указывают Oracle использовать авторизацию с помощью файла паролей. Последние команды используют авторизацию операционной системы: Oracle проверяет является ли текущий пользователь членом группы Oracle, и если проверка успешна – пользователь подключается к БД как SYSOPER или SYSDBA. Пользователь подключившийся к базе данных любым способом из последних четырёх может выполнить команды запуска и остановки БД вне зависимости от состояния базы данных – она может быть даже не создана на этом этапе.

Если Database Control обнаруживает запущенный listener – то он использует авторизацию через словарь данных или файл паролей (в зависимости от выбора пользователя – рисунок 3-6). Если же listener не запущен (рисунок 3-4) при нажатии на кнопку STARTUP Database Control запрашивает системные имя пользователя и пароль для подключения к серверу.

19

SYSOPER и SYSDBA

SYSOPER и SYSDBA – это уровни доступа с повышенными полномочиями. Они доступны только при системной авторизации или авторизации с помощью файла паролей. Уровень доступа SYSOPER может выполнять команды

ALTER DATABASE [MOUNT|OPEN|CLOSE|DISMOUNT]

ALTER [DATABASE|TABLESPACE][BEGIN|END] BACKUP

Уровень доступа SYSDBA также может выполнять эти команды, плюс возможность создавать БД, запускать неполное восстановление и давать полномочия SYSOPER и SYSDBA другим пользователям.

Вам может быть интерестно под каким пользователем вы подключаетесь к БД когда используется системная авторизация. Чтобы это выяснить, после подключения к базе данных выполните команду show user (эту команду можно вызвать набрав sho user – не стоит недооценивать сокращения, они могут ускорить время набора команд) – результат показан на рисунке 3-7.

Уровень доступа SYSDBA использует пользоватля SYS – суперпользователя в системе и владельца словаря данных. Уровень доступа SYSOPER подключается как пользователь PUBLIC. PUBLIC – не пользователь в нормальном смысле, это пользователь который используется для задач администрирования, но (по умолчанию) не может просматривать или изменять данные. Подключаться с данными уровнями доступа стоит только для выполнения задач, которые не могут быть выполнены обычными пользователями.

20

Запуск: NOMOUNT, MOUNT и OPEN

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

Процесс запуска базы данных разбит на шаги: вначале запускается экземпляр БД, затем база данных подключается (mount) и открывается (open) для использования. В любой момент времени база данных может быть в одном из следующих состояний

Когда база данных остановлена (SHUTDOWN) все файлы закрыты и экземпляр не существует. В отключенном состоянии (NOMOUNT) – экземпляр БД построен в памяти (SGA создана и фоновые процессы запущены согдасно файлу параметров), но база данных недоступна и может быть даже ещё не создана. В подключенном состоянии (MOUNT) экземпляр находит и читает файл контроля. В открытом состоянии (OPEN) все файлы найдены и открыты – т.е. база данных доступна для пользователей. Когды вы запускаете команду STARTUP – будут выполнены все шаги, однако команда может быть разбиты на этапы. Напирмер если файл контроля испорчен или копия недоступна – вы не сможете подключить базу данных. Однако вы можете запустить базу в неподключенном режиме (NOMOUNT) и восстановить файл контроля. Точно так же если у вас возникли проблемы с файлами данных или логовов, вы можете попробовать восстановить данные в MOUNT состоянии, перед тем как открывать БД.

Как же экземпляр находит файлы которые ему нужны на каждом из шагов? Начнём с NOMOUNT. Когда вы запускаете команду STARTUP, Oracle будет искать файл параметров в определённом порядке как отображено на рисунке 3-8.

Всего существует три пути и имени файла. На Unix подобных системах это

21

Во всех случаях – SID это имя экземпляра. Порядок поиска очень важен. Oracle будет использовать первый найденный файл вне зависимости от наличия остальных. Если ни одного файла не существует – экземпляр не будет запущен. В режиме NOMOUNT используются только файл параметров и системный журнал. Значения параметров из файла параметров используются для создания SGA в памяти и запуска фоновых процессов. В системный журнал записывается информация об этот процессе. Где находится системный журнал? Путь можно узнать посмотрев параметр BACKGROUND_DUMP_DEST в файле параметров или выполнив команду

sho parameter background_dump_dest

Если системный журнал существует во время выполнения команды STARTUP то новые данные будут добавляться, иначе будет созда новый файл. Если возникнут какие-либо проблемы во время выполнения команды – так же будут созданы файлы трассировки.

Когда экземпляр запущен в режиме NOMOUNT, переход в состояние MOUNT будет осуществляться путём чтения файла контроля. Oracle находит эти файлы используя параметр CONTROL_FILES, прочитанный во время запуска экземпляра. Если файл контроля (или хотя бы одна копия) не найдены или повреждены, база данных не будет подключена и вы обязаны восстановить их перед подключением. Все копии должны быть доступны и одинаковы для успешного подключения БД.

Как часть процесса подключения, все именя файлов данных и логов и пути к ним считываются из файла контроля, но Oracle просто запоминает эти значения, не пытаясь найти файлы. Поиск и чтение файлов происходит во время открытия базы данных (OPEN). Если какой-либо файл поврежден или отсутствует база данных останется в режиме MOUNT пока вы не исправите ошибки. Более того, все файлы должны быть синхронизированы перед тем как база данных будет открыта. Если последнее выключение было выполнено в определённом порядке, то все буферы из буфера кэша БД записаны на диск процессом DBWn и файлы синхронизированы, и Oracle будет знать при запуске что все подтверждённые транзакции сохранены в файлах данных и нет неподтвержденных транзакций ожидающих отмены. Если же последнее выключение было не запланированным (к примеру от потери питания или системной перезагрузке сервера без правильного выключения экземпляра) то Oracle должен синхроинизировать файлы данных и файлы логов (отменив неподтверждённые транзакции). Процесс который подключает и открывает БД (и синхронизирует данные) называется SMON. Только когда база данных успешно открыта будет возможно подключение пользователей. Процесс запуска графически представлен на рисунке 3-9.

Остановка процесс зеркальный запуску. Вначале закрывается БД (CLOSE), затем отключается (DISMOUNT) и далее останавливается экземпляр. Во время закрытия БД все сессии отключаются: текущие транзакции отменяются процессом PMON, подтверждённые транзакции записываются в файлы данных DBWn и файлы данных и логов закрываются. Во время отключения закрывается файл контроля. И экземпляр останавливается с освобождением памяти и остановкой фоновых процессов.

22

Выключение: NORMAL, TRANSACTIONAL, IMMEDIATE и ABORT

Существуют параметры которые используются с командой SHUTDOWN – вызов SHUTDOWN команды требует уровня доступа SYSDBA или SYSOPER

NORMAL: это значение по умолчанию. Новые подключения нельзя создать, но все текущие сессии могут работать до конца сессии. Когда все пользователю отключатся база данных будет выключена.

TRANSACTIONAL: новые подключения недоступны; существующие сессии которые не выполняют транзакции отключаются; сессии которые выполняют транзанкцию завершают транзакцию и отключаются. Когда все сессии будут отключены, база данных останавливается.

IMMEDIATE: новые подключения не разрешены. Все активные сессии отключаются. Все активные транзакции отменяются и база данных выключается.

ABORT: это эквивалент отключению питания. Экземпляр останавливается без записи чего либо на диск, закрытия файлов, отмены транзакций.

Параметр “abort” оставляет базу данных в рассинхронизированном состоянии: возможно что подтверждённые транзакции не записаны в файлы данных, так как на момент выключения они были сохранены в памяти и DBWn не записал изменения из буфера в файлы. Также может быть и такое, что неподтверждённые транзакции записаны в файлы данных. Это определение испорченной БД: она содержит некорректные данные. Эти повреждения должны быть восстановлены используя instance recovery. Таким образом можно протестировать что произойдёт если к примерну непредвиденно обесточить сервер в процессе работы БД.

Так как выключение это пошаговый процесс, то возможно управлять этапами используя SQL *Plus и команды

alter database close;

alter database dismount;

Эти команды полная противоположность командам запуска. На практике SHUTDOWN это единственная команда которой пользуются DBA. Пошаговый процесс также недоступен из Database Control.

В этом уроке я постараюсь подробнее рассказать о запуске и остановке экземпляра базы данных Oracle.

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

Для запуска или остановке экземпляра, вы должны быть подключены с соответствующими привилегиями. Для этого существует две специально авторизованных учетных записи SYSDBA или SYSOPER. SYSDBA авторизован на абсолютно все задачи связанные с базой данных, полномочия SYSOPER несколько меньше, но тем не менее они позволяют проводить остановку и запуск экземпляра Oracle. Когда база данных только что установлена, только SYS может соединиться с базой данных с разрешение SYSDBA. Далее вы можете дать привилегию SYSOPER, для выполнения ряда административных мероприятий. Теперь обсудим как выполнять запуск базы данных.

Запуск базы данных Oracle

Как упоминалось ранее, экземпляр Oracle состоит из нескольких процессов и логических структур памяти, которые позволяют пользователю общаться с базой данных. Во время запуска базы данных, эти структуры инициализируются и запускаются. При запуске базы данных, она проходит через несколько шагов, для проверки ее целостности. При запуске база данных использует три режима: NOMOUNT, MOUNT и OPEN. Рассмотрим каждый из них подробнее.

STARTUP NOMOUNT

STARTUP NOMOUNT запускает базу данных без монтирования. Когда база данных запущена в этом режиме, читается файл параметров, инициализируются фоновые процессы и структуры памяти, но они не связываются с дисковыми структурами базы данных. Когда база данных в этом состоянии, она недоступна для использования.

Если база данных запущена в режиме NOMOUNT, то вы можете выполнять некоторые задачи, например запуск скриптов на создание основной базы данных.

Иногда база данных недоступна для перехода в следующий режим - MOUNT, и остается в состоянии NOMOUNT. Например, такое возможно при проблеме с доступом к управляющим файлам, которые содержат важную информацию для продолжения процесса запуска. Если эти файловые структуры недоступны или повреждены, то процесс запуска базы данных не может быть продолжен, до решения проблемы.

STARTUP MOUNT

Опция STARTUP MOUNT выполняет все шаги опции STARTUP NOMOUNT, но еще так же связывает и взаимодействует со структурами базы данных. В этот момент, Oracle получает информацию от управляющих файлов, которые используются для связи с основными структурами базы данных.

Часть административных задач выполняется в этом режиме, например, восстановление базы данных. Так же можно изменять физическое расположение файлов и перевести базу данных в режим ARCHIVE LOG.

STARTUP OPEN

Опция STARTUP OPEN является опцией по-умолчанию, если не указано иное. Она выполняет все операции STARTUP NOMOUNT и STARTUP MOUNT. Эта опция делает базу данных доступной для пользователей.

Хотя обычно используются три режима: STARTUP NOMOUNT, STARTUP MOUNT и STARTUP OPEN, доступны еще опции запуска, которые вы можете использовать в ряде ситуаций. Это STARTUP FORCE и STARTUP RESTRICT. О них и пойдет речь далее.

STARTUP FORCE

STRATUP FORCE может использоваться, если у вас есть трудности с запуском базы данных в нормальном режиме. Например, если сервер базы данных был неожиданно отключен от электричества и база данных была резко остановлена. В этом случае может помочь STARTUP FORCE. В нормальной ситуации этот режим не требуется, но может пригодится, если нормальный запуск не работает.

Основное отличие этой опции от других, это то, что она может быть исполнена в любое время, независимо от режима в котором находится база данных. Это режим запуска выполняет остановку базы данных в режиме ABORT и перезапускает ее.

STARTUP RESTRICT

STARTUP RESTRICT запускает базу данных и переводит ее в режим OPEN, но предоставляет доступ только тем пользователям, которые имеют привилегию RESTRICTED SESSION. Возможно потребуется открыть базу данных в этом режиме для проведения технических работ по обслуживанию, когда база данных открыта, но вы хотите быть уверены, что пользователи не работают с базой. Так же можно открыть базу данных используя опцию RESTRICTED при выполнении импорта или экспорта и требуется гарантия, отсутствия пользователей в базе данных. После завершения работ, вы можете перевести базу в нормальный режим, чтобы каждый мог с ней работать. Для этого выполните:

Запуск базы данных средствами EM Database Control

Альтернативным способом запуска базы данных является использование утилиты Enterprise Manager Database Control. Для его использования нужно чтобы он был настроен. О настройке расскажем потом. А сейчас просто расскажем как его запустить. На уроке по созданию базы данных, в утилите dbca, на одном из шагов мы указывали опцию "Configure Enterprise Manager". Так что считаем, что он настроен. Для запуска выполните:

В EM при входе проходим авторизацию. Далее, для того, чтобы погасить или запустить экземпляр потребуется повторная авторизация, на уровне ОС и на уровне СУБД:


На уровне ОС, указываем пользователя, владельца экземпляра Oracle, в нашем примере это пользователь oracle. На уровне СУБД - пользователь имеющий привилегии остановки и запуска экземпляра. В приведенном примере - SYS.


В слкчае успешной авторизации, будет указано текущее и предпринимаемое действие. Сейчас экземпляр остановлен (Current Status: shutdown), и выполняется запуск в режиме OPEN (Operation: startup database in open mode).

Кликнув по кнопке Show SQL будет выведена команда SQL, которая используется для запуска. Кликнув по кнопке Advanced Options, можно выбрать дополнительные опции запуска, а именно режим, использование файла параметров. Кнопки No и Yes подтверждение или отмена выполняемого действия. Нажимаем Yes, и видим, что система начала работу:


Через некоторое время, систма сообщит об успешном запуске экземпляра БД, или ошибке, если таковая произойдет. В слкчае успешного завершения запуска, увидим окно EM с указанием текщуего статуса базы данных и дополнительной информацией о ней:


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

Запуск базы данных средствами SQL*Plus

Запуск базы данных можно осуществить и средствами командной строки SQL*Plus. Для этого надо подключится к SQL*Plus с привилегиями SYSOPER или SYSDBA.

[oracle@test bin]$ ./sqlplus / as sysdba
SQL*Plus: Release 11.1.0.7.0 - Production on Fri Apr 10 12:43:16 2009
Copyright (c) 1982, 2008, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 845348864 bytes
Fixed Size 1316656 bytes
Variable Size 473958608 bytes
Database Buffers 364904448 bytes
Redo Buffers 5169152 bytes
Database mounted.
Database opened.
SQL>

Остановка базы данных Oracle
SHUTDOWN NORMAL

Опция SHUTDOWN NORMAL является опцией по умолчанию и используется если не указаны иные опции. При такой остановке базы данных следует знать:

Во время выполнения SHUTDOWN NORMAL не позволены никакие новые соединения пользователей с базой данных
Oracle будет ждать пока все пользователи завершат свои сеансы подключения к базе данных, и только после этого продолжит процесс остановки Поскольку Oracle ожидает завершения всех пользовательских сеансов, вы можете определить пользователей подключенных к базе данных самостоятельно. Так же можно определить неактивных пользователей, не выполняющих никаких действий с БД в течение продолжительного времени и принудительно завершить их Такой способ остановки называется "чистым", потому что в случае такой остановки не потребуется восстановление и все проходит в штатном режиме.
SHUTDOWN TRANSACTIONAL

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

  • Во время выполнения SHUTDOWN TRANSACTIONAL не позволены никакие новые соединения пользователей с базой данных
  • С момента запуска SHUTDOWN TRANSACTIONAL не позволены никакие транзакции
  • Oracle ждет завершения текущих транзакций, существующие подключения к базе данных разрываются

Такой способ остановки позволяет клиентам перед отключением завершить текущие транзакции, таким образом не потерять их и не потерять проделанную работу. Этот тип остановки также называется чистым, поскольку все проходит в штатном режиме.

SHUTDOWN IMMEDIATE

Является следующим по агрессивности шагом. Опция SHUTDOWN IMMEDIATE характеризуется следующим:

  • Во время выполнения SHUTDOWN IMMEDIATE не позволены новые подключения к базе данных
  • Все незавершенные транзакции откатываются. Т.е. если транзакция пользователя в процессе исполнения, то он теряет проделанную работу (в рамках транзакции)
  • Oracle не ожидает завершения транзакций, откатывает их, и разрывает существующие подключения к базе данных

Этот тип остановки удобен когда требуется оставить Oracle без присмотра и требуется быть уверенным, что база данных остановится и пользователи будут отключены. Остановку таким способом можно считать чистой, после такой остановки не требуется восстановления базы данных.

SHUTDOWN ABORT

SHUTDOWN ABORT самый агрессивный способ остановки базы данных, характеризуется следующим:

  • Во время исполнения SHUTDOWN ABORT новые подключения не позволены
  • Прекращается исполнение любых SQL команд, независимо от состояния
  • Незавершенные транзакции не откатываются
  • Oracle разрывает все существующие подключения немедленно, как выпущена команда SHUTDOWN ABORT

Старайтесь не использовать SHUTDOWN ABORT. Используйте только в тех случаях, когда другие опции остановки не удались, или ваш опыт позволяет использовать эту опцию в данной ситуации. SHUTDOWN ABORT не является чистой остановкой базы данных, и после ее запуска может потребоваться восстановление.

Остановка базы данных средствами SQL*plus

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

[oracle@test bin]$ ./sqlplus / as sysdba
SQL*Plus: Release 11.1.0.7.0 - Production on Fri Apr 10 12:45:05 2009
Copyright (c) 1982, 2008, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>

Остановка экземпляра БД средствами EM

Остановка экземпляра базы данных происходит аналогично запуску, за тем исключением, что на главной странице выбираем опцию Shutdown.

(Несколько устаревший материал. Актуален в первую очередь для 9 версии, требует переработки)

Запуск базы данных Oracle

STARTUP [FORCE][restrict] [MOUNT | OPEN | NOMOUNT]

STARTUP NOMOUNT

Запуск экземпляра базы данных: состояние NOMOUNT
Во время запуска экземпляра базы данных, необходимо выбрать состояние, в которое в результате прейдет экземпляр.

Обычно экземпляр запускается в режиме NOMOUNT только во время создания базы данных или для пересоздания управляющих файлов, а также при выполнении определенных сценариев резервирования и восстановления.

Запуск экземпляра подразумевает выполнение следующих задач:

1) Поиск в директории $ORACLE_HOME/dbs файла параметров, осуществляемый в следующем порядке.

• Ищется файл spfileSID.ora
• Если он не найдет, тогда производится поиск файла spfile.ora;
• Если он не найден, тогда поиск файла SID.ora.
Искомый файл содержит параметры экземпляра базы данных;

  1. Задание параметра PFILE в команде STARTUP переопределяет установленный по умолчанию порядок выбора файла параметров.
  2. Выделение SGA;
  3. Запуск фоновых процессов.
  4. Открытие сигнального файла alertSID.log и файлов трассировки.

STARTUP MOUNT

Монтирование базы данных включает следующие задачи:
Ассоциация базы данных с предварительно запущенным экземпляром:
Определение местоположения управляющих файлов, которые указаны в файле параметров:
Чтение управляющих файлов с целью получения имен и статуса файлов данных и журнальных файлов. Однако на данный момент не проверяется фактическое существование файлов данных и журнальных файлов.

STARTUP OPEN

Открытие базы данных подразумевает выполнение следующих задач:

• Открытие оперативных файлов данных;
• Открытие оперативных журнальных файлов.

Если какие-либо из файлов данных или журнальных файлов недоступны в момент открытия базы данных, сервер Oracle возвращает ошибку.

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

Останов базы данных Oracle

SHUTDOWN [NORMAL | TRANSACTIONAL | IMMEDIATE | ABORT]

Oracle Instance

IMMEDIATE – обычно используемая опция. При этом незафиксированные транзакции откатываются.

TRANSACTIONAL – представляется возможность завершить транзакции.

NORMAL – Экземпляр не останавливается, пока не отсоединятся сеансы.

SHUTDOWN NORMAL

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

• Новые соединения не разрешаются.
• Сервер Oracle ожидает отсоединения всех пользователей и только после этого продолжает остановку базы данных.
• Буферы из КЭШа базы данных и журнала записываются на диск.
• Фоновые процессы завершаются и SGA удаляется из памяти.
• Перед остановкой экземпляра, Oracle закрывает и демонтирует базу данных.
• При следующем запуске не потребуется восстановление экземпляра.

SHUTDOWN TRANSACTIONAL

Транзакционная остановка обеспечивает сохранность данных клиентов, включая результаты текущих действий. Остановка базы данных в транзакционном режиме происходит следующим образом:

• Ни один клиент не может запустить новую транзакцию в этом экземпляре.
• Клиент принудительно отсоединяется, как только завершается текущая транзакция.
• Как только все транзакции завершены, немедленно выполняется остановка.
• При следующем запуске не потребуется восстановление экземпляра.

SHUTDOWN IMMEDIATE

Немедленная остановка базы данных выполняется следующим образом:

• Обработка команд SQL, выполняемых Oracle в данный момент, не завершается.
• Сервер Oracle не ожидает отсоединения пользователей, работающих с базой данных в текущий момент.
• Oracle выполняет откат всех активных транзакций и принудительно отсоединяет всех пользователей.
• Oracle закрывает и демонтирует базу данных перед остановкой экземпляра.
• При следующем запуске не потребуется восстановление экземпляра.

SHUTDOWN ABORT

Если режимы нормальной и немедленной остановки не срабатывают, может быть выполнена аварийная остановка базы данных. Аварийное завершение работы экземпляра выполняется следующим образом:

Немедленно отменяются все команды SQL, обрабатываемые сервером Oracle.
Сервер Oracle не ожидает отсоединения пользователей, работающих с базой данных в текущий момент.
Буферы из КЭШа базы данных и журнала не записываются на диск.
Не выполняется откат незафиксированных транзакций.
База данных не закрывается и не демонтируется.
Экземпляр удаляется без закрытия файлов.
При следующем запуске потребуется восстановление экземпляра, которое произойдет автоматически.

srvctl add database -d testdb_p -n testdb -i testdb -o /u01/app/oradb/product/11.2.0.3/dbhome_1 -p /u01/app/oradb/product/11.2.0.3/dbhome_1/dbs/spfiletestdb.ora -s OPEN -r PRIMARY -t IMMEDIATE -y AUTOMATIC -a "DATA,RECO,REDO";

srvctl add database -d testdb_s -n testdb -i testdb -o /u01/app/oradb/product/11.2.0.3/dbhome_1 -p /u01/app/oradb/product/11.2.0.3/dbhome_1/dbs/spfiletestdb.ora -s MOUNT -r PHYSICAL_STANDBY -t IMMEDIATE -y AUTOMATIC -a "DATA,RECO,REDO";


Тестовую базу можно добавить в режиме (manual)
после перезагрузки сервера базу нужно будет запускать руками

srvctl add database -d testdb -n testdb -i testdb -o /u01/app/oradb/product/11.2.0.3/dbhome_1 -p /u01/app/oradb/product/11.2.0.3/dbhome_1/dbs/spfiletestdb.ora -s OPEN -r PRIMARY -t IMMEDIATE -y MANUAL -a "DATA,RECO,REDO,TEST";

Добавляем сервисы в конфигурацию oracle restart:

$ srvctl add service -d testdb_p -s testdb_app -l primary -e SELECT -m BASIC
$ srvctl modify service -d testdb_p -s testdb_app -z 180 -w 1
$ srvctl config service -d testdb_p

$ srvctl add service -d testdb_s -s testdb_app -l primary -e SELECT -m BASIC
$ srvctl modify service -d testdb_s -s testdb_app -z 180 -w 1
$ srvctl config service -d testdb_s

Названия сервисов: SIDAPP для Primary и SIDREP для Standby

Без поддержки TAF

-- Для БД с ролью PRIMARY

begin
DBMS_SERVICE.CREATE_SERVICE (
service_name => 'TESTAPP',
network_name => 'TESTAPP');
end;
/


-- Для БД с ролью STANDBY + READ ONLY

begin
DBMS_SERVICE.CREATE_SERVICE (
service_name => 'TESTREP',
network_name => 'TESTREP');
end;
/

С поддержкой TAF

-- Для БД с ролью PRIMARY

begin
DBMS_SERVICE.CREATE_SERVICE (
service_name => 'TESTAPP',
network_name => 'TESTAPP',
failover_method => 'BASIC',
failover_type => 'SELECT',
failover_retries => 20,
failover_delay => 5);
end;
/

-- Для БД с ролью STANDBY + READ ONLY

begin
DBMS_SERVICE.CREATE_SERVICE (
service_name => 'TESTREP',
network_name => 'TESTREP',
failover_method => 'BASIC',
failover_type => 'SELECT',
failover_retries => 20,
failover_delay => 5);
end;
/


Процедура автозапуска сервисов в БД в зависимости от её РОЛИ

CREATE OR REPLACE TRIGGER SYS.startDGservices after startup on database
DECLARE
db_role VARCHAR(30);
db_open_mode VARCHAR(30);
BEGIN
SELECT DATABASE_ROLE, OPEN_MODE INTO db_role, db_open_mode FROM V$DATABASE;
IF db_role = 'PRIMARY' THEN DBMS_SERVICE.START_SERVICE('TESTAPP'); END IF;
IF db_role = 'PHYSICAL STANDBY' AND db_open_mode LIKE 'READ ONLY%' THEN DBMS_SERVICE.START_SERVICE('TESTREP'); END IF;
END;
/


Процедуры ручного запуска сервисов в БД в зависимости от её РОЛИ

CREATE OR REPLACE procedure SYS.startAPPservice as
DECLARE
db_role VARCHAR(30);
db_open_mode VARCHAR(30);
BEGIN
SELECT DATABASE_ROLE, OPEN_MODE INTO db_role, db_open_mode FROM V$DATABASE;
IF db_role = 'PRIMARY' THEN DBMS_SERVICE.START_SERVICE('TESTAPP'); END IF;
END;
/

CREATE OR REPLACE procedure SYS.startREPservice as
DECLARE
db_role VARCHAR(30);
db_open_mode VARCHAR(30);
BEGIN
SELECT DATABASE_ROLE, OPEN_MODE INTO db_role, db_open_mode FROM V$DATABASE;
IF db_role = 'PHYSICAL STANDBY' AND db_open_mode LIKE 'READ ONLY%' THEN DBMS_SERVICE.START_SERVICE('TESTREP'); END IF;
END;
/


Процедуры ручной остановки сервисов в БД

create or replace procedure SYS.stopAPPservice as
begin
DBMS_SERVICE.STOP_SERVICE('TESTAPP');
end;
/


create or replace procedure SYS.stopREPservice as
begin
DBMS_SERVICE.STOP_SERVICE('TESTREP');
end;
/

Без поддержки TAF

-- Для БД с ролью PRIMARY

. oraenv
$ srvctl add service -d TEST_OMEGA01 \
-s TESTAPP \
-l PRIMARY \
-y AUTOMATIC \
-P NONE \
-e NONE \
-m NONE \
-w 5 \
-z 20

-- Для БД с ролью STANDBY + READ ONLY

. oraenv
$ srvctl add service -d TEST_OMEGA02 \
-s TESTREP \
-l PHYSICAL_STANDBY \
-y AUTOMATIC \
-P NONE \
-e NONE \
-m NONE \
-w 5 \
-z 20

С поддержкой TAF

-- Для БД с ролью PRIMARY

. oraenv
$ srvctl add service -d TEST_OMEGA01 \
-s TESTAPP \
-l PRIMARY \
-y AUTOMATIC \
-P BASIC \
-e SELECT \
-m BASIC \
-w 5 \
-z 20

-- Для БД с ролью STANDBY + READ ONLY

. oraenv
$ srvctl add service -d TEST_OMEGA02 \
-s TESTREP \
-l PHYSICAL_STANDBY \
-y AUTOMATIC \
-P BASIC \
-e SELECT \
-m BASIC \
-w 5 \
-z 20


Процедура автозапуска сервисов в БД в зависимости от её РОЛИ

Работа сервисов контролируется ПО Grid Infrastructure в АВТО-режиме

Процедуры ручного запуска сервисов в БД в зависимости от её РОЛИ


Процедуры ручной остановки сервисов в БД

$ srvctl stop service -d TEST_OMEGA01 -s TESTAPP
$ srvctl stop service -d TEST_OMEGA02 -s TESTREP

$ srvctl config service -d TEST_OMEGA01 -s TESTAPP
$ srvctl config service -d TEST_OMEGA02 -s TESTREP


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

col username format a25
col machine format a30
col module format a15
col service_name format a15
col server format a12
col failover_type format a15
col failover_method format a15
col failed_over format a15

select inst_id,sid,username, machine, substr(module,1,15) as module, service_name,server,
case when failover_type='NONE' then NULL else failover_type end as failover_type,
case when failover_method='NONE' then NULL else failover_method end as failover_method,
case when failed_over='NO' then NULL else failed_over end as failed_over
from gv$session
order by 1,2;


Проверка работы сервисов

col host_name format a22
col service_name format a22
col network_name format a22

select (select host_name from v$instance) host_name,
name service_name,
network_name
from v$services;

Настройка дескрипторов соединений на клиентской стороне

01 - Primary - должен быть поднят сервис APP
02 - Standby- доджен быть поднят сервис REP в режиме RO

Подключение к базам в БЕЗ Standby конфигурации:

TEST_APP =
(DESCRIPTION =
(ENABLE=BROKEN)
(ADDRESS_LIST=
(ADDRESS = (PROTOCOL = TCP)(HOST = omega01.localdomain)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TESTAPP)
)
)

TEST_APP =
(DESCRIPTION =
(ENABLE=BROKEN)
(CONNECT_TIMEOUT=30)
(TRANSPORT_CONNECT_TIMEOUT=10)
(RETRY_COUNT=3)
(ADDRESS_LIST=
(LOAD_BALANCE=on)
(ADDRESS = (PROTOCOL = TCP)(HOST = scan_omega01)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TESTAPP)
)
)

Подключение к базам в Standby конфигурации:

TEST_APP =
(DESCRIPTION =
(ENABLE=BROKEN)
(TRANSPORT_CONNECT_TIMEOUT=10)
(ADDRESS_LIST=
(LOAD_BALANCE=OFF)
(FAILOVER=ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = omega01.localdomain)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = omega02.localdomain)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TESTAPP)
)
)

TEST_REP =
(DESCRIPTION =
(ENABLE=BROKEN)
(TRANSPORT_CONNECT_TIMEOUT=10)
(ADDRESS_LIST=
(LOAD_BALANCE=OFF)
(FAILOVER=ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = omega01.localdomain)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = omega02.localdomain)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TESTREP)
)
)

TEST_APP =
(DESCRIPTION_LIST=
(LOAD_BALANCE=OFF)
(FAILOVER=ON)
(DESCRIPTION=
(ENABLE=BROKEN)
(CONNECT_TIMEOUT=30)
(TRANSPORT_CONNECT_TIMEOUT=10)
(RETRY_COUNT=3)
(ADDRESS_LIST=
(LOAD_BALANCE=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=scan_omega01)(PORT=1521))
)
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME= TESTAPP)
)
)
(DESCRIPTION=
(ENABLE=BROKEN)
(CONNECT_TIMEOUT=30)
(TRANSPORT_CONNECT_TIMEOUT=10)
(RETRY_COUNT=3)
(ADDRESS_LIST=
(LOAD_BALANCE=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=scan_omega02)(PORT=1521))
)
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME= TESTAPP)
)
)
)


TEST_REP =
(DESCRIPTION_LIST=
(LOAD_BALANCE=OFF)
(FAILOVER=ON)
(DESCRIPTION=
(ENABLE=BROKEN)
(CONNECT_TIMEOUT=30)
(TRANSPORT_CONNECT_TIMEOUT=10)
(RETRY_COUNT=3)
(ADDRESS_LIST=
(LOAD_BALANCE=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=scan_omega01)(PORT=1521))
)
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME=TESTREP)
)
)
(DESCRIPTION=
(ENABLE=BROKEN)
(CONNECT_TIMEOUT=30)
(TRANSPORT_CONNECT_TIMEOUT=10)
(RETRY_COUNT=3)
(ADDRESS_LIST=
(LOAD_BALANCE=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=scan_omega02)(PORT=1521))
)
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME=TESTREP)
)
)
)

Читайте также: