web-dev-qa-db-fra.com

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

Existe-t-il un équivalent à MySQL SHOW DATABASES déclaration?

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?

Compte tenu des 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?

38
Kshitiz Sharma

Existe-t-il un équivalent à MySQL SHOW DATABASES déclaration?

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 à 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 (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 gv$instance vue.
Vous pouvez également utiliser l'utilitaire crsctl pour répertorier les services (y compris les bases de données) 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 rechercher des bases de données actives (c'est-à-dire démarrées), recherchez *_pmon_* processus sous Unix (il y en a un par instance de base de données) et services Oracle sous Windows.

Pour localiser les installations du logiciel de base de données Oracle, consultez /etc/oratab sur Unix. Il doit contenir tous les Oracle_HOMEs installé. Vous pouvez regarder à l'intérieur de chacun de ceux dans $Oracle_HOME/dbs pour spfile<SID>.ora et/ou init<SID>.ora fichiers - il y en aura un pour chaque base de données.

(Je pense que vous pouvez trouver l'équivalent des informations dans oratab dans les clés de registre Windows ci-dessous HKEY_LOCAL_MACHINE\SOFTWARE\Oracle, 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.

23
Mat

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;
12
DevYudh

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.

C'est apparemment va 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 copie d'Oracle 12c.

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

chat/etc/oratab

6
rlblyler

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;
3
Peter

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;
3
t.menard

Pour que la base de données autonome obtienne la liste des bases de données démarrées 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;
0
Prokhozhii