Comment puis-je confirmer qu'une base de données est Oracle et quelle version utilise SQL?


165

Je construis un installateur pour une application. L'utilisateur peut sélectionner une source de données qu'il a configurée et désigner le type de base de données dont il s'agit. Je veux confirmer que le type de base de données est bien Oracle et, si possible, quelle version d'Oracle ils exécutent en envoyant une instruction SQL à la source de données.


Et votre langage de programmation? Ce type de question dépend vraiment de l'API du langage pour l'accès à la base de données.
gizmo

Je peux supposer que j'ai une source de données JDBC. Si la connexion échoue, ou si l'instruction SQL génère une erreur, je peux certainement intercepter cela et le traiter en conséquence.
modius

Réponses:


286

Exécutez ce SQL:

select * from v$version;

Et vous obtiendrez un résultat comme:

BANNER
----------------------------------------------------------------
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production
PL/SQL Release 10.2.0.3.0 - Production
CORE    10.2.0.3.0      Production
TNS for Solaris: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production

2
Toutes les versions d'Oracle que j'ai jamais utilisées. Je ne peux pas parler pour Oracle 5.0 et avant!
Tony Andrews

1
Cette technique a échoué pour moi sur Oracle 11.2.0.2.0, mais j'ai des problèmes d'autorisation de connexion. Cependant, pour ceux qui pourraient être dans le même bateau que moi, la deuxième technique mentionnée sur cette page par Lawrence a fonctionné: select * from product_component_version
sugardaddy

1
Ne fonctionne pas si vous n'êtes pas autorisé à accéder à v $ views. La réponse de Lawrence a une réponse à cela
JumpingJezza

@TonyAndrews: à quoi ressemble la sortie lorsque sélectionnez * à partir de la version v $; échoue?
Atmesh Mishra

@AtmeshMishra: Je ne suis pas sûr - peut-être ORA-00942: table or view does not exist? Qu'est ce que tu obtiens?
Tony Andrews

46

Deux méthodes:

select * from v$version;

te donnera:

Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for Solaris: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production

OU Identification de la version de votre logiciel Oracle Database :

select * from product_component_version;

te donnera:

PRODUCT VERSION STATUS
NLSRTL  11.1.0.6.0  Production
Oracle Database 11g Enterprise Edition  11.1.0.6.0  64bit Production
PL/SQL  11.1.0.6.0  Production
TNS for Solaris:    11.1.0.6.0  Production

super ... j'avais besoin de product_component_version .. car je
n'avais

Cette deuxième requête est beaucoup plus adaptée à la vérification automatique, car elle nécessite de définir un format de données, plutôt que de s'appuyer sur une analyse ad hoc. Merci d'avoir posté!
jpaugh

29
SQL> SELECT version FROM v$instance;
VERSION
-----------------
11.2.0.3.0

1
Meilleure réponse car il ne donne que le numéro de version, donc pas besoin d'analyser la sortie pour extraire la version dans un script automatisé.
pseudocode

@omeinush Fonctionne parfaitement avec moi (11.2.0.3).
collapsar le

@tjati Cela semble dépendre non pas de la version, mais des autorisations de l'utilisateur. V$INSTANCEn'est apparemment pas disponible globalement par défaut.
jpmc26

7

Vous pouvez soit utiliser

SELECT * FROM v$version;

ou

SET SERVEROUTPUT ON
EXEC dbms_output.put_line( dbms_db_version.version );

si vous ne souhaitez pas analyser la sortie de v $ version.


3

Si votre instance est en panne, vous recherchez les informations de version dans alert.log

Ou une autre manière grossière est de regarder dans le binaire Oracle, si la base de données est hébergée sur Linux, essayez les chaînes sur le binaire Oracle.

strings -a $ORACLE_HOME/bin/oracle |grep RDBMS | grep RELEASE

1

Pour l'utilisation d'Oracle:

Select * from v$version;

Pour l'utilisation du serveur SQL:

Select @@VERSION as Version

et pour une utilisation MySQL:

Show variables LIKE "%version%";

0

L'instruction SQL suivante:

select edition,version from v$instance

Retour:

  • édition de base de données, par exemple. "XE"
  • version de la base de données, par exemple. "12.1.0.2.0"

(sélectionner le privilège sur la vue de l'instance v $ est bien sûr nécessaire)


0

Nous pouvons utiliser les méthodes ci-dessous pour obtenir le numéro de version d'Oracle.

Méthode n °: 1

set serveroutput on;
BEGIN 
DBMS_OUTPUT.PUT_LINE(DBMS_DB_VERSION.VERSION || '.' || DBMS_DB_VERSION.RELEASE); 
END;

Méthode n °: 2

SQL> select *
  2  from v$version;

-2

Voici une fonction simple:

CREATE FUNCTION fn_which_edition
        RETURN VARCHAR2
    IS

    /*

        Purpose: determine which database edition

        MODIFICATION HISTORY
        Person      Date        Comments
        ---------   ------      -------------------------------------------
        dcox        6/6/2013    Initial Build

    */

    -- Banner
    CURSOR c_get_banner
    IS
        SELECT banner
          FROM v$version
         WHERE UPPER(banner) LIKE UPPER('Oracle Database%');

    vrec_banner c_get_banner%ROWTYPE; -- row record
    v_database VARCHAR2(32767); --

BEGIN
    -- Get banner to get edition
    OPEN c_get_banner;
    FETCH c_get_banner INTO vrec_banner;
    CLOSE c_get_banner;

    -- Check for Database type
    IF INSTR( UPPER(vrec_banner.banner), 'EXPRESS') > 0
    THEN
        v_database := 'EXPRESS';
    ELSIF INSTR( UPPER(vrec_banner.banner), 'STANDARD') > 0
    THEN
        v_database := 'STANDARD';
    ELSIF INSTR( UPPER(vrec_banner.banner), 'PERSONAL') > 0
    THEN
        v_database := 'PERSONAL';
    ELSIF INSTR( UPPER(vrec_banner.banner), 'ENTERPRISE') > 0
    THEN
        v_database := 'ENTERPRISE';
    ELSE
        v_database := 'UNKNOWN';
    END IF;

    RETURN v_database;
EXCEPTION
    WHEN OTHERS
    THEN
        RETURN 'ERROR:' || SQLERRM(SQLCODE);
END fn_which_edition; -- function fn_which_edition
/

Terminé.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.