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.