暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle扩容表空间时的一次问题记录

小西瓜的技术之路 2017-08-15
326

这个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

     IPC status from /dev/kmem as of Sat Oct  1 11:31:26 2016
     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

    3.正常启动数据库:
    SQL>
    startup;

     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,这次再执行扩容表空间操作,就没问题了,呵呵。

这里放一篇文章:http://www.linuxidc.com/Linux/2013-05/84593.htm

这个Case的关键环节就在于,执行ipcs查看当前系统资源占用的情况,上文中有3个oracle的进程,所以需要在系统层面清除掉才能正常启动数据库。

文章转载自小西瓜的技术之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论