Vérification de l'identifiant Oracle et du nom de la base de données

115

Je veux vérifier le SID et le nom actuel de la base de données.

J'utilise la requête suivante pour vérifier le SID oracle

select instance from v$thread;

mais la table ou la vue n'existe pas, une erreur arrive.

J'utilise la requête suivante pour vérifier le nom actuel de la base de données

select name from v$database;

mais la table ou la vue n'existe pas, une erreur arrive.

Une idée pour au-dessus de deux problèmes?

Adnan
la source

Réponses:

148

Je suppose que je SELECT user FROM dual;devrais vous donner l'utilisateur actuel

et SELECT sys_context('userenv','instance_name') FROM dual;le nom de l'instance

Je crois que vous pouvez obtenir le SID comme SELECT sys_context('USERENV', 'SID') FROM DUAL;

V4Vendetta
la source
1
Merci pour une réponse rapide. L'instance et l'oracle SID sont-ils la même chose?
Adnan le
2
@Adnan Ils n'ont pas besoin d'être les mêmes car il pourrait y avoir plusieurs instances de la base de données s'exécutant sur une seule machine, elles sont identifiées par SID
V4Vendetta
@adnan Avez-vous obtenu les valeurs dont vous aviez besoin?
V4Vendetta
8
select sys_context('userenv','db_name') from dual;pour le nom de la base de données et le sid, j'ai déjà ajouté dans la réponse. j'espère que cela vous donne ce que vous voulez
V4Vendetta
2
S'il vous plaît vérifier ce lien
V4Vendetta
57

Si, comme moi, votre objectif est d'obtenir l'hôte de la base de données et le SID pour générer une URL Oracle JDBC, comme

jdbc:oracle:thin:@<server_host>:1521:<instance_name>

les commandes suivantes vous aideront:

Commande de requête Oracle pour vérifier le SID (ou le nom de l'instance):

select sys_context('userenv','instance_name') from dual; 

Commande de requête Oracle pour vérifier le nom de la base de données (ou l'hôte du serveur):

select sys_context('userenv', 'server_host') from dual;

Att. Sergio Marcelo

Sergio MC Figueiredo
la source
Parfait. C'est exactement ce que je voulais savoir, mais je ne savais pas comment exprimer.
Addison
Moi aussi. Merci Sergio!
horseatingweeds
48

Par souci d'exhaustivité, vous pouvez également utiliser ORA_DATABASE_NAME.

Il peut être intéressant de noter que toutes les méthodes ne vous donnent pas le même résultat:

SQL> select sys_context('userenv','db_name') from dual;

SYS_CONTEXT('USERENV','DB_NAME')
--------------------------------------------------------------------------------
orcl

SQL> select ora_database_name from dual;

ORA_DATABASE_NAME
--------------------------------------------------------------------------------
ORCL.XYZ.COM

SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
ORCL.XYZ.COM
Patrick Marchand
la source
Aucune autorisation spéciale n'est nécessaire pour les requêtes ci-dessus. Vérifié en créant un nouvel utilisateur avec le privilège CONNECT uniquement.
bdeem
22

Les vues V $ sont principalement des vues dynamiques des métriques système. Ils sont utilisés pour le réglage des performances, la surveillance de session, etc. L'accès est donc limité aux utilisateurs DBA par défaut, c'est pourquoi vous obtenez ORA-00942.

Le moyen le plus simple de trouver le nom de la base de données est:

select * from global_name;

Cette vue est accordée à PUBLIC, donc n'importe qui peut l'interroger.

APC
la source
Qu'en est-il d'Oracle SID? Existe-t-il une méthode pour le vérifier à partir du compte Scott?
Adnan le
1
C'est le nom du service, pas le SID.
jpmc26
5

Tapez sur l' sqlplusinvite de commande

SQL> select * from global_name;

alors vous verrez le résultat sur l'invite de commande

SQL ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM

Ici, le premier "ORCL" est le nom de la base de données, peut être votre système "XE" et d'autres ce qui a été donné lors du téléchargement d'Oracle.

anant kumar
la source
Merci, tu as fait ma journée.
Muhammad Ashikuzzaman
2

Comme cela a été mentionné ci-dessus,

select global_name from global_name;

est la voie à suivre.

Vous ne pouvez pas interroger v $ database / v $ instance / v $ thread car votre utilisateur ne dispose pas des autorisations requises. Vous pouvez leur accorder (via un compte DBA) avec:

grant select on v$database to <username here>;
Phil
la source