一则数据库无法重启的案例分析

简介:   今天一个开发的同事找到我,说有个问题想咨询一下我,突然想起他昨天让我帮他处理一个工单,他这么一问我才想起来还没做,结果他说是另外一件事,说有个开发测试的环境,数据库报04031的错误,想让我帮忙看看是怎么回事,这种问题刚好就找对了。
  今天一个开发的同事找到我,说有个问题想咨询一下我,突然想起他昨天让我帮他处理一个工单,他这么一问我才想起来还没做,结果他说是另外一件事,说有个开发测试的环境,数据库报04031的错误,想让我帮忙看看是怎么回事,这种问题刚好就找对了。首先开发测试环境,访问量不高,业务量不大,环境也要简单很多,出现这个问题,让我能够唯一觉得可能的原因就是sga设置太小了。当然带着这个想法也让另外一个同事去现场看看问题,如果问题确实要复杂一些,那我们再采取其它的措施,当然解决不了问题也没关系,权当是给新同事的一次历练吧。
   然后很快从同事那里得到了反馈,说调整了sga为200M之后数据库貌似起不来了。如果是这样的情况,也是意料之中,报错信息是:

ORA-27102: out of memory
Linux-x86_64 Error: 12: Cannot allocate memory

对于ORA-27102的错误,其实也是一个经典的错误了。这个报错主要和内核参数的设置相关, shmallshmmax,可以参考 ID 301830.1
其实27102的错误如果系统级的报错是

ORA-27102: out of memory

Linux-x86_64 Error: 28: No space left on device

那么和内核参数 shmallshmmax关联要大一些,而目前的是 Linux-x86_64 Error: 12: Cannot allocate memory其实另有原因,但是当时也没有多想。
就让同事继续提供free -m的结果
[oracle@dev_mobileBI dbs]$ free -m
             total used free shared buffers cached
Mem: 5709 4762 946 0 39 3365

内核参数的值如下:
kernel.shmmax = 2147483648
kernel.shmall = 536870912
其实这个时候看,剩余内存还多,shmmax尽管有些小,但是完全是可以支持200M的SGA的。
所以这个内核参数的修改也是一种方式,但不是解决这个问题的根本。
我们就回到了参数文件上,这个时候和同事重新审视这个文件,把SGA改为原值,仍然启动失败,报27012的错误。
这个时候感觉问题就比较蹊跷,数据库停了之后重启竟然就报错,其它参数的设置都恢复了原来的值还是启动报错。
这个时候感觉是参数文件哪里出现了问题,所幸这个环境的定制参数也不多,我们可以理一理创建数据库的一个环节,手工建库,其实在10g中只要保留4个参数就可以了,11g3个,即db_name,control_files,sga_target(或者其他的内存组件参数),所以就把参数文件改为最简单的方式,启动到nomount,就可以了。
从这个情况可以推理出来应该是在当前的参数文件中存在着一些参数的限制导致启动失败。
参数文件的设置大体是下面的样子:
mbidev.__oracle_base='/home/U01/app/oracle'#ORACLE_BASE set from environment
*.audit_file_dest='/home/U01/app/oracle/admin/mbidev/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/home/U01/app/oracle/oradata/mbidev/control01.ctl',/oradata/mbidev/control03.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='mbidev'
*.db_recovery_file_dest='/home/U01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=10737418240
*.diagnostic_dest='/home/U01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=mbidevXDB)'
*.lock_sga=TRUE
*.open_cursors=300
*.pre_page_sga=TRUE
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
所以检查了一圈,印象中也没有很特别的参数,所以就采用了排除法,先从自己熟悉的参数开始缩减,排除了domain,remote_login_password,compatible,audit的参数
那么接下来就是不大熟悉的参数了,有两个pre_page_sga和lock_sga,经过排除,发现最后的症结在于参数lock_sga
如果去掉这个参数设置,数据库就能够正常启动,经过验证,发现默认值为false
这个时候,我们不能太偏离问题的方向,我们需要调整SGA,这个时候问题已经解决了,我们先处理SGA的部分,至于lock_sga的部分可以暂时放一放回头再来深究为什么有这种情况。
所以调整SGA之后,发现内核参数shmmax,shmall还是有一些问题,经过调整,就达到了开发同学的预期目标。
我们再来看一下lock_sga的奇怪问题,这个参数默认值为false,如果设置为true,可以保证整个sga被锁定在物理内存中,可以防止sga被换出到swap中,还有辅助的参数pre_page_sga来保证在数据库初始化的时候把sga都放入内存中。
而为什么这个参数设置为true,会有27102的错误呢,其实和系统的资源配置有关。可以通过ulimit -a查看相关的信息
默认locked memory为32KB,肯定无法满足,所以我们需要设置memlock
$ ulimit -a|grep lock
max locked memory       (kbytes, -l) unlimited
file locks                      (-x) unlimited
比如对oracle用户设置较高的资源使用权限。
oracle           soft    memlock         unlimited
oracle           hard    memlock         unlimited
这个时候设置lock_sga和pre_page_sga为true,启动就没有任何问题了,不过确实能够明显感受到启动的时候还是很迟缓的。这两个参数在有些优化场景中还是有一席之地,但是相对来说使用范围还是有限。

目录
相关文章
|
25天前
|
Cloud Native OLAP OLTP
在业务处理分析一体化的背景下,开发者如何平衡OLTP和OLAP数据库的技术需求与选型?
在业务处理分析一体化的背景下,开发者如何平衡OLTP和OLAP数据库的技术需求与选型?
123 4
|
25天前
|
SQL 关系型数据库 MySQL
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
95 0
|
3月前
|
SQL 关系型数据库 MySQL
后端接口性能优化分析-数据库优化(下)
后端接口性能优化分析-数据库优化
70 1
|
12天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
25天前
|
SQL 关系型数据库 MySQL
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(数据恢复补充篇)(一)
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(数据恢复补充篇)
30 0
|
1月前
|
存储 NoSQL 大数据
新型数据库技术在大数据分析中的应用与优势探究
随着大数据时代的到来,传统数据库技术已经无法满足海量数据处理的需求。本文将探讨新型数据库技术在大数据分析中的应用情况及其所带来的优势,为读者解析数据库领域的最新发展趋势。
|
1月前
|
存储 关系型数据库 MySQL
TiDB与MySQL、PostgreSQL等数据库的比较分析
【2月更文挑战第25天】本文将对TiDB、MySQL和PostgreSQL等数据库进行详细的比较分析,探讨它们各自的优势和劣势。TiDB作为一款分布式关系型数据库,在扩展性、并发性能等方面表现突出;MySQL以其易用性和成熟性受到广泛应用;PostgreSQL则在数据完整性、扩展性等方面具有优势。通过对比这些数据库的特点和适用场景,帮助企业更好地选择适合自己业务需求的数据库系统。
|
1月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库误truncate table的数据恢复案例
北京某国企客户Oracle 11g R2数据库误truncate table CM_CHECK_ITEM_HIS,表数据丢失,业务查询到该表时报错,数据库的备份不可用,无法查询表数据。 Oracle数据库执行Truncate命令的原理:在执行Truncate命令后ORACLE会在数据字典和Segment Header中更新表的Data Object ID,但不会修改实际数据部分的块。由于数据字典与段头的DATA_OBJECT_ID与后续的数据块中的并不一致,所以ORACLE服务进程在读取全表数据时不会读取到已经被TRUNCATE的记录,但是实际数据未被覆盖。
Oracle数据恢复—Oracle数据库误truncate table的数据恢复案例
|
2月前
|
存储 SQL 数据库连接
连接并操作数据库:Python 数据库案例
数据库是一种用于存储和管理数据的工具,它以一种有组织的方式将数据存储在文件或内存中,以便于检索和处理。数据库系统通常使用 SQL(Structured Query Language)语言来进行数据的操作,包括数据的插入、查询、更新和删除等。
|
2月前
|
存储 Oracle 关系型数据库
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例

热门文章

最新文章