Oracle更改redo log日志大小or增加redo log日志组
2023-09-14 09:12:57 时间
oracle更改redo log大小 or 增加redo log组
最近巡检发现日志切换占用了大量的时间,故尝试增大redo log的大小。
select event,count(*) from v$session_wait group by event order by count(*) desc;
(1)redo log的大小可以影响 DBWR 和 checkpoint;
(2)larger redo log files provide better performance. Undersized logfiles increase checkpoint activity and reduce performance.
大的log file可以提供更好的性能,小的 logfile 会增加checkpoint 和降低性能;
(3)A rough guide is to switch log files at most once every 20 minutes.(推荐日志切换的时间不要超多20分钟).
通过查看我有三组redolog 1/2/3每组两个成员状态都正常大小50m。
查看日志信息:
select * from v$log ;
status 有几个值分别是:
- UNUSED(还没有使用过);
- CURRENT(正在使用);
- ACTIVE(Log is active but is not the current log. It is needed for crash recovery);
- INACTIVE(Log is nolonger needed for instance recovery),
查看日志文件位置:
select * from v$logfile ;
相关的知识普及:
1、 Redo log File存放了Redo log信息,最少有两组日志文件,供Oracle循环使用。
2、 Redo log File每组最少一个,建议两个,防止损坏而导致的数据丢失。
3、 每组中的文件大小必须一致,因为他们是同时修改的,不同组的文件大小可以不一致。
4、 每组中的文件个数必须一致。
由于ORACLE并没有提供类似RESIZE的参数来重新调整REDO LOG FILE的大小,因此只能先把这个文件删除了,然后再重建。又由于ORACLE要求最少有两组日志文件在用,所以不能直接删除,必须要创建中间过渡的REDO LOG日志组。
1、创建3个新的日志组
ALTER DATABASE ADD LOGFILE GROUP 4('/u01/app/oracle/oradata/orcl/redo04a.log','/u01/app/oracle/oradata/orcl/redo04b.log') SIZE 1024M;
ALTER DATABASE ADD LOGFILE GROUP 5('/u01/app/oracle/oradata/orcl/redo05a.log','/u01/app/oracle/oradata/orcl/redo05b.log') SIZE 1024M;
ALTER DATABASE ADD LOGFILE GROUP 6('/u01/app/oracle/oradata/orcl/redo06a.log','/u01/app/oracle/oradata/orcl/redo06b.log') SIZE 1024M;
2、切换当前日志到新的日志组
# 可以使用alter system switch logfile命令手动的切换日志文件组。
# 另外在说一下active和inactive的一些区别,其实这两种状态的重做日志都是已经归档的,不同的只是,active状态的重做日志文件组是在实例恢复的时候被需要的,因为有一些事务虽然已经提交了,但是这些记录的更改还没有写到datafile中,如果这个时候实例一旦失败(断电或者其他的突发情况),在进行实例恢复的时候会需要这些active状态的日志文件组,每过一段时间,当系统负载不是很大的时候,Oracle会尝试将内存中的数据写入到datafile中,这个时候active的日志文件组就会变成inactive状态,我们可以使用alter database checkpoint强制来执行这个过程;而inactive是在实例恢复的时候不被需要的日志文件组。
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
commit;
3、删除旧的日志组
# 查看日志组的状态看一下哪个是当前组,哪个是inactive状态的。
SQL> select * from v$log;
# 删除掉inactive的那个组。重做日志文件状态是current和active是不能被删除,如果状态为current和active 在删除的时候会报错,需要切换为inactive(切换到新日志组,必须commit才能变成inactive)。
alter database drop logfile group 1;
alter database drop logfile group 2;
alter database drop logfile group 3;
4、操作系统下删除原日志组1、2、3中的文件
注意:每一步删除drop操作,都需要手工删除操作系统中的实体文件。
5、重建日志组1、2、3
ALTER DATABASE ADD LOGFILE GROUP 1('/u01/app/oracle/oradata/orcl/redo01a.log','/u01/app/oracle/oradata/orcl/redo01b.log')SIZE 1024M;
ALTER DATABASE ADD LOGFILE GROUP 2('/u01/app/oracle/oradata/orcl/redo02a.log','/u01/app/oracle/oradata/orcl/redo02b.log')SIZE 1024M;
ALTER DATABASE ADD LOGFILE GROUP 3('/u01/app/oracle/oradata/orcl/redo03a.log','/u01/app/oracle/oradata/orcl/redo03b.log')SIZE 1024M;
6、切换日志组
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
7、删除中间过渡用的日志组4、5、6
alter database drop logfile group 4;
alter database drop logfile group 5;
alter database drop logfile group 6;
8、到操作系统下删除原日志组4、5、6中的文件
每一步删除drop操作,都需要手工删除操作系统中的实体文件。
9、备份当前的最新的控制文件
SQL> alter database backup controlfile to trace resetlogs;
# 查询文件位置
select d.value||b.bias||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name from ( select p.spid from sys.v$mystat m,sys.v$session s,sys.v$process p where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p, ( select t.instance from sys.v$thread t,sys.v$parameter v where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i, ( select value from sys.v$parameter where name = 'user_dump_dest') d,(select DECODE(count(BANNER),0,'/','\') bias from v$version where upper(banner) like '%WINDOWS%') b;
10、日志文件管理
清空重做日志组:
SQL> alter database clear logfile group 3;
清空重做日志文件
SQL> alter database clear logfile
'/u01/app/oracle/oradata/orcl/redo05_01.log';
如果重做日志处于未归档状态,必须使用unarchived 进行清空
SQL> alter database clear unarchived logfile group 6;
Database altered.
与重做日志有关的动态视图
v$log
v$logfile
v$log_history
相关文章
- Oracle数据库使用出现错误-状态: 失败 ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist
- Oracle-查看oracle是否有表被锁
- 【Oracle】oracle的LAG和LEAD分析函数
- 【Python Oracle】使用cx_Oracle 连接oracle的简单介绍
- Oracle VM VirtualBox - 启用 VT-x/AMD-V 支持
- 《oracle每天一练》Oracle冷备份与数据恢复
- Oracle 10g 升级至10.2.0.4
- 用习惯了Oracle,用起来MySql却非常的不方便!!
- Oracle安装错误ora-00922(zhuan)
- oracle常用函数使用大全 Oracle除法(转)
- Oracle 使用MERGE INTO 语句更新数据
- How to use udev for Oracle ASM in Oracle Linux 6 怎样使用udev在linux 6系统上使用asm
- Oracle单实例安装环境一键配置脚本(CentOS6 + 11gR2 )
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)
- 如何在oracle中查询所有用户表的表名、主键名称、索引、外键等
- oracle 11.2版本.sysman/log下emdb.nohup文件偏大,如何解决?
- Oracle RAC 负载均衡
- Oracle log file sync原理详解
- Oracle迁移到PPAS(PostgreSQL)时的日期计算问题
- 连接ORACLE数据库,是不是必须要安装oracle客户端的运行时
- Oracle与Sql Server复制表结构及数据
- Atitit oracle新特性5 6 7 8 9 10 11 12 18 19 20 attilax总结 目录 1.1. :ora 20c1 1.2. Oracle Database 19c 的
- Atitit 数据库与存储引擎设计与实现 attilax总结 1.1. 数据库的实现有很多种, 遵循一些理论规范,如 Fix Rules、Write-Ahead Log、Force-log-at-
- Oracle中添加虚拟列(emp是oracle自带表)
- 数据库(mysql oracle)学习小结
- 安装ORACLE provider for OLE DB
- ThinkPHP pdo连接Oracle的配置写法,提示报错
- Oracle 10g AND Oracle 11g手工建库案例--Oracle 10g
- Oracle 11g使用rman从单实例迁移到RAC
- How To Enable Archive Log Mode In Oracle Database 19c
- How to Configure OEM Express Oracle 12c
- Oracle 12c中SQLPlus操作使用(包含实验二ORACLE SQL*PLUS环境与查询的详细操作解释)
- Oracle 备份与还原