Làm cách nào để xác nhận cơ sở dữ liệu là Oracle và phiên bản nào đang sử dụng SQL?


165

Tôi đang xây dựng một trình cài đặt cho một ứng dụng. Người dùng được chọn một nguồn dữ liệu mà họ đã cấu hình và chỉ định loại cơ sở dữ liệu đó là gì. Tôi muốn xác nhận rằng loại cơ sở dữ liệu thực sự là Oracle và nếu có thể, phiên bản Oracle nào họ đang chạy bằng cách gửi một câu lệnh SQL đến nguồn dữ liệu.


Ngôn ngữ lập trình của bạn thì sao? Loại câu hỏi này thực sự phụ thuộc vào API ngôn ngữ để truy cập DB.
gizmo

Tôi có thể giả sử tôi có một nguồn dữ liệu JDBC. Nếu kết nối thất bại, hoặc câu lệnh sql tạo ra và lỗi thì tôi chắc chắn có thể bẫy nó và xử lý nó cho phù hợp.
modius

Câu trả lời:


286

Chạy SQL này:

select * from v$version;

Và bạn sẽ nhận được một kết quả như:

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
Tất cả các phiên bản của Oracle tôi đã từng sử dụng. Tôi không thể nói cho Oracle 5.0 và trước đó!
Tony Andrew

1
Kỹ thuật này thất bại đối với tôi trên Oracle 11.2.0.2.0, nhưng tôi gặp một số vấn đề về quyền đăng nhập. Tuy nhiên, đối với những người có thể ở cùng thuyền với tôi, kỹ thuật thứ hai được đề cập trên trang này của Lawrence đã thực hiện: chọn * từ sản phẩm_component_version
sugardaddy

1
Không hoạt động nếu bạn không có quyền đối với lượt xem v $. Câu trả lời của Lawrence có câu trả lời cho điều đó
JumpingJezza

@TonyAndrews: Đầu ra như thế nào khi chọn * từ phiên bản v $; thất bại?
Atmesh Mishra

@AtmeshMishra: Tôi không chắc chắn - có thể ORA-00942: table or view does not exist? Bạn được những gì?
Tony Andrew

46

Hai phương pháp:

select * from v$version;

sẽ cung cấp cho bạn:

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

HOẶC Xác định Bản phát hành phần mềm cơ sở dữ liệu Oracle của bạn :

select * from product_component_version;

sẽ cung cấp cho bạn:

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

tuyệt vời ... tôi cần sản phẩm_component_version .. vì tôi không có quyền truy cập vào v $ lượt xem
ShoeLace

Truy vấn thứ hai đó phù hợp hơn nhiều cho việc kiểm tra tự động, vì nó yêu cầu xác định định dạng dữ liệu, thay vì dựa vào phân tích cú pháp đặc biệt. Cảm ơn vì đăng!
jpaugh

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

1
Câu trả lời tốt nhất vì nó chỉ cung cấp số phiên bản, do đó không cần phân tích đầu ra để trích xuất phiên bản trong tập lệnh tự động.
mã giả

@omeinush Hoạt động hoàn hảo với tôi (11.2.0.3).
sụp đổ

@tjati Nó dường như không phụ thuộc vào phiên bản, mà phụ thuộc vào quyền của người dùng. V$INSTANCErõ ràng là không có sẵn trên toàn cầu theo mặc định.
jpmc26

7

Bạn có thể sử dụng

SELECT * FROM v$version;

hoặc là

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

nếu bạn không muốn phân tích đầu ra của phiên bản v $.


3

Nếu phiên bản của bạn không hoạt động, bạn đang tìm thông tin phiên bản trong alert.log

Hoặc một cách thô thiển khác là xem xét nhị phân của Oracle, Nếu DB được lưu trữ trên Linux, hãy thử chuỗi trên nhị phân Oracle.

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

1

Đối với Oracle sử dụng:

Select * from v$version;

Đối với máy chủ SQL, hãy sử dụng:

Select @@VERSION as Version

và để sử dụng MySQL:

Show variables LIKE "%version%";

0

Câu lệnh SQL sau:

select edition,version from v$instance

trả về:

  • phiên bản cơ sở dữ liệu, vd. "XE"
  • phiên bản cơ sở dữ liệu, vd. "12.1.0.2.0"

(chọn đặc quyền trên chế độ xem v $ dụ là tất nhiên cần thiết)


0

Chúng ta có thể sử dụng các Phương thức dưới đây để lấy Số phiên bản của Oracle.

Phương pháp số: 1

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

Phương pháp số: 2

SQL> select *
  2  from v$version;

-2

Đây là một chức năng đơn giản:

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
/

Làm xong.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.