oracle数据库连接缓慢

1、检查oracle用户的资源上限:
cat /etc/security/limits.conf
oracle soft nproc 2047  # oracle告警线程
oracle hard nproc 16384  # oracle最大线程
oracle soft nofile 1024 # oracle用户最大告警文件打开数量
oracle hard nofile 65536 # oracle用户最大文件打开数量
这是oracle用户的配置,然后目前oracle使用的最大进程是多少呢 ?

2、检查oracle用户使用的最大进程 

[root~]# ps -U oracle |wc -l

2007

进程使用没问题,文件数呢?

3、检查oracle用户使用的文件打开数

[root~]# lsof |grep oracle |wc -l

60896

4、发现文件数60896,比最大告警数1024 多出60倍!!问题就在这里了,查看了一下网上,多是改大limits上限,我尝试改了一下,虽然管用,但是打开的文件数却一直增长,治标不治本

5、所以查看一下oracle用户所打开的文件都是什么很有必要

[root]# lsof |grep oracle > oracle.txt

打开oracle.txt文件,发现大部分文件都是sendmail或者postdrop,光这倆就占了5.4W多个文件数,百度sendmail和postdrop,发现是因为定时任务会启动邮件postfix进行发送邮件,但是服务器中没有进行sendmail配置,所以导致postdrop,这些就变成僵尸文件,一直打开无法关闭了,在oracle用户下6、把定时任务设置成不发邮件

 crontab -e

MAILTO ="" --不发邮件

7、然后删除sendmail和postdrop相关的进程

 ps -ef | grep sendmail | grep -v grep | awk '{print $2}' | xargs kill

 ps -ef | grep postdrop | grep -v grep | awk '{print $2}' | xargs kill

8、再查oracle用户文件打开数

[root]# lsof |grep oracle |wc -l

8476

 

==================================

 

近日,公司ORACLE服务器突如其来的宕机了,经过重装一系列的折腾终于解决了。终于发现自己对ORACLE理解还不够。

 先列举一下几个问题的解决方案:

 问题一:ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务

 解决方案:通过重启服务的方式启动数据库,尝试连接。如果未解决修改listener.ora文件,配置静态监听。

 总结:正确添加listener.ora;重新启动了oracle服务器,并检查oracle所有服务是否启动;oracle客户端Net Cofiguration Assistant正确添加或重新配置实例名 

 

问题二:ORA-12518: TNS: 监听程序无法分发客户机连接

 解决方案:一般出现此情况较少,首先检查数据库服务是否启动 ,如果数据库服务启动请通过sqlplus命令登录dba执行startup命令启动数据库实例。

 cmd>sqlplus connect sys/sys as sysdba>startup

 

问题三:通过plsql等工具连接oracle速度慢,需要10几秒以上,甚至长时间连接不上,通过命令启动和关闭oralce侦听时连接也很慢。

 解决方案:这种情况发生通常有两种情况,

 第一种是机器名(hostname)的问题,需要修改listener.ora文件或者重新建立监听即可。

 第二种方式是我此次遇到的问题,oracle多个人开发用,持续时间比较久,侦听日至过大,导致连接慢。这种方法的解决方案是删除或重命名原有侦听日至。

 lsnrctl set log_status off

 rename listener.log listener.old

 lsnrctl set log_status on 

 总结一下新了解到的知识:

 1.在windows中,windows服务中的oracle服务启动了不代表oracle实例一样启动了。

 开始菜单->oracle配置和移植工具->Administration Assistant for Windows

 左侧菜单上找到数据库菜单,下方实例上右键启动关闭选项。

 oracle实例选项卡中有"服务启动时启动实例",和"服务停止时关闭实例"两个选项。

 

2.oracle相关命令

 #启动监听

 lsnrctl start

 #关闭监听

 lsnrctl stop

 用lsnrctl reload重启监听器,此命令可以代替lsnrctl stop和lsnrctl start。重启将会在不需要关闭和启动监听器的情况下读取listener.ora的配置。

 

#启动oradb数据库服务

 net start OracleServiceORCL

 #关闭oradb数据库服务

 net stop OracleServiceORCL

 

#启动dbconsole服务

 emctl start dbconsole

 #停止dbconsole服务

 emctl stop dbconsole

 

#启动数据库

 system>sqlplus connect sys/sys as sysdba

 sql>startup

 #停止数据库

 sql>shutdown immediate

 要启动或者停止服务,必须拥有sysdba的权限。

 

shutdown命令参数:

 Normal 需要等待所有的用户断开连接,需要在所有连接用户断开后才执行关闭数据库任务,所以有的时候看起来好象命令没有运行一样!在执行这个命令后不允许新的连接.

 Immediate 等待用户完成当前的语句 (推荐),在用户执行完正在执行的语句后就断开用户连接,并不允许新用户连接。 

 Transactional 等待用户完成当前的事务,在拥护执行完当前事物后断开连接,并不允许新的用户连接数据库。  

 Abort 不做任何等待,直接关闭数据库,执行强行断开连接并直接关闭数据库。

 前三种方式不会丢失用户数据。第四种情况对于紧急关闭数据库才使用。

 

数据库的启动

 数据库启动使用startup命令,它有三种情况 

 第一种:不带参数,启动数据库实例并打开数据库,以便用户使用数据库,在多数情况下,使用这种方式! 

 第二种:带nomount参数,只启动数据库实例,但不打开数据库,在你希望创建一个新的数据库时使用,或者在你需要这样的时候使用! 

 第三种:带mount参数,在进行数据库更名的时候采用。这个时候数据库就打开并可以使用了! 

 其他问题:

 提示:环境变量 ORACLE_SID 未定义,请定义。

 设置 ORACLE_SID =WLW (WLW是我的实例名,也是服务名) C:\Documents and Settings\xcl>set ORACLE_SID=WLW(注意大写)

 Oracle 10g错误:shared memory realm does not exist的分析与解决容,情况是这样的:在连接Oracle 10g时出现了错误:“shared memory realm does not exist”,如下图所示:

 

硬盘格式的文件存储文件限制:

 NTFS(Windows):支持最大分区2TB,最大文件2TB

 FAT16(Windows):支持最大分区2GB,最大文件2GB

 FAT32(Windows):支持最大分区128GB,最大文件4GB

 HPFS(OS/2):支持最大分区2TB,最大文件2GB

 EXT2和EXT3(Linux):支持最大分区4TB,最大文件2GB

 JFS(AIX):支持最大分区4P(block size=4k),最大文件4P

 XFS(IRIX):这是个正经的64位的文件系统,可以支持9E(2的63次方)的分区

 ===========================================

最近给同事虚拟机上安装了一个11g数据库,发现一个奇怪的问题,用windows客户段连接时候非常慢,慢到不能容忍的地步,但是本地os验证登录没有问题,速度非常快,初步定为问题出在监听上,于是我tnsping了一下,结果有点吃惊,要么是报错类似的报错有TNS-12535: TNS:operation timed out等,要么就是可以tnsping通,但是时间基本是五位数的。既然可以偶尔ping通,那么防火墙的原因排除了,而且我确定防火墙是关闭的而且disable了的。

猜测:是不是网络通信问题?

           如果是网络通信异常,那么我去虚拟机上easyconnect一下,应该要正常才对,结果是跟windows客户端连接一样慢。

尝试重启监听也卡半天然后报错。

 

监听日志有这么一条WARNING: Subscription for node down event still pending异常记录

 

 

无奈的求助百度,谷歌。。。 

1.防火墙                  ---早都已经关闭了

2.修改/etc/hosts文件,把不用的注释掉               ---并没有什么用,虚拟机是新装的,里面也没有什么多余信息

3.尝试ping 主机                                                  ---非常快

4.listener.log日志过大(超过4G)                      ---刚刚安装的数据库,日志文件很小

5.查看v$session  看是不是有大量会话接入或者有没有定时job        ---然并没有,毕竟自己的虚拟机,也只有一台windows在连

6.重启监听                                                          --试过了,并没有用,就连查看状态都非常卡

。。。

看了好多帖子,发现都帮不到我

在最后发现一根救命稻草:服务器本身的DNS起作用了,DNS一起作用,hosts就有问题了

修改/etc/resolv.conf,里面内容都注释掉(你也可以把这个文件mv到别的地方做备份,直接把原来路径下的删掉)

再次测试

果然问题出在这里,再次用windows端工具去连,速度也是非常快了。

 

 

 

 

 

posted @ 2019-12-14 15:22  wuchangsoft  阅读(8594)  评论(1编辑  收藏  举报