Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara melakukan Oracle TNSPING dengan java?

TNSPING hanya memvalidasi koneksi jaringan ke proses Listener, Anda tidak perlu memasukkan nama pengguna dan sandi.

Seperti yang dikatakan @KonstantinV.Salikhov, Anda dapat mengkodekan alat seperti berikut, itu akan memverifikasi:

.- Koneksi jaringan ke proses pendengar (jika pendengar UP atau tidak seperti yang dilakukan TNSPING)
.- Layanan database UP atau tidak (karena TNSPING akan mengidentifikasi nama layanan database).

Alat ini tidak akan menggunakan nama pengguna/sandi karena kita hanya memerlukan peristiwa kegagalan login untuk memvalidasi bahwa database aktif dan berjalan.

KODE JAWA:

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();
            }
        }
    }
}

Anda dapat menggunakan file tnsnames.ora Anda sendiri di direktori lain untuk mengujinya, misalnya di direktori "/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)
    )
  )

Dan kemudian Anda memanggilnya dengan cara ini:

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

Kemungkinan keluarannya adalah:

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

Anda dapat memverifikasi bahwa tidak ada nama pengguna yang digunakan selama koneksi dengan menanyakan tampilan dba_audit_trail sebagai berikut:

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. Cara tercepat untuk melakukan perbandingan bidang di tabel yang sama dengan sejumlah besar data di Oracle

  2. Pemicu:bagaimana saya bisa menginisialisasi nilai pada tabel dengan nilai pada yang lain?

  3. SQL beberapa kolom dalam klausa IN

  4. Memutar baris menjadi kolom secara dinamis di Oracle

  5. Ikon Pengembang SQL