数据库shutdown之后无法启动的问题 (46天)

最近在已有数据库服务器上又新建了4个数据库实例,目前一共有9个数据库实例。环境搭好以后做检查的时候。根据反馈,有个job报如下的错误。

Failed to create connection for url=jdbc:oracle:thin:@xxxxx and dbUser=xxxxxx
Nested Exception/Error: 
java.sql.SQLRecoverableException: IO Error: Got minus one from a read call 
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:419) 
        at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:536) 
        at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:228) 

这个问题,根据以往的经验就是process的值太低了。需要调大一些。查看数据库process的值,一看还真是,当时只设置了150,这个job平均要占用100多个session,其他的一些环境加进来,肯定不够。 因为调高process需要重启数据库,和他们协调了下,就开始操作了。 我先把process调到3000,session也相应调整,然后保存在spfile里面。 alter system set processes=3000 scope=spfile; 然后就按照计划开始停库,一个一个重启。 前面的3个很快就做完了,然后到最后一个,还是小心的按照nomount,mount的一步一步来。结果还是出问题了。

SQL> 
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup nomount
ORA-27154: post/wait create failed
ORA-27300: OS system dependent operation:semget failed with status: 28
ORA-27301: OS failure message: No space left on device
ORA-27302: failure occurred at: sskgpcreates
SQL> exit

根据错误信息,是空间问题。但是查看的时候,空间还多着呢。

/dev/vx/dsk/vgusgsPT301/lvol6
                       20G  8.5G   11G  44% /opt/app/oracle/db1
/dev/vx/dsk/vgusgsPT401/lvol6
                       20G  8.5G   11G  44% /opt/app/oracle/db2
/dev/vx/dsk/vgusgsPT501/lvol6
                       20G   11G  8.7G  56% /opt/app/oracle/db3
/dev/vx/dsk/vgusgsPT601/lvol6
  20G   11G  8.7G  56% /opt/app/oracle/db4

用top查看空余内存,也还有不少。

Tasks: 1000 total,   1 running, 999 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  0.1%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  189675188k total, 183821096k used,  5854092k free,   678412k buffers
Swap: 376009348k total,  1892592k used, 374116756k free, 176567228k cached

开始排查是否是kernel引起的。

> /sbin/sysctl -a | grep sem
error: permission denied on key 'kernel.cad_pid'
error: permission denied on key 'kernel.cap-bound'
kernel.sem = 256        32000   100     500

查看sysctl.conf
 > less /etc/sysctl.conf 
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
net.ipv4.ip_forward = 0
# Controls source route verification
net.ipv4.conf.default.rp_filter = 1
# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0
# Controls whether core dumps will append the PID to the core filename
# Useful for debugging multi-threaded applications
kernel.core_uses_pid = 1
# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1
# Controls the maximum size of a message, in bytes
kernel.msgmnb = 65536
# Controls the default maxmimum size of a mesage queue
kernel.msgmax = 65536
# Controls the maximum shared segment size, in bytes
kernel.shmmax = 68719476736
# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296
### DBA REQUEST FOR ORACLE11 ###
kernel.shmmni = 4096
kernel.sem = 256 32000 100 500
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_max = 4194394
net.core.wmem_max = 1048576
net.core.rmem_default = 262144
net.core.wmem_default = 262144
fs.aio-max-nr = 3145728

但是查看当前的进程数,也才不到10000,离32000还远呢。 查看了一下其他的库的process情况,终于明白了。 原有的5台,有4台process都是5000,一台是3000,一共就是23000 新加的4台,process都是3000,一共就是12000 加起来还真是超了。也难怪新加的第3个数据库实例没有问题,23000+9000=32000,刚好占完了,一点都没剩下。 和部门协调了一下,原有的5台process平时测试用不了那么多,3000多process已经足够了。 就调整了一下,再次重启就没有问题了。

> sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Wed Apr 16 15:05:37 2014
Copyright (c) 1982, 2010, Oracle.  All rights reserved.
Connected to an idle instance.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 1.1742E+10 bytes
Fixed Size                  2251264 bytes
Variable Size            5234492928 bytes
Database Buffers         6492782592 bytes
Redo Buffers               12193792 bytes

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-04-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏進无尽的文章

编码篇-使用GDataXMLNode解析XML数据

在实际的开发中数据解析是很普遍的事,一般网络请求返回的数据有两种格式:XML和JSON。关于JSON的解析已是主流,满大街的解析方式。而XML的数据格式确实是很...

1101
来自专栏从零开始学自动化测试

python接口自动化21-规范的API接口文档示例

前言 接口文档到底长啥样?做接口测试最大的障碍在于没有接口文档,很多公司不注重接口文档的编写,导致测试小伙伴没见过接口文档。 运气好一点的测试小伙伴可能厚着脸皮...

1.2K8
来自专栏Spark生态圈

spark任务之Task失败监控

在spark程序中,task有失败重试机制(根据 spark.task.maxFailures 配置,默认是4次),当task执行失败时,并不会直接导致整个应用...

3663
来自专栏JavaEdge

Redis实现分布式锁Redis分布式锁安全和活性失效保障为什么基于故障转移的实现还不够Redis分布式锁防死锁单Redis实例实现分布式锁的正确方法Redlock算法这个算法是异步的么?失败时重试释

3488
来自专栏程序员的SOD蜜

单数据库,多数据库,单实例,多实例不同情况下的数据访问效率测试

最近公司的项目准备优化一下系统的性能,希望在数据库方面看有没有提升的空间,目前压力测试发现数据库服务器压力还不够大,Web服务器压力也不是很大的情况下,前台页面...

23810
来自专栏逍遥剑客的游戏开发

基于Unity的编辑器开发(二): 进程间通信

先要做的, 是需要编辑器和Unity共享一部部分代码, 至少协议定义和解析我不想写两遍. 虽然有protobuf这样的工具库, 但是如果不是跨语言的话, 我觉得...

46616
来自专栏高性能服务器开发

(六)关于网络编程的一些实用技巧和细节

这些年,接触了形形色色的项目,写了不少网络编程的代码,从windows到linux,跌进了不少坑,由于网络编程涉及很多细节和技巧,一直想写篇文章来总结下这方面的...

3577
来自专栏互联网杂技

内存卡存储原理,你知道吗?

1、 简介: SD卡(Secure Digital Memory Card)是一种为满足安全性、容量、性能和使用环境等各方面的需求而设计的一种新型存储器...

3946
来自专栏wOw的Android小站

[Objective-C]深入理解GCD

GCD(Grand Central Dispatch)是libdispatch的市场名称,而libdispatch作为Apple的一个库,为并发代码在多核硬件(...

901
来自专栏Spring相关

spring websocket 和socketjs实现单聊群聊,广播的消息推送详解

随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的...

3865

扫码关注云+社区