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