Назад | Перейти на главную страницу

Как узнать, подключена ли и активирована ли база данных 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

В данный момент этот экземпляр активно восстанавливает архивные журналы, но не является «живым». Я все еще ищу способ узнать, не смонтирована ли она как резервная база данных.

Я понял!

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;

Если значение:

  1. 'MOUNTED', ваша база данных подключена.
  2. «ЧИТАТЬ ЗАПИСАТЬ», тогда вы можете предположить, что он активирован.
  3. 'ТОЛЬКО ДЛЯ ЧТЕНИЯ', тогда он может быть открыт для запроса в режиме только для чтения, но не активирован.
  4. «ПРОЧИТАЙТЕ ТОЛЬКО С ПРИМЕНЕНИЕМ» при использовании активного устройства защиты данных.

На начальном этапе:

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? Предположительно, вы заметили, что клиенты начинают его использовать.

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