这个Case当时发生的时候,我人在外地,项目经理操作解决的,整理一下分享给大家。
- 问题现象
我们需要给一个Oracle DB下的一个表空间进行扩容,但是执行扩容命令的时候,Oracle报出了如下错误:ORA-00059 : maximum number of DB_FILES exceeded
- 报错解释:
DB_FILES 定义了oracle数据中数据文件的个数,当数据文件个数超过这个参数设定的值就会报ORA-00059这个错误。 - 问题处理
既然知道了报错的原因,那就开始从这里入手,先查一下现有的DB_FILES是多大:
用sys用户登陆到数据库服务器,执行show parameter db_files;
结果为300,跟实际的一对比,文件正好到300个,没法再往上扩了。
继续执行alter system set db_files=1000 scope=spfile;
此处修改参数为1000.
说明:这个参数设置的值的大小不会影响效率,只是单纯的控制数据文件的个数 -
新问题产生
$ sqlplus / as sysdba sql> shutdown immediate; ORA-24324: service handle not initialized ORA-24323: value not allowed ORA-01089: immediate shutdown in progress - no operations are permitted sql> shutdown abort; ORA-01031: insufficient privileges sql> startup; ORA-10997: another startup/shutdown operation of this instance inprogress ORA-09968: unable to lock file HPUX-ia64 Error: 13: Permission denied Additional information: 23564
我们在重启库这步操作的时候,发现停不掉了,从报错上来看,貌似权限还被咱们给弄没了。
-
解决方法
1、重新给文件夹赋权
rx8640a#[/]chown -R oracle:oinstall /u01/app/oracle
2、清内存
$ipcs -pmb
T ID KEY MODE OWNER GROUP SEGSZ CPID LPID Shared Memory: m 0 0x411c09d7 --rw-rw-rw- root root 348 943 943 m 1 0x4e240002 --rw-rw-rw- root root 61760 943 8401 m 2 0x412080da --rw-rw-rw- root root 8192 943 945 m 3 0x00a5c581 --rw------- sfmdb users 10469376 2407 2410 m 4 0x411c05e8 --rw------- root root 4096 2680 3291 m 5 0x06347849 --rw-rw-rw- root root 65544 2856 2883 m 21790726 0x00000000 --rw-r----- oracle oinstall 5926617088 10146 263 m 7 0x0c6629c9 --rw-r----- root root 17880696 2894 11235 m 32776 0x01200452 --rw-rw-r-- root root 4192 3238 3238 m 9 0x01200454 --rw-rw-r-- root root 4192 2924 2924 m 10 0x01200450 --rw-rw-r-- root root 4192 2938 2938 m 11 0x4918031b --rw-r--r-- root root 22912 2976 2972 m 12 0x01200448 --rw-rw-r-- root root 4192 2993 2993 m 13 0xa9240162 ----------- root root 1 3230 3232 m 98318 0x00000000 D-rw-r----- oracle oinstall 5939134464 10146 263 m 98319 0x00000000 D-rw-r----- oracle oinstall 8726282240 10146 263 m 98320 0x00000000 D-rw-r----- oracle oinstall 45056 10146 263
$
ipcrm -m 98318
$ipcrm -m 98319
$ipcrm -m 98320
ORACLE instance started. Total System Global Area 2.0552E+10 bytes Fixed Size 2128632 bytes Variable Size 9439184136 bytes Database Buffers 1.1107E+10 bytes Redo Buffers 4259840 bytes Database mounted. Database opened.
之后再查看调整的参数值,已经到了1000,这次再执行扩容表空间操作,就没问题了,呵呵。
这个Case的关键环节就在于,执行ipcs查看当前系统资源占用的情况,上文中有3个oracle的进程,所以需要在系统层面清除掉才能正常启动数据库。