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
Прямо сейчас этот экземпляр активно восстанавливает архивные журналы, но не "живой". Я все еще ищу способ узнать, не смонтирован ли он как резервная база данных.
решение1
Я понял!
CONTROLFILE_TYPE из v$database — это ключ
SQL> select CONTROLFILE_TYPE from v$database;
CONTROL
-------
CURRENT
против
SQL> select CONTROLFILE_TYPE from v$database;
CONTROL
-------
STANDBY
решение2
Это работает для физического резерва, Oracle 10g (и выше)
ВЫБРАТЬ open_mode ИЗ v$database;
Если значение равно:
- «MOUNTED» — ваша база данных смонтирована.
- «ЧИТАТЬ/ЗАПИСАТЬ», то можно считать, что он активирован.
- «ТОЛЬКО ДЛЯ ЧТЕНИЯ» — тогда он может быть открыт для запроса в режиме только для чтения, но не активирован.
- «ТОЛЬКО ЧТЕНИЕ С ПРИМЕНЕНИЕМ» при использовании активного Dataguard.
На первичном этапе:
select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY
На рабе:
OPEN_MODE
-------------------- --------------------
MOUNTED or READ ONLY WITH APPLY
Возможно, есть и другие значения, я не уверен.
НТН
решение3
Я действительно не знаю ответа на этот вопрос - «Как узнать, смонтирована ли и активирована ли база данных Oracle?», ноЯ должен опубликовать ответ, чтобы люди знали: пожалуйста, не позволяйте ответам на этот пост вводить вас в заблуждение, потому что большинство из них грубо ошибаются..
Те, кто говорит, что нужно использовать «v$instance», абсолютно неправы, потому что это покажет, смонтирован ли «экземпляр», запущен ли он, активен он или нет.Обратите внимание, что база данных и экземпляр базы данных — это разные вещи., так что если вы не знаете разницы, то лучше почитайте, а также почитайте оOracle RAC и Oracle Data Guard.
Те, о которых вы говорите,
select CONTROLFILE_TYPE from v$database;
тоже не правы, потому что согласноОракулВ этом столбце содержится информация об управляющем файле и указывается, находится ли база данных в режиме ожидания или в активном режиме, что отличается от того, смонтирована ли база данных или активна ли она.
Как я уже сказал, я считаю очень важным понимать разницу между базой данных и экземпляром базы данных, а также знать, что такое Oracle RAC и Oracle Data Guard.
Предположим, у меня есть основная база данных и еще одна резервная база данных databguard, и обе базы данных/экземпляры активны для использования, но посмотрите на разницу на снимках экрана ниже:
Первичная база данных:
Резервная база данных для хранения данных:
решение4
Можете ли вы отслеживать соединения с базой данных через netstat/lsof? Вероятно, вы заметили бы, что клиенты начали ее использовать.
Вы также можете просмотреть архивный журнал этих команд.