首页 > 代码库 > oracle 重做日志

oracle 重做日志

原创转载请注明出处

重做日志:记录数据库数据的变化(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;