解决Oracle数据库报错ORA-27104: system-defined limits for shared memory was misconfigured

解决Oracle数据库报错ORA-27104: system-defined limits for shared memory was misconfigured

问题现象

测试环境申请了新的机器后,Oracle数据库直接克隆了其他机器,但完成后使用Navicat连接报错:
在这里插入图片描述
XShell连接后,登录报错没有实例,关闭数据库和启动数据库都有如下报错:
在这里插入图片描述

摸索过程

在网上搜了很久之后,看到很多人提到alert.log日志,但是我找不到该日志。百度后参考如下路径
O R A C L E B A S E / d i a g / r d b m s / ORACLE_BASE/diag/rdbms/ ORACLEBASE/diag/rdbms/ORACLE_SID/$ORACLE_SID
echo $ORACLE_BASE
在这里插入图片描述

最终在/u01/app/oracle/diag/rdbms/orcl/orcl/aler下找到了类似的日志,日志中发现如下报错:
在这里插入图片描述

根据错误,可以判断出来是sga相关的配置太大了。

解决方法

参考:
http://blog.itpub.net/30150152/viewspace-1449898/
https://www.cnblogs.com/mikevictor07/p/3615558.html
由于数据库无法启动,只能调编辑参数文件来修改sga相关值:
我的spfile文件目录是:
/u01/app/oracle/product/19.0.0/dbhome_1/dbs
查看自己ORACLE安装目录命令:echo $ORACLE_HOME
在这里插入图片描述
在这里插入图片描述

spfileorcl.ora即spfile文件
因此执行的是:
create pfile=’/u01/app/oracle/product/19.0.0/dbhome_1/dbs/init20200506.ora’ from spfile;
查看我的spfile文件,发现只有
在这里插入图片描述
在这里插入图片描述
如上,只有下面两个参数是跟sga有关的,且配置确实超过了3951m:
1.orcl.__sga_target=5049942016=4816m
2.*.sga_target=4812m
根据报错可以看到该值大小应该小于3556M,从网上看到该值最好不大于物理内存的80%
在这里插入图片描述另外还注意到:
3.orcl.__shared_pool_size=2969567232=2832m
感觉上sga_target值应该大于__shared_pool_size的值,因此最后我最终设置的值为:
orcl.__sga_target=3221225472
*.sga_target=3072m

过程如下:
1.sysdba登录数据库
[oracle@oracle dbs]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu May 7 02:19:18 2020
Version 19.3.0.0.0
Copyright © 1982, 2019, Oracle. All rights reserved.
Connected to an idle instance.
2.根据spfile创建pfile文件
SQL> create pfile=’/u01/app/oracle/product/19.0.0/dbhome_1/dbs/init20200506.ora’ from spfile;
File created.
3.修改pfile文件
SQL> !vi /u01/app/oracle/product/19.0.0/dbhome_1/dbs/init20200506.ora
4.先用备用的pfile启动oracle
SQL> startup pfile=’/u01/app/oracle/product/19.0.0/dbhome_1/dbs/init20200506.ora’;
ORACLE instance started.
Total System Global Area 3221222464 bytes
Fixed Size 8901696 bytes
Variable Size 654311424 bytes
Database Buffers 2550136832 bytes
Redo Buffers 7872512 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 10 - see DBWR trace file
ORA-01110: data file 10: ‘/u01/app/oracle/oradata/ORCL/zpzdata.dbf’
SQL>
此处启动我报的错误已经与原始错误无关了(该错误解决办法见其他博客),已经可以启动数据库了!
但是,如果此时关闭数据库再重新启动,还必须要使用pfile文件执行才不会报原来的错误,如果直接执行startup默认是执行的spfile文件启动,因此还需要将已修改的pfile文件覆盖到spfile文件。
测试过程如下:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORA-27104: system-defined limits for shared memory was misconfigured
SQL> startup pfile=’/u01/app/oracle/product/19.0.0/dbhome_1/dbs/init20200506.ora’;
ORACLE instance started.
Total System Global Area 3221222464 bytes
Fixed Size 8901696 bytes
Variable Size 654311424 bytes
Database Buffers 2550136832 bytes
Redo Buffers 7872512 bytes
Database mounted.
Database opened.
5.根据pdfile文件重新创建spfile文件
SQL> create spfile from pfile=’/u01/app/oracle/product/19.0.0/dbhome_1/dbs/init20200506.ora’;
File created.
6.重启数据库
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.
Total System Global Area 3221222464 bytes
Fixed Size 8901696 bytes
Variable Size 654311424 bytes
Database Buffers 2550136832 bytes
Redo Buffers 7872512 bytes
Database mounted.
Database opened.
SQL> exit
搞定!撒花!

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值