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

Technorati 标签: oracle, 控制文件, 重做日志文件

控制文件和重做日志文件(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 各个成员日志文件的信息

你可能感兴趣的:(oracle,数据库,File,脚本,database,System)