127 votes

Vérification d'oracle sid et du nom de la base de données

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

J'utilise la requête suivante pour vérifier le SID d'Oracle.

select instance from v$thread;

mais l'erreur "table ou vue inexistante" apparaît.

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

select name from v$database;

mais l'erreur "table ou vue inexistante" apparaît.

Une idée pour les deux problèmes ci-dessus ?

0 votes

Utiliser SELECT INSTANCE_NAME FROM V$INSTANCE ;

167voto

V4Vendetta Points 15354

Je présume SELECT user FROM dual; devrait vous donner l'utilisateur actuel

y 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;

1 votes

Merci pour cette réponse rapide, est-ce que l'instance et le SID d'Oracle sont la même chose ?

2 votes

@Adnan Ils ne doivent pas nécessairement être identiques car il peut y avoir plusieurs instances de la base de données fonctionnant sur une seule machine ; ils sont identifiés par le SID.

0 votes

@adnan Avez-vous obtenu les valeurs dont vous aviez besoin ?

78voto

Si, comme moi, votre objectif est d'obtenir l'hôte et le SID de la base de données 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 nom d'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

0 votes

Parfait. C'est exactement ce que je voulais savoir, mais je ne savais pas comment le formuler.

0 votes

Moi aussi. Merci Sergio !

52voto

Patrick Marchand Points 1354

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

Il est intéressant de noter que toutes les méthodes ne 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

1 votes

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.

27voto

APC Points 69630

Les vues V$ sont principalement des vues dynamiques des métriques du système. Elles sont utilisées pour l'optimisation des performances, la surveillance des sessions, etc. L'accès est donc limité aux utilisateurs DBA par défaut, c'est pourquoi vous obtenez ORA-00942 .

La méthode la plus simple pour trouver le nom de la base de données est la suivante :

select * from global_name;

Cette vue est accordée à PUBLIC, donc tout le monde peut l'interroger.

0 votes

Qu'en est-il de l'oracle SID ? Existe-t-il une méthode pour le vérifier à partir du compte Scott ?

1 votes

C'est le nom du service, pas le SID.

3voto

FreshPhilOfSO Points 1334

Comme cela a été mentionné plus haut,

select global_name from global_name;

est la voie à suivre.

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X