sql >> データベース >  >> RDS >> Oracle

JavaでOracleTNSPINGを実行するにはどうすればよいですか?

    TNSPINGは、リスナープロセスへのネットワーク接続のみを検証します。ユーザー名とパスワードを渡す必要はありません。

    @ KonstantinV.Salikhovが言うように、次のようなツールをコーディングすると、検証されます。

    .-リスナープロセスへのネットワーク接続(リスナーがUPであるか、TNSPINGのようになっていない場合)
    .-データベースサービスがUPであるかどうか(TNSPINGがデータベースサービス名を識別するため)

    データベースが稼働中であることを検証するためにログイン失敗イベントのみが必要なため、ツールはユーザー名/パスワードを使用しません。

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

    別のディレクトリ(たとえば、「/ home / oracle / 2」ディレクトリ)にある独自のtnsnames.oraファイルを使用してテストできます。

    [[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. MySQLは最大値を返すか、1つの列に値がない場合はnullを返します

    2. CakePHPおよびHABTMモデル制限エラー

    3. 2つの日付の間の金曜日の数

    4. MySQLデータベースからデータを更新できません