如何确认数据库是 Oracle 及其使用 SQL 的版本?

我正在构建一个应用程序的安装程序。用户可以选择他们已经配置的数据源,并指定它是什么类型的数据库。我想确认数据库类型确实是 Oracle,如果可能的话,通过向数据源发送 SQL 语句来确认他们运行的是哪个版本的 Oracle。

257110 次浏览

运行这个 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;

或者

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

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

两种方法:

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

下面是一个简单的函数:

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
/

成交。

如果您的实例关闭了,那么您将在 alert.log 中查找版本信息

或者另一种原始的方法是查看 Oracle 二进制文件,如果 DB 在 Linux 上托管,那么尝试在 Oracle 二进制文件上使用字符串。

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

使用甲骨文:

Select * from v$version;

对于 SQL 服务器的使用:

Select @@VERSION as Version

以及 MySQL 的使用:

Show variables LIKE "%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');

检查 Oracle 数据库版本有不同的方法。最简单的方法是运行以下 SQL 查询来检查 甲骨文版本

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