本文主要是介绍oracle学习笔记-重做日志管理(5),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在用户执行DML和DDL命令访问数据之前首先生成重做日志,并将重做日志记录在重做日志缓冲区,再修改数据库高速缓存区中的内容。重做日志记录用户的DML和DDL操作记录,包括修改的数据块、修改的位置以及修改后的数据等信息。重做日志文件是保证数据库安全的一种重要手段,数据库故障时可以通过重做日志文件和归档日志文件进行实例恢复和介质恢复。重做日志缓冲区大小有限,LGWR进程在一定时机下将重做日志缓冲区的重做日志写入到重做日志文件。数据库中一般有若干重做日志组,每个重做日志组包含若干重做日志成员,数据库以循环方式将重做日志写入这些重做日志组。当最后一组被写满时自动切换到第一组,这样文件中原来的重做日志就会被覆盖,为了保留重做日志就要对重做日志进行归档,重做日志归档有ARCH进程完成。
一、重做日志文件的规划
1、 重做日志缓冲区的规划
重做日志首先写入重做日志缓冲区,LGWR进程在一定时机下将重做日志缓冲区的内容写入重做日志文件,并清空这部分缓冲区,这样可以减少磁盘写的次数,提升数据库性能。
重做日志缓冲区的大小由初始化参数LOG_BUFFER指定,综合考虑内存大小,为重做日志缓冲区分配尽可能大的值。
2、 重做日志组规划
为了对重做日志进行归档,数据库中至少包含两个重做日志组,因为数据库正在使用一个数据文件时是不能对它进行归档的。日志组的最大数目由初始化参数MAXLOGFILES限定。
日志组的数目应根据实际情况选择合适的数目。如果日志组数目太多,会消耗太多磁盘空间。如果日志组数目太少,会影响数据库性能。在归档日志模式下,当切换到下一个日志组时,ARCH进程会对上一个日志组进行归档,如果归档太慢,或者日志写入速度太快。那么归档可能还没结束,数据库服务器又切换到了这个日志组,将造成LGWR进程阻塞,产生“checkpoint incomplete”警告,用户事务无法进行,等待归档结束。
3、 重做日志文件规划
在一个重做日志组中至少包含一个重做日志文件,但是一般要求至少有两个日志成员,他们互为镜像,LGWR进程将把重做日志同时写入日志组中的所有日志成员,并且为了防止磁盘故障,应将不同的日志成员放在不同的磁盘上。如果一个日志成员丢失或者损坏,LGWR进程将阻塞,这时候可以利用其他完好的日志成员复制一个新的日志成员。
LGWR进程可能遇到的异常情况:
某个重做日志组中的日志成员不可用。LGWR进程忽略不可用的日志成员,将重做日志写入其他可用的日志成员。
某重做日志组正在被归档或者尚未归档。LGWR阻塞等待归档完成。
某重做日志组中的所有日志成员不可用。数据库实例将关闭。
当前重做日志文件组中的所有日志成员突然都不可用。数据库实例将关闭。
二、 重做日志文件的管理
1、 增加重做日志组
SQL>ALTER DATABASE ADD LOGFILE [GROUP 4] (‘dir/logfile_name’,‘dir/logfile_name’) SIZE 200M
2、 增加日志成员
SQL>ALTER DATABASE ADD LOGFILE MEMBER ‘dir/logfile_name’,… TO GROUP 4;
3、 修改重做日志文件的存储位置和名称
1) 以NORMAL方式关闭数据库,确保所有用户事务正常结束;
2) 在操作系统下修改重做日志文件位置或名称;
3) 将数据库启动到MOUNT状态,此时控制文件已经打开而重做日志尚未打开;
4) ALTER DATABASE RENAME修改重做日志文件的名称或位置:
SQL>ALTER DATABASE RENAME
‘dir1/name1’,… TO ‘dir2/name2’,…;
这种方式也可以修改数据文件的名称和位置。
4、 删除重做日志文件
首先通过动态性能视图V$LOG查看日志组的状态以及是否已经进行归档,不能删除数据库正在使用的日志组,删除前应该先对其进行归档。
日志组删除后,所有的日志成员也会被删除,删除日志组的语法如下:
SQL>ALTER DATABASE
DROP LOGFILE GROUP 3;
删除日志成员的语法如下:
SQL>ALTER DATABASE
DROP LOGFILE MEMBER ‘dir/logname’;
5、 重做日志文件的清空
SQL>ALTER DATABASE CLEAR [UNARCHIVED] LOGFILE GROUP 3;
可清空”CURRENT”状态的重做日志组,但要清空未归档的重做日志组时需要使用UNARCHIVED关键字。
6、 重做日志的切换
手工切换重做日志对的命令如下:
SQL>ALTER SYSTEM SWITCH LOGFILE
7、 重做日志信息的查询
A. v$log:记录重做日志组的信息
状态有以下几种:
UNUSED:尚未被写如果重做日志
CURRENT:当前日志组
ACTIVE:活动的,但不是当前日志组。进行实例恢复时需要
CLEARING:正在被清空,之后变为UNUSED
INACTIVE:非当前日志组。实例恢复不需要,介质恢复需要
CLEARING_CURRENT:正在被清空的当前日志组
B. v$logfile:记录重做日志文件的信息
其中日志成员的状态有以下几种:
INVALID:文件不可访问
STALE:文件的内容不完整
DELETED:文件不再使用
空:正常
C. v$log_history:记录重做日志组的切换信息
这篇关于oracle学习笔记-重做日志管理(5)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!