Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Все базы данных на Oracle


Автор: N1ko 29.6.2010, 16:08
Скажите плз, реально ли вообще в Oracle вывести список всех Баз Данных на сервере? В SQL всё очень просто делалось при помощи master, а как это делается здесь никак не разберусь. Буду очень благодарен за помощ.

Автор: ToshaCh 29.6.2010, 17:44
Никак. Если коротко. Если длиннее, то это проблема идиологии.

Для начала определимся с главными понятиями:
  •  База данных - совокупность данных (обычно представленная в виде файлов на диске, хотя это не обязательно), которая где-то хранится и как-то организована.
  •  СУБД - система управления базами данных - програмный комплекс для доступа к БД
  •  Экземпляр СУБД (инстанс в терминах Oracle) - совокупность запущенных процессов СУБД как-то себя идентифицирующая.
Теперь в чем проблемы идиологии. В mysql, postgres и многих других действует взаимоотношение: один экземпляр - много баз данных (не берём сейчас кластеры). В oracle ситуация такова: один экземпляр - одна база (опять таки не берём кластеры). Таким образом в mysql и иже с ним обратившись к экземпляру СУБД ты можешь спросить какие базы он обслуживает. В oracle, ты тоже можешь спросить, но обслуживает он только одну, поэтому про одну тебе и ответит. 

В какой-то мере тебе могут помощь следущие трюки (если есть доступ к серверу)
  •  На unix. Посмотреть /etc/oratab. Если базы создавались через dbca, то он там хранит полный список. Но список может быть не актуальным если базы создавались/удалялись руками. На винде тоже такое есть, но я не помню где. 
  •  На unix. Посмотреть в памяти уникальные процессы типа smon или pmon (всегда по одному на инстанс). Они называются, обычно, pmon_<имя_инстанса>. 
  •  На windows. Посмотреть запущенные службы. Должны быть службы (инстансы) называемые как-то типа oracleSID.
  •  Запустить dbca - он расскажет, но только про базы управляемые из его ORACLE_HOME и указанные в oratab.
Проблема в том, что mysql и др. изначально консолидированы для простоты, а oracle распределён,для надёжности. 

Напоследок самый действенный метод: спросить у DBA. smile

Автор: Zloxa 29.6.2010, 20:34
ToshaCh, ты прав, но если брать по аналогии с m$, то ихняя база в оракле - пользователь/схема.
в этом случае select * from dba_users

Автор: N1ko 30.6.2010, 11:17
Всё понятно. Спасибо большое за разъяснение.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)