Oracle日志 归档模式管理[通俗易懂]

Oracle日志 归档模式管理[通俗易懂]一、查看当前归档模式 archive log list; 二、归档/不归档切换 shutdown immediate; — 或shutdown normal startup mount; alter

Oracle日志 归档模式管理

一、查看当前归档模式

archive log list; 

 

二、归档/不归档切换

shutdown immediate;          -- 或shutdown normal
startup mount; alter database archivelog;   -- 或NOARCHIVELOG
alter database open;

 

三、开启自动归档

alter system archive log start;

 

四、查看默认的存档位置

show parameter db_reco;

 

五、归档进程ARCn

重做日志写进程(LGWR)负责将redo-buffer中的数据顺序的写入redolog中———读内存写外存
归档进程(ARCn)负责把切换后的redolog复制到归档日志文件。————读外存写外存

显然,LGWR的读写效率要比ARCn高得多,而在经常发生DML操作的数据库中,可能发生由于归档慢而重做日志写入速度快所造成的数据库被暂时停止执行的情况,此时数据库就是等待ARCn将当前的重做日志数据写入归档日志。

解决方案:增加归档进程的数量(log_archive_max_processes)

SQL> show parameter log_archive_max_processes;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------ log_archive_max_processes integer 4
SQL> alter system set log_archive_max_processes=5;

  

六、自定义存档路径

执行命令show parameter log_archive_dest;

可以查看到多条记录,这些记录都是用于存放用户自定义路径的“预定义变量”。当有一个变量被设定后,就不会再归档至默认路径。当多个变量被设定,会同时归档至各个指定路径下(安全性)。

SQL> show parameter log_archive_dest;
NAME                        TYPE        VALUE
------------------------------------ -----------
log_archive_dest            string                    -- 这个参数从10g开始已经被废弃!!
log_archive_dest_1          string
 ......
log_archive_dest_8          string
log_archive_dest_9          string
log_archive_dest_10         string

SQL> alter system set log_archive_dest_1="location=/u01/app/oracle/archive/arch1";      
SQL> alter system set log_archive_dest_8="location=/u01/app/oracle/archive/arch8";
SQL> alter system switch logfile    -- 手动强制归档

执行如上代码,结果会发现在arch1和arch8目录下都会生成归档文件。

那么如果不想再归档至arch8目录了该怎么办?

每一个log_archive_dest_x参数都有一个对应的state参数,如下所示,可以执行命令alter system set log_archive_dest_state_8=”defer”;使其失效。

SQL> show parameter log_archive_dest;  

NAME                             TYPE    VALUE
----------------------------------------------------------------------
log_archive_dest_state_1       string   enable
log_archive_dest_state_2       string   enable
   ... ...
log_archive_dest_state_7       string   enable
log_archive_dest_state_8       string   enable
log_archive_dest_state_9       string   enable

 

七、查询成功归档日志文件组的最低数(安全性)

在第六步“自定义存档位置”的基础上,进一步提升归档安全性。

log_archive_min_succeed_dest:限定Oracle必须保证成功的归档文件组的数量;

比如之前定义了两个归档路径,如果该值设定为2,则限定Oracle必须保证该两个路径中的归档必须成功完整。

注:自定义的归档路径数量 > log_archive_min_succeed_dest的值

SQL> alter system set log_archive_min_succeed_dest=2;
alter system set log_archive_min_succeed_dest=2

ORA-02097: parameter cannot be modified because specified value is invalid
ORA-16020: fewer destinations available than specified by LOG_ARCHIVE_MIN_SUCCEED_DEST

报错原因:当前仅有一个默认归档路径,最低数要求却设置为了2!
解决方法:再添加一个归档路径,重新设置该值。

 

 

八、一些日志统计脚本

1. 估算系统每秒产生的日志量和每天产生的日质量(待梳理验证) 

Oracle日志 归档模式管理[通俗易懂]

declare
  ac          number;
  sec_redo    number;
  day_redo    number;
  sec_redo_90 number;
  day_redo_90 number;
  str         varchar(100);
begin
  select count(*) into ac from v$database where log_mode = "NOARCHIVELOG";
  if ac = 1 then
    dbms_output.put_line("The database is running on NOARCHIVELOG mode,No archivelog !!!");
  else
    str := "";
    for i in (select destination
                from v$archive_dest
               where status = "VALID"
                 and destination is not null) loop
      str := str || "," || i.destination;
    end loop;
    dbms_output.put_line("Archive dest is" || substr(str, 2));
    select trunc(sum((blocks * block_size) / 1024) /
                 ((max(first_time) - min(first_time)) * 24 * 3600)),
           trunc(sum((blocks * block_size) / 1024 / 1024) /
                 ((max(first_time) - min(first_time))))
      into sec_redo, day_redo
      from v$archived_log;
    dbms_output.put_line("每秒产生日志的频率:" || sec_redo || "(KB)");
    dbms_output.put_line("每天产生日志的频率:" || day_redo || "(MB)");
    dbms_output.put_line("最近3个月的统计数据:");
    select trunc(sum((blocks * block_size) / 1024) /
                 ((max(first_time) - min(first_time)) * 24 * 3600)),
           trunc(sum((blocks * block_size) / 1024 / 1024) /
                 ((max(first_time) - min(first_time))))
      into sec_redo_90, day_redo_90
      from v$archived_log
     where first_time > SYSDATE - 91;
    dbms_output.put_line("每秒产生日志的频率:" || sec_redo_90 || "(KB)");
    dbms_output.put_line("每天产生日志的频率:" || sec_redo_90 || "(MB)");
  end if;
end;

View Code

 

2. 统计归档日志的每日生成量

SQL> select lpad(to_char(first_time,"yyyymmdd"),12) "Date",
     trunc(sum(blocks*block_size)/1024/1024) "size(MB)",
     count(*) "count"
     from v$archived_log
     where first_time>SYSDATE-31
     group by lpad(to_char(first_time,"yyyymmdd"),12)
     order by 1 desc;

Date                                            size(MB)      count
------------------------------------------------ ---------- ----------
    20211102                                    113          5
    20211101                                    236          9
    20211031                                    285         11
    20211030                                    309         11
    20211029                                    238         10
    20211028                                    279         16
    20211027                                    257         10

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5751.html

(0)
上一篇 2023-04-26
下一篇 2023-04-26

相关推荐

  • 将时间元组转换为时间戳的Python函数

    将时间元组转换为时间戳的Python函数a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-03-19
    83
  • redis缓存穿透、缓存雪崩、缓存击穿【项目总结】[通俗易懂]

    redis缓存穿透、缓存雪崩、缓存击穿【项目总结】[通俗易懂]Redis项目总结缓存穿透、缓存雪崩、缓存击穿 一.缓存穿透 1.什么是缓存穿透 查询某个 Key 对应的数据,Redis 缓存中没有相应的数据,则直接到数据库中查询。数据库中也不存在要查询的数据

    2023-06-20
    152
  • 字符串输入的中心

    字符串输入的中心字符串(strings)是计算机科学中一种非常基本的数据类型,它是由字符序列组成的,常用于表示文本。字符串输入是指从用户获取键盘输入的文本数据。在编程中,读取字符串输入的能力是非常常用、基本的技能之一。

    2024-06-13
    43
  • SQL SERVER 下,批量在不同的数据库中执行相同的脚本「建议收藏」

    SQL SERVER 下,批量在不同的数据库中执行相同的脚本「建议收藏」
    转自:https://blog.51cto.com/liuxinya/354983 作为DBA我们经常需要对不同的数据库执行相同的查询,如果你的服务器上只有…

    2023-04-05
    150
  • Python散点图实现

    Python散点图实现散点图是用于探索两个变量之间关系的一种图表形式。其中一个变量通常被称为自变量,另一个变量通常被称为因变量。可以通过散点图来判断两个变量之间是否存在关联,以及关联的强度和方向。在数据可视化中,散点图是非常常用的一种图表类型。

    2024-09-08
    23
  • Redis5新特性Streams作消息队列

    Redis5新特性Streams作消息队列前言 Redis 5 新特性中,Streams 数据结构的引入,可以说它是在本次迭代中最大特性。它使本次 5.x 版本迭代中,Redis 作为消息队列使用时,得到更完善,更强大的原生支持,其中尤为明显

    2023-02-08
    145
  • Python仓库

    Python仓库Python是当下最为流行的编程语言之一,它简单易学,语法简洁明了,拥有丰富的标准库和第三方库,受到大量程序员的喜爱。在Python的生态系统中,Python仓库是一个重要的组成部分。本篇文章将详细介绍Python仓库的相关内容,包括Python仓库的定义、作用、使用方法等,有助于读者深入了解Python仓库的知识。

    2024-08-10
    30
  • MongoDB – 事务支持「终于解决」

    MongoDB – 事务支持「终于解决」在 4.2 版本及更高版本中,MongoDB 提供了事务的支持,并且在其是分布式数据库的基础上,提供了支持跨多个操作、集合、数据库、文档和分片的 ACID 事务。

    2023-06-17
    188

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注