Как узнать имя базы данных oracle

Обновлено: 06.07.2024

ORA_DATABASE_NAME

Что должен возвращать следующий запрос?

Первое что приходит на ум, результатом выполнения этого запроса должно быть имя текущей базы данных. Но действительно ли всё это так просто, как кажется на самом деле? Попробуем разобраться, что же представляет на самом деле эта функция, каков её источник и как можно изменить результат, выводимый этой функцией.

Прежде чем приступить к непосредственному практическому изучению ora_database_name, вспомним, как трактуется она в документации Oracle. Единственное упоминание о ней мы найдем только в книге Oracle Database Application Developer's Guide - Fundamentals в разделе Coding Triggers, где описывается, что она принадлежит к группе функций для идентификации атрибутов происшедшего события. Таких разнообразных функций на самом деле около тридцати, они все начинаются с префикса ora_ и используются в основном в системных триггерах. Судя по документации, наша функция ora_database_name должна выводить имя базы данных. Проверим, действительно ли это так:

Как видим, запрос возвращает склейку локального имени базы данных и доменного имени сетевой структуры, то есть глобальное имя базы данных. Посмотреть локальную составляющую можно с помощью следующего запроса:

А вот просмотр доменной вызовет трудности. По идее эти части должны определяться на уровне создания инициализационными параметрами базы данных db_name и db_domain. Посмотрим их значения:

Если с параметром db_name всё понятно, то параметр db_domain ничего не содержит. Откуда же тогда взялась эта вторая часть глобального имени? Скорее всего, это значение по умолчанию, так как db_domain до создания базы имел значение NULL. Теперь изменение вышеприведенных параметров ни как не повлияет на состав глобального имени. Если изменить первый параметр, база просто не откроется, а изменение значения второго параметра будет просто проигнорировано.

Ясно, что хоть эти параметры и участвуют в организации глобального имени на этапе создания базы данных, но они не являются источником для функции, которую мы рассматриваем. На самом деле ora_database_name это всего лишь публичный синоним, указывающий на функцию database_name, которая в свою очередь состоит из единственного вызова одноимённой функции database_name пакета dbms_standard. В свою очередь функция пакета, использует внешнюю С функцию.

Казалось, след потерян, доступа к функции нет. Но не всё так плохо. Есть одно системное представление global_name, содержимое которого идентично результату выполненного ранее нами запроса. Может оно приведёт нас к источнику нашей функции:

Данное представление ссылается на строку с именем GLOBAL_DB_NAME в таблице props$ схемы sys. Эта таблица относится к словарю и содержит некоторые значения фиксированных параметров базы данных. Попробуем изменить это параметр прямо в таблице и посмотреть, изменится ли значение возвращаемое функцией ora_database_name:

Выводимый результат функции не изменился. Он изменится только после перезагрузки экземпляра. Но уже сейчас ясно, что строка GLOBAL_DB_NAME таблицы props$ не связана напрямую с результатом, который выводит функция ora_database_name.

И так, похоже, мы нашли способ, который изменит выводимое значение глобального имени. Но правка системной таблицы Oracle не самый лучший вариант. К счастью в Oracle есть команда ALTER DATABASE RENAME GLOBAL_NAME, которая предназначена для изменения глобального имени базы данных. Попробуем с её помощью изменить наше глобальное имя:

Как видим, функция ora_database_name стала сразу выдавать необходимый нам результат, при этом нам не понадобилось даже перезагружать экземпляр. Правда в этом способе изменения глобального имени есть небольшая оговорка. Например, если у предыдущего имени есть доменная составляющая, то отбросить её с помощью ALTER DATABASE в новом имени уже не получиться:

Придётся комбинировать эти два способа:

В заключение стоить отметить, что изменение вышеописанными способами глобального имени никаким образом не скажется на локальном имени базы данных. Выполним, к примеру, после всех изменений следующий запрос:

Локальное имя базы данных осталось прежним. Отсюда следует помнить, что локальная составляющая глобального имени должна всегда соответствовать локальному имени базы данных. Это следует учитывать при изменении глобального имени.

И так, результат достигнут. Мы узнали, что собой представляет функция ora_database_name и как можно изменить возвращаемое ею содержимое. Теперь можно сделать и выводы:

Имя домена базы данных, имя базы данных, глобальное имя базы данных, SID, имя экземпляра базы данных, имя службы в базе данных Oracle Объяснение

При настройке listener.ora и tnsnames.ora для подключения к серверу базы данных Oracle необходимо различать следующие запутанные концепции

  • Доменное имя базы данных
  • имя хранилища данных
  • Имя глобальной базы данных
  • SID
  • Имя экземпляра базы данных
  • наименование услуги

При установке базы данных Oracle эти вещи, которые мы указали, должны использоваться во время настройки. Это яма, и я не напоминаю мне при установке.

Внимание: если установлено по умолчанию, следующее поле ввода будет: ORCL


См. Приложение для запроса SQL


1. Имя домена базы данных (db_domain)

В системе распределенных баз данных между серверами баз данных разных версий, независимо от того, является ли операционная система unix или Windows, удаленная репликация может выполняться между серверами через соединение с базой данных.

Доменное имя базы данных в основном используется для репликации в распределенной среде Oracle. Имя домена базы данных записывается в файл параметров, а параметр - db_domain.

2. Имя базы данных (db_name)

Имя базы данных указывается при установке базы данных и хранится в (dbhome_1 / dbs / init.ora).
После установки или создания базы данных имя базы данных записывается в файл параметров, а параметр - db_name.

Он используется при создании файлов управления базами данных, изменении структур данных, резервном копировании и восстановлении баз данных.

3. Имя глобальной базы данных (GLOBAL_NAME)

Имя глобальной базы данных (name.domain) используется для однозначной идентификации базы данных Oracle. Имя, хранящееся в контрольном файле, представляет базу данных, то есть общее имя всех физических файлов, содержащихся в базе данных.
может использоваться при настройке tnsnames.ora.

4. Имя экземпляра базы данных (instance_nam) и ORACLE_SID

На базу данных ссылается по крайней мере один экземпляр базы данных Oracle,Этот экземплярОн уникально идентифицируется SID (идентификатор службы Oracle), чтобы отличить любой другой экземпляр базы данных Oracle на компьютере. ORACLE_SID, идентификатор службы Oracle (SID) и идентификатор системы Oracle - это одно и то же понятие. ORACLE_SID идентифицирует экземпляр Oracle,

База данных может иметь несколько экземпляров, например RAC. В архитектуре параллельного сервера Oracle (т. Е. Кластере приложений реального времени Oracle) имя базы данных и имя экземпляра имеют отношение «один ко многим». Имя экземпляра используется для идентификации имени каждого экземпляра в базе данных.

Как правило, имя базы данных и имя экземпляра взаимосвязаны один к одному, а имя базы данных ** и имя экземпляра могут быть одинаковыми или разными.

Важное предупреждение: отношения между ними немного сложны, обычно они совпадают. Если вы не хотите знать, перейдите к следующему заголовку.

Операционная система --------- OracleSID --------- «Экземпляр базы данных ------ Имя экземпляра базы данных -----------» Система управления базой данных

Имя экземпляра базы данных относится к ответу на операцию базы данных.Система управления базой данных Имя экземпляра базы данных используется для взаимодействия между операционной системой и базой данных. Имя экземпляра базы данных - это идентификатор, используемый для связи с операционной системой. Чтобы получить доступ к имени экземпляра с точки зрения операционной системы, необходимо использовать ORACLE_SID.

  • instance_name - это параметр базы данных Oracle.
  • ORACLE_SID - это переменная среды операционной системы.

5. Название службы (SERVICE_NAME)

Имя, предоставленное базой данных, похоже на то, что когда вы с незнакомцем, вы склонны говорить ему свое имя, а не псевдоним или псевдоним.

SERVICE_NAME относится к глобальному имени базы данных в слушателе: это имя определяется параметром GLOBAL_DBNAME в listener.ora.
SERVICE_NAME впервые была представлена ​​Oracle8i. До версии 8i в базе данных мог быть только один экземпляр. После 8i база данных может соответствовать нескольким экземплярам, ​​например RAC. Чтобы в полной мере использовать все экземпляры и упростить настройку подключения клиента,ORACLE предложил концепцию SERVICE_NAME. Этот параметр напрямую соответствует базе данных, а не экземпляру.
Если база данных имеет доменное имя, тогда имя службы базы данных = глобальное имя базы данных = имя базы данных [.] имя домена базы данных
Имя службы базы данных совпадает с именем базы данных.

Этот выпуск посвящен некоторым аспектам проблемы переименования и клонирования базы данных. Начнем с простого - как узнать и изменить идентификатор службы (SID) и имя базы данных (DB_NAME). Последний раз Том Кайт вернулся к этому вопросу 20 августа 2002 года.

Что такое SID, как его узнать и как изменить

Ответ Тома Кайта

Изменить его сложнее, чем кажется. Я знаю, что вы работаете в ОС Unix, поэтому следующая последовательность шагов для изменения SID (или имени базы данных) в Unix - для вас. В NT последовательность шагов - немного другая.

Как найти sid -- с помощью оператора select instance from v$thread .

НАЗНАЧЕНИЕ

Здесь описано, как найти и изменить имя базы данных ( db_name ) или ORACLE_SID для экземпляра, не пересоздавая базу данных.

ДЛЯ КОГО ЭТА ЗАМЕТКА

Для АБД, которым надо найти или изменить db_name или ORACLE_SID .

Чтобы найти текущие значения DB_NAME и ORACLE_SID:

Выполните запросы к представлениям v$database и v$thread .

Если ORACLE_SID = DB_SID и db_name = DBNAME :

Чтобы найти текущее значение ORACLE_SID :

Чтобы найти текущее значение DB_NAME :

Изменение базы данных для работы с новым ORACLE_SID :

  1. Остановите экземпляр
  2. Скопируйте все управляющие файлы, журналы повторного выполнения и файлы данных.
  3. Пройдите по файлам .profile , .cshrc , .login , oratab , tnsnames.ora и задайте переменной среды ORACLE_SID новое значение.

Например, пройдите по всем каталогам и выполните grep ORACLE_SID *

  • init<sid>.ora (или используйте для задания файла параметров инициализации файл pfile .)
  • управляющий файл (файлы). Это не обязательно, если вы не переименовываете управляющие файлы и используете параметр control_files . Параметр control_files устанавливается в файле init<SID>.ora или в файле, на который ссылается в нем параметр ifile . Проверьте, что параметр control_files не указывает на старые имена управляющиъ файлов, если вы их переименовали.
  • crdb<sid>.sql и crdb2<sid>.sql , Это не обязательно, пеоскольку эти файлы используются только при создании базы данных.
  • startup<sid>.sql . Это не обязательно. На некоторых платформах этот файл может находиться в каталоге $ORACLE_HOME/rdbms/install . Проверьте, что содержимое этого файла не ссылается на старые файлы init<SID>.ora , которые вы переименовали. Этот файл упрощает процесс запуска с сервера базы данных в исключительном режиме ( startup exclusive ).

Будет выдан запрос архивного файла журнала повторного выполнения. После применения текущего файла журнала базу данных, возможно, удастся открыть. Но, это НЕ ГАРАНТИРОВАНО . Если после применения текущего файла журнала повторного выполнения база данных не открывается, весьма вероятно, придется повторить все с начала, предварительно нормально остановив старую базу данных.

Чтобы найти список активных журнальных файлов:

Cколько АБД Oracle надо, чтобы поменять лампочку. Комментарий от 13 сентября 2001 года

Удивительно, сколько механической работы требуется в Oracle для простых вещей.

Смысл реляционной модели - нормализация; если проще - устранение избыточных данных. А что мы имеем - SID в десятке мест?

Ответ Тома Кайта

Чтобы было просто -- не меняйте SID .

База данных поддерживает реляционную модель, а обеспечивающее работу с ней программное обеспечение, согласен, этой модели не соответствует.

НА САМОМ ДЕЛЕ, мы сталкиваемся с попыткой ИЗМЕНИТЬ ПЕРВИЧНЫЙ КЛЮЧ.

Это, на самом деле, ПРЕКРАСНАЯ демонстрация особенностей реляционной модели. Первичным ключом для базы данных является SID. Вы пытаетесь изменить первичный ключ (чего в реляционных базах данных делать КРАЙНЕ НЕ РЕКОМЕНДУЕТСЯ) и реализовать действие on update cascade .

Так что, даже при наличии ОДНОГО внешнего ключа, пробюлема будет аналогичной. Если вы когда-нибудь изменяли значение первичного ключа, вам приходилось делать то же самое (находить все внешние ключи и изменять их соответственно).

Почему вы считаете изменение SID "простой вещью" (мне этот процесс кажется весьма мутным -- мне ни разу не приходилось самому это делать за 15 лет).

Комментарий от 1 марта 2001 года

Прекрасное описание процедуры изменения sid. Я постоянно это делала на прежней работе при создании тестовых экземпляров. Одна проблема, связанная с sid, меня всегда беспокоила - как узнать этот самый sid. Если вы не знаете sid, как вы подключитесь к экземпляру и спросите значение sid?

Ответ Тома Кайта

например: получаем 7 значений sid, работающих сечас на моей тестовой машине -- ora_pmon_$ORACLE_SID

Если вы работате не на сервере, sid просто не имеет значения, - вам нужна запись tns в файле tnsnames.ora .

На NT посмотрите список служб Oracle в Панели управления.

Оригинал обсуждения этого вопроса можно найти здесь.

Изменение SID на платформе Windows, кстати, описано вот здесь.

Copyright © 2003 Oracle Corporation

Можно ли найти базы данных в кластере? то есть базы данных, присутствующие в сети в какой-либо другой системе?

Могу ли я проанализировать файлы, присутствующие в установке Oracle, чтобы найти то же самое?

Учитывая полные учетные данные доступа к системе Oracle, как бы вы перечислили все существующие базы данных?

Есть ли эквивалент инструкции MySQL SHOW DATABASES ?

Если вы говорите только о множестве машин, то нет, нет 100% надежного способа перечисления всех баз данных в сети.

Чтобы найти активные (т. е. запущенные) базы данных, ищите процессы *_pmon_* в Unix (есть один экземпляр базы данных) и службы Oracle в Windows.

Чтобы найти установки программного обеспечения базы данных Oracle, посмотрите на /etc/oratab на Unix. Это должно содержать все установленные ORACLE_HOME . Вы можете просмотреть каждый из них в $ORACLE_HOME/dbs для файлов spfile<SID>.ora и /или init<SID>.ora - для каждой базы данных будет один.

(Я считаю, что вы можете найти эквивалент информации в oratab в разделах реестра Windows ниже HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE , но я не знаю его структуры .)

Теперь, конечно, если вы зарегистрировали всю свою базу данных на сервере OEM (Enterprise Manager), когда вы их установили, вы можете найти полный список там - но я думаю, если вы спросите, что это не так.

Проще говоря, нет прямой аналогии для баз данных MySQL или «кластера» в Oracle: ближайшее совпадение - это «схема», но это все еще очень отличается.

Это, по-видимому, изменение в 12c с введением подключаемых баз данных:

Разделение операций с базой данных чисто из содержимого пользователя является важным преобразованием из традиционных архитектур баз данных. Oracle 11g и все его предшественники могли одновременно запускать только одну базу данных, сказал Ките. Если организация захотела запустить несколько баз данных на одном сервере, ей потребуется запустить несколько экземпляров Oracle 11g, по одному для каждой базы данных. Как следует из названия, подключаемые базы данных позволяют запускать несколько баз данных арендаторов под одной копией Oracle 12c.

В Oracle нет баз данных, кроме схем, вы можете перечислить их с помощью

или что-то вроде этого:

Я думаю, что ответ для будущих браузеров на * nix может быть:

Просто подключитесь к ASM и проверьте клиента базы данных.

Если у Oracle 12 есть плагируемые базы данных (рекомендуется), вы можете сделать следующее:

Читайте также: