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

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

    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…

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

    原文作者:Summer的小西瓜
    原文地址: https://segmentfault.com/a/1190000010652211
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞