簡體   English   中英

如何確認數據庫是 Oracle 及其使用 SQL 的版本?

[英]How can I confirm a database is Oracle & what version it is using SQL?

我正在為應用程序構建安裝程序。 用戶可以選擇他們配置的數據源並指定它是什么類型的數據庫。 我想通過向數據源發送 SQL 語句來確認數據庫類型確實是 Oracle,如果可能,他們正在運行什么版本的 Oracle。

運行此 SQL:

select * from v$version;

你會得到這樣的結果:

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

兩種方法:

select * from v$version;

會給你:

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

確定您的 Oracle 數據庫軟件版本

select * from product_component_version;

會給你:

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
SQL> SELECT version FROM v$instance;
VERSION
-----------------
11.2.0.3.0

您可以使用

SELECT * FROM v$version;

要么

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

如果您不想解析 v$version 的輸出。

如果您的實例已關閉,您將在 alert.log 中查找版本信息

或者另一種粗略的方法是查看 Oracle 二進制文件,如果 DB 托管在 Linux 上,請嘗試使用 Oracle 二進制文件上的字符串。

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

對於 Oracle 使用:

Select * from v$version;

對於 SQL 服務器使用:

Select @@VERSION as Version

和 MySQL 使用:

Show variables LIKE "%version%";

有多種方法可以檢查 Oracle 數據庫版本。 最簡單的方法是運行以下 SQL 查詢來檢查Oracle 版本

SQL> SELECT * FROM PRODUCT_COMPONENT_VERSION;
SQL> SELECT * FROM v$version;

以下 SQL 語句:

select edition,version from v$instance

返回:

  • 數據庫版本例如。 “XE”
  • 數據庫版本例如。 “12.1.0.2.0”

(當然需要對 v$instance 視圖的選擇權限)

我們可以使用下面的方法來獲取 Oracle 的版本號。

方法編號:1

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

方法編號:2

SQL> select *
  2  from v$version;

這將從 Oracle 10 開始工作

select version
      , regexp_substr(banner, '[^[:space:]]+', 1, 4) as edition 
from    v$instance
     ,  v$version where regexp_like(banner, 'edition', 'i');

這是一個簡單的函數:

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
/

完畢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM