Come visualizzare l'elenco dei database in Oracle?


33

Esiste un equivalente SHOW DATABASESall'istruzione MySQL ?

È possibile trovare database in un cluster? cioè database presenti sulla rete su qualche altro sistema?

Potrei analizzare i file presenti su un'installazione Oracle per trovare lo stesso?

Date le credenziali di accesso completo a un sistema Oracle, come farebbe per enumerare tutti i database esistenti?


4
Si noti inoltre che esiste una discrepanza terminologica tra MySQL e Oracle Database. In termini di architettura, Oracle ha una tabella-> schema-> database e allo stesso tempo anche tabella-> tablespace-> database. MySQL ha semplicemente una tabella> database. Quindi forse stai davvero cercando un elenco di schemi Oracle (pensa: spazi dei nomi SQL per le tabelle) o un elenco di tablespace Oracle (pensa: gruppi di file del sistema operativo per le tabelle).
Kubanczyk,

Risposte:


22

Esiste un equivalente SHOW DATABASESall'istruzione MySQL ?

Non vi è nulla di simile. Puoi interrogare i listener su una macchina ( lsnrctl status) per vedere quali servizi sono registrati lì, ma ciò non associa uno a uno al database (e potrebbero esserci più listener sulla stessa macchina). In caso contrario, gli strumenti comunemente utilizzati si collegano a un'istanza di database e un'istanza appartiene a un singolo database.

Se stai parlando di cluster Oracle RAC, ogni istanza conosce i suoi peer (altre istanze che servono lo stesso database) e puoi trovare le altre istanze attualmente avviate per quel database usando la gv$instancevista.
È inoltre possibile utilizzare l' crsctlutilità per elencare i servizi (compresi i database) registrati nel cluster e il loro stato.
Se stai parlando del software di clustering di un altro fornitore, sono abbastanza sicuro che tutti abbiano questo tipo di utility di gestione delle risorse da interrogare.

Se stai parlando solo di un mucchio di macchine, allora no, non esiste un modo affidabile al 100% di enumerare tutti i database su una rete.

Per trovare database attivi (cioè avviati), cerca i *_pmon_*processi su Unix (ce n'è uno per istanza di database) e i servizi Oracle su Windows.

Per individuare le installazioni del software di database Oracle, consultare /etc/oratabUnix. Questo dovrebbe contenere tutte le ORACLE_HOMEs installate. Puoi guardare all'interno di ognuno di quelli in $ORACLE_HOME/dbsper spfile<SID>.orae / o init<SID>.orafile - ce ne sarà uno per ogni database.

(Credo che puoi trovare l'equivalente delle informazioni nelle oratabchiavi di registro di Windows qui sotto HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE, ma non conosco la sua struttura.)

Ora, ovviamente, se hai installato tutto il tuo database con un server OEM (Enterprise Manager) quando li hai installati, puoi trovare l'elenco completo lì - ma immagino che se lo stai chiedendo non è il caso.


12

Oracle non ha database ma schemi, con cui puoi elencarli

SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; 

o qualcosa del genere:

SELECT TABLESPACE_NAME FROM USER_TABLESPACES;

2
I tablespace non sono collegati agli schemi in generale.
Mat

2
TUTTI GLI UTENTI? USER_TABLESPACES?
kubanczyk,

"Esiste un equivalente dell'istruzione MySQL SHOW DATABASES?" sto cercando di rispondere a questa domanda. non dire che non lo sai
DevYudh,

1
@DevYudh: un tablespace in Oracle è qualcosa di completamente diverso da un "database" in MySQL. La prima query, se corretta, la seconda query è chiaramente sbagliata
a_horse_with_no_name

11

In parole povere, non esiste un'analogia diretta per i "database" di MySQL o un "cluster" su Oracle: la corrispondenza più vicina è uno "schema" ma è comunque molto diverso.

Questo apparentemente cambierà nel 12c con l'introduzione di database collegabili:

Dividere le operazioni del database in modo chiaro dal contenuto dell'utente è una trasformazione importante dalle architetture di database tradizionali. Oracle 11g, e tutti i suoi predecessori, potevano eseguire un solo database alla volta, ha detto Kyte. Se un'organizzazione voleva eseguire più database su un singolo server, avrebbe bisogno di eseguire più istanze di Oracle 11g, una per ciascun database. Come suggerisce il nome, i database collegabili consentono l'esecuzione di più database di titolari in un'unica copia di Oracle 12c.


Fantastico, più complicazioni, più sicurezza del lavoro ...
Kubanczyk,

6

Penso che una risposta per i futuri browser su * nix potrebbe essere:

gatto / etc / oratab


3

Connettiti ad ASM e controlla il client del database.

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
Questo presuppone che ASM sia in uso! Che dire dei database memorizzati su un filesystem o SAN?
Colin 't Hart,

3

Se si dispone di database collegabili (consigliato) su Oracle 12, è possibile effettuare le seguenti operazioni:

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

0

Affinché il database autonomo ottenga l'elenco dei database che vengono avviati automaticamente dopo il riavvio dell'host:

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

o semplicemente per ottenere l'elenco di tutti i database:

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

Per i database RAC può essere utile il seguente metodo:

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

Inoltre, come è già stato menzionato, il database in MySQL non è lo stesso del database in Oracle. In Oracle è più vicino allo schema, che è chiamato contenitore per gli oggetti dell'utente. Per ottenere l'elenco degli schemi è possibile utilizzare la seguente istruzione SQL:

select username from dba_users order by 1;

o per ottenere un elenco di schemi non correlati al sistema (disponibili in Oracle RDBMS a partire dalla versione 12c):

select username from dba_users where ORACLE_MAINTAINED='N' order by 1;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.