Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

जावा के साथ ऑरैकल टीएनएसपिंग कैसे करें?

TNSPING केवल श्रोता प्रक्रिया के लिए नेटवर्क कनेक्शन को मान्य करता है, आपको उपयोगकर्ता नाम और पासवर्ड पास करने की आवश्यकता नहीं है।

जैसा कि @ KonstantinV.Salikhov कहते हैं, आप निम्न की तरह एक टूल को कोड कर सकते हैं, यह सत्यापित करेगा:

.- श्रोता प्रक्रिया के लिए नेटवर्क कनेक्शन (यदि श्रोता यूपी है या टीएनएसपिंग की तरह नहीं होगा)
।- डेटाबेस सेवा यूपी है या नहीं (जैसा कि TNSPING डेटाबेस सेवा नाम की पहचान करेगा)।

उपकरण उपयोगकर्ता नाम/पासवर्ड का उपयोग नहीं करेगा क्योंकि हमें केवल यह सत्यापित करने के लिए लॉगिन विफलता घटना की आवश्यकता है कि डेटाबेस ऊपर और चल रहा है।

जावा कोड:

import java.sql.*;
import oracle.jdbc.pool.*;

public class ThinTnsnames {

    static String sql = null;

    public static void main(String[] args) {
        String entry_name = args[0];
        test(entry_name);
    }

    public static void test(String entry_name) {
        Connection pconnection = null;
        try {
            String l_url = "jdbc:oracle:thin:@" + entry_name;
            System.out.println( "Connection string = " + l_url );

            OracleDataSource ods = new OracleDataSource();
            ods.setURL(l_url);
            pconnection = ods.getConnection ();
        }
        catch(SQLException e) {
            int errorCode = e.getErrorCode() ;
            System.err.println("Error Code: " + errorCode) ;
            if ( errorCode == 12514 ) {
                System.err.println("Listener is UP but database is DOWN");
            }
            if ( errorCode == 17002 ) {
                System.err.println("Listener is DOWN");
            }
           if ( errorCode == 1017 ) {
                System.err.println("Listener is UP and database is UP");
            }
        }
        finally {
            try {
                if ( pconnection != null ) {
                    pconnection .close();
                }
            }
            catch(Exception e) {
                e.printStackTrace();
            }
        }
    }
}

आप अपनी स्वयं की tnsnames.ora फ़ाइल का परीक्षण करने के लिए किसी अन्य निर्देशिका में इसका उपयोग कर सकते हैं, उदाहरण के लिए "/home/oracle/2" निर्देशिका में:

[[email protected] 2]$ cat /home/oracle/2/tnsnames.ora

orcldb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ora12c.node.com)(PORT = 15300))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = db02.node.com)
      (INSTANCE_NAME = db02)
    )
  )

और फिर आप इसे इस तरह कहते हैं:

export JAVA_HOME=/opt/java/jdk1.7.0_71
export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=/home/oracle/2/ojdbc7.jar:.

java -Doracle.net.tns_admin=/home/oracle/2 ThinTnsnames orcldb

संभावित आउटपुट हैं:

Connection string = jdbc:oracle:thin:@orcldb
Error Code: 1017
Listener is UP and database is UP

Connection string = jdbc:oracle:thin:@orcldb
Error Code: 12514
Listener is UP but database is DOWN

Connection string = jdbc:oracle:thin:@orcldb
Error Code: 17002
Listener is DOWN

आप निम्न प्रकार से dba_audit_trail दृश्य को क्वेरी करके सत्यापित कर सकते हैं कि कनेक्शन के दौरान किसी उपयोगकर्ता नाम का उपयोग नहीं किया जा रहा है:

select username,action_name,returncode from dba_audit_trail
where action_name like 'LOG%' ;

USERNAME             ACTION_NAME                  RETURNCODE
-------------------- ---------------------------- ----------
                     LOGON                              1017



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में टेबल का आकार कैसे निर्धारित करें

  2. सम्मिलित करते समय ओरेकल + जावा एन्कोडिंग समस्या

  3. Oracle का to_timestamp_tz गलत समय और/या समय क्षेत्र क्यों लौटाता है?

  4. मैं सीएक्स-ओरेकल को एक क्वेरी के परिणामों को एक टुपल के बजाय एक शब्दकोश में कैसे बांध सकता हूं?

  5. ओरेकल रिकॉर्ड इतिहास एक सीमा के भीतर टाइमस्टैम्प के रूप में उपयोग कर रहा है