Bir veritabanının Oracle olduğunu ve SQL'in hangi sürümünü kullandığını nasıl doğrulayabilirim?


165

Bir uygulama için yükleyici kuruyorum. Kullanıcı yapılandırdığı bir veri kaynağını seçer ve ne tür bir veritabanı olduğunu belirler. Veritabanı türünün gerçekten Oracle olduğunu ve mümkünse, veri kaynağına bir SQL ifadesi göndererek Oracle'ın hangi sürümünü çalıştırdıklarını doğrulamak istiyorum.


Programlama diliniz ne olacak? Bu tür bir soru gerçekten DB erişimi için dil API'sine bağlıdır.
gizmo

JDBC veri kaynağım olduğunu varsayabilirim. Bağlantı başarısız olursa veya sql deyimi üretir ve hata sonra kesinlikle tuzak ve buna göre tedavi edebilirsiniz.
modius

Yanıtlar:


286

Bu SQL'i çalıştırın:

select * from v$version;

Ve şöyle bir sonuç elde edersiniz:

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
Şimdiye kadar kullandığım tüm Oracle sürümleri. Oracle 5.0 ve öncesi için konuşamıyorum!
Tony Andrews

1
Bu teknik benim için Oracle 11.2.0.2.0'da başarısız oldu, ancak bazı giriş izni sorunları yaşıyorum. Bununla birlikte, benimle aynı teknede olabilecekler için, Lawrence tarafından bu sayfada belirtilen ikinci teknik işe yaradı: product_component_version
sugardaddy'den

1
V $ görünümlerine izniniz yoksa çalışmaz. Lawrence'ın cevabının bunun için bir cevabı var
JumpingJezza

@TonyAndrews: v $ sürümünden * seçildiğinde çıktı nasıl olur; başarısız?
Atmesh Mishra

@AtmeshMishra: Emin değilim - belki ORA-00942: table or view does not exist? Siz ne alırsınız?
Tony Andrews

46

İki yöntem:

select * from v$version;

sana vereceğim:

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

VEYA Oracle Veritabanı Yazılımı Sürümünüzü Belirleme :

select * from product_component_version;

sana vereceğim:

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

büyük ... i gerekir product_component_version .. gibi v $ görünümlerine erişim yoktu
ShoeLace

Bu ikinci sorgu, geçici ayrıştırmaya dayanmak yerine bir veri formatı tanımlaması gerektirdiğinden, otomatik kontrol için çok daha uygundur. Gönderdiğiniz için teşekkürler!
jpaugh

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

1
Sadece sürüm numarasını verdiği için en iyi yanıttır, bu nedenle otomatik bir komut dosyasında sürümü ayıklamak için çıktıyı ayrıştırmaya gerek yoktur.
sözde kod

@omeinush Benimle mükemmel çalışıyor (11.2.0.3).
çöküş

@tjati Sürüme değil, kullanıcı izinlerine bağlı görünüyor. V$INSTANCEGörünüşe göre varsayılan olarak global olarak kullanılamıyor.
jpmc26

7

Ya kullanabilirsiniz

SELECT * FROM v$version;

veya

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

v $ sürümü çıktısını ayrıştırmak istemiyorsanız.


3

Örneğiniz çalışmadığında, alert.log'da sürüm bilgilerini ararsınız

Ya da başka bir kaba yol Oracle ikilisine bakmaktır, Eğer DB Linux'ta barındırılıyorsa, Oracle ikilisinde dizeleri deneyin.

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

1

Oracle kullanımı için:

Select * from v$version;

SQL sunucusu kullanımı için:

Select @@VERSION as Version

ve MySQL kullanımı için:

Show variables LIKE "%version%";

0

Aşağıdaki SQL ifadesi:

select edition,version from v$instance

İadeler:

  • veritabanı baskısı örn. "XE"
  • veritabanı sürümü örn. "12.1.0.2.0"

(v $ örneği görünümünde ayrıcalık seçin elbette gereklidir)


0

Oracle Sürümü sürümünü almak için aşağıdaki Yöntemleri kullanabiliriz.

Yöntem No: 1

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

Yöntem No: 2

SQL> select *
  2  from v$version;

-2

İşte basit bir işlev:

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
/

Bitti.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.