Comment voir la liste des bases de données dans Oracle?

33

Existe-t-il un équivalent à la SHOW DATABASESdéclaration MySQL ?

Est-il possible de trouver des bases de données dans un cluster? c'est-à-dire des bases de données présentes sur le réseau sur un autre système?

Puis-je analyser les fichiers présents sur une installation Oracle pour les trouver?

Étant donné les informations d'identification d'accès complètes à un système Oracle, comment procéder pour énumérer toutes les bases de données existantes?

Kshitiz Sharma
la source
4
Notez également qu'il existe une incompatibilité terminologique entre MySQL et Oracle Database. En termes d'architecture, Oracle a table-> schéma-> base de données, et en même temps table-> tablespace-> base de données. MySQL a simplement table-> base de données. Alors peut-être que vous recherchez vraiment une liste de schémas Oracle (pensez: des espaces de noms SQL pour les tables) ou une liste des espaces de table Oracle (pensez: des groupes de fichiers OS pour les tables).
kubanczyk

Réponses:

22

Existe-t-il un équivalent à la SHOW DATABASESdéclaration MySQL ?

Il n'y a pas une telle chose. Vous pouvez interroger des écouteurs sur une machine ( lsnrctl status) pour voir quels services y sont enregistrés, mais cela ne mappe pas un à un vers la base de données (et il peut y avoir plusieurs écouteurs sur la même machine). Sinon, les outils couramment utilisés se connectent à une instance de base de données et une instance appartient à une seule base de données.

Si vous parlez de clusters Oracle RAC, chaque instance connaît ses homologues (d'autres instances qui desservent la même base de données) et vous pouvez trouver les autres instances actuellement démarrées pour cette base de données à l'aide de la gv$instancevue.
Vous pouvez également utiliser l' crsctlutilitaire pour répertorier les services (y compris les bases de données) qui sont enregistrés dans le cluster et leur état.
Si vous parlez d'un logiciel de mise en cluster d'un autre fournisseur, je suis quasiment sûr qu'ils ont tous ces types d'utilitaires de gestion des ressources à interroger.

Si vous ne parlez que d'un tas de machines, alors non, il n'existe aucun moyen fiable à 100% d'énumérer toutes les bases de données sur un réseau.

Pour trouver des bases de données actives (c'est-à-dire démarrées), recherchez les *_pmon_*processus sous Unix (il y en a un par instance de base de données) et les services Oracle sous Windows.

Pour localiser les installations du logiciel de base de données Oracle, regardez /etc/oratabsous Unix. Il doit contenir tous les ORACLE_HOMEs installés. Vous pouvez regarder à l' intérieur chacun de ceux $ORACLE_HOME/dbspour spfile<SID>.oraet / ou init<SID>.orafichiers - il y aura une pour chaque base de données.

(Je pense que vous pouvez trouver l'équivalent des informations dans oratables clés de registre Windows ci HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE- dessous , mais je ne connais pas sa structure.)

Maintenant, bien sûr, si vous avez enregistré toute votre base de données avec un serveur OEM (Enterprise Manager) lorsque vous les avez installés, vous pouvez trouver la liste complète là-bas - mais je suppose que si vous demandez ce n'est pas le cas.

Tapis
la source
12

Oracle n'a pas de bases de données mais des schémas, vous pouvez les répertorier avec

SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; 

ou quelque chose comme ça :

SELECT TABLESPACE_NAME FROM USER_TABLESPACES;
DevYudh
la source
2
Les espaces disque logiques ne sont pas liés aux schémas en général.
Mat
2
TOUS LES UTILISATEURS? USER_TABLESPACES?
kubanczyk
"Existe-t-il un équivalent à l'instruction MySQL SHOW DATABASES?" Im essayant de répondre à cette question. ne dites pas que vous ne savez pas
DevYudh
1
@DevYudh: un espace de table dans Oracle est quelque chose de complètement différent d'une "base de données" dans MySQL. La première requête si elle est correcte, la deuxième requête est tout à fait fausse
a_horse_with_no_name
11

En termes simples, il n'y a pas d'analogie directe avec les "bases de données" MySQL ou un "cluster" sur Oracle: la correspondance la plus proche est un "schéma" mais cela reste très différent.

Cela va apparemment changer en 12c avec l'introduction de bases de données enfichables:

La division nette des opérations de base de données du contenu de l'utilisateur est une transformation majeure des architectures de base de données traditionnelles. Oracle 11g et tous ses prédécesseurs ne pouvaient exécuter qu'une seule base de données à la fois, a déclaré Kyte. Si une organisation souhaite exécuter plusieurs bases de données sur un seul serveur, elle doit exécuter plusieurs instances d'Oracle 11g, une pour chaque base de données. Comme son nom l'indique, les bases de données enfichables permettent à plusieurs bases de données de locataires de s'exécuter sous une seule copie d'Oracle 12c.

Jack Douglas
la source
Euh super, plus de complication, plus de sécurité d'emploi ...
kubanczyk
6

Je pense qu'une réponse pour les futurs navigateurs sur * nix pourrait être:

chat / etc / oratab

rlblyler
la source
3

Connectez-vous simplement à ASM et vérifiez le client de base de données.

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;
t.menard
la source
1
Cela suppose que l'ASM est utilisé! Qu'en est-il des bases de données stockées sur un système de fichiers ou un SAN?
Colin 't Hart
3

Si vous disposez de bases de données enfichables (recommandées) sur Oracle 12, vous pouvez effectuer les opérations suivantes:

SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;
Peter
la source
0

Pour que la base de données autonome obtienne la liste des bases de données qui démarrent automatiquement après le redémarrage de l'hôte:

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

ou tout simplement pour obtenir la liste de toutes les bases de données:

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

Pour les bases de données RAC, la méthode suivante peut être utile:

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

De plus, comme cela a déjà été mentionné, la base de données dans MySQL n'est pas la même que la base de données dans Oracle. Dans Oracle, il est plus proche du schéma - c'est-à-dire nommé conteneur pour les objets de l'utilisateur. Pour obtenir la liste des schémas, vous pouvez utiliser l'instruction SQL suivante:

select username from dba_users order by 1;

ou pour obtenir la liste des schémas non liés au système (disponible dans Oracle RDBMS à partir de la version 12c):

select username from dba_users where ORACLE_MAINTAINED='N' order by 1;
Prokhozhii
la source