Как узнать, смонтирована ли и активирована ли база данных Oracle?

Как узнать, смонтирована ли и активирована ли база данных Oracle?

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;

Если значение равно:

  1. «MOUNTED» — ваша база данных смонтирована.
  2. «ЧИТАТЬ/ЗАПИСАТЬ», то можно считать, что он активирован.
  3. «ТОЛЬКО ДЛЯ ЧТЕНИЯ» — тогда он может быть открыт для запроса в режиме только для чтения, но не активирован.
  4. «ТОЛЬКО ЧТЕНИЕ С ПРИМЕНЕНИЕМ» при использовании активного 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? Вероятно, вы заметили бы, что клиенты начали ее использовать.

Вы также можете просмотреть архивный журнал этих команд.

Связанный контент