ITPub博客

首页 > 数据库 > Oracle > redo日志组调整

redo日志组调整

原创 Oracle 作者:yangmm 时间:2020-02-22 14:24:01 0 删除 编辑

current:当前正在使用的日志组状态

active:  刚刚用完还没有重新完成初始化以备下次使用的日志组状态

inactive:已经完成初始化可供再次使用的日志组状态

members:表示每个日志组中有几个日志文件


  1. 查看日志信息

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


    GROUP#    SEQUENCE#                  STATUS          MEMBERS     BYTES/1024/1024

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

              1             19                             CURRENT              1               50

              2             17                             INACTIVE             1                50

              3             18                             INACTIVE              1                50


     2.查看当前数据库中redo日志的存放位置

SQL> select member from v$logfile;


MEMBER

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

/u01/app/oracle/oradata/orcl/redo03.log

/u01/app/oracle/oradata/orcl/redo02.log

/u01/app/oracle/oradata/orcl/redo01.log


在oracle数据库中,一旦数据发生修改操作,就会产生redo。如果redo组数太少,或者redo文件太小,导致redo日志组切换太频繁,就可能会影响数据库的正常运行。因此,我们需要确定当前redo日志设置是否合理。


redo日志组设置是否合理的一个重要指标就是redo日志组的切换时间间隔。推荐时间间隔为10-15分钟。

查看日志组切换时间间隔,视图v$log-history

SQL> select to_char(first_time,'yyyy-mm-dd hh24:mi:ss')from v$log_history;


TO_CHAR(FIRST_TIME,

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

2019-11-18 05:32:41

2019-11-18 05:32:47

2019-11-18 05:33:00

2019-11-18 05:33:10

2019-11-19 05:00:04

2019-11-19 22:00:15

2019-11-19 22:05:33

2019-11-20 22:00:19

2019-11-21 22:00:12

2019-12-05 04:24:57

2019-12-05 04:59:34

2019-12-05 08:00:38

2020-01-09 06:27:10

2020-01-09 20:00:37

2020-01-14 03:36:35

2020-01-14 22:00:10

2020-01-15 14:00:36

2020-01-16 04:01:00


18 rows selected.


因为我用的测试环境,因此数据库是相当空闲的。我们尝试进行几次redo日志组的手工切换:

SQL> alter system switch logfile;


System altered.


SQL> /


System altered.


SQL> /


System altered.


然后再查看v$log_history

SQL> select to_char(first_time,'yyyy-mm-dd hh24:mi:ss')from v$log_history;


TO_CHAR(FIRST_TIME,

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

2019-11-18 05:32:41

2019-11-18 05:32:47

2019-11-18 05:33:00

2019-11-18 05:33:10

2019-11-19 05:00:04

2019-11-19 22:00:15

2019-11-19 22:05:33

2019-11-20 22:00:19

2019-11-21 22:00:12

2019-12-05 04:24:57

2019-12-05 04:59:34

2019-12-05 08:00:38

2020-01-09 06:27:10

2020-01-09 20:00:37

2020-01-14 03:36:35

2020-01-14 22:00:10

2020-01-15 14:00:36

2020-01-16 04:01:00

2020-01-16 22:00:29

2020-01-17 02:23:39

2020-01-17 02:23:40


因为是手工切换的,这里redo日志组的切换时间间隔很短。如果日志组切换时间间隔太短,会在数据库的告警日志中记录。


cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace

[oracle@ymm trace]$ tail -f alert_orcl.log 

日志切换太快,会在警告日志中记录Checkpoint(检查点) not complete信息,oracle每次切换日志时,都会执行一次检查点操作来完成redo当中记录的数据修改信息和数据文件中的信息的同步。切换太快,会导致这个同步操作无法及时完成。出现这问题,往往意味着redo日志组的设置不合理。


接下调整日志组

要求:添加3个日志组,每个日志组两个日志文件,每个日志文件的大小为500M;


  1. 添加新的redo日志组

SQL> alter database add logfile group 4 ('/u01/app/oracle/oradata/orcl/redo04.log','/u01/app/oracle/oradata/orcl/redo05.log') size 500m;


Database altered.


SQL> alter database add logfile group 5 ('/u01/app/oracle/oradata/orcl/redo05_1.log','/u01/app/oracle/oradata/orcl/redo05_2.log')size 500m;


Database altered.


SQL> alter database add logfile group 6('/u01/app/oracle/oradata/orcl/redo06_1.log','/u01/app/oracle/oradata/orcl/redo06_2.log')size 500m;


Database altered.

   

     2.查看当前redo日志组设置

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

新添加的3组状态均为unused


    3.删除旧的redo日志组

current状态的不能删除,可以删除inactive状态

SQL> alter database drop logfile group 1;


Database altered.


SQL> alter database drop logfile group 2;


Database altered.


SQL> alter database drop logfile group 3;


Database altered.


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

需要注意,我们只是在数据库中删除了3组日志,在操作系统上对应的日志文件并没有删除,我们需要手工删除操作系统上对应的日志文件

[oracle@ymm trace]$ cd /u01/app/oracle/oradata/orcl/


[oracle@ymm orcl]$ ls

control01.ctl  redo01.log  redo03.log  redo05_1.log  redo05.log    redo06_2.log  system01.dbf  undotbs01.dbf

control02.ctl  redo02.log  redo04.log  redo05_2.log  redo06_1.log  sysaux01.dbf  temp01.dbf    users01.dbf


[oracle@ymm orcl]$ ls -lrt|grep redo

-rw-r----- 1 oracle oinstall  52429312 Jan 17 02:33 redo01.log

-rw-r----- 1 oracle oinstall  52429312 Jan 17 02:33 redo02.log

-rw-r----- 1 oracle oinstall  52429312 Jan 17 02:59 redo03.log

-rw-r----- 1 oracle oinstall 524288512 Jan 17 02:59 redo05.log

-rw-r----- 1 oracle oinstall 524288512 Jan 17 02:59 redo04.log

-rw-r----- 1 oracle oinstall 524288512 Jan 17 03:01 redo05_2.log

-rw-r----- 1 oracle oinstall 524288512 Jan 17 03:01 redo05_1.log

-rw-r----- 1 oracle oinstall 524288512 Jan 17 03:06 redo06_1.log

-rw-r----- 1 oracle oinstall 524288512 Jan 17 03:06 redo06_2.log


   删除日志文件

[oracle@ymm orcl]$ rm redo0[1-3]*


    4.对redo日志文件重命名

需要注意,修改日志文件名,需要数据库在mount状态下进行修改。

    1)关闭数据库并启动到mount状态

SQL> shutdown immediate;  

Database closed.

Database dismounted.

ORACLE instance shut down.


SQL> startup mount;

ORACLE instance started.

Total System Global Area  730714112 bytes

Fixed Size     2231952 bytes

Variable Size   239075696 bytes

Database Buffers   482344960 bytes

Redo Buffers     7061504 bytes

Database mounted.


      2)修改redo日志文件名

SQL> alter database rename file '/u01/app/oracle/oradata/orcl/redo04.log' to '/u01/app/oracle/oradata/orcl/redo04_1.log';

这里报错了,说redo04_1.log文件不存在,这里我们需要先在操作系统上将redo04.log改为redo04_1.log

[oracle@ymm orcl]$ mv redo04.log redo04_1.log

[oracle@ymm orcl]$ mv redo05.log redo04_2.log


SQL> alter database rename file '/u01/app/oracle/oradata/orcl/redo04.log' to '/u01/app/oracle/oradata/orcl/redo04_1.log';


Database altered.


SQL> alter database rename file '/u01/app/oracle/oradata/orcl/redo05.log' to '/u01/app/oracle/oradata/orcl/redo04_2.log';


Database altered.


      3)启动数据库

SQL> alter database open;


Database altered.


SQL> select member from v$logfile;


MEMBER

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

/u01/app/oracle/oradata/orcl/redo04_1.log

/u01/app/oracle/oradata/orcl/redo04_2.log

/u01/app/oracle/oradata/orcl/redo05_1.log

/u01/app/oracle/oradata/orcl/redo05_2.log

/u01/app/oracle/oradata/orcl/redo06_1.log

/u01/app/oracle/oradata/orcl/redo06_2.log


补充:

将active状态的日志转换为inactive的

SQL> alter system checkpoint;


System altered.






来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69963160/viewspace-2676740/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: ORA-01555 快照太旧
请登录后发表评论 登录
全部评论

注册时间:2020-02-21

  • 博文量
    9
  • 访问量
    10147