目录
一、重做日志文件管理
事务对数据库所做的修改将以重做记录的形式保存在重做日志缓存中。 当事务提交时,由LGWR进程将缓存中与该事务相关的重做记录全部写入重做日志文件,此时该事务被认为成功提交 。因此,Redo Log 文件记录了对于数据库的所有修改,用于数据库的恢复。
1. 简介
1.1 重做日志文件
- 日志文件也称为重做日志文件(Redo Log File) 。
- 日志文件用于记载事务操作所引起的数据库变化。执行DDL或DML操作时,Oracle会将事务变化的信息顺序写入重做日志。
- 当丢失或损坏数据库中的数据时,Oracle会根据重做日志文件中的记录,恢复丢失的数据。
- 每个Oracle数据库至少有两个Redo Log日志文件组,每组有一个或多个日志文件,建议对Redo Log文件进行镜像,以保证数据库安全运行。
- 建议使用四个Redo Log文件组,每组2或3个日志文件组内Redo Log文件位于不同磁盘。
- Redo Log文件是循环使用的。
1.2 重做日志文件镜像
- 一个日志组中Redo Log文件具有相同的信息。
- 选择合适的日志文件大小。
- 组中的成员同时被更新。
- 每组应包含与其他组中数目相同的日志成员
- 镜像的Redo Log文件可以防止Redo Log文件丢失。
- 只有一组日志文件组的状态时CURRENT,其他是INACTIVE。
2. 增加重做日志文件
首先查询重做日志文件信息:
select group#,sequence#,members,archived,status from v$log;
--或者
select group#,member from v$logfile;
当前有两个日志文件组,每个日志文件组中有一个日志成员。
2.1 增加日志文件组
增加一个日志文件组:alter database add logfile group
--增加1个日志文件组,包含1个日志成员
alter database add logfile group 3 ('C:\oraclexe\app\oracle\fast_recovery_area\XE\ONLINELOG\REDOO3.LOG') size 20M;
--增加1个日志文件组,包含2个日志成员
alter database add logfile group 4 ('C:\oraclexe\app\oracle\fast_recovery_area\XE\ONLINELOG\REDOO4a.LOG', 'C:\oraclexe\app\oracle\fast_recovery_area\XE\ONLINELOG\REDOO4b.LOG') size 20M;
- 若没有指定日志文件的名字,系统会自动生成。
- size表示每个日志成员的大小。
2.2 增加日志成员
增加日志成员:alter database add logfile member
--为日志文件组3增加2个日志成员
alter database add logfile member 'C:\oraclexe\app\oracle\fast_recovery_area\XE\ONLINELOG\REDOO3a.LOG' to group 3, 'C:\oraclexe\app\oracle\fast_recovery_area\XE\ONLINELOG\REDOO3b.LOG' to group 3;
--为日志文件组3增加1个日志成员
alter database add logfile member 'C:\oraclexe\app\oracle\fast_recovery_area\XE\ONLINELOG\REDOO3c.LOG' to group 3;
以上操作完成后,日志文件目录下:
3. 删除重做日志文件
什么时候需要删除:
- 当日志成员出现损坏或丢失时,后台进程LGWR不能将事务变化写入到该日志成员中,在这种情况下应该删除该日志成员;
- 当日志组尺寸不合适时,需要重新建立新日志组,并删除原有的日志组。
删除重做日志是使用ALTER DATABASE语句来完成的:alter database drop logfile
--删除日志成员
alter database drop logfile member 'C:\oraclexe\app\oracle\fast_recovery_area\XE\ONLINELOG\REDOO3c.LOG';
--删除日志组
alter database drop logfile group 4;
删除时要注意:
- 至少保证有两个日志文件组,每个日志文件组有一个成员。
- 只能删除Inactive状态的日志组。更改状态:SQL> alter system switch logfile;
- 确保已归档。
- 删除命令并没有将重做日志从操作系统磁盘上删除,只是更新了数据控制文件。因此应在确认删除操作完成后,再删除操作系统中对应的日志文件。
4. 改变重做日志文件的位置或名称
只能修改Inactive状态的日志组中的成员文件的名称和位置,步骤如下:
Step1 关闭数据库
- 命令:
shutdown immediate
- 注意增加/删除日志文件的时候不需要关闭数据库,但是改变日志文件的位置/名称时要关闭数据库,然后重启至NOMOUNT状态。因为要先在操作系统层面做改变,关闭数据库以确保操作的安全性和一致性。
- Tip:需要在操作系统上做改变的,都要先关闭数据库!
Step2 移动源日志文件到目标位置(操作系统级)
HOST MOVE C:\oraclexe\app\oracle\fast_recovery_area\XE\ONLINELOG\REDOO3B.LOG D:\temp\REDOO3B.LOG
--或者直接移动or重命名
- 移动位置和修改名称命令一致。
Step3 重新启动数据库至mount状态,更改日志文件的位置或名称
startup mount
alter database rename file 'C:\ORACLEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\ONLINELOG\REDOO3B.LOG' to 'D:\temp\REDOO3B.LOG';
- 启动至mount状的原因:否则控制文件上的移动的日志文件的位置没有改变。
Step4 打开数据库,备份新的控制文件
alter database open
Alter database backup controlfile to 'd:\backup_controlfile\control_20231219.bkp ';
尝试:如果前面没有关闭数据库会出错,见下图。
二、归档日志文件管理
- 归档日志是非活动重做日志的备份。
- 通过使用归档日志,可以保留所有重做历史记录。
- 当数据库处于ARCHIVELOG模式并进行日志切换时,后台进程ARCH会将重做日志的内容保存到归档日志中。
- 当数据库出现介质故障时,使用数据文件的备份、归档日志和重做日志可以完成数据库的完全恢复。
控制归档:
- 在安装Oracle 11g时,默认为数据库运行在非归档模式下,这样可以避免在创建数据库的过程中对生成的重做日志进行归档。
- 当数据库开始正常运行后,就可以将它切换到归档模式中。
- 要将数据库在归档模式与非归档式之间进行切换,需要使用带ARCHIVELOG或NOARCHIVELOG子句的ALTER DATABAS语句。
1.关闭数据库
SQL> shutdown immediate
2.设置归档目标
--默认归档目标由DB_RECOVERY_FILE_DEST指定
3.重新启动数据库,mount状态
SQL> startup mount
4.改变数据库归档模式
--设置为归档模式
SQL> alter database archivelog;
--设置为非归档模式
SQL> alter database noarchivelog;
5.打开数据库
SQL> alter database open;
-- 还需要用alter system switch logfile;才能看到更改