Метод организации подключения пользователей к БД работающей в режиме ACTIVE DATA GUARD.
Не актуален при
использовании GRID Infrastructure.
1. Создание служб.
Для пользователей будут созданы службы(service), которые будут включаться в зависимости от режима работы базы.
- prod - база находится в режиме PRIMARY, разрешены запись и чтение.
- read - база в режиме PHYSICAL STANDBY, доступна только для чтения.
- snap - режим SNAPSHOT STANDBY, разрешены запись и чтение, но после конвертации в PHYSICAL STANDBY все изменения будут отменены
execute dbms_service.create_service(
service_name=>'prod',
network_name=>'prod');
service_name=>'prod',
network_name=>'prod');
Остальные службы создаются аналогично.
2. Создание триггера для запуска служб при изменении состояния сервера.
Триггер будет срабатывать после запуска/перезапуска базы и в зависимости от роли
будет запускать необходимую службу.
Триггер будет срабатывать после запуска/перезапуска базы и в зависимости от роли
будет запускать необходимую службу.
CREATE or REPLACE TRIGGER client_connection AFTER startup ON DATABASE
DECLARE
DB_ROLE V$DATABASE.DATABASE_ROLE%TYPE;
OMODE V$DATABASE.OPEN_MODE%TYPE;
BEGIN
SELECT DATABASE_ROLE INTO DB_ROLE FROM V$DATABASE;
SELECT OPEN_MODE INTO OMODE FROM V$DATABASE;
IF DB_ROLE = 'PRIMARY' THEN
DBMS_SERVICE.START_SERVICE ('prod');
DBMS_SERVICE.STOP_SERVICE ('read');
ELSIF DB_ROLE = 'PHYSICAL STANDBY' AND OMODE =
'READ ONLY' THEN
DBMS_SERVICE.START_SERVICE
('read');
ELSIF DB_ROLE = ‘SNAPSHOT STANDBY’ AND OMODE =
'READ WRITE' THEN
DBMS_SERVICE.START_SERVICE ('snap');
DBMS_SERVICE.STOP_SERVICE ('read');
END IF;
END;
3. Принудительный запуск службы.
EXECUTE DBMS_SERVICE.START_SERVICE(SERVICE_NAME=>'<SERVICE>');
4. Пример tnsnames файла.
В зависимости от указанной службы сессии будут направляться на сервер, на котором эта служба в данный момент работает.
В зависимости от указанной службы сессии будут направляться на сервер, на котором эта служба в данный момент работает.
prod =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =
server1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST =
server2)(PORT = 1521))
(load_balancing=no)
)
(CONNECT_DATA =
(SERVICE_NAME = prod)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)
Комментарии
Отправить комментарий