Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7096305
  • 博文数量: 703
  • 博客积分: 10821
  • 博客等级: 上将
  • 技术积分: 12042
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-02 10:41
个人简介

中科院云平台架构师,专注于数字化、智能化,技术方向:云、Linux内核、AI、MES/ERP/CRM/OA、物联网、传感器、大数据、ML、微服务。

文章分类

全部博文(703)

分类: Oracle

2013-12-24 08:16:52


1: Oracle 11g Alert log 文件位置:
Oracle至11g后的alert log有所变动,oracle数据库以XML与传统的文本两种格式提供Alert log日志了。
新的日志位置由Automatic Diagnostic Repository(ADR)决定存放目录,可以通过信的初始化参数DIAGNOSTIC_DEST控制ADR base的位置。
SQL> show parameter diagnostic_dest;
NAME                                TYPE      VALUE
------------------------------------ ----------- ------------------------------
diagnostic_dest                    string    /u01/sys_software/oracle
SQL>
如果没有设置这个初始化参数的位置,而有设置ORACLE_BASE环境变量的话,那么$oracle_home/log即为DIAGNOSTIC_DEST的目录。
Alert log文件父目录的位置在:
$ORACLE_BASE/diag/product_type/product_id/instance_id
这个目录下面有alter、trace、cdump之类的子目录
Alert log XML的文件位置
SQL> select value from v$diag_info where name='Diag Alert';
VALUE
--------------------------------------------------------------------------------
/u01/sys_software/oracle/diag/rdbms/hbcadb/hbcadb1/alert
SQL>
Alert log文本文件的位置
SQL> select value from v$diag_info where name='Diag Trace';
VALUE
--------------------------------------------------------------------------------
/u01/sys_software/oracle/diag/rdbms/hbcadb/hbcadb1/trace
SQL>

2:使用logrotate命令管理listener.log文件
linux机器listener.log文件太大,导致硬盘空间不足,分区/u01太小了.
实际上可以通过logrotate来定时管理listener.log文件:
方法如下:
进入 /etc/logrotate.d目录,建立oracle文件,我参照squid的文件来配置:
/u01/app/oracle/product/10.2.0/db_1/network/log/listener.log {
    size=200M
    rotate 5
    copytruncate
    compress
    notifempty
    missingok
}
可以根据自己需求改变size的大小,也可以改用monthly参数。
3:日志文件管理

 日志文件是Oracle数据库的重要组成部分,下文对Oracle日志文件管理作了详尽的阐述,如果你感兴趣的话,不妨一看。

Oracle日志文件相信大家都有一定的了解,下面就为您详细介绍Oracle日志文件管理方面的知识,希望可以让您对Oracle日志文件有更深的了解。

ORACLE数据库的Oracle日志文件$ORACLE_BASE/admin/orasid/bdump/alert_orasid.log记录了重作日志的转换,数据库启动和关闭,数据库结构的改变,回退段的修改,死锁,内部错误等信息.
数据库管理员需要检查这个文件有无ORA-错误并定期地对这个日志文件进行存档整理。

UNIX下可以用grep命令把alert_orasid.log里出现的错误保存到另一个文件。然后去找原因。
$grep ORA- alert_orasid.log error.log

大家都知道,文件越大,其打开和读写的开销越大。如果Oracle日志文件太大了(超过5M),

1.           $cp $ORACLE_HOME/network/log/listener.log $ORACLE_BACKUP/network/log/listener_1.log  

2.           $cp /dev/null $ORACLE_HOME/network/log/listener.log 

要对它截断处理。
直接删除它,让ORACLE重新生成不是好的方法。因为ORACLE是通过一个指向文件的指针进行写操作。
在数据库运行时删除了这个文件, ORACLE仍然用原来的文件指针进行写操作,有可能写一个不存在的文件导致硬盘空间占用。

我们要采用以下的方法:

1.           $tail -100 $ORACLE_BASE/admin/orasid/bdump/alert_orasid.log /tmp/oracle_temp.log  

2.           $cp /tmp/oracle_temp.log $ORACLE_BASE/admin/orasid/bdump/alert_orasid.log  

3.           $rm /tmp/oracle_temp.log 

对日志文件进行截断处理。

4:日志文件管理
如果是安全关闭数据库.数据库处于一致状态: 
SQL>   STARTUP   NOMOUNT 
SQL>   CREATE   CONTROLFILE   REUSE   DATABASE   "TEST "   RESETLOGS   ARCHIVELOG 
SQL>   ALTER   DATABASE   OPEN   RESETLOGS; 
马上备份 
如果不是非安全关闭: 
非当前日志就 
SQL> alter   database   clear   unarchived   logfile   group   n;   
SQL> alter database clear logfile 'C:\oracle\product\10.1.0\oradata\hupan\REDO01
.LOG' group 1;
当前日志: 
在initsid> .ora中加入如下参数     _allow_resetlogs_corruption=TRUE   
            alter system set "_allow_resetlogs_corruption" = true scope = spfile;
SQL> recover   database   until   cancel;     
    Cancel 
如果出错,不再理会,发出     
SQL> alter   database   open   resetlogs
一、Oracle中的几类日志文件
    Redo log files      -->联机重做日志
    Archive log files   -->归档日志
    Alert log files     -->告警日志
    Trace files         -->跟踪日志
    user_dump_dest          -->用户跟踪日志
    backupground_dump_dest  -->进程跟踪日志
   --查看后台进程相关目录
        SQL> show parameter dump
        NAME                                 TYPE        VALUE
        ------------------------------------ ----------- ------------------------------
        background_core_dump                 string      partial
        background_dump_dest                 string      /u01/app/oracle/admin/orcl/bdump
        core_dump_dest                       string      /u01/app/oracle/admin/orcl/cdump
        max_dump_file_size                   string      UNLIMITED
        shadow_core_dump                     string      partial
        user_dump_dest                       string      /u01/app/oracle/admin/orcl/udump   
    关于Oracle 常用目录及路径请参考:Oracle 常用目录结构(10g) 
    关于Oracle 体系结构请参考:Oracle实例和Oracle数据库(Oracle体系结构) 
二、联机重做日志的规划管理
    1.联机重做日志      
        记录了数据的所有变化(DML,DDL或管理员对数据所作的结构性更改等)
        提供恢复机制(对于意外删除或宕机利用日志文件实现数据恢复)
        可以被分组管理
    2.联机重做日志组
        由一个或多个相同的联机日志文件组成一个联机重做日志组
        至少两个日志组,每组一个成员(建议每组两个成员,分散放开到不同的磁盘)
        由LGWR后台进程同时将日志内容写入到一个组的所有成员
            LGWR的触发条件
                在事务提交的时候(COMMIT)
                Redo Log Buffer 三分之一满
                Redo Log Buffer 多于一兆的变化记录
                在DBWn写入数据文件之前
    3.联机重做日志成员
        重做日志组内的每一个联机日志文件称为一个成员
        一个组内的每一个成员具有相同的日志序列号(log sequence number),且成员的大小相同
        每次日志切换时,Oracle服务器分配一个新的LSN号给即将写入日志的日志文件组
        LSN号用于唯一区分每一个联机日志组和归档日志
        处于归档模式的联机日志,LSN号在归档时也被写入到归档日志之中
    4.日志文件的工作方式
        日志文件采用按顺序循环写的方式
        当一组联机日志组写满,LGWR则将日志写入到下一组,当最后一组写满则从第一组开始写入
        写入下一组的过程称为日志切换
        切换时发生检查点过程
        检查点的信息同时写入到控制文件
    5.联机日志文件的规划
        总原则
            分散放开,多路复用
            日志所在的磁盘应当具有较高的I/O
            一般日志组大小应满足自动切换间隔至少15-20分钟左右业务需求
            建议使用rdo结尾的日志文件名,避免误删日志文件。如redo1.rdo,redo2.rdo
        规划样例
            Redo Log Group1     Redo Log Group2     Redo Log Group3
            Member1             Member1              Member1            -->Physical Disk 1
            Member2             Member2              Member2            -->Physical Disk 2
            Member3             Member3              Member3            -->Physical Disk 3           
    6.日志切换和检查点切换
        ALTER SYSTEM SWITCH LOGFILE;   --强制手动切换
        ALTER SYSTEM CHECKPOINT;
        强制设置检查点间隔
        ALTER SYSTEM SET FAST_START_MTTR_TARGET = n
    7.添加日志文件组
        ALTER DATABASE ADD LOGFILE [GROUP n]
            ('$ORACLE_BASE/oradata/u01/logn1.rdo',
             '$ORACLE_BASE/oradata/u01/logn2.rdo')
            SIZE mM;
    8.添加日志成员
        ALTER DATABASE ADD LOGFILE MEMBER
        '$ORACLE_BASE/oradata/u01/logn1.rdo' TO GROUP 1,
        '$ORACLE_BASE/oradata/u01/logn2.rdo' TO GROUP 2;
    9.删除日志成员
        不能删除组内的唯一一个成员
        不能删除处于active 和current 状态组内的成员
        删除处于active 和current 状态组内的成员,应使用日志切换使其处于INACTIVE状态后再删除
        对于组内如果一个成员为NULL 值,一个为INVALID,且组处入INACTIVE,仅能删除INVALID状态成员
        删除日志成员,物理文件并没有真正删除,需要手动删除
        删除日志文件后,控制文件被更新
        对于处于归档模式下的数据库,删除成员时确保日志已被归档,查看v$log视图获得归档信息
        ALTER DATABASE DROP LOGFILE MEMBER '$ORACLE_BASE/oradata/u01/logn1.rdo'
    10.删除日志组
        一个实例至少需要两个联机日志文件组
        活动或当前的日志组不能被删除
        组内成员状态有NULL 值或INVALID状态并存,组不可删除
        日志组被删除后,物理文件需要手动删除(对于非OMF)
        ALTER DATABASE DROP LOGFILE GROUP n
    11.日志的重定位及重命名
        所需权限
            ALTER DATABASE 系统权限
            复制文件到目的位置操作系统权限(写权限)
        CURRENT状态组内的成员不能被重命名
        建议该行为之前备份数据库
        重命名或重定位之后建议立即备份控制文件
        重定位及重命名的两种方法
            添加一个新成员到日志组,然后删除一个旧的成员
            使用ALTER DATABASE RENAME FILE 命令(不区分归档与非归档模式)
                复制联机日志文件到新路径:ho cp
                执行ALTER DATABASE RENAME FILE '' TO ''
            对于处于CURRENT状态的需要改名且不切换的情况下
                办法是切换到MOUNT状态下再执行上述操作
    12.清空日志文件组
        ALTER DATABASE CLEAR LOGIFLE GROUP n
        ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP n --使用unarchived 避免归档
    13.日志周期循环及切换分析
        Group 1      Group 2      Group 3 
        Current      Inactive     Inactive
        ---------- Log Switch -------------
        Active       Current      Inactive
        ---------- Log Switch -------------
        Active       Active       Current
        ---------- Log Switch -------------
        Current      Inactive     Inactive 
        --Active 和Current 称之为在一个循环周期之内(按顺序写日志)
        --Inactive 称为一个周期之外(一个新的循环)
        --新一轮循环开始如在归档状态则先归档再清空,否则直接清空日志
        --数据库启动时Active 和Current 状态的日志不能丢失,否则出错
对于CURRENT组的也可以使用隐藏参数来解决
        步骤:
            alter system set "_allow_resetlogs_corruption" = true scope = spfile;          
            recover database using bakcup controlfile;        
            alter database open resetlogs;
            shutdown immediate;
            startup mount;
            alter database open resetlogs;
            alter system reset "_allow_resetlogs_corruption" scope = spfile sid = '*'
        对于归档模式下的日志文件丢失,同样可以按上述步骤处理
REDO01.LOG文件误删除后恢复的方法如下:
conn sys/sys@数据库服务名称 as sysdba;
SQL>shutdown immediate;
SQL>startup mount;
SQL>recover database until cancel;
SQL>alter database open resetlogs;
SQL>shutdown;
SQL>startup;










阅读(3924) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~