Як я можу підтвердити базу даних Oracle та яку версію вона використовує SQL?


165

Я будую інсталятор програми. Користувач може вибрати джерело даних, який вони сконфігурували, і визначити, який тип бази даних це. Я хочу підтвердити, що тип бази даних дійсно є Oracle, і, якщо можливо, якою версією Oracle вони запущені, надіславши оператор SQL до джерела даних.


Що з мовою програмування? Цей вид справді залежить від мовного API для доступу до БД.
gizmo

Я можу припустити, що у мене є джерело даних JDBC. Якщо з'єднання не вдається, або оператор sql генерує та помиляє, я, безумовно, можу вловлювати це і обробляти його відповідно.
модифікація

Відповіді:


286

Запустіть цей 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

2
Всі версії Oracle я коли-небудь використовував. Я не можу говорити за Oracle 5.0 і раніше!
Тоні Ендрюс

1
Ця методика не вдалася для мене в Oracle 11.2.0.2.0, але у мене виникли деякі проблеми з дозволом на вхід. Однак для тих, хто може перебувати в тому ж човні, що і я, другий прийом, згаданий Лоуренсом на цій сторінці, спрацював: виберіть * з product_component_version
sugardaddy

1
Не працює, якщо у вас немає дозволу на перегляд v $. У відповіді Лоуренса є відповідь на це
JumpingJezza

@TonyAndrews: Як виглядає результат при виборі * з версії v $; не вдається?
Атмеш Мішра

@AtmeshMishra: Я не впевнений - можливо ORA-00942: table or view does not exist? Що ви отримуєте?
Тоні Ендрюс

46

Два способи:

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

чудово ... мені знадобився product_component_version .. так як я не мав доступу до v $ views
ShoeLace

Цей другий запит набагато більше підходить для автоматичної перевірки, оскільки він вимагає визначення формату даних, а не покладання на спеціальний аналіз. Дякуємо за публікацію!
jpaugh

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

1
Найкраща відповідь, оскільки він просто дає номер версії, отже, не потрібно розбирати вихід, щоб витягнути версію в автоматизованому сценарії.
псевдокод

@omeinush прекрасно працює зі мною (11.2.0.3).
колапс

@tjati Схоже, це залежить не від версії, а від прав користувача. V$INSTANCEмабуть, глобально недоступні за замовчуванням.
jpmc26

7

Можна або використовувати

SELECT * FROM v$version;

або

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

якщо ви не хочете аналізувати вихід версії v $.


3

Якщо ваш примірник не працює, ви шукаєте інформацію про версію в alert.log

Або інший непростий спосіб - заглянути в бінарний файл Oracle. Якщо БД розміщена в Linux, спробуйте рядки на бінарних даних Oracle.

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

1

Для використання Oracle:

Select * from v$version;

Для використання сервера SQL:

Select @@VERSION as Version

і для використання MySQL:

Show variables LIKE "%version%";

0

Такий оператор SQL:

select edition,version from v$instance

повертає:

  • видання бази даних, наприклад. "XE"
  • версія бази даних, наприклад. "12.1.0.2.0"

(Вибір привілею для представлення екземпляра v $ звичайно необхідний)


0

Ми можемо використовувати наведені нижче методи, щоб отримати версію Номер 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;

-2

Ось проста функція:

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
/

Зроблено.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.