• ORA30036:磁盘满Oracle无法启动


    --ref
         oracle占用的磁盘空间自动增长导致数据库当机

    源文档 <http://topic.csdn.net/u/20091013/12/01efb6a6-957e-495d-a7e8-1da5ec85e3af.html>

    可能是日志文件或跟踪文件产生过多导到磁盘空间增长,可以到目录%ORACLE_BASE%\admin\%ORACLE_SID%下面找找,看看bdumpudumpcdump下面的文件

    --错误描述
    做一个大的update导致undo暴涨,具体:
    xxd@ETMCDB> update big_table set temporary = decode(temporary,'N','Y','N');
    update big_table set temporary = decode(temporary,'N','Y','N')
           *
    ERROR at line 1:
    ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS1'

    其他连接断开,试图重新连接显示错误提示如下:
    Error:28 No Space On Device

    一些有用的shell @20110530加入

    node1*orcl-/u01/app/oracle/admin/orcl/bdump >cd orcl/
    node1*orcl-/u01/app/oracle/admin/orcl/bdump >du -sh *
    2.5M    adump
    9G     bdump
    4.0K    cdump
    4.0K    dpdump
    8.0K    pfile
    524M    udump
    这里就找到了bdump文件夹,然后进入删除
    node1*orcl-/u01/app/oracle/admin/orcl/bdump >find . -name *.trc -exec rm{}
    node1*orcl-/u01/app/oracle/admin/orcl/bdump >ls *.trc| xargs -n 10 rm -fr ls 

    如果遇到/bin/rm: Argument list too long错误则需要一点一点的删除

    node1*orcl-/u01/app/oracle/admin/orcl/bdump >rm -f orcl_j000_2*.trc

    --解决方法
    很简单找出占磁盘的文件就是arch,flash back空间或/var/log,arch清除
    1.找出路径
    sys@ETMCDB> show parameters archive
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    archive_lag_target                   integer     0
    log_archive_config                   string
    log_archive_dest                     string
    log_archive_dest_1                   string      LOCATION=/u01/app/oracle/flash_recovery_area/ORCL

    2.到/u01/app/oracle/flash_recovery_area/ORC下清除
     node1*orcl-/u01/app/oracle/flash_recovery_area/ORCL/archivelog >du -h --max-depth=1

    有时磁盘满的情况下是进不去RMAN的,所以要手工删除.

     node1*orcl-/u01/app/oracle/flash_recovery_area/ORCL >rm -rf archivelog/

    然后到RMAN中删除

    rman target sys/<password> nocatalog 
    rman>crosscheck archivelog all
    rman>delete expired archivelog all

    --问题总结
    [root@oracle ~]# df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/cciss/c0d0p2      31G   14G   16G  46% /
    /dev/cciss/c0d0p1      97M   11M   81M  12% /boot
    none                 1014M     0 1014M   0% /dev/shm
    不要只分一个'/'区,如果有个‘/opt’,也不至于把系统撑爆,类似以下:
    /dev/vg00/lvol3     262144  181520   80040   69% /
    /dev/vg00/lvol1     314736   84360  198896   30% /stand
    /dev/vg00/lvol8    4718592 1056280 3633752   23% /var
    /dev/vg00/lvol7    2654208 1435160 1209576   54% /usr
    /dev/vg00/lvol4    1540096 1028512  508264   67% /tmp
    /dev/vg00/lvol9    10485760 4948670 5365096   48% /oracle
    /dev/vg00/lvol6    94208000 7317328 86211936    8% /opt
    /dev/vg00/lvol5     163840    2480  160104    2% /home
    /dev/vg00/lv_arch  51216384 51112984  102632  100% /arch


    --延伸问题

    1.归档满撑爆磁盘且shutdown immediate命令无法关闭数据库:
    归档目录已经全部删除了,但是归档目录的大小还是100%,且执行shutdown immediate挂死
    同时alertlog中也在不断的报错:
    ORA-16014: log 2 sequence# 28801 not archived, no available destinations
    ORA-00312: online log 2 thread 1: '/dev/vg_audit01/rredo_128m_02'
    ORA-00312: online log 2 thread 1: '/dev/vg_audit01/rredo_128m_12'
    ORA-00312: online log 2 thread 1: '/dev/vg_audit01/rredo_128m_22'
    Mon Sep  1 10:28:55 2008
    问题原因:
    引起该问题的主要原因,就是在/arch目录下,使用了rm *命令来删除归档,但是当前正好有归档进程(arch)正在写出,rm后文件系统的句柄无法释放,因此空间也没有释放。
    此时我们用shutdown immediate命令无法关闭数据库,这是因为,在现在的状态下,arch已经被撑爆,所有组的redolog均为非inactive状 态,shutdown immediate需要做checkpoint,checkpoint会将dirty buffer中的东西写入到db buffer,lgwr的触发条件之一就是dbwr进程写db file,此时,lgwr发现所有的redolog都是非inactive状态,都不能写,继续寻求arch切出,以期待能写redolog。而此时 arch目录爆满,因此就报上述的错了。
    sys@ETMCDB> select * from v$log;
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM
    ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
             1          1        187  104857600          2 YES ACTIVE                 13693650 16-NOV-09
             2          1        188  104857600          2 NO  CURRENT               13696640 16-NOV-09
             3          1        186  104857600          2 YES ACTIVE                  13689184 16-NOV-09

    最安全的方法是在rman中用delete input删除了。或者在删除归档的时候不要全部删除,要留最后一个归档。RMAN 删除归档日志:

    RMAN> delete noprompt archivelog until time "sysdate -3";
    RMAN> run{
               crosscheck backup;
               delete noprompt obsolete;
               delete noprompt expired backup;
               }
    --END--

  • 相关阅读:
    浅谈ASP.NET核心对象
    介绍ASP.NET服务器控件之视图状态++
    详述Asp.net的加密解密技巧(1)
    详述Asp.net的加密解密技巧(2)
    ASP.NET性能优化之构建自定义文件缓存
    介绍ASP.NET服务器控件之视图状态
    详细介绍ASP.NET的实用技巧
    扩展RBAC用户角色权限设计方案
    String...
    基于XMPP协议的手机多方多端即时通讯方案
  • 原文地址:https://www.cnblogs.com/buro79xxd/p/1682562.html
Copyright © 2020-2023  润新知