Как посмотреть список баз данных в Oracle?


33

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

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

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

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


4
Обратите внимание, что существует несоответствие терминологии между MySQL и Oracle Database. С точки зрения архитектуры у Oracle есть таблица-> схема-> база данных, и в то же время также таблица-> табличное пространство-> база данных. У MySQL просто таблица-> база данных. Поэтому, возможно, вы действительно ищете список схем Oracle (представьте себе: пространства имен SQL для таблиц) или список табличных пространств Oracle (представьте: группы файлов ОС для таблиц).
Кубанчик

Ответы:


22

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

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

Если вы говорите о кластерах Oracle RAC, то каждый экземпляр знает своих одноранговых узлов (другие экземпляры, которые обслуживают одну и ту же базу данных), и вы можете найти другие экземпляры, запущенные в данный момент для этой базы данных, используя gv$instanceпредставление.
Вы также можете использовать crsctlутилиту для перечисления служб (включая базы данных), которые зарегистрированы в кластере, и их статус.
Если вы говорите о программном обеспечении для кластеризации другого производителя, я уверен, что у них всех есть такие утилиты управления ресурсами для запроса.

Если вы говорите только о группе машин, то нет, нет 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), когда вы их установили, вы можете найти полный список там - но я думаю, если вы спросите, это не так.


12

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

SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; 

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

SELECT TABLESPACE_NAME FROM USER_TABLESPACES;

2
Табличные пространства вообще не связаны со схемами.
Мат

2
ВСЕ ПОЛЬЗОВАТЕЛИ? USER_TABLESPACES?
Кубанчик

"Есть ли эквивалент оператора MySQL SHOW DATABASES?" Я пытаюсь ответить на этот вопрос. не говори, что не знаешь
DevYudh

1
@DevYudh: табличное пространство в Oracle - это нечто совершенно иное, чем «база данных» в MySQL. Первый запрос, если правильный, второй запрос просто неверен
a_horse_with_no_name

11

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

Очевидно, это изменится в 12c с введением подключаемых баз данных:

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


Э-э, здорово, больше сложностей, больше безопасности работы ...
kubanczyk

6

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

кот / etc / oratab


3

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

set pages 999 lines 120
col SOFTWARE_VERSION for A15
col INSTANCE_NAME for A20
col DB_NAME for A20 trunc
select INSTANCE_NAME, DB_NAME, STATUS, SOFTWARE_VERSION as "version"
from  V$ASM_CLIENT;

1
Это предполагает, что ASM используется! Как насчет баз данных, хранящихся в файловой системе или SAN?
Colin 't Hart,

3

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

SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;

0

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

cat /etc/oratab | grep -i ":y" | grep -v "^#"

или просто получить список всех баз данных:

cat /etc/oratab | grep -v "^#"

Для баз данных RAC может быть полезен следующий метод:

crsctl stat res -t | grep "\.db"

Также, как уже упоминалось, база данных в MySQL отличается от базы данных в Oracle. В Oracle это ближе к схеме - это именуемый контейнер для объектов пользователя. Для получения списка схем вы можете использовать следующую инструкцию SQL:

select username from dba_users order by 1;

или получить список не связанных с системой схем (доступно в Oracle RDBMS начиная с версии 12c):

select username from dba_users where ORACLE_MAINTAINED='N' order by 1;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.