Bagaimana saya bisa mengonfirmasi bahwa database adalah Oracle & versi apa yang digunakannya SQL?


165

Saya membangun penginstal untuk aplikasi. Pengguna dapat memilih sumber data yang telah mereka konfigurasikan dan menominasikan jenis database apa itu. Saya ingin mengkonfirmasi bahwa tipe database memang Oracle, dan jika mungkin, versi Oracle apa yang mereka jalankan dengan mengirimkan pernyataan SQL ke sumber data.


Bagaimana dengan bahasa pemrograman Anda? Pertanyaan semacam ini sangat tergantung pada API bahasa untuk akses DB.
gizmo

Saya dapat berasumsi saya memiliki sumber data JDBC. Jika koneksi gagal, atau pernyataan sql menghasilkan dan kesalahan maka saya pasti bisa menjebaknya dan memperlakukannya sesuai.
modius

Jawaban:


286

Jalankan SQL ini:

select * from v$version;

Dan Anda akan mendapatkan hasil seperti:

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
Semua versi Oracle yang pernah saya gunakan. Saya tidak dapat berbicara untuk Oracle 5.0 dan sebelumnya!
Tony Andrews

1
Teknik ini gagal untuk saya di Oracle 11.2.0.2.0, tetapi saya mengalami beberapa masalah izin masuk. Namun, bagi mereka yang mungkin berada di kapal yang sama dengan saya, teknik kedua yang disebutkan pada halaman ini oleh Lawrence berhasil: pilih * dari product_component_version
sugardaddy

1
Tidak berfungsi jika Anda tidak memiliki izin untuk melihat $ $. Jawaban Lawrence memiliki jawaban untuk itu
JumpingJezza

@TonyAndrews: Seperti apa output saat pilih * dari versi v $; gagal?
Atmesh Mishra

@ AmtmeshMishra: Saya tidak yakin - mungkin ORA-00942: table or view does not exist? Mendapatkan apa?
Tony Andrews

46

Dua metode:

select * from v$version;

akan memberimu:

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

ATAU Mengidentifikasi Perangkat Lunak Basis Data Oracle Anda :

select * from product_component_version;

akan memberimu:

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

Hebat ... saya butuh product_component_version .. karena saya tidak punya akses ke v $ views
ShoeLace

Query kedua itu jauh lebih cocok untuk pemeriksaan otomatis, karena ia membutuhkan mendefinisikan format data, daripada mengandalkan parsing ad-hoc. Terima kasih untuk posting!
jpaugh

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

1
Jawaban terbaik karena hanya memberikan nomor versi saja, maka tidak perlu mengurai output untuk mengekstrak versi dalam skrip otomatis.
pseudocode

@omeinush Bekerja sempurna dengan saya (11.2.0.3).
collapsar

@tjati Tampaknya tidak tergantung pada versi, tetapi pada izin pengguna. V$INSTANCErupanya tidak tersedia secara global.
jpmc26

7

Anda bisa menggunakan

SELECT * FROM v$version;

atau

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

jika Anda tidak ingin menguraikan output versi v $.


3

Jika instance Anda turun, Anda mencari informasi versi di alert.log

Atau cara kasar lainnya adalah dengan melihat binary Oracle, Jika DB di-host di Linux, coba string pada binary Oracle.

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

1

Untuk penggunaan Oracle:

Select * from v$version;

Untuk penggunaan SQL server:

Select @@VERSION as Version

dan untuk penggunaan MySQL:

Show variables LIKE "%version%";

0

Pernyataan SQL berikut:

select edition,version from v$instance

pengembalian:

  • edisi basis data mis. "XE"
  • versi database misalnya. "12.1.0.2.0"

(Pilih privilege pada tampilan v $ instance tentu saja diperlukan)


0

Kita dapat menggunakan Metode di bawah ini untuk mendapatkan nomor versi Oracle.

Metode No: 1

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

Metode No: 2

SQL> select *
  2  from v$version;

-2

Inilah fungsi sederhana:

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
/

Selesai

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.