在Oracle数据库中,日志文件是用来记录数据库操作和事务变更的文件。主要有两种类型的日志文件:在线日志文件和归档日志文件。归档日志文件是在线日志文件的历史备份。
总的来说,日志文件在Oracle数据库中起着非常重要的作用,可以用于数据库的恢复和备份,确保数据的完整性和可靠性。日志按照组来组织,每一个组里面有多个文件。日志组按照循环方式来工作,所以ORACLE中,至少应该有两个日志组,当一个联机重做日志组被写满的时候,就会发生日志切换,这时联机重做日志组2成为当前使用的日志,当联机重做日志组2写满的时 候,又会发生日志切换,去写联机重做日志组1,就这样反复进行。
如果数据库处于非归档模式,联机日志在切换时就会丢弃. 而在归档模式下,当发生日志切换的时候,被切换的日志会进行归档。比如,当前在使用联机重做日志1,当1写满的时候,发生日志切换,开始写联机重做日志 2,这时联机重做日志1的内容会被拷贝到另外一个指定的目录下。这个目录叫做归档目录,拷贝的文件叫归档重做日志。
数据库使用归档方式运行时才可以进行灾难性恢复
Oracle数据库可以运行在两种归档方式:归档日志模式(ARCHIVELOG)和非归档日志模式(NOARCHIVELOG)。
1.1 归档日志模式(ARCHIVELOG):
在归档日志模式下,数据库会将已经满的在线日志文件切换到归档日志文件,并将这些归档日志文件保存到指定的归档目录中。归档日志模式适合于需要进行备份和恢复操作的生产环境,因为它可以提供完整的恢复能力,包括可以恢复到任意的时间点。
1.2 非归档日志模式(NOARCHIVELOG):
在非归档日志模式下,数据库不会将已经满的在线日志文件切换到归档日志文件,而是直接覆盖在线日志文件。这意味着数据库只能进行完全恢复,无法进行基于时间点的恢复。非归档日志模式适合于测试环境或者一些不需要进行备份和恢复操作的数据库,因为它简化了数据库的日常管理。非归档日志方式可以避免实例故障,但无法避免介质故障。在此方式下,数据库只能实施冷备份
1.3 区别:
主要区别在于归档日志模式可以提供完整的备份和恢复能力,包括可以进行基于时间点的恢复,而非归档日志模式只能进行完全恢复,无法进行基于时间点的恢复。因此,归档日志模式适合于生产环境或者对数据完整性要求高的场景,而非归档日志模式适合于测试环境或者对备份和恢复要求不高的场景。
Oracle 11g 的归档方式是将 redo log 文件归档到另一个地方。这样,即使一个 redo log 文件损坏了,Oracle 也可以恢复数据。以下是归档方式的步骤:
3.1.1 确认数据库的归档模式:
SELECT LOG_MODE FROM V$DATABASE;
如果 LOG_MODE 的值是 ARCHIVELOG,则数据库已经启用了归档模式。
3.1.2 确认redo log 文件的组数及大小:
SELECT GROUP#, MEMBER FROM V$LOGFILE;
GROUP# 列显示组编号,MEMBER 列显示 redo log 文件的完整路径。
3.1.3 开启归档模式:
ALTER DATABASE ARCHIVELOG;
使得数据库从归档模式调整到非归档模式只需将ARCHIVELOG
改为NOARCHIVELOG
,其余方式均相同。
3.1.4 确认是否启用自动归档:
SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME LIKE '%ARCHIVE%';
如果值为 true,则自动归档已启用。
3.1.5 重启数据库:
SHUTDOWN IMMEDIATE;
STARTUP;
3.2.1 查看当前 redo log 文件的状态:
SELECT GROUP#, THREAD#, SEQUENCE#, ARCHIVED, STATUS FROM V$LOG;
3.2.2 切换到下一个 redo log 文件:
ALTER SYSTEM SWITCH LOGFILE;
3.2.3 强制进行CHECKPOINT:
ALTER SYSTEM CHECKPOINT;
3.2.4 手动归档当前 redo log 文件:
ALTER SYSTEM ARCHIVE LOG CURRENT;
3.2.5 查看已经归档的日志文件:
SELECT NAME, ARCHIVED FROM V$ARCHIVED_LOG ORDER BY COMPLETION_TIME DESC;
可以通过数据字典视图查看归档日志信息:
V$ARCHIVE_DEST
- 显示当前所有归档日志存储位置及其状态V$ARCHIVE_LOG
- 显示历史归档日志信息在 Oracle 11g 中,您可以通过以下示例来了解如何创建联机日志文件组、添加联机日志文件、切换日志文件组等操作:
ALTER DATABASE
ADD LOGFILE GROUP 1 ('/u01/oracle/oradata/redo01a.log', '/u01/oracle/oradata/redo01b.log') SIZE 100M,
GROUP 2 ('/u01/oracle/oradata/redo02a.log', '/u01/oracle/oradata/redo02b.log') SIZE 100M,
GROUP 3 ('/u01/oracle/oradata/redo03a.log', '/u01/oracle/oradata/redo03b.log') SIZE 100M;
上述代码中,我们使用 ALTER DATABASE ADD LOGFILE
命令来创建了一个包含三个联机日志文件组的联机日志文件,并指定了每个文件的大小和路径。
不同日志组可以不同大小,但是同一个组内的所有日志文件必须同样大小。
ALTER DATABASE
ADD LOGFILE ('/u01/oracle/oradata/redo04a.log', '/u01/oracle/oradata/redo04b.log') SIZE 100M TO GROUP 1;
上述代码中,我们使用 ALTER DATABASE ADD LOGFILE
命令将新的联机日志文件添加到了现有的联机日志文件组中。
ALTER SYSTEM SWITCH LOGFILE;
上述代码中,我们使用 ALTER SYSTEM SWITCH LOGFILE
命令来切换到下一个联机日志文件组,这会触发数据库开始在新的联机日志文件组中记录日志。
alter database clear logfile group <group号>
使用alter database clear logfile group
CURRENT
:表示这是当前正在使用的联机日志文件组ACTIVE
:表示这个日志文件组中,所记录的重做记录所对应的内存中的脏数据块还没有被完全写入到数据文件中。INACTIVE
:表示这个日志文件组中,所记录的重做记录所对应的内存中的脏数据块已经被写入到数据文件中。UNUSED
:表示还没有被使用过。从v$logfile
中查看每一个联机日志文件的信息。
这些示例可以帮助您了解如何创建联机日志文件组、添加联机日志文件以及切换日志文件组等操作。请根据您的实际需求和环境进行相应的调整。