首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用java做oracle TNSPING?

如何用java做oracle TNSPING?
EN

Stack Overflow用户
提问于 2015-06-05 12:49:07
回答 1查看 4.6K关注 0票数 3

我有一个数据库TNSEntries的细节。我需要用Java编写代码来检查TNSPING。有没有办法做到这一点?

示例TNSENtry

代码语言:javascript
复制
orcldb=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myhost)(PORT = 1521))
(CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = myservice)
  (INSTANCE_NAME = myinstance)
)
)

我已经用jdbc oracle驱动程序做了用户名和密码的oracle连接。这个TNSPING对我来说是新的,它没有用户名和密码。你能请任何人帮助用java编码TNSPING吗?

EN

回答 1

Stack Overflow用户

发布于 2015-06-06 06:36:01

TNSPING只验证到监听器进程的网络连接,不需要传递用户名和密码。

正如@KonstantinV.Salikhov所说,你可以像下面这样编写一个工具,它将会验证:

.-网络连接到侦听器进程(如果侦听器已启动或未像TNSPING那样运行)

.-数据库服务是否启动(因为TNSPING将标识数据库服务名称)。

该工具不会使用用户名/密码,因为我们只需要登录失败事件来验证数据库是否已启动并正在运行。

JAVA代码:

代码语言:javascript
复制
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“目录中:

代码语言:javascript
复制
[oracle@ora12c 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)
    )
  )

然后以这种方式调用它:

代码语言:javascript
复制
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

可能的输出包括:

代码语言:javascript
复制
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视图来验证连接过程中是否没有使用用户名,如下所示:

代码语言:javascript
复制
select username,action_name,returncode from dba_audit_trail
where action_name like 'LOG%' ;

USERNAME             ACTION_NAME                  RETURNCODE
-------------------- ---------------------------- ----------
                     LOGON                              1017
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30658542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档