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端工具去连,速度也是非常快了。