在线修改redo.log文件的大小

本文介绍如何将Oracle数据库中的Redo Log文件大小从50MB调整至100MB,包括创建新日志组、切换日志、删除旧日志组及文件、重建日志组等步骤,并提供相关SQL命令。
1.查看当前日志组成员:
SQL> select member from v$logfile;

MEMBER
------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO01.LOG
C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO02.LOG
C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO03.LOG
2.查看当前日志组状态:
SQL> select group#,members,bytes/1024/1024,status from v$log;

GROUP# MEMBERS BYTES/1024/1024 STATUS
---------- ---------- --------------- ----------------
1 1 50 INACTIVE
2 1 50 INACTIVE
3 1 50 CURRENT

现有三个日志组,每个组内有一个成员,每个成员的大小为50MB,现在想把此三个日志组的成员大小都改为100MB ,步骤如下:

1、创建2个新的日志组
SQL> alter database add logfile group 4 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO04.LOG') size 100MB;
SQL> alter database add logfile group 5 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO05.LOG') size 100MB;

2、切换当前日志到新的日志组
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> select group#,members,bytes/1024/1024,status from v$log;

GROUP# MEMBERS BYTES/1024/1024 STATUS
---------- ---------- --------------- ----------------
1 1 50 ACTIVE
2 1 50 ACTIVE
3 1 50 ACTIVE
4 1 100 CURRENT
5 1 100 ACTIVE

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

4、操作系统下删除原日志组1、2、3中的文件REDO01.LOG、REDO02.LOG、REDO03.LOG。

5、重建日志组1、2、3
SQL> alter database add logfile group 1 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO01.LOG') size 100MB;
SQL> alter database add logfile group 2 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO02.LOG') size 100MB;
SQL> alter database add logfile group 3 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO03.LOG') size 100MB;

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

7、删除中间过渡用的日志组4、5
SQL> alter database drop logfile group 4;
SQL> alter database drop logfile group 5;
SQL> select group#,status from v$log;

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

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

9、备份当前的最新的控制文件
SQL> conn / as sysdba
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使用情况:
SQL> 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

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 LOGFILE;
- 把该文件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
### 三级标题:Redo Log 文件组的作用 在数据库系统中,Redo Log 文件组是 InnoDB 存储引擎的重要组成部分,主要用于记录所有对数据页的物理修改操作。这些日志文件在事务提交时被写入,并且用于崩溃恢复,确保事务的持久性[^2]。 Redo Log 文件组的主要作用包括: - **崩溃恢复**:当数据库发生崩溃或意外关闭时,Redo Log 文件组中的信息可以用来恢复未写入数据文件的已提交事务,保证了事务的持久性[^3]。 - **提高性能**:通过减少直接对数据文件的随机写入,转而使用顺序写入 Redo Log 文件的方式,降低了磁盘 I/O 操作的频率,从而提升了数据库的整体性能[^1]。 - **事务一致性**:Redo Log 记录的是对数据页的具体物理修改,这使得在事务处理过程中即使出现故障,也能够通过重放 Redo Log 来保持事务的一致性。 ### 三级标题:Redo Log 文件组的管理方法 管理和维护 Redo Log 文件组通常涉及以下几个方面: #### 配置 Redo Log 文件大小和数量 MySQL 中的 Redo Log 文件大小和数量可以通过配置文件 `my.cnf` 或 `my.ini` 中的相关参数进行设置。主要涉及的参数有 `innodb_log_file_size` 和 `innodb_log_files_in_group`。例如: ```ini [mysqld] innodb_log_file_size = 512M innodb_log_files_in_group = 4 ``` 上述配置表示每个 Redo Log 文件大小为 512MB,并且共有 4 个这样的文件组成一个文件组。调整这些参数时需要注意,过大的 Redo Log 文件可能会导致启动时间变长,而过多的小文件则可能影响性能[^3]。 #### 查看当前 Redo Log 状态 可以通过查询 MySQL 的系统表或使用命令行工具来查看当前 Redo Log 的状态。例如,执行以下 SQL 查询: ```sql SELECT * FROM information_schema.INNODB_TRX; ``` 此外,还可以通过 `SHOW ENGINE INNODB STATUS;` 命令获取更详细的 InnoDB 引擎状态信息,其中包括 Redo Log 的相关信息。 #### 调整 Redo Log 文件组 如果需要调整 Redo Log 文件组的大小或数量,通常需要停止 MySQL 服务,然后手动删除现有的 Redo Log 文件,再重新创建新的文件组。具体步骤如下: 1. 停止 MySQL 服务。 2. 删除现有的 Redo Log 文件(通常位于数据目录下的 `ib_logfile*` 文件)。 3. 修改配置文件中的 `innodb_log_file_size` 和 `innodb_log_files_in_group` 参数。 4. 启动 MySQL 服务,系统会自动创建新的 Redo Log 文件组。 请注意,在进行此类操作之前,务必备份重要数据,以免造成数据丢失。 #### 监控 Redo Log 使用情况 为了确保 Redo Log 文件组的有效利用,建议定期监控其使用情况。可以通过以下方式实现: - **使用 Performance Schema**:MySQL 提供了 Performance Schema 功能,可以用来监控 Redo Log 的生成速率、写入速度等指标。 - **第三方监控工具**:如 Percona Monitoring and Management (PMM) 等工具提供了更为直观的界面,帮助管理员实时了解 Redo Log 的运行状况。 通过合理配置和管理 Redo Log 文件组,不仅可以提升数据库的性能,还能有效保障数据的安全性和一致性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值