Oracle引入重做日志的目的:数据库的恢复。
Oracle相关进程:重做日志写进程(LGWR)。
重做日志性质:联机日志文件,oracle服务器运行时需要管理它们。
相关数据字典:v$log ; v$logfile。
操作者权限:具有sys用户或system用户权限。
1. 获得数据库中有多少个重做日志组,每个组中有多少个成员、日志大小及状态。
SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED FROM V$LOG;
结果如下图:
状态列(status)所显示常用状态的含义:
2. 获得数据库中每个重做日志组的成员所在目录、文件名及状态。
SELECT GROUP#,STATUS,TYPE,MEMBER
FROM V$LOGFILE;
结果如下图:
状态列(status)所显示常用状态的含义:
联机重做日志文件是以一种循环的方式来使用,当一组联机重做日志文件被写满时,LGWR将开始写下一组日志文件,这被称为日志切换。可以在任何时候强制性的进行重做日志切换操作。
强制重做日志切换命令:ALTER SYSTEM SWITCH LOGFILE;
日志切换前,正在写的日志组是3:
执行命令ALTER SYSTEM SWITCH LOGFILE 后,在写日志组变为1:
创建新的重做日志组SQL命令格式:
ALTER DATABASE [数据库名]
ADD LOGFILE [GROUP正整数] 文件名
[, [GROUP 正整数] 文件名] ……]
创建新的重做日志组例子:
ALTER DATABASE ADD LOGFILE ('d:/logfile/redo 04a.log','e:/logfile/redo04b.log')
SIZE 15M;
注意:由于没有使用GROUP选项,所有oracle系统会自动地在最大的组号上加1来产生新的组号。
显示结果如下,创建一组新的日志组,组号是4,有两个成员,成员大小为15M。
SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED
FROM V$LOG;
下面的结果显示了新建日志的文件路径和文件名。
SELECT GROUP#,STATUS,TYPE,MEMBER
FROM V$LOGFILE;
删除重做日志组SQL命令格式:
ALTER DATABASE [数据库名]
DROP LOGFILE {GROUP正整数 | (‘文件名’[, ‘文件名’]……)}
[,{GROUP 正整数 | (‘文件名’[, ‘文件名’]……)}]…….
删除重做日志组例子:
ALTER DATABASE DROP LOGFILE GROUP 4;
显示结果如下,可以看出GROUP为4的日志组已经不存在。
SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED
FROM V$LOG;
SELECT GROUP#,STATUS,TYPE,MEMBER
FROM V$LOGFILE;
注意:
当前的重做日志组不能删除。如果要删除,先使用日志强制切换命令ALTER SYSTEM SWITCH LOGFILE进行切换。当一组重做日志被删除后,它的操作系统文件依然存在,只能用操作系统命令删除,否则会留下一些无用的垃圾文件。
创建新的重做日志成员(文件)SQL格式:
ALTER DATABASE [数据库名]
ADD LOGFILE MEMBER
[ ‘文件名’ [REUSE] [, ’文件名’ [REUSE]]]……
TO {GROUP正整数 | (‘文件名’[, ‘文件名’]……)}
添加重做日志成员例子:
ALTER DATABASE ADD LOGFILE MEMBER
'd:/logfile/redo01b.log' TO GROUP 1,
'd:/logfile/redo02b.log' TO GROUP 2,
'e:/logfile/redo03b.log' TO GROUP 3;
显示结果如下,可以看出每个日志组增加了一个日志成员,有原来的2个增加到3个。
SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED
FROM V$LOG;
下面的结果,显示了新增日志文件的路径和文件名。
SELECT GROUP#,STATUS,TYPE,MEMBER
FROM V$LOGFILE;
删除联机重做日志成员(文件)SQL命令格式:
ALTER DATABASE [数据库]
DROP LOGFILE MEMBER ‘文件名’ [, ‘文件名’] ……
删除重做日志成员例子:
ALTER DATABASE DROP LOGFILE MEMBER 'd:/logfile/redo02b.log';
结果显示如下,可以看出删除了组2一个日志成员。
SELECT GROUP#,SEQUENCE#,MEMBERS,BYTES,STATUS,ARCHIVED
FROM V$LOG;
SELECT GROUP#,STATUS,TYPE,MEMBER
FROM V$LOGFILE;
注意:
当前的重做日志组不能删除,否则会报如下错误:
如果要删除,应该先使用ALTER SYSTEM SWITCH LOGFILE命令进行切换。
如果数据库运行在归档模式,而要删除的成员还没有被归档完,那也无法删除它。
当一个重做日志成员被删除后,它的操作系统文件依然存在,只能用操作系统命令删除。