TNSPING chỉ xác thực kết nối mạng với quy trình Trình xử lý, bạn không cần chuyển tên người dùng và mật khẩu.
Như @ KonstantinV.Salikhov nói, bạn có thể viết mã một công cụ như sau, nó sẽ xác minh:
.- Kết nối mạng đến quá trình lắng nghe (nếu trình nghe LÊN hoặc không giống như TNSPING sẽ làm)
.- Dịch vụ cơ sở dữ liệu có TĂNG hay không (vì TNSPING sẽ xác định tên dịch vụ cơ sở dữ liệu).
Công cụ sẽ không sử dụng tên người dùng / mật khẩu vì chúng tôi chỉ cần sự kiện đăng nhập thất bại để xác thực rằng cơ sở dữ liệu đang hoạt động.
MÃ JAVA:
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();
}
}
}
}
Bạn có thể sử dụng tệp tnsnames.ora của riêng mình trong một thư mục khác để kiểm tra nó, ví dụ:trong thư mục "/ 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)
)
)
Và sau đó bạn gọi nó theo cách này:
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
Kết quả đầu ra có thể là:
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
Bạn có thể xác minh rằng không có tên người dùng nào đang được sử dụng trong quá trình kết nối bằng cách truy vấn chế độ xem dba_audit_trail như sau:
select username,action_name,returncode from dba_audit_trail
where action_name like 'LOG%' ;
USERNAME ACTION_NAME RETURNCODE
-------------------- ---------------------------- ----------
LOGON 1017