zoukankan      html  css  js  c++  java
  • Oracle体系结构之联机日志文件管理

    日志文件分类:重做日志文件

                                 归档日志文件

                                  警告日志文件

                                  跟踪日志文件

    redo_log_file文件作用:

    1)维护数据一致性

    2)记录了数据库里的更改操作

             redo_log_friles以组为单位,一个组下可以有多个成员,顺序循环写,一个数据库要启动至少要有2个日志组,每个组下至少有一个成员,redolog以多工方式工作。

    日志切换:从一个组切换到下一个组的过程。

    1)自动切换

    2)手工切换

    规划redo_log_file日志:

    分散到不同磁盘,磁盘io要够用,io读写都要快。

    日志大小问题:要满足数据库自动切换日志的时间间隔在15--20min左右。

    1)查询日志文件位置:

    SQL>select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                  IS_

    ---------- ------- ------- ---------------------------------------- ---

             1 STALE   ONLINE  /u01/oracle/oradata/rezin/redo01.log     NO

             2 STALE   ONLINE  /u01/oracle/oradata/rezin/redo02.log     NO

             3        ONLINE  /u01/oracle/oradata/rezin/redo03.log     NO

    SQL> select * from v$log;

        GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS

    ---------- ---------- ---------- ---------- ---------- --- ----------------

    FIRST_CHANGE# FIRST_TIME

    ------------- -------

             1          1         37   52428800          1 YES INACTIVE

           642652 16-3? -15

             2          1         38   52428800          1 YES INACTIVE

           668961 16-3? -15

             3          1         39   52428800          1 NO  CURRENT

           695725 17-3? -15

    日志状态:status常见值

    unused:表示从未对联机重做日志文件组进行写入,这是刚添加联机重做日志组状态。

    current:表示当前正在使用的联机重做日志文件组。

    active:表示联机重做日志文件组是活动的,但不是当前正在使用的。崩溃恢复需要该状态,可能归档,也可能没有归档。

    clearing:表示执行alter database clear logfile后正在将该日志重建一个空日志,日志清除后,状态为unused。

    手工切换日志:

    SQL>alter system switch logfile;

    添加日志组文件:

             语法:alter database add logfile [group n1] ('<dir>','<dir>',....) size N,[group n2] ('<dir>','<dir>') size N,.........;

    SQL> alter database add logfile group 4 '/u01/oracle/oradata/orcl/redo04.log' size 50m;

             Database altered.

    SQL> alter database add logfile '/u01/oracle/oradata/orcl/redo05.log' size 50m;

             Database altered.

             添加组指定多个成员:

    SQL> alter database add logfile

    ('/u01/oracle/oradata/orcl/redo07.log','/u01/oracle/oradata/orcl/redo08.log') size 50m;

             Database altered.

    SQL> alter database add logfile group 7

    ('/u01/oracle/oradata/orcl/redo09.log','/u01/oracle/oradata/orcl/redo10.log') size 50m;

             Database altered.

             一条语句添加多个日志组:

    SQL> alter database add logfile group 7 '/u01/oracle/oradata/orcl/redo11.log' size 50m,group 8 '/u01/oracle/oradata/orcl/redo12.log' size 50m;

             Database altered.

    添加日志组成员:

    SQL>alter database add member '<dir1>' to group N, '<dir1>' to group N;

    SQL> alter database add logfile member '/u01/oracle/oradata/orcl/redo13.log' to group 8;

             Database altered.

             给多个组添加成员:

    SQL> alter database add logfile member '/u01/oracle/oradata/rezin/redo014.log' to group 1,'/u01/oracle/oradata/rezin/redo015.log' to group 2;

    invalid:要么日志文件不存在,要么是新添加的成员而另一个为用过的成员。

    删除日志组:alter database drop logfile group n1,group n2;

    日志状态为active、current状态的不能删除,需要手工切换日志直到可以删除为止。

    SQL>alter database drop logfile group 9;

    SQL>alter database drop logfile group 5,group 6;

    删除成员指令: alter database drop logfile member '<dir1>','<dir2>';

    SQL>alter database drop logfile member '/u01/oracle/oradata/orcl/redo07.log';

    SQL>alter database drop logfile member

    '/u01/oracle/oradata/orcl/redo01.log', '/u01/oracle/oradata/orcl/redo02.log';

    附加:删不掉切换日志。

    日志重命名:相当于更改路径,只有current不可以重命名。

    语法:#cp <oldfile> <newfile>

    SQL>alter database rename file '<oldfilename>' to '<newfilename>';

    SQL> ho cp /u01/oracle/oradata/orcl/redo11.log /u01/oracle/oradata/rezin/redo11.log

    SQL> ho ls /u01/oracle/oradata/rezin/redo11.log

    /u01/oracle/oradata/rezin/redo11.log

    SQL> alter database rename file '/u01/oracle/oradata/orcl/redo11.log' to

     '/u01/oracle/oradata/rezin/redo11.log';

    联机重做日志文件重命名:不能是current,只能oracle在mount和open状态使用。

    语法:alter database rename file '<oldfilename>' to '<newoldfile>';

    数据库的状态监控:

    状态:inactive(循环之外),active,current(循环之内)

    监控:select 'ho ls '||member from v$logfile;

    'HOLS'||MEMBER

    --------------------------------------------------------------------------------

    ho ls /u01/oracle/oradata/rezin/redo01.log

    ho ls /u01/oracle/oradata/rezin/redo02.log

    ho ls /u01/oracle/oradata/rezin/redo03.log

    查询在不在:

    SQL> ho ls /u01/oracle/oradata/rezin/redo01.log

    /u01/oracle/oradata/rezin/redo01.log

    查看磁盘空间够不够用:

    [oracle]#dh -f

    日志切换间隔时间:查看时间间隔是否在15到20分钟之间。

    SQL> select group#,to_char(first_time,'yyyy-mm-dd hh24:mi:ss') as first_time from v$log;

        GROUP# FIRST_TIME

    ---------- --------------------------------------------------------------

             1 2015-03-17 08:54:07

             2 2015-03-17 08:53:10

             3 2015-03-17 08:53:22

             4 2015-03-17 10:41:49

             5 2015-03-17 15:07:24

             6 2015-03-17 16:12:48

    日志组下必须有多个成员,不是多个成员组,修改成多个成员组。

    修改日志文件大小:先删掉已有日志组及其物理文件,然后再重新建立组并修改成相应大小即可。

    联机重做日志异常(日志不一致、丢失、损坏)处理:

    1)日志文件不一致:清空不一致日志组,oracle数据库一致性关闭的可以在启动时清空日志文件。

    SQL> alter database clear logfile group n;  --->inactive可清空

    SQL> alter database clear unarchived logfile group n;   ---->active可清空

    2)日志文件丢失:

    方法一:数据库一致性关闭的,如果日志文件丢失可以通过清空日志文件的办法恢复,步骤同上。

    方法二:数据库非一致性关闭

    1)加隐藏参数:同control_file里的_allow_resetlog_corruption隐藏参数解决问题。

    2)如果归档模式可以通过recover指令恢复:欺骗的手段

    sql>recover database using backup controlfile;

    sql>alter database open resetlogs;

    3)非归档模式下,加隐藏参数忽略数据库一致性,可以起到很大的作用,但不支持使用。

  • 相关阅读:
    Java1:Chapter2
    Java1:Chapter1
    Java1:Chapter11
    Java1:Chapter8
    Java1:Chapter6
    Android day 03
    Android day02
    Android day01
    二进制文件的读写
    字符流
  • 原文地址:https://www.cnblogs.com/wcwen1990/p/4376893.html
Copyright © 2011-2022 走看看