Як побачити список баз даних в Oracle?


33

Чи є еквівалент SHOW DATABASESоператору MySQL ?

Чи можливо знайти бази даних в кластері? тобто бази даних, присутні в мережі в якійсь іншій системі?

Чи можу я проаналізувати файли, наявні в установці Oracle, щоб знайти те саме?

З огляду на повний обліковий запис доступу до системи Oracle, як би ви вирішили перерахувати всі існуючі бази даних?


4
Зауважте також, що між MySQL та Oracle Database є термінологічне невідповідність Що стосується архітектури, Oracle має таблицю-> схему-> базу даних, і в той же час також таблицю-> таблицю-> базу даних. У MySQL є просто таблиця-> база даних. Тож, можливо, ви справді шукаєте список схем Oracle (думаю: простори імен SQL для таблиць) або список таблиць Oracle таблиць (думаю: групи файлів ОС для таблиць).
kubanczyk

Відповіді:


22

Чи є еквівалент SHOW DATABASESоператору MySQL ?

Немає такого. Ви можете запитувати слухачів на машині ( lsnrctl status), щоб побачити, які сервіси там зареєстровані, але це не прив'язує один до одного до бази даних (і на одній машині може бути декілька слухачів). В іншому випадку використовувані інструменти підключаються до одного екземпляра бази даних, а екземпляр належить до однієї бази даних.

Якщо ви говорите про кластери OAC RAC, то кожен екземпляр знає про своїх аналогів (інші екземпляри, які обслуговують ту саму базу даних), і ви можете знайти інші екземпляри, запущені для цієї бази даних, використовуючи gv$instanceпредставлення даних.
Ви також можете скористатися crsctlутилітою для переліку служб (включаючи бази даних), які зареєстровані в кластері, та їх статусу.
Якщо ви говорите про кластерне програмне забезпечення іншого постачальника, я впевнений, що всі вони мають такі типи утиліт управління ресурсами для запиту.

Якщо ви говорите лише про купу машин, то ні, немає 100% надійного способу перерахування всіх баз даних в мережі.

Щоб знайти активні (тобто запущені) бази даних, шукайте *_pmon_*процеси в Unix (є один на примірник бази даних) та службах Oracle в Windows.

Щоб знайти установки програмного забезпечення баз даних Oracle, подивіться /etc/oratabна Unix. Він повинен містити всі ORACLE_HOMEвстановлені s. Ви можете заглянути всередину кожного з них в $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?
kubanczyk

"Чи існує еквівалент оператору MySQL SHOW DATABASES?" я намагаюся відповісти на це питання. не кажи, що ти не знаєш
DevYudh

1
@DevYudh: простір таблиць в Oracle - це щось зовсім інше, ніж "база даних" в MySQL. Перший запит, якщо він правильний, другий запит - неправильний
a_horse_with_no_name

11

Простіше кажучи, немає прямої аналогії для "баз даних" MySQL або "кластера" в Oracle: найближчий збіг - це "схема", але це все ще дуже відрізняється.

Це, мабуть, зміниться в 12c із впровадженням підключаються баз даних:

Чітке розділення операцій з базою даних від вмісту користувача - це головне перетворення від традиційних архітектур баз даних. Оракул 11g та всі його попередники могли запускати по одній базі даних за один раз, сказав Кейт. Якщо організація хотіла запустити кілька баз даних на одному сервері, їй потрібно було б запустити кілька екземплярів Oracle 11g, по одному для кожної бази даних. Як випливає з назви, підключувані бази даних дозволяють запускати кілька баз даних орендарів під однією копією Oracle 12c.


Ну чудово, більше ускладнень, більше безпеки роботи ...
kubanczyk

6

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

кіт / тощо / оратаб


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.