`

JDBC连不上Oracle数据库的解决方法

阅读更多

    问题:sqlplus可以连上数据库,但是在外部通过JDBC却连不上

    解决方法:

 

    1.  先看几个配置文件:listener.ora   tnsnames.ora   sqlnet.ora

 

    sqlnet.ora-----作用类似于linux或者其他unix的nsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串.假如我的sqlnet.ora是下面这个样子
    SQLNET.AUTHENTICATION_SERVICES= (NTS)

    NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)

    那么,当你连接数据库的时候,如sqlplus sys/oracle@XE 客户端就会首先在tnsnames.ora文件中找XE的记录.如果没有相应的记录则尝试把XE当作一个主机名,通过网络的途径去解析它的ip地址然后去连接这个ip上的GLOBAL_DBNAME=XE这个实例。如果sqlnet.ora是这个样子:

    NAMES.DIRECTORY_PATH= (TNSNAMES)
    那么客户端就只会从tnsnames.ora查找XE的记录。

 

    tnsnames.ora------这个文件类似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应,只有当sqlnet.ora中类似NAMES.DIRECTORY_PATH= (TNSNAMES) 这样,也就是客户端解析连接字符串的顺序中有TNSNAMES时,才会尝试使用这个文件。

 

 

    listener.ora------listener监听器进程的配置文件。listener进程,接受远程对数据库的接入申请并转交给oracle的服务器进程。所以如果不是使用的远程的连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。

    listener.ora的例子

      #下面定义LISTENER进程为哪个实例提供服务
  
  #这里是XE,并且它对应的ORACLE_HOME和GLOBAL_DBNAME
  
  #其中GLOBAL_DBNAME不是必需的除非使用HOSTNAME做数据库连接
  
  SID_LIST_LISTENER =
  
  (SID_LIST =
  
  (SID_DESC =
  
  (GLOBAL_DBNAME =XE)
  
  (ORACLE_HOME = F:\Oracle\app\oracle\product\10.2.0\server)
  
  (SID_NAME = XE)
  
  )
  
  )
  
  #监听器的名字,一台数据库可以有不止一个监听器
  
  #再向下面是监听器监听的协议,ip,端口等,这里使用的tcp1521端口,并且使用的是主机名
  
  LISTENER =
  
  (DESCRIPTION =
  
  (ADDRESS = (PROTOCOL = TCP)(HOST = HUAN)(PORT = 1521))
  
  )
  
  上面的例子是一个最简单的例子,但也是最普遍的。一个listener进程为一个instance(SID)提供服务。

 

    2. 问题解决步骤

        (1) 在sqlnet.ora中增加一条(我用的是主机名做数据库连接)

            NAMES.DIRECTORY_PATH= (HOSTNAME)

        (2) 修改listener.ora文件

            SID_LIST_LISTENER =
              (SID_LIST =
                (SID_DESC =
                  (SID_NAME = PLSExtProc)
                  (ORACLE_HOME = F:\Oracle\app\oracle\product\10.2.0\server)
                  (PROGRAM = extproc)
              )
              (SID_DESC =
                  (SID_NAME = CLRExtProc)
                  (ORACLE_HOME = F:\Oracle\app\oracle\product\10.2.0\server)
                  (PROGRAM = extproc)
              )

              (SID_DESC =
                  (SID_NAME = XE)

                  (GLOBAL_DBNAME=XE)
                  (ORACLE_HOME = F:\Oracle\app\oracle\product\10.2.0\server)
                  #(PROGRAM = extproc)
              )
            )

     其中红色部分是新增内容,然后lsnrctl stop,lsnrctl start一下,问题搞定

 

 

 

 

    3. 排错常用命令

        tnsping XE

        lsnrctl stop

        lsnrctl start

lsnrctl reload

        lsnrctl status

        show sga  //查看instance是否已经启动

        select open_mode from v$database;   //查看数据库是打开还是mount状态。

        show parameter v$instance_name;

        show parameter v$database;

        show parameter db;

        show parameter service_name;

 

 

 

    4. 几种连接命令形式

 

      1) sqlplus / as sysdba 这是典型的操作系统认证,不需要listener进程
  
  2) sqlplus sys/oracle 这种连接方式只能连接本机数据库,同样不需要listener进程
  
  3) sqlplus sys/oracle@XE 这种方式需要listener进程处于可用状态。最普遍的通过网络连接。

 

 

    小小问题却花费了我一个晚上的时间,最后要感谢陪我辛苦了一晚上的老婆,让你受累了,老婆,对不起!

分享到:
评论
3 楼 HuanYue 2009-05-26  
horizonhyg 写道

lsnrctl reload这个好点~~

是的
2 楼 horizonhyg 2009-05-25  
lsnrctl reload这个好点~~
1 楼 xiaogang139452 2009-03-15  

相关推荐

    Jdbc连接oracle远程数据库中文乱码解决

    综上所述,解决JDBC连接Oracle远程数据库时的中文乱码问题,需要从多个层面进行检查和配置,包括应用程序的配置文件、JDBC连接参数、数据库服务器设置以及开发环境等。通过细心排查和合理配置,可以有效地避免这类...

    JDBC连接Oracle数据库常见问题及解决方法

    "JDBC连接Oracle数据库常见问题及解决方法" 本文将对 JDBC 连接 Oracle 数据库常见问题进行总结和解决方法的介绍。以下是针对不同问题的解决方案: 1. Jbuilder 正确连接 Oracle 数据库需要注意的几个问题 在使用...

    java使用JDBC和ODBC连接oracle数据库

    Java通过JDBC(Java Database Connectivity)和ODBC(Open Database Connectivity)来连接Oracle数据库是两种常见的数据访问方式。本文将详细介绍这两种方法,并提供相关的技术知识。 首先,JDBC是Java平台的标准...

    java使用jdbc连接oracle数据库

    Java使用JDBC(Java Database Connectivity)来连接Oracle数据库是一个常见的任务,它允许Java应用程序与各种数据库进行交互。在本场景中,`ojdbc6.jar`是Oracle提供的JDBC驱动程序,用于建立Java应用程序与Oracle...

    Java用JDBC实现对Oracle数据库操作

    标题“Java用JDBC实现对Oracle数据库操作”主要涉及Java编程语言如何利用Java Database Connectivity (JDBC) API来与Oracle数据库进行交互。JDBC是Java中用于与各种数据库通信的标准接口,而Oracle数据库是一个广泛...

    Spring boot连接oracle数据库JDBC配置步骤

    Spring Boot 连接 Oracle 数据库 JDBC 配置步骤 在本文中,我们将详细介绍如何使用 Spring Boot 连接 Oracle 数据库,配置 JDBC 驱动程序,并实现数据库的基本操作。 Step 1: 添加依赖项 在 Spring Boot 项目中,...

    通过JDBC连接Oracle数据库的十大技巧

    总之,通过掌握JDBC连接Oracle数据库的技巧,能够极大地提高程序的效率和稳定性。选择合适的驱动程序、关闭自动提交、使用PreparedStatement对象、批量处理、调用存储过程以及优化连接池等策略,都是提高Java应用...

    JDBC连接和操作ORACLE数据库

    本主题将深入探讨如何使用JDBC连接Oracle数据库,并执行基本的增、删、改、查(CRUD)操作。 首先,理解JDBC连接Oracle数据库的过程至关重要。这通常包括以下几个步骤: 1. **引入依赖**:确保项目中包含了Oracle ...

    oracle驱动 JDBC连oracle数据库用

    Oracle驱动与JDBC连接Oracle数据库是Java开发中常见的任务,主要涉及Oracle数据库的JDBC驱动、数据库连接池、以及相关的配置和使用方法。以下将详细阐述这些知识点。 首先,Oracle驱动是Oracle公司提供的用于Java...

    JAVA Spring boot JDBC同步不同服务器oracle数据库

    本教程将详细讲解如何利用Spring Boot和JDBC实现跨服务器Oracle数据库的同步。 首先,Spring Boot简化了Java应用程序的初始化和配置过程。它集成了大量的依赖,包括对JDBC的支持,只需在`pom.xml`或`build.gradle`...

    通过JDBC连接oracle数据库的十大技巧

    以上六大技巧只是通过JDBC连接Oracle数据库时可以采用的方法的一部分。接下来,我们将继续探讨其他几个实用的技巧: #### 7. 使用连接池管理数据库连接 在大型应用中,频繁地创建和销毁数据库连接会消耗大量的资源...

    jdbc连接oracle数据库

    本主题将围绕“jdbc连接Oracle数据库”这一核心知识点展开,探讨如何使用Java通过JDBC驱动连接Oracle数据库,并关注与之相关的ojdbc5和ojdbc6版本。 首先,ojdbc5和ojdbc6是Oracle公司提供的JDBC驱动程序,用于Java...

    JDBC连接oracle数据库

    本示例展示了如何使用JDBC连接Oracle数据库,通过Apache Commons DBCP库实现数据库连接池来提高性能和资源管理。 首先,让我们了解关键类和方法: 1. `BaseDAO` 类:这是基础数据访问对象类,它封装了与数据库交互...

    如何连接oracle数据库及故障解决办法

    如果你已经安装了 Oracle 数据库,那么你不需要在单独的机器上安装 Oracle 客户端,因为安装 Oracle 数据库的时候会自动安装 Oracle 客户端。 在安装了 Oracle 客户端软件之后,需要正确配置 sqlnet.ora 文件和 ...

    JDBC实现Oracle数据库的增删改查

    本教程将深入探讨如何使用JDBC实现对Oracle数据库的增、删、改、查操作。 首先,我们需要理解JDBC的基本组件和工作流程。JDBC提供了一组接口和类,使得Java应用程序能够连接到数据库,执行SQL语句并处理结果。核心...

    使用JDBC连接Oracle数据库

    ### 使用JDBC连接Oracle数据库 #### 一、简介与背景 Java Database Connectivity (JDBC) 是 Java 开发语言中的一项关键技术,它允许开发者通过标准 API 与多种类型的数据库进行交互。JDBC 提供了一种机制,使 Java...

    JDBC连接数据库各种数据库参数大全

    在Java中通过JDBC访问Oracle数据库时,通常采用thin驱动方式。thin驱动是一种纯Java驱动,无需依赖任何非Java代码即可完成与Oracle数据库的交互。 - **加载驱动**:`Class.forName("oracle.jdbc.driver.Oracle...

    JDBC连接oracle数据库测试

    1. 加载驱动:通过Class.forName()方法加载Oracle数据库的JDBC驱动,例如"oracle.jdbc.driver.OracleDriver"。 2. 获取连接:使用DriverManager.getConnection()方法,传入数据库URL、用户名和密码来建立连接。...

Global site tag (gtag.js) - Google Analytics