日志文件管理

在上大学期间王强老师的课程中的整理以及修改,对日志文件的管理讲解很详细,

一、增加日志组

实例1:为oracle数据库增加一个重做日志组,组号自动分配,组中包含两个日志成员,大小为10M,并查询动态性能视图确定能否成功。操作步骤如下:

1. 以系统管理员身份登入:

       sqlplusw   sys/jlfx  as  sysdba

      

sqlplusw  sys/wangwang as sysdba

 

2. 增加日志组:

       alter database jlfx add logfile ('d:\log\log4a.log','d:\log\log4b.log') size 10M;

alter database dog  add logfile ('d:\log\log4a.log','d:\log\log4b.log') size 10M;

 

3. 查询日志信息(包括组号,成员数,成员,每个成员的大小)

      

SQL> col member format a50

SQL> select a.group#,a.members,a.bytes,b.member from v$log a, v$logfile b where a.group#=b.group#;

 

GROUP#    MEMBERS      BYTES                          MEMBER

------- ---------- ---------- ------------------------  ----------------------------------------------------------------------------------

3          1       10485760       D:\ORACLE\PRODUCT\10.2.0\ORADATA\DOG\REDO03.LOG

    2          1       10485760       D:\ORACLE\PRODUCT\10.2.0\ORADATA\DOG\REDO02.LOG

1          1       10485760       D:\ORACLE\PRODUCT\10.2.0\ORADATA\DOG\REDO01.LOG 

SQL> select group#,member from v$logfile;

GROUP#           MEMBER

------      -------------------------------------------------------------------------------------

     3    D:\ORACLE\PRODUCT\10.2.0\ORADATA\DOG\REDO03.LOG

     2    D:\ORACLE\PRODUCT\10.2.0\ORADATA\DOG\REDO02.LOG

     1    D:\ORACLE\PRODUCT\10.2.0\ORADATA\DOG\REDO01.LOG

 

SQL> select group#,members,bytes from v$log;

 

    GROUP#    MEMBERS      BYTES

--------------------  ---------- ---------- ---------- ----------

         1          1          10485760

         2          1          10485760

         3          1          10485760

 


实例2:为oracle数据库再增加一个重做日志组,指定组号,组中包含两个日志成员,大小为10M,并查询动态性能视图确定能否成功操作步骤如下:

1. 以系统管理员身份登入:

       sqlplusw   sys/jlfx  as  sysdba

 

2. 增加日志组:

       SQL> alter database jlfx add logfile group 5 ('d:\log\log5a.log','d:\log5b.log') size 10M;

       SQL> alter database dog add logfile group 5 ('d:\log\log5a.log','d:\log5b.log') size 10M;

 

3. 查询日志信息:

       SQL> col member format a50

       SQL> select a.group#,a.status,a.members,a.bytes,b.member from v$log a,v$logfile b where a.group#=b.group# order by a.group#;

SQL> select group#,member from v$logfile;

SQL> select group#,members,bytes from v$log;

 

二、增加日志成员

实例3:为oracle服务器的第4个重做日志组增加一个日志成员"log4c.lg".

操作步骤如下:

1. 以系统管理员身份登入:

       sqlplusw   sys/jlfx  as  sysdba

 

2. 增加日志成员:

       SQL> alter database  jlfx add logfile member 'd:\log\log4c.log' to group 4;

SQL> alter database  dog add logfile member 'd:\log\log4c.log' to group 4;

3. 查询日志信息:

       SQL> col member format a50

       SQL> select a.group#,a.status,a.members,a.bytes,b.member from v$log a,v$logfile b where a.group#=b.group#;

       SQL> select group#,member from v$logfile;(显示用户数据库日志组和成员)

       SQL> select group#,members,bytes from v$log;

 

练习:为每个日志组添加一个日志成员。

 


三、删除日志组(注意:current/active状态下或只有两个日志组都不能删除该日志组)

实例4:删除日志组4

操作步骤如下:

1. 以系统管理员身份登入:

       sqlplusw   sys/jlfx  as  sysdba

 

2. 查看日志组的状态(只有INACTIVEUNUSED状态的可删除)

       SQL> select group#,status,members,bytes  from v$log;

 

3. 删除日志组4(下面的命令只是逻辑删除,要物理删除得用os命令)

       SQL> alter database jlfx drop logfile group 4;

       SQL> alter database dog drop logfile group 4;

       此时不能再往日志组4中添加成员,如:

       alter database  dog add logfile member 'd:\log\log4d.log' to group 4;

       出现错误信息:

       1 行出现错误:

       ORA-00359: 日志文件组 4 不存在

 

如果2号日志组是当前日志组,执行删除2号日志组的操作,则会出现错误。

SQL> alter database dog drop logfile group 2;

错误提示信息如下:

alter database dog drop logfile group 2

*

1 行出现错误:

ORA-01623: 日志 2 是实例 dog (线程 1) 的当前日志 - 无法删除

ORA-00312: 联机日志 2 线程 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\DOG\REDO02.LOG'

 

4. 查询日志信息:

       SQL> col member format a50

       SQL> select a.group#,a.status,a.members,a.bytes,b.member from v$log a,v$logfile b where a.group#=b.group#;

       SQL> select group#,member from v$logfile;

       SQL> select group#,members,bytes from v$log;

 

 


四、删除日志成员(注意:current状态下或日志组中只有一个日志成员时不能删除)

实例5:删除日志组5中的第2个日志组成员

操作步骤如下:

1. 以系统管理员身份登入:

       sqlplusw   sys/jlfx  as  sysdba

 

2. 查看日志组的状态

       SQL> select group#,status,members,bytes  from v$log;

 

3. 删除日志组4中的第23个日志组成员

       SQL> alter database dog drop logfile member 'd:\log\log4b.log', 'd:\log\log4c.log';

      

4. 查询日志信息:

       SQL> col member format a50

       SQL> select a.group#,a.status,a.members,a.bytes,b.member from v$log a,v$logfile b where a.group#=b.group#;

       SQL> select group#,member from v$logfile;

       SQL> select group#,members,bytes,status from v$log;

 

   注意:日志组中只有一个日志成员时不能删除,如:

       SQL> alter database dog drop logfile member 'd:\log\log4a.log';

   此时,出现如下信息:

       1 行出现错误:

       ORA-00361: 无法删除最后一个日志成员 d:\log\log4a.log ( 4)

 


五、清空重做日志

实例6:清空重做日志组4

操作步骤如下:

1. 以系统管理员身份登入:

       sqlplusw   sys/jlfx  as  sysdba

2. 关闭数据库

       SQL> shutdown immediate

删除4号日志组的所有成员,再启动则出现错误:

3. 启动数据库

SQL> startup

ORACLE 例程已经启动。

       错误提示信息如下:

Total System Global Area  285212672 bytes

Fixed Size                  1248552 bytes

Variable Size              71303896 bytes

Database Buffers          205520896 bytes

Redo Buffers                7139328 bytes

数据库装载完毕。

ORA-00313: 无法打开日志组 4 (用于线程 1) 的成员

ORA-00312: 联机日志 4 线程 1: 'D:\LOG\LOG4A.LOG'

ORA-00312: 联机日志 4 线程 1: 'D:\LOG\LOG4C.LOG'

ORA-00312: 联机日志 4 线程 1: 'D:\LOG\LOG4B.LOG'

 

查看数据库的启动状态:

SQL> select status from v$instance;

直接启动数据库到加载状态(特别注意)

       SQL> startup  mount

4. 清空重做日志组4,恢复该日志组的成员

       SQL> alter database  clear logfile  group 4;

 

5. 查询日志信息:

       SQL> col member format a50

       SQL> select a.group#,a.status,a.members,a.bytes,b.member from v$log a,v$logfile b where a.group#=b.group#;

SQL> select a.group#,a.status,a.members from v$log a,v$logfile b where a.group#=b.group#;

6.改变日志的模式

SQL> alter system switch logfile;

 

六、移动日志文件

实例7:移动日志文件,观察日志文件丢失时的现象,并重新定位。

操作步骤如下:

1. 以系统管理员身份登入:

       sqlplusw   sys/jlfx  as  sysdba

2. 关闭数据库

       shutdown

3. 物理移动日志成员到目标位置

       将文件d:\oracle\product\10.2.0\oradata\jlfx\REDO03.log 移动到 d:\REDO03.log;

4. 打开数据库

       startup;

5. 执行rename命令,重新定位日志文件

       alter  database  jlfx  rename  file 'd:\oracle\product\10.2.0\oradata\jlfx\REDO03.log' to 'd:\REDO03.log';

alter  database  dog  rename  file 'd:\log\log4b.log' to 'd:\log4b.log';

 

6. 打开数据库

       alter database open;

7. 查询日志信息:

       col member format a50

       select a.group#,a.status,a.members,a.bytes,b.member from v$log a,v$logfile b where a.group#=b.group#;

 

七、手工日志切换

实例8:强制切换日志,显示日志状态

操作步骤如下:

1. 以系统管理员身份登入:

       sqlplusw   sys/jlfx  as  sysdba

2. 查看日志组的状态

       select group#,sequence#,members,status from v$log;

3. 手工日志切换( open状态下操作)

       alter system switch logfile;

4. 查看日志组及成员的状态

       select group#,sequence#,members,status from v$log;

 

八、日志归档(归档模式:archivelog,非归档模式:noarchivelog)

注意:数据库只有在加载状态下才能修改日志模式

实例9:查看数据库的日志操作模式,然后将数据库修改为归档模式

操作步骤如下:

1. 以系统管理员身份登入:

       sqlplusw   sys/jlfx  as  sysdba

2. 关闭数据库,然后加载数据库

       shutdown immediate

       startup mount

3. 查看归档模式

       archive log list;

     select  name,log_mode  from  v$database;

4. 修改归档模式

       alter database archivelog(开启数据库的归档模式)

       alter database noarchivelog(关闭数据库的归档模式)