重做日志文件和控制文件的管理——重做日志文件管理Oracle数据库应用与设计杭州电子科技大学2目标在完成本章学习后,你将掌握下列技能:重做日志文件组的管理重做日志成员的管理数据库的两种日志模式重做日志的切换Oracle数据库应用与设计杭州电子科技大学3本章内容重做日志文件的作用重做日志文件组的管理重做日志成员的管理数据库的两种日志模式日志切换和检查点Oracle数据库应用与设计杭州电子科技大学4本章内容导航重做日志文件的作用重做日志文件组的管理重做日志成员的管理数据库的两种日志模式日志切换和检查点Oracle数据库应用与设计杭州电子科技大学5•重做日志文件主要以重做记录的形式记录、保存对数据库所做的修改。•如果对一个表的数据进行了修改,并完成了事务的提交,这时数据文件中只存储修改后的数据,但重做日志文件要记录两类数据:一类是修改前的数据,一类是修改后的数据。•所以重做日志文件的管理方式与数据文件的管理方式有所不同。Oracle数据库应用与设计杭州电子科技大学6重做日志文件的作用重做日志文件记录数据库的任何操作,当数据被意外删除或修改,当出现例程失败或者介质失败,可以利用重做日志文件恢复。Oracle数据库应用与设计杭州电子科技大学7本章内容导航重做日志文件的作用重做日志文件组的管理重做日志成员的管理数据库的两种日志模式日志切换和检查点Oracle数据库应用与设计杭州电子科技大学8重做日志文件组的管理——什么是重做日志文件组重做日志文件组(RedoLogGroup)由一组完全相同的重做日志文件组成;每个日志组至少要包含一个重做日志文件;如果一个日志组包含多个重做日志文件,后台进程LGWR会将相同的事务变化写入到同一个日志组的各个重做日志文件中。Oracle数据库应用与设计杭州电子科技大学9重做日志文件组的管理——重做日志文件组查询SQLselectgroup#,sequence#,members,bytes,status,archivedfromv$log;–group#:重做日志组的组号–sequence#:重做日志的序列号,供将来数据库恢复时使用–members和bytes:重做日志组成员的个数和大小–archived:是否归档–status:状态,有inactive、active、current和unused4种常用状态Oracle数据库应用与设计杭州电子科技大学10重做日志文件组的管理——重做日志文件组查询status字段的4种状态–inactive:实例恢复不用的联机重做日志组–active:该联机重做日志文件是活动的但不是当前组,在实例恢复时需要这组联机重做日志–current:当前正在写入的联机重做日志文件组–unused:Oracle服务器从未写过该联机重做日志文件组,这是重做日志刚被添加到数据库中的状态。Oracle数据库应用与设计杭州电子科技大学11重做日志文件组的管理——创建重做日志文件组创建重做日志文件组语法ALTERDATABASE[数据库名]ADDLOGFILE[GROUP正整数]文件名[,[GROUP正整数]文件名,…]Oracle数据库应用与设计杭州电子科技大学12--向数据库添加一个新的重做日志组4,包括两个成员,每个成员大小为10M。SQLAlterdatabaseaddlogfilegroup4(‘c:\redo04_1.log’,’c:\redo04_2.log’)size10m;--查看修改后的效果SQLAlterdatabasebackupcontrolfiletotrace建议:在命名重做日志文件时,最好能使用类似redomm_n.log的规则,其中mm表示组号,n表示成员号。Oracle数据库应用与设计杭州电子科技大学13Oracle数据库应用与设计杭州电子科技大学14若MAXLOGFILES=16则,SQLAlterdatabaseaddlogfilegroup18(‘c:\redo18_1.log’)size10m;????如何去看MAXLOGFILES的值是多少?Oracle数据库应用与设计杭州电子科技大学15本章内容导航重做日志文件的作用重做日志文件组的管理重做日志成员的管理数据库的两种日志模式日志切换和检查点Oracle数据库应用与设计杭州电子科技大学16重做日志成员的管理——什么是重做日志成员重做日志组中的每个重做日志文件又叫做重做日志成员(RedoLogMember)。Oracle默认每个重做日志组只有一个成员,但建议在实际应用中应该每个重做日志组至少有两个成员,而且最好将它们放在不同的物理磁盘上,以防止一个成员损坏了,所有日志信息就不见的情况发生。Oracle数据库应用与设计杭州电子科技大学17重做日志成员的管理——重做日志成员查询SQLselect*fromv$logfile;–status字段的含义如下:空白:该文件正在使用。stale:该文件中的内容是不完全的。invalid:该文件不可以被访问。deleted:该文件已不再有用了。Oracle数据库应用与设计杭州电子科技大学18重做日志成员的管理——创建重做日志成员创建重做日志成员语法ALTERDATABASE[数据库名]ADDLOGFILEMEMBER[‘文件名’[REUSE][,‘文件名’[REUSE]]…TO{GROUP正整数|(‘文件名’[,’文件名’]…)}]…Oracle数据库应用与设计杭州电子科技大学19--向组号4的组添加新的成员SQLalterdatabaseaddlogfilemember‘c:\redo04_3.log’togroup4--如果不知道组编号,也可以通过制定本组中其他成员的名称来添加新的成员SQLalterdatabaseaddlogfilemember‘c:\redo04_3.log’to(‘c:\redo04_1.log’,‘c:\redo04_2.log’)Oracle数据库应用与设计杭州电子科技大学20Oracle数据库应用与设计杭州电子科技大学21重做日志成员的管理——删除重做日志成员删除重做日志成员语法ALTERDATABASE[数据库名]DROPLOGFILEMEMBER‘文件名’[,’文件名’]…–不能删除当前重做日志组的成员,如果要删除的话,先使用altersystemswitchlogfile进行切换。–因为刚加入的成员状态都是invalid,如果要删除刚加入的成员,在删除它们之前可能要进行若干次日志切换。比较容易的方法是重启数据库,之后就可以轻松删除这些成员了。Oracle数据库应用与设计杭州电子科技大学22•如果使用了多路复用重做日志文件,但某个组的某个成员不能再使用了,就要删除其他组的某个成员,以便所有组都有相同个数的成员,这样多路复用重做日志才可以暂时变得对称。当然如果某个组包含多个成员,删除某个成员是不会数据库的运行造成影响的,因为并不要求每个组一定要有相同个数的成员。Oracle数据库应用与设计杭州电子科技大学23•不管组中包含多少成员,一个例程至少需要2个有效的重做日志文件组,每组有一个或多个成员。如果要删除的成员是组的最后一个有效成员,那么就不能删除该成员,直到其他成员变为有效为止。•只有当要删除的重做日志成员current时才能删除。如果想删除某个活动组的成员,首先要手动地进行日志切换,将该组变成active/inactive状态。•在删除重做日志成员之前,要确定该成员所属的组是经过归档的。(V$LOG)Oracle数据库应用与设计杭州电子科技大学24Oracle数据库应用与设计杭州电子科技大学25•当从数据库中删除了重做日志文件组成员后,实际上并没有将该成员使用的操作系统文件从磁盘中删除。•此时只是更新了相关数据库的控制文件,以便从数据库结构中删除该成员。所以在删除该成员后,先要确定删除操作已成功完成,然后再使用合适的操作系统命令删除对应的重做日志文件。如何查看当前数据库例程的控制文件内容?参数文件的内容呢?Oracle数据库应用与设计杭州电子科技大学26重做日志文件组的管理——删除重做日志文件组删除重做日志文件组语法ALTERDATABASE[数据库名]DROPLOGFILE{GROUP正整数|(‘文件名’[,‘文件名’]…)}[,{GROUP正整数|(‘文件名’[,’文件名’]…)}]…–当前使用的重做日志组不能删除,如果要删除的话,先使用altersystemswitchlogfile进行切换。–数据库实例至少需要两组重做日志才能正常工作。当重做日志被删除后,它的操作系统文件要用操作系统命令删除。Oracle数据库应用与设计杭州电子科技大学27Oracle数据库应用与设计杭州电子科技大学28本章内容导航重做日志文件的作用重做日志文件组的管理重做日志成员的管理数据库的两种日志模式日志切换和检查点Oracle数据库应用与设计杭州电子科技大学29数据库的两种日志模式日志信息循环写入重做日志文件,即写满一个文件换下一个文件。在往原来的重做日志文件中循环写入日志信息时,存在两种处理模式。一种不需要数据库进行自动备份,叫做非归档模式;当重做日志改写原有的重做日志文件以前,数据库会自动对原有的日志文件进行备份的话,这种操作模式就叫做归档模式。Oracle数据库应用与设计杭州电子科技大学30数据库的两种日志模式查看数据库重做日志文件的归档方式SQLarchiveloglist;归档进程(ARCH)–可选的后台处理进程–在归档模式时开始自动归档联机重做日志文件–保留所有针对数据库的改变–可以切换轮询存储ARCHArchivedredologfilesControlfilesDatafilesRedologfilesOracle数据库应用与设计杭州电子科技大学31本章内容导航重做日志文件的作用重做日志文件组的管理重做日志成员的管理数据库的两种日志模式日志切换和检查点Oracle数据库应用与设计杭州电子科技大学32日志切换日志切换是指停止向某个重做日志文件组写入而向另一个联机的重做日志文件组写入。在日志切换同时,还要产生检查点操作,还有一些信息被写入控制文件中。每次日志切换都会分配一个新的日志顺序号,归档时也将顺序号进行保存。每个联机或归档的重做日志文件都通过它的日志顺序号进行唯一标识。Oracle数据库应用与设计杭州电子科技大学33日志切换:当LGWR进程停止向某个重做日志文件写入而开始向另一个联机重做日志文件写入的那一刻,称为日志切换。UNUSED新加入组CURRENTACTIVEINACTIVEOracle数据库应用与设计杭州电子科技大学34日志切换日志切换的三种方式–重做日志文件组容量满的时候,会发生日志切换。–以时间指定日志切换的方式:如我们可以以一个星期或者一个月作为切换的单位,这样就不用理会是否写满。–强行日志切换:出于数据库维护的需要,如当发现存放数据重做日志的硬盘容量快用光时,需要换一块硬盘,此时,就需要在当前时刻,进行日志的切换动作。Oracle数据库应用与设计杭州电子科技大学35日志切换强行日志切换–SQLaltersystemswitchlogfile;–当发生日志切换时,系统会在后台完成checkpoint的操作,以保证控制文件、数据文件头、日志文件头的SCN一致,是保持数据完整性的重要机制。强行产生检查点–SQLaltersystemcheck;–还可设置参数fast_start_mttr_target来强制产生检查点,如fast_start_mttr_target=900表示实例恢复的时间不会超过900秒。Oracle数据库应用与设计杭州电子科技大学36Oracle数据库应用与设计杭州电子科技大学37Oracle数据库应用与设计杭州电子科技大学38移动重做日志文件•要改变重做日志文件的位置或名称,必须拥有alterdatabase系统权限。•另外,也可能需要操作系统权限(