Oracle как узнать имя базы данных
Перейти к содержимому

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

  • автор:

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

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

SQL> SELECT ora_database_name FROM dual

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

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

SQL> SELECT ora_database_name FROM dual ORA_DATABASE_NAME ------------------------------------ ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM

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

SQL> SELECT name FROM v$database NAME ---- ORCL

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

SQL> SHOW PARAMETERS db_name Параметр Тип Значение -------- ------ -------- db_name string orcl SQL> SHOW PARAMETERS db_domain Параметр Тип Значение --------- ------ -------- db_domain string

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

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

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

SQL> SELECT * FROM global_name GLOBAL_NAME ------------------------------------ ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM

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

SQL> UPDATE global_name SET global_name = 'ORCL2'; Изменено: 1 строка SQL> COMMIT; Commit complete SQL> SELECT ora_database_name FROM dual ORA_DATABASE_NAME ------------------------------------ ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM

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

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

SQL> ALTER DATABASE RENAME GLOBAL_NAME TO ORCL3; База данных изменена SQL> SELECT ora_database_name FROM dual; ORA_DATABASE_NAME ----------------- ORCL3

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

SQL> ALTER DATABASE RENAME GLOBAL_NAME TO ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM; База данных изменена SQL> SELECT ora_database_name FROM dual; ORA_DATABASE_NAME ------------------------------------ ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM Выбрано: 1 строка SQL> ALTER DATABASE RENAME GLOBAL_NAME TO ORCL1; База данных изменена SQL> SELECT ora_database_name FROM dual; ORA_DATABASE_NAME ------------------------------------- ORCL1.REGRESS.RDBMS.DEV.US.ORACLE.COM Выбрано: 1 строка

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

SQL> UPDATE global_name SET global_name = 'ORCL2'; Изменено: 1 строка SQL> COMMIT; Commit complete SQL> ALTER DATABASE RENAME GLOBAL_NAME TO ORCL2; База данных изменена SQL> SELECT ora_database_name FROM dual; ORA_DATABASE_NAME ----------------- ORCL2 Выбрано: 1 строка

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

SQL> SELECT name FROM v$database NAME ---- ORCL

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

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

  • Функция ora_database_name возвращает глобальное имя базы данных, состоящее из локальной составляющей и доменного имени сетевой инфраструктуры.
  • Значение, возвращаемое функцией связанно с параметрами db_name и db_domain только на этапе создания базы данных. Их изменение в дальнейшем никак не повлияет на выводимый результат.
  • Локальная составляющая выводимого значения (глобального имени) может отличаться от локального имени базы данных, но лучше этого не делать.
  • Выводимое значение идентично фиксированному параметру GLOBAL_DB_NAME базы данных, значение которого храниться в таблице props$ схемы sys. Изменение этого значения оказывает влияние на выводимый результат, но только после перезагрузки экземпляра.
  • Выводимое значение (глобальное имя) можно изменить с помощью команды ALTER DATABASE RENAME GLOBAL_NAME, при этом перезагрузка экземпляра не требуется. Команда никогда не откидывает доменную составляющую глобального имени. Для этого надо вручную изменять строку параметра GLOBAL_DB_NAME в таблице props$.

Самое популярное

  • Практическое администрирование Oracle — Аудит. Часть1.
  • RMAN в примерах — Быстрый старт. Глава 1.
  • RMAN В ПРИМЕРАХ — Использование RMAN. Глава 3. Часть 2
  • RMAN В ПРИМЕРАХ — Конфигурирование окружения RMAN. Глава 4. Часть 1.
  • Дублирование базы данных с помощью RMAN. Часть 1.

Получить имя базы в SQLPLUS : Oracle

внутри myc.sql в одном из селектов необходимо использовать имя базы (%_basename%).
т.е. запрос типа SELECT trunc((Z.CheckDate)) .
как в нем сделать вывод имени базы данных ?
%_basename% — не работает.

█ 03.12.2014 09:10
select name from v$database;

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

call sqlplus %_username%/%_password%@%_basename% @myc.sql %_basename%
select &1 from dual
█ 03.12.2014 09:46

Так пробовали.
Первый вариант не подходит — ORA-01031: insufficient privileges (коннектимся под пользователем supermag, без as sysdba).

Второй — также не подходит. В текстовый файл помимо результатов записывается результат подстановок типа:
old 1: select &1 from dual
new 1: select ZEL from dual
А нужны только результаты запросов.

Можно ли объявить переменную в скрипте, ей присвоить значение переданной переменной, потом уже SPOOL и сам запрос, в котором эту переменную использовать ?

█ 03.12.2014 10:18

SELECT ora_database_name FROM dual;

█ 03.12.2014 10:19

Starter ➤ Можно ли объявить переменную в скрипте, ей присвоить значение переданной переменной, потом уже SPOOL и сам запрос, в котором эту переменную использовать ?

В линуксе — можно, в убогой винде — не знаю, как.
В первом варианте права можно и дать (я, кстати, логинился юзером и без проблем достал).
Во втором задать set verify off, чтобы old/new не выводило.
Можно еще

select sys_context(‘userenv’,’db_name’) from dual;
█ 03.12.2014 10:34

Всем спасибо!
В убогой винде SELECT ora_database_name FROM dual; также работает.
только запрос почему то выводится на две строки. Первая — имя базы, вторая — данные запроса.

Второй вариант — сделать verify off сработал.

Сам запрос по первому варианту:
SELECT ora_database_name,chr(9), trunc((Z.CheckDate)) as Field1,chr(9).

█ 03.12.2014 10:42

в убогой винде нельзя нормально сделать Поток из нескольких строк в Windows-cmd, я это имел ввиду
что скрипт-то делает?

and Z.CheckDate in( to_date(sysdate-1))
█ 03.12.2014 10:53

Скрипт — собирает выручку, число чеков, средний чек, число позиций в чеках, среднее число позиций в чеке, потом это по почте рассылается заинтересованным лицам.

по поводу зря как-то — на самом деле это урезанный вариант, в оригинале было and Z.CheckDate in( to_date(sysdate-1),to_date(sysdate-365))
и сам текст запроса — из бизнес анализа, т.е. делаем там задачу, берем что получается, корректируем (добавляем разделители, форматирование) и подсовываем в sqlplus.

█ 03.12.2014 11:12

select DB_UNIQUE_NAME from v$database; select DB_NAME from v$database; select INSTANCE_NAME from v$instance; select global_name FROM global_name; select SYS_CONTEXT ('USERENV', 'INSTANCE_NAME') from dual; select SYS_CONTEXT ('USERENV', 'DB_NAME') from dual;

На виндах (set timing on у меня правда, но его тоже отключить недолга):

PROD>>set head off PROD>>set trim off PROD>>SELECT ora_database_name FROM dual; PROD.QQQQQ.COM Elapsed: 00:00:00.02

З.Ы. Я бы со скриптом не морочился, а наваял бы процедуру. Хотя я не знаю как там у вас в Супермаге с лицензированием в таком случае.

Как узнать название базы

Author24 — интернет-сервис помощи студентам

Как узнать пароль Базы Access 2000
Есть База на А2000 (с паролем). Сделана, на мой взгляд, бестолково. Можно ли как-нибудь открыть.

Можно ли узнать, как устроены связи в таблицах, уже существующей базы данных в microsoft sql?
У меня задача, осознать структуру БД. Таблиц очень много, и мне для понимая, не помешала бы.

Название базы кириллицей
Здравствуйте, создаю приложение для android и столкнулся с проблемой. нужно в определеную базу.

4214 / 3056 / 582
Регистрация: 21.01.2011
Сообщений: 13,205

Цитата

Сообщение от sendxt

как узнать название базы, логин?

Название БД можно узнать из файла параметров. Если имеется ввиду алиас для подключения — тогда из файла tnsnames.ora
По поводу логина — находясь на сервере и если пользователь входит в соответ. группу (что-то типа ORA_DBA), то можно подключится без логина/пароля

1 2 3
> sqlplus /nolog SQL> conn / AS sysdba

11 / 11 / 13
Регистрация: 25.04.2012
Сообщений: 1,157

Grossmeister, а какая база по умолчанию создается? или как её создать в windows например?

Потому что при установке Oracle database Express edition 11g у меня запрашивали только пароль к sys / system , на линуксах название но никак не получается подключися

sys/ pasw localhost 1521 / xe

сломал уже голову не знаю что сделать)) ни когда с oracle не работал)

1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517

ЦитатаСообщение от sendxt Посмотреть сообщение

сломал уже голову не знаю что сделать)) ни когда с oracle не работал)
Заметно, только начинать надо не с штурма форума, с прочтения мануала.

ЦитатаСообщение от sendxt Посмотреть сообщение

Grossmeister, а какая база по умолчанию создается? или как её создать в windows например?

В xe одна бд и создаётся она по умолчанию, при конекте к ораклу бд не указывается, указывается sid/service name, а вообще повторюсь: RTFM.

11 / 11 / 13
Регистрация: 25.04.2012
Сообщений: 1,157

Gepar, Вот что тут не так то? если пароль точно тот что при установке задавал, для пользователей sys, system, пробовал галочку ставить на OS Authentication ничего не прокатывает.

Sqlplus таже байда не могу подключится к бд.

c sqldeveloper разобрался таблица открылась, осталось подключится к бд и залить её.

Регистрация: 17.12.2012
Сообщений: 71
Проверьте подключение через sqlplus, формат команды

sqlplus USER/password@ip_address:1521/xe

Если не подключается нужно проверьте настройки листенера:

lsnrctl STATUS

В выводе команды не должно быть строк с error.
Если такие есть, возможно листенер выключен, нужно запустить.
Настройки листенера хранятся в listener.ora (поиском можно найти)
Если с листенером все ок, возможно sid не прописан в tnsnames.ora, что конечно маловероятно.
Это если очень поверхностно

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как можно узнать из файла .m3u название песни и вывести это название в Label?
Я делаю свою программку для прослушивания радиостанций (хоть таких и полно — но мне хочется создать.

Можно ли имея доступ к SQL Server и зная название базы узнать весь список таблиц и поля этих таблиц в VB.NET?
можно ли имея доступ к SQL Server и зная название базы узнать весь список таблиц и поля этих таблиц.

Как узнать название таблицы
Есть очень большая таблица весом (1+ гб), я разбил ее на категории, получилось 32 таблицы. Пытаюсь.

Как узнать название монитора
Как узнать название монитора, как это делает виндоус

Как узнать название видеокарты
Пожалуйста помогите! Я делаю програмку с информацией о системе, но никак не могу найти код для.

Как узнать название драйвера?
Подключаюсь к MySQL с помощью компонента TADOConnection. ConnectionString для этого компонента.

Или воспользуйтесь поиском по форуму:

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

Все таже защита кода от несанкционированного копирования.
Подскажите пожалуйста можно ли узнать имя хоста на котором установлен оракл?
Заранее спасибо.

Re: Можно ли на PL/SQL узнать имя хоста на котором стоит ora

От: Аноним
Дата: 22.07.05 14:47
Оценка:

Здравствуйте, sergma, Вы писали:

S>Все таже защита кода от несанкционированного копирования.
S>Подскажите пожалуйста можно ли узнать имя хоста на котором установлен оракл?
S>Заранее спасибо.

Допустим база вертится на кластере (RAC, OPS, . ).
Что будешь делать? — искать айпишники всех хостов в кластере?

Защищай клиентское ПО, а не метаинформацию.

Re: Можно ли на PL/SQL узнать имя хоста на котором стоит ora

От: wildwind
Дата: 22.07.05 14:51
Оценка:

Здравствуйте, sergma, Вы писали:

S>Подскажите пожалуйста можно ли узнать имя хоста на котором установлен оракл?

Re[2]: Можно ли на PL/SQL узнать имя хоста на котором стоит

От: sergma
Дата: 22.07.05 15:03
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, sergma, Вы писали:

S>>Все таже защита кода от несанкционированного копирования.
S>>Подскажите пожалуйста можно ли узнать имя хоста на котором установлен оракл?
S>>Заранее спасибо.

А>Допустим база вертится на кластере (RAC, OPS, . ).
А>Что будешь делать? — искать айпишники всех хостов в кластере?

А>Защищай клиентское ПО, а не метаинформацию.

Клиентское ПО не наше, и защищать можно только скрипты.
А на кластер ПО точно не поставят.

Re[2]: Можно ли на PL/SQL узнать имя хоста на котором стоит

От: sergma
Дата: 22.07.05 15:04
Оценка:

Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, sergma, Вы писали:

S>>Подскажите пожалуйста можно ли узнать имя хоста на котором установлен оракл?

W>V$INSTANCE
Не увидел я в Oracle 9i такого view, может оно называется как то по другому?

Re[3]: Можно ли на PL/SQL узнать имя хоста на котором стоит

От: sergma
Дата: 22.07.05 15:20
Оценка:

Здравствуйте, sergma, Вы писали:

S>Здравствуйте, wildwind, Вы писали:

W>>Здравствуйте, sergma, Вы писали:

S>>>Подскажите пожалуйста можно ли узнать имя хоста на котором установлен оракл?

W>>V$INSTANCE
S>Не увидел я в Oracle 9i такого view, может оно называется как то по другому?
Sorry оказалось есть.

Re[3]: Можно ли на PL/SQL узнать имя хоста на котором стоит

От: wildwind
Дата: 22.07.05 15:22
Оценка:

Здравствуйте, sergma, Вы писали:

W>>V$INSTANCE
S>Не увидел я в Oracle 9i такого view, может оно называется как то по другому?

Физически это синоним. См. Oracle9i Database Reference, гл. 3 Dynamic Performance (V$) Views

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *