• 控制文件和重做日志文件(1)[转载)


    控制文件和重做日志文件(1)(转载)

    1 控制文件

    控制文件是一个二进制文件,包含了关于数据库物理结构的重要信息,包括数据库的名称,相关的数据文件和重做日志文件的名称

    和位置,当前的日志序列号等内容.

    1.1 创建复合控制文件(oracle最多支持同时使用8个控制文件)

    oracle将同时写入所有的控制文件中,但是只会读取 control_files参数中所指定的第一个控制文件

    1.关闭数据库

    2.将已有的控制文件复制多份并且重新命名,再将他们移动到操作系统的其它位置

    control_files = ( 'i:/oracle/oradata/ctrloradb01.ctl',

    'j:/oracle/oradata/ctrloradb02.ctl',

    'k:/oracle/oradata/ctrloradb03.ctl',

    'l:/oracle/oradata/ctrloradb04.ctl')

    3.修改初始化参数文件中的control_files的设置

    4.重新启动数据库

    1.2 备份控制文件

    1.将控制文件备份为二进制文件

    alter database backup controlfile to 'i:/oracle/backup/control.bkp';

    2.将控制文件备份为文本文件(备份到oracle/base/admin/sid/udump目录下的跟踪文件中,将在跟踪文件中生成一个SQL脚本)

    alter database backup controlfile to trace;

    1.3 删除控制文件

    1.关闭数据库

    2.编辑control_files初始化参数,使其中不再包含要删除的控制文件的名称

    3.在操作系统中删除控制文件

    4.重新启动数据库

    控制文件数据字典:

    v$controlfile 所有控制文件的名称和状态信息

    2 重做日志文件

    oracle数据库所使用的一组重做日志中至少需要包含两个重做日志文件组.

    只有当某个事务所产生的重做记录全部被写入重做日志文件之后,oracle才认为这个事务已经成功提交.重做记录也可能会在事务提交之前就写入重做日志文件.

    LGWR进程在开始写入下一个重做日志文件之前,必须确认这个即将被覆盖的重做日志文件已经完成如下工作:

    * 如果数据库处于非归档模式,已写满的重做日志文件在被覆盖之前,其中所有重做记录所对应的事务的修改

    操作结果必须已经全部被写入到数据文件中

    * 如果数据库处于归档模式,已写满的重做日志文件在被覆盖之前,不仅要对应所有事务的修改操作结果全部被 写入到数据文件中,还需要等待归档进程完成对它的归档操作

    在建立复合重做日志文件时,应当将同一个重做日志组中的各个成员分布到不同的硬盘中去,这样还可以避免LGWR进程和ARCn进程之间产生的硬盘I/O冲突.如果有条件,最好也能够将数据文件和日志文件分别存放在不同的硬盘中,这样还可以避免LGWR进程与DBWR进程之间的I/O冲突.

    重做日志组的最大数目: maxlogfiles

    每个重做日志组的所能拥有得最大成员数目: maxlogmembers

    2.1 创建重做日志组(复合)

    重做日志组得组号不能大于maxlogfiles参数设定的值,当中不能有间断.

    alter database add logfile

    ('i:/oracle/oradata/oradb01/redo0301.rdo',

    'i:/oracle/oradata/oradb01/redo0302.rdo') size 100M

    (应为没有指定group子句,oracle将自动为新建的重做日志组设置组号,一般是在当前组号之后递增)

    alter database add logfile group 3

    ('i:/oracle/oradata/oradb01/redo0301.rdo',

    'i:/oracle/oradata/oradb01/redo0302.rdo') size 100M

    2.2 创建一个非复合重做日志文件

    alter database add logfile

    'i:/oracle/oradata/oradb01/redo01.rdo'

    创建成员日志文件(不能使用SIZE参数来设定日志文件大小)

    alter database add logfile member

    'i:/oracle/oradata/oradb01/redo0303.log' to group 3

    或者

    alter database add logfile member

    'i;/oracle/oradata/oradb01/redo0303.log' to

    ('i;/oracle/oradata/oradb01/redo0301.log',

    'i;/oracle/oradata/oradb01/redo0302.log')

    2.3 改变重做日志文件名称或位置

    1.关闭数据库

    2.在操作系统级别重新命名或移动重做日志文件,要删除原来位置上的文件

    3.startup mount,不打开数据库

    4.用rename file子句的alter database语句

    alter database rename file

    'I;/oracle/oradata/oradb01/redo0301.log',

    'I;/oracle/oradata/oradb01/redo0302.log' to

    'j;/oracle/logs/redo0301.log',

    'k;/oracle/logs/redo0302.log'

    5.alter database open

    6.备份控制文件

    重做日志组的状态 active/current/inactive

    成员日志文件的状态 valid/invalid/stale

    删除重做日志组(只能删除INACTIVE状态的重做日志组,如果要删除CURRENT状态的重做日志组,必须执行一次手工日志切换,将它切换到INACTIVE状态)

    alter database drop logfile group 3

    最后需要手动删除操作系统中的相应文件

    删除成员日志文件(只能删除INACTIVE状态的重做日志组中的成员日志文件)

    alter database drop logfile member

    'i:/oracle/oradata/oradb01/redo0302.log'

    最后需要手动删除操作系统中的相应文件

    手工切换日志(每进行一次日志切换后,ORACLE将会在数据库的警告文件中进行记录)

    alter system switch logfile

    清空重做日志组

    (就是将重做日志文件中的内容全部初始化,想当于删除重做日志文件,再重建它)

    alter database clear logfile group 3

    如果要清空的重做日志组尚未归档,必须指定unarchived子句(oracle将避免对这个重做日志组进行归档,其中保存的重做记录暂时不会丢失)

    alter database clear unarchived logfile group 3

    警告:如果被清空的重做日志组还没有被归档,有可能造成数据丢失.比如,如果在一个表空间切换到脱机状态时是不干净的,即SGA区中有部分属于该表空间的脏缓存块还没有写入数据文件,那么在下一次将该表空间恢复为联机状态时,会需要使用到重做日志文件中的信息来进行恢复,而如果包含恢复信息的重做日志组中已经被清空,那么该表空间将无法恢复为联机状态.

    重做日志文件数据字典

    v$log 重做日志文件的基本信息

    v$logfile 各个成员日志文件的信息

  • 相关阅读:
    SourceForge上发布dedup util 收藏
    IBM快速整合Diligent 触动了谁的神经?
    Data Domain揭开其神秘面纱 加速中国业务发展
    Java NIO原理和使用
    用PDB库调试Python程序
    windows下配置eclipse + Python + PyDev + tornado,并使用pylint进行静态检测
    函数fork与vfork的区别与联系详解
    关于C++中友元类和友元函数的示例讲解
    const成员函数
    pthread_cond_wait()深入解析
  • 原文地址:https://www.cnblogs.com/liuyou/p/2618346.html
Copyright © 2020-2023  润新知