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