更改重做日志(redolog)文件的大小

简介:
更改重做日志(redolog)文件的大小
 

从原来每个100M更改成1M

SQL> show user;
USER is "SYS"
SQL> select group#,status from v$log;

GROUP# STATUS
---------- ----------------
1 CURRENT
2 INACTIVE
3 INACTIVE

SQL> alter database add logfile group 4 ('D:\oracle\oradata\PRACTICE\REDO04.LOG'
) size 100M;

Database altered.

SQL> alter database add logfile group 5 ('D:\oracle\oradata\PRACTICE\REDO05.LOG'
) size 100M;

Database altered.

SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

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

GROUP# STATUS
---------- ----------------
1 INACTIVE
2 INACTIVE
3 INACTIVE
4 INACTIVE
5 CURRENT

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> alter database add logfile group 1 ('D:\oracle\oradata\PRACTICE\REDO01.LOG'
) size 1M;
alter database add logfile group 1 ('D:\oracle\oradata\PRACTICE\REDO01.LOG') siz
e 1M
*
ERROR at line 1:
ORA-00301: error in adding log file 'D:\oracle\oradata\PRACTICE\REDO01.LOG' -
file cannot be created
ORA-27038: skgfrcre: file exists
OSD-04010: <create> option specified, file already exists

注意:每一步删除drop操作,都需要手工删除os中的实体文件。如上错误是因为忘了手工删除原来的REDO01.LOG


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

GROUP# STATUS
---------- ----------------
4 INACTIVE
5 CURRENT

SQL> alter database add logfile group 1 ('D:\oracle\oradata\PRACTICE\REDO01.LOG'
) size 1M;

Database altered.

SQL> alter database add logfile group 2 ('D:\oracle\oradata\PRACTICE\REDO02.LOG'
) size 1M;

Database altered.

SQL> alter database add logfile group 3 ('D:\oracle\oradata\PRACTICE\REDO03.LOG'
) size 1M;

Database altered.

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

GROUP# STATUS
---------- ----------------
1 UNUSED
2 UNUSED
3 UNUSED
4 INACTIVE
5 CURRENT

SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

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

GROUP# STATUS
---------- ----------------
1 INACTIVE
2 CURRENT
3 UNUSED
4 INACTIVE
5 INACTIVE

SQL> alter system switch logfile;

System altered.

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

GROUP# STATUS
---------- ----------------
1 INACTIVE
2 INACTIVE
3 CURRENT
4 INACTIVE
5 INACTIVE

SQL> alter database drop logfile group 4;

Database altered.

SQL> alter database drop logfile group 5;

Database altered.

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

GROUP# STATUS BYTES
---------- ---------------- ----------
1 INACTIVE 1048576
2 INACTIVE 1048576
3 CURRENT 1048576

 

===========================参考================================

假设现有三个日志组,每个组内有一个成员,每个成员的大小为1MB,现在想把此三个日志组的成员大小都改为10MB 

1、创建2个新的日志组 
alter database add logfile group 4 ('D:\ORACLE\ORADATA\ORADB\REDO04_1.LOG') size 1024k; 
alter database add logfile group 5 ('D:\ORACLE\ORADATA\ORADB\REDO05_1.LOG') size 1024k; 

2、切换当前日志到新的日志组 
alter system switch logfile; 
alter system switch logfile; 

3、删除旧的日志组 
alter database drop logfile group 1; 
alter database drop logfile group 2; 
alter database drop logfile group 3; 

4、操作系统下删除原日志组1、2、3中的文件 

5、重建日志组1、2、3 
alter database add logfile group 1 ('D:\ORACLE\ORADATA\ORADB\REDO01_1.LOG') size 10M; 
alter database add logfile group 2 ('D:\ORACLE\ORADATA\ORADB\REDO02_1.LOG') size 10M; 
alter database add logfile group 3 ('D:\ORACLE\ORADATA\ORADB\REDO03_1.LOG') size 10M; 

6、切换日志组 
alter system switch logfile; 
alter system switch logfile; 
alter system switch logfile; 

7、删除中间过渡用的日志组4、5 
alter database drop logfile group 4; 
alter database drop logfile group 5; 

8、到操作系统下删除原日志组4、5中的文件 

9、备份当前的最新的控制文件 
SQL>; connect internal 
SQL>; alter database backup controlfile to trace resetlogs 

(注意:如果为安全考虑每个group可以多加几个文件)

==============================

跟redo logfile有关的其它数据库参数 

1、log_buffer 

log_buffer是ORACLE SGA的一部分, 所有DML命令修改的数据块先放在log_buffer里, 如果满了或者到了check_point时候通过lgwr后台进程写到redo logfile里去。它不能设得太大,这样在意外发生时会丢失很多改变过的数据。它最好不要大于512K或者128K*CPU个数。 

我们可以用下面的SQL语句检测log_buffer使用情况: 

SVRMGRL>; select rbar.name,rbar.value,re.name,re.value,(rbar.value*100)/re.value||'%' "radio" 
from v$sysstat rbar,v$sysstat re 
where rbar.name='redo buffer allocation retries' 
and re.name='redo entries';

这个比率小于1%才好,否则增加log_buffer的大小 

2、log_checkpoint_interval 

Oracle8.1 版本后log_checkpoint_interval指的是两次checkpoint之间操作系统数据块的个数。 

checkpoint时Oracle把内存里修改过的数据块用DBWR写到物理文件,用LGWR写到日志和控制文件。 

一般UNIX操作系统的数据块为 512 bytes。 

从性能优化来说 log_checkpoint_interval = redo logfile size bytes / 512 bytes 


3、log_checkpoint_timeout 

Oracle8.1 版本后log_checkpoint_timeout指的是两次checkpoint之间时间秒数。 
Oracle建议不用这个参数来控制,因为事务(transaction)大小不是按时间等量分布的。 
log_checkpoint_timeout = 0 
log_checkpoint_timeout = 900

========================================

How Redo Log Files Work
The Oracle server sequentially records all changes made to the database in the Redo Log Buffer. The redo entries are written from the Redo Log Buffer to one of the online redo log file groups called the current online redo log file group by the LGWR process. LGWR writes under the following situations:
When a transaction commits
When the Redo Log Buffer becomes one-third full
When there is more than a megabyte of changed records in the Redo Log Buffer
Before the DBWn writes modified blocks in the Database Buffer Cache to the datafiles
Redo log files are used in a cyclic fashion. Each redo log file group is identified by a log sequence number that is overwritten each time the log is reused.
Log switches:
LGWR writes to the online redo log files sequentially. When the current online redo log file group is filled, LGWR begins writing to the next group. This is called a log switch.
When the last available online redo log file is filled, LGWR returns to the first online redo log file group and starts writing again.

Checkpoints:
During a checkpoint:
DBWn writes a number of dirty database buffers, that are covered by the log that is being checkpointed, to the datafiles. The number of buffers that DBWn writes is determined by the FAST_START_MTTR_TARGET parameter, if specified. The default is zero. 
Note: The FAST_START_MTTR_TARGET parameter is covered in detail in the Oracle9i Database Administration Fundamentals II course.
The checkpoint background process CKPT updates the control file to reflect that it has completed a checkpoint successfully. If the checkpoint is caused by a log switch, CKPT also updates the headers of the datafiles.
Checkpoints can occur for all datafiles in the database or only for specific datafiles.
A checkpoint occurs, for example, in the following situations:
At every log switch
When an instance has been shut down with the normal, transactional, or immediate option
When forced by setting the initialization parameter FAST_START_MTTR_TARGET
When manually requested by the database administrator 
When the ALTER TABLESPACE [OFFLINE NORMAL|READ ONLY|BEGIN BACKUP]command causes checkpointing on specific datafiles
Information about each checkpoint is recorded in the alert_SID.log file if the LOG_CHECKPOINTS_TO_ALERT initialization parameter is set to TRUE. The default value of FALSE for this parameter does not log checkpoints.


Redo Log Buffer 
redo log buffer 可以循环使用,存放数据库改变牵涉的信息,其内部放的是redo entry。 
redo entry存放的是INSERT, UPDATE, DELETE, CREATE, ALTER, DROP 等操作对数据库的改变信息,这些信息在recovery的时候是很重要。这些redo entry 由oracle server进程从用户内存放到redo buffer。


LGWR(Log writer) 
LGWR(Log writer)是oracle启动时候必须启动的进程,它负责把redo log buffer中的redo entry写到redo log文件中。 
在如下情况下写文件: 
- redo log buffer 三分之一满了 
- 达到某时间点 
- 在 DBWR w把修改的数据块写到数据文件之前写redo log file 
- 事务 commit的时候 
- 在数据库做归档redo log 文件的时候

Redo Log file 
redo log就是存放redo log 信息的文件了,至少有两个redo log 组,oracle循环使用之。当然推荐又更多的redo log 组。既然是循环使用redo log,必然会有一个log switch的过程。

log switch发生在: 
- log file 已经写满了 
- 使用了ALTER SYSTEM SWITCH LOGFILE 命令

在log switch 的时候自动会做checkpoint。

只要redo log组里面有一个redo log file可以用,就能进行log switch。当然如果redo log file坏了,LGWR肯定会记录到 trace和alert文件.

关于redo log的设置 
一般至少两组redo log 文件, 
每组中的redo log文件最好在不同的磁盘上,防止一起损坏。 
每组中的redo log文件必须大小一致,它们是同时修改的。 
不同组的redo log文件大小不一定一致。 
每组的redo log文件数目必须一致。


修改redo log的位置 
- 看看当前的redo log文件是不是正在使用,如果在使用如下命令 
ALTER SYSTEM SWITCH LOG FILE; 
- 把该文件copy到你想要放到位置 
- ALTER DATABASE RENAME FILE ’filename’ TO filename’

增加redo log 文件 
ALTER DATABASE [database] 
ADD LOGFILE MEMBER 
[ ’filename’ [REUSE] 
[, ’filename’ [REUSE]]... 
TO {GROUP integer 
|(’filename’[, ’filename’]...) 
}

删除redo log 文件 
如果redo log 文件是invalid状态,可以删除之 
ALTER DATABASE [database] DROP LOGFILE MEMBER ’filename’[, ’filename’]...

相关数据字典 
察看 
v$log 
v$logfile 
v$log_history 




    本文转自vcdog 51CTO博客,原文链接:http://blog.51cto.com/255361/837669,如需转载请自行联系原作者



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
存储 分布式计算 监控
【Flume】Flume 监听日志文件案例分析
【4月更文挑战第4天】【Flume】Flume 监听日志文件案例分析
|
1月前
|
Linux
linux定位日志文件
在Linux中查找名为&quot;log.txt&quot;的日志文件,可使用`find`命令从根目录开始搜索:`find / -name log.txt 2&gt;/dev/null`。此命令会忽略错误信息,确保只显示找到的文件路径。
18 1
|
1月前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
243 1
|
2月前
|
Shell Linux C语言
【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
32 0
|
2月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
56 0
|
13天前
|
弹性计算 应用服务中间件 Shell
切割 Nginx 日志文件
【4月更文挑战第28天】
21 0
|
1天前
|
Go 文件存储 iOS开发
LabVIEW崩溃后所产生的错误日志文件的位置
LabVIEW崩溃后所产生的错误日志文件的位置
|
11天前
|
弹性计算 运维 Shell
自动日志文件轮转
【4月更文挑战第30天】
7 0
|
12天前
|
弹性计算 应用服务中间件 Shell
切割Nginx 日志文件
【4月更文挑战第29天】
20 1
|
12天前
|
存储 弹性计算 运维
统计/var/log 有多少个文件
【4月更文挑战第29天】
22 1