Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để thực hiện oracle TNSPING với java?

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Quy trình làm việc và thời gian chờ thông báo thay đổi dữ liệu của Oracle

  2. Khóa chính và khóa ngoại của bảng lồng nhau trong Oracle

  3. SQL, trên dòng thác xóa và trên dòng thác cập nhật

  4. Sử dụng giá trị của một biến chuỗi trong vòng lặp SQL FOR-IN (SELECT)

  5. Chọn tối thiểu. ba giá trị của một bản ghi trong một bảng khác với một JOIN