मैं कैसे पुष्टि कर सकता हूं कि एक डेटाबेस ओरेकल है और वह एसक्यूएल का उपयोग किस संस्करण में कर रहा है?


165

मैं एक एप्लिकेशन के लिए इंस्टॉलर बना रहा हूं। उपयोगकर्ता को एक डेटा स्रोत का चयन करने के लिए मिलता है जिसे उन्होंने कॉन्फ़िगर किया है और यह किस प्रकार का डेटाबेस नामांकित है। मैं इस बात की पुष्टि करना चाहता हूं कि डेटाबेस प्रकार वास्तव में ओरेकल है, और यदि संभव हो तो, डेटास्क्रूजेशन के लिए एसक्यूएल स्टेटमेंट भेजकर वे ओरेकल के किस संस्करण को चला रहे हैं।


आपकी प्रोग्रामिंग भाषा के बारे में क्या? इस तरह का सवाल वास्तव में डीबी एक्सेस के लिए भाषा एपीआई पर निर्भर करता है।
gizmo

मुझे लगता है मैं एक JDBC डेटा स्रोत है मान सकते हैं। यदि कनेक्शन विफल हो जाता है, या sql स्टेटमेंट जनरेट करता है और त्रुटि होती है तो मैं निश्चित रूप से उसे फंसा सकता हूं और उसके अनुसार व्यवहार कर सकता हूं।
modius

जवाबों:


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 पर मेरे लिए विफल रही, लेकिन मुझे कुछ लॉगिन अनुमति की समस्या है। हालाँकि, उन लोगों के लिए जो मेरी तरह एक ही नाव में हो सकते हैं, लॉरेंस द्वारा इस पृष्ठ पर उल्लिखित दूसरी तकनीक ने काम किया: उत्पाद_कंपोनेंट_वॉर्स से * सेलेक्ट करें
सुगरगद्दी

1
यदि आपके पास v $ व्यू की अनुमति नहीं है तो काम नहीं करता है। लॉरेंस के जवाब के लिए एक जवाब है
जंपिंग जेज्ज़ा

@TonyAndrews: जब वी $ संस्करण से * का चयन किया जाता है तो आउटपुट क्या होता है; विफल रहता है?
आतमेश मिश्रा

@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 $ विचारों तक पहुंच नहीं पाया है
जूतालेस

यह दूसरी क्वेरी स्वचालित जाँच के लिए अधिक उपयुक्त है, क्योंकि इसके लिए तदर्थ पार्सिंग पर निर्भर रहने के बजाय डेटा प्रारूप को परिभाषित करने की आवश्यकता होती है। पोस्ट करने का शुक्रिया!
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

यदि आपका उदाहरण नीचे है, तो आप सतर्कता में संस्करण की जानकारी देख रहे हैं

या दूसरा कच्चा रास्ता ओरेकल बाइनरी में देखने के लिए है, यदि डीबी लिनक्स पर होस्ट किया गया है, तो ओरेकल बाइनरी पर स्ट्रिंग की कोशिश करें।

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

निम्नलिखित एसक्यूएल बयान:

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.