Jak mogę potwierdzić, że baza danych to Oracle i która wersja używa SQL?


165

Buduję instalator aplikacji. Użytkownik może wybrać skonfigurowane przez siebie źródło danych i wyznaczyć typ bazy danych. Chcę potwierdzić, że typem bazy danych jest rzeczywiście Oracle i jeśli to możliwe, jaką wersję Oracle działają, wysyłając instrukcję SQL do źródła danych.


A co z twoim językiem programowania? Tego rodzaju pytanie naprawdę zależy od języka API dostępu do bazy danych.
gizmo

Mogę założyć, że mam źródło danych JDBC. Jeśli połączenie nie powiedzie się lub polecenie sql wygeneruje błąd, z pewnością mogę to złapać i odpowiednio potraktować.
modius

Odpowiedzi:


286

Uruchom ten SQL:

select * from v$version;

Otrzymasz wynik taki jak:

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
Wszystkie wersje Oracle, z których kiedykolwiek korzystałem. Nie mogę mówić za Oracle 5.0 i wcześniej!
Tony Andrews,

1
Ta technika zawiodła w przypadku Oracle 11.2.0.2.0, ale mam problemy z uprawnieniami do logowania. Jednak dla tych, którzy mogą znajdować się w tej samej łodzi co ja, zadziałała druga technika wspomniana na tej stronie przez Lawrence'a: wybierz * z produktu_component_version
sugardaddy.

1
Nie działa, jeśli nie masz uprawnień do wyświetlania v $. Odpowiedź Lawrence'a ma na to odpowiedź
JumpingJezza

@TonyAndrews: Jakie są wyniki po wybraniu * z wersji v $; zawodzi?
Atmesh Mishra,

@AtmeshMishra: Nie jestem pewien - może ORA-00942: table or view does not exist? Co dostajesz?
Tony Andrews

46

Dwie metody:

select * from v$version;

da tobie:

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

LUB Identyfikacja wersji oprogramowania Oracle Database :

select * from product_component_version;

da tobie:

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

świetnie ... potrzebowałem product_component_version .. ponieważ nie miałem dostępu do wyświetleń v $
ShoeLace

To drugie zapytanie jest znacznie bardziej odpowiednie do automatycznego sprawdzania, ponieważ wymaga zdefiniowania formatu danych, a nie polegania na analizie ad-hoc. Dzięki za wiadomość!
jpaugh

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

1
Najlepsza odpowiedź, ponieważ podaje tylko numer wersji, dlatego nie ma potrzeby analizowania danych wyjściowych w celu wyodrębnienia wersji w zautomatyzowanym skrypcie.
pseudokod

@omeinush doskonale ze mną współpracuje (11.2.0.3).
zwiastun

@tjati Wygląda na to, że zależy nie od wersji, ale od uprawnień użytkownika. V$INSTANCEnajwyraźniej nie jest domyślnie dostępny globalnie.
jpmc26

7

Możesz użyć

SELECT * FROM v$version;

lub

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

jeśli nie chcesz analizować danych wyjściowych wersji v $.


3

Jeśli Twoja instancja nie działa, poszukaj informacji o wersji w pliku alert.log

Innym prostym sposobem jest przyjrzenie się plikowi binarnemu Oracle. Jeśli baza danych jest hostowana w systemie Linux, wypróbuj ciągi znaków w pliku binarnym Oracle.

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

1

Do użytku Oracle:

Select * from v$version;

W przypadku serwera SQL użyj:

Select @@VERSION as Version

a do użytku MySQL:

Show variables LIKE "%version%";

0

Następująca instrukcja SQL:

select edition,version from v$instance

zwroty:

  • edycja bazy danych np. „XE”
  • wersja bazy danych np. „12.1.0.2.0”

(oczywiście konieczne jest wybranie uprawnień do widoku instancji v $)


0

Możemy skorzystać z poniższych metod, aby uzyskać numer wersji Oracle.

Metoda nr: 1

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

Metoda nr: 2

SQL> select *
  2  from v$version;

-2

Oto prosta funkcja:

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
/

Gotowe.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.