原创转载请注明出处
重做日志:记录数据库数据的变化(DDL,DML)
重做日志组:由一个或者多个完全一样的重做日志文件组成,如果一个日志组有多个日志文件,后台进程LGWR会把事务变化写到同一个日志组的多个文件中。
每个数据库最少包括2个日志组,日志组可以循环使用。
重做日志成员:日志组的每个文件都称为日志成员。
工作原理:当用户执行DDL或者DML操作的时候,Oracle进程会把操作记录(重做记录)写到重做日志高速缓冲区中,最后有后台进程LGWR写到重做日志中。
LGWR在以下情况会进行写入操作
提交事务
每隔3秒(默认)
重做日志缓冲区1/3写满
DBWR进程将脏数据写到数据文件之前
增加日志:为了提高安全性和性能数据库管理员应该增加重做日志。
T-SQL:查询
SQL> select
thread#,instance,groups from v$thread;
THREAD#
INSTANCE
GROUPS
----------
--------------------------------------------------------------------------------
----------
1 orcl
3
SQL> select * from
v$logfile;
GROUP#
STATUS TYPE
MEMBER
IS_
---------- ------- -------
---------------------------------------- ---
3 ONLINE
/home/oracle_11/app/oradata/orcl/redo03. NO
log
2 ONLINE
/home/oracle_11/app/oradata/orcl/redo02. NO
log
1 ONLINE
/home/oracle_11/app/oradata/orcl/redo01. NO
log
1 INVALID ONLINE /home/oracle_11/app/oradata/orcl/redoC1. NO
log
GROUP#
STATUS TYPE
MEMBER
IS_
---------- ------- -------
---------------------------------------- ---
SQL> select
group#,sequence#,members,status from v$log;
GROUP# SEQUENCE# MEMBERS STATUS
---------- ----------
---------- ----------------
1
16 2
INACTIVE
2
17 1
INACTIVE
3
18 1
CURRENT
切换日志:alter system switch logfile;
添加日志组:ALTER DATABASE ADD LOGFILE
‘/home/oracle_11/app/oradata/orcl/redo04.log‘
size
20M --(会自动创建一个日志组)
ALTER DATABASE
ADD LOGFILE group 4 ‘/home/oracle_11/app/oradata/orcl/redo04.log‘ SIZE 20M
添加日志成员:ALTER DATABASE ADD LOGFILE member
‘/home/oracle_11/app/oradata/orcl/redoB1.log‘ to GROUP 1,
‘/home/oracle_11/app/oradata/orcl/redoB2.log‘ TO GROUP 2;
删除日志组成员: ALTER DATABASE DROP LOGFILE member
‘/home/oracle_11/app/oradata/orcl/redoB2.log‘ --(不能删除当前日志组的成员 不然会出错)
删除日志组:ALTER DATABASE DROP LOGFILE GROUP 2 --(不能删除当前日志组的成员
不然会出错)
移动日志:host cp /home/oracle_11/app/oradata/orcl/redoB1.log
/home/oracle_11/app/oradata/orcl/redoC1.log
ALTER DATABASE RENAME FILE ‘/home/oracle_11/app/oradata/orcl/redoB1.log‘ TO
‘/home/oracle_11/app/oradata/orcl/redoC1.log‘
host rm /home/oracle_11/app/oradata/orcl/redoB1.log;