IANADBA, но я пишу сценарий, который будет действовать до тех пор, пока не будет активирована резервная база данных Oracle. Я ищу два запроса (или, при необходимости, наборы запросов).
1 - Смонтирована ли база данных (например, кто-то выполнил «изменение резервной базы данных монтирования»)
2 - Как узнать, активирована ли база данных (например, «изменить базу данных, активировать резервную базу данных»)?
Как я уже упоминал, я ищу запросы, но если в системе есть способ узнать об этом, я тоже открыт для этого. Спасибо!
Обновить
Я принял предложение ниже (слегка измененное, потому что я имею дело с Oracle 8i, и получаю следующее:
SQL> SELECT INSTANCE_NAME, DATABASE_STATUS, INSTANCE_ROLE from v$instance;
INSTANCE_NAME DATABASE_STATUS INSTANCE_ROLE
---------------- ----------------- ------------------
RGR01 ACTIVE PRIMARY_INSTANCE
В данный момент этот экземпляр активно восстанавливает архивные журналы, но не является «живым». Я все еще ищу способ узнать, не смонтирована ли она как резервная база данных.
Я понял!
CONTROLFILE_TYPE из v $ database - это ключ
SQL> select CONTROLFILE_TYPE from v$database;
CONTROL
-------
CURRENT
против
SQL> select CONTROLFILE_TYPE from v$database;
CONTROL
-------
STANDBY
Это работает для физического резервного, Oracle 10g (и выше)
ВЫБРАТЬ open_mode ИЗ v $ database;
Если значение:
На начальном этапе:
select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY
На раб:
OPEN_MODE
-------------------- --------------------
MOUNTED or READ ONLY WITH APPLY
Могут быть и другие значения, я не уверен.
HTH
Это может быть слишком упрощенно для того, что вам нужно, поскольку я не слишком знаком с резервными базами данных
но пока экземпляр активен, вы должны иметь возможность запрашивать представление экземпляра v $ и получать, например, статус базы данных
SELECT INSTANCE_NAME, DATABASE_STATUS, INSTANCE_ROLE, ACTIVE_STATE FROM v$instance;
Я действительно не знаю ответа на этот вопрос - «Как узнать, смонтирована и активирована ли база данных Oracle?», Но Я должен опубликовать ответ, чтобы люди знали, что, пожалуйста, не вводите в заблуждение ответы на этот пост, потому что большинство из них грубо ошибаются.
Те, кто говорят, что используют «v $ instance», абсолютно неправы, потому что это покажет, смонтирован «instance», запущен, активен или нет. Обратите внимание, что база данных и экземпляр базы данных - это разные вещи., поэтому, если вы не знаете разницы, лучше прочтите, а также прочитайте о Oracle RAC и Oracle Data Gurard.
Те, кого вы говорите, используют select CONTROLFILE_TYPE from v$database;
тоже не правы, потому что согласно Oracle в этом столбце содержится информация об управляющем файле и указано, находится ли база данных в режиме ожидания или в активном режиме, который отличается от того, смонтирована ли база данных или активна ли база данных.
Как я уже сказал, я думаю, что очень важно понимать разницу между базой данных и экземпляром базы данных, а также знать, что такое Oracle RAC и Oracle Data Gurard.
Предположим, у меня есть первичная база данных и другая резервная база данных databguard, и обе базы данных / экземпляры активны для использования, но обратите внимание на разницу на снимках экрана ниже:
Первичная база данных:
Резервная база данных защиты данных:
Не могли бы вы контролировать подключения к базе данных через netstat / lsof? Предположительно, вы заметили, что клиенты начинают его использовать.
Вы также можете просмотреть архивный журнал этих команд.