+
目录、归档日志进程
归档日志进程
归档日志进程是可选进程,该进程并不在实例启动时自动启动,它的作用是把写满的重要日志文件的数据写到一个归档日志中,这个归档日志用作介质故障时的数据库恢复。重做日志文件负载实例失败是的数据恢复,因为SGA中没有被保存的数据会全部丢失,这样使用重做日志文件就可以完全恢复事务。而归档日志进程用于介质恢复,比如磁盘损坏,可以使用以前备份的数据文件,使用归档日志和重做日志就可以完全恢复数据库。归档进程不在实例启动时自动启动,在生产数据库中必须使用归档模式,以防止灾难性的数据损坏。
归档模式
在生产数据库中,数据库可以运行在两中模式下,一种时非归档模式,一种是归档模式,而归档直观理解就是重做日志的备份。在重要的数据库信息系统中,都将数据库运行在归档模式,管理好 归档日志。这样在具备备份的情况下就可以实现数据库完全恢复。保证数据不会丢失。
10归档模式的好处数据库发生介质故障是=时可以安全恢复数据库,虽然介质故障的现象不同,恢复的方法也有差异。但是基本原理就是使用备份的数据和归档实现数据库的完全恢复。
LGWR进程将日志缓冲区的数据写入重做日志,当前重做日志写满后,会继续切换到新的日志组,在使用新的重组日志组之前将会将当前写满的日志数据写入归档日志,注意归档进程只是在归档时才会启动,一旦当前的日志组中的重做数据都写入了归档日志,则可以切换到新的日志组并使用这个日志组。当重做日志组切换一个周期后,会覆盖已经有重做数据的日志组,但是此时已经不重要,因为这些旧的日志数据已经写入了归档日志。这样旧可以保证在数据库法是介质故障时,使用归档日志中的数据实现用户数据的不丢失恢复,即完全恢复。
1.查看系统的归档模式
SQL> connect system as sysdba
SQL> archive log list;
数据库日志模式 非存档模式
自动存档 禁用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 6
当前日志序列 7
查询默认归档目录
SQL> show parameter db_recovery_file_dest;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /u01/app/oracle/fast_recovery_
area
db_recovery_file_dest_size big integer 4G
2.设置归档模式过程
设置数据库为归档模式,并且启用自动归档,当前提时必须首先关闭数据库,以mount参数启动数据库,更改后在启动到open状态。过程如下:
设置数据库为归档模式的过程:
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> connect / as sysdba;
已连接到空闲例程。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 413372416 bytes
Fixed Size 2227040 bytes
Variable Size 306185376 bytes
Database Buffers 100663296 bytes
Redo Buffers 4296704 bytes
数据库装载完毕。
SQL> alter database archivelog;
数据库已更改。
SQL> alter database open;
数据库已更改。
查询当前数据库的归档模式
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 6
下一个存档日志序列 7
当前日志序列 7
上述输出说明,数据库已经出于归档模式,使用默认的归档目录可以做为存储目录,此时做一次数据库的全备份,包括数据文件和控制文件,因为在之前的非归档模式下的数据库备份已经不能使用了。
查询默认归档目录
SQL> show parameter db_recovery_file_dest;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /u01/app/oracle/fast_recovery_
area
db_recovery_file_dest_size big integer 4G
SQL> show parameter db_recovery_file_dest;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /u01/app/oracle/fast_recovery_
area
db_recovery_file_dest_size big integer 4G
SQL> set pagesize 30
SQL> show parameter db_recovery_file_dest;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /u01/app/oracle/fast_recovery_
area
db_recovery_file_dest_size big integer 4G
3.查看数据库的恢复目录的位置
SQL> show parameter db recovery
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /u01/app/oracle/fast_recovery_area ---数据库恢复文件目录的位置
db_recovery_file_dest_size big integer 10G ----说明该存储目录分配的磁盘空间大小。
LGWR进程将内存中的重做数据写入重做日志文件,即磁盘文件。这个过程很快,因为是从内存读数据并且与重做日志文件的格式有关。而归档进程是从重做日志文件读取数据同时写入归档日志文件,这是一个读磁盘写磁盘的过程,显然这个过程相对于LGWR的工作过程要满一些。所以这里就会存在一个速度匹配问题。如果当前的生产数据库的DML操作很频繁,产生重做数据的效率很高,很可能出现归档进程无法匹配LGWR进程的工作,即归档进程慢。使得写重做日志的等待事件。为了防止由于归档进程与LGWR进程不匹配造成的等待事情,可以设置一个参数,以启动更多的后台归档进程,这个参数是log_archive_max_processes.
查看参数log_archive_max_processes值
SQL> show parameter log_archive_max_orocesses;
动态修改这个参数的值
SQL> alter system set log_archive_max_processes=4;
查询归档目录相关参数
SQL> show parameter log_archive_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest string
log_archive_dest_1 string
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
log_archive_dest_13 string
其中log_archive_dest_n参数指定归档目录的绝对路径,log_archive_dest_state_n 参数指定了这些归档目录的状态,可以用于归档目录的维护,从输出我们知道这些目录默认情况下都是空的,没有设置,但是其状态就是enable的,