Как я могу подтвердить, что база данных Oracle и какая версия использует SQL?

165

Я создаю установщик для приложения. Пользователь получает возможность выбрать источник данных, который он настроил, и назначить тип базы данных. Я хочу подтвердить, что типом базы данных действительно является Oracle, и, если возможно, какую версию Oracle они используют, отправив оператор SQL в источник данных.

модий
источник
А как насчет вашего языка программирования? Этот вопрос действительно зависит от языка API для доступа к БД.
штуковина
Я могу предположить, что у меня есть источник данных 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, но у меня возникли некоторые проблемы с правами входа в систему. Однако для тех, кто может быть в той же лодке, что и я, вторая техника, упомянутая на этой странице Лоуренсом, сработала: select * from product_component_version
sugardaddy
1
Не работает, если у вас нет разрешения на просмотр v $. У ответа Лоуренса есть ответ на это
JumpingJezza
@TonyAndrews: как выглядит вывод select * from v $ version; потерпит неудачу?
Атмеш Мишра
@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
Ugur
источник
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 $ version.

Питер Лэнг
источник
3

Если ваш экземпляр не работает, вы ищите информацию о версии в alert.log

Или другой грубый способ - заглянуть в двоичный файл Oracle. Если база данных размещена в Linux, попробуйте строки в двоичном файле Oracle.

strings -a $ORACLE_HOME/bin/oracle |grep RDBMS | grep RELEASE
user3362908
источник
1

Для использования Oracle:

Select * from v$version;

Для использования SQL-сервера:

Select @@VERSION as Version

и для использования MySQL:

Show variables LIKE "%version%";
разъем
источник
0

Следующий оператор SQL:

select edition,version from v$instance

возвращает:

  • издание базы данных, например. «Х»
  • версия базы данных, например. "12.1.0.2.0"

(конечно, необходимо выбрать привилегию в представлении v $ instance)

Панчо
источник
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
/

Готово.

user2460369
источник