设为首页 收藏本站
查看: 1596|回复: 0

[经验分享] JDBC连不上Oracle数据库的解决方法

[复制链接]

尚未签到

发表于 2016-7-24 09:26:16 | 显示全部楼层 |阅读模式
  问题: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进程处于可用状态。最普遍的通过网络连接。
  
  
  小小问题却花费了我一个晚上的时间,最后要感谢陪我辛苦了一晚上的老婆,让你受累了,老婆,对不起!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-248497-1-1.html 上篇帖子: Oracle EBS WMS功能介绍(二) 下篇帖子: Oracle同义词,给你带来的几个惊喜
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表