Oracle归档⽇志与⾮归档⽇志的切换及路径设置
--====================
-- Oracle 归档⽇志
--====================oracle 时间转换
Oracle可以将联机⽇志⽂件保存到多个不同的位置,将联机⽇志转换为归档⽇志的过程称之为归档。相应的⽇志被称为归档⽇志。
⼀、归档⽇志
是联机重做⽇志组⽂件的⼀个副本
包含redo记录以及⼀个唯⼀的log sequence number
对⽇志组中的⼀个⽇志⽂件进⾏归档,如果该组其中⼀个损坏,则另⼀个可⽤的⽇志将会被归档
对于归档模式的⽇志切换,当⽇志归档完成后,下⼀个⽇志才能被覆盖或重新使⽤
⾃动归档功能如开启,则后台进程arcn在⽇志切换时⾃动完成归档,否则需要⼿动归档
归档⽇志⽤途
恢复数据库
更新standby数据库
使⽤LogMiner 提取历史⽇志的相关信息
⼆、⽇志的两种模式
1.⾮归档模式
不适⽤与⽣产数据库
创建数据库时,缺省的⽇志管理模式为⾮归档模式
当⽇志切换,检查点产⽣后,联机重做⽇志⽂件即可被重新使⽤
联机⽇志被覆盖后,介质恢复仅仅⽀持到最近的完整备份
不⽀持联机备份表空间,⼀个表空间损坏将导致整个数据库不可⽤,需要删除掉损坏的表空间或从备份恢复
对于操作系统级别的数据库备份需要将数据库⼀致性关闭
应当备份所有的数据⽂件、控制⽂件(单个)、参数⽂件、密码⽂件、联机⽇志⽂件(可选)
2.归档模式
能够对联机⽇志⽂件进⾏归档,⽣产数据库强烈建议归档
在⽇志切换时,下⼀个即将被写⼊⽇志组必须归档完成之后,⽇志组才可以使⽤
归档⽇志的Log sequence number信息会记录到控制⽂件之中
必须有⾜够的磁盘空间⽤于存放归档⽇志
Oracle 9i 需要设置参数log_archive_start=true 才能够进⾏⾃动归档
备份与恢复
⽀持热备份,且当某个⾮系统表空间损坏,数据库仍然处于可⽤状态,且⽀持在线恢复
使⽤归档⽇志能够实现联机或脱机时点恢复(即可以恢复到指定的时间点、指定的归档⽇志或指定的SCN)
三、两种模式的切换设置及⼿动归档
1.⾮归档到归档模式
a.⼀致性关闭数据库(shutdown [immediate | transactional |normal])
b.启动到mount阶段(startup mount)
c.切换到归档模式(alter database archivelog [manual])
d.切换到open阶段(alter database open)
e.对数据做⼀个完整备份(full backup)
--演⽰⾮归档到归档模式
SQL> ARCHIVE LOG LIST --查看数据库是否处于归档模式
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 14
Current log sequence 16
SQL> SELECT log_mode FROM v$database; --查看数据库是否处于归档模式
LOG_MODE
------------
NOARCHIVELOG
SQL> SHUTDOWN IMMEDIATE; --⼀致性关闭数据库
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP MOUNT; --启动到mount状态
ORACLE instance started.
Total System Global Area 251658240 bytes
Fixed Size 1218796 bytes
Variable Size 75499284 bytes
Database Buffers 171966464 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> ALTER DATABASE ARCHIVELOG; --切换到⾃动归档模式Database altered.
SQL> ALTER DATABASE OPEN; --切换到open状态
Database altered.
SQL> ARCHIVE LOG LIST; --查看数据库的归档状态
Database log mode Archive Mode --已置为归档模式
Automatic archival Enabled --对⽇志进⾏⾃动归档
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 14
Next log sequence to archive 16
Current log sequence 16
--备份数据库步骤省略
2.归档模式切换到⾮归档模式(步骤同⾮归档到归档模式仅仅是c步骤使⽤alter database noarchivelog,演⽰省略)
a.⼀致性关闭数据库(shutdown [immediate | transactional |normal])
b.启动到mount阶段(startup mount)
c.切换到归档模式(alter database noarchivelog )
d.切换到open阶段(alter database open)
e.对数据做⼀个完整备份(full backup)
3.⼿动归档
⼿动归档时需要将⽇志模式切换为alter database archivelog manual
再使⽤alter system archive log current | all 实现归档
更多⼿动归档命令:ALTER SYSTEM archive_log_clause
注意:
⼿动归档模式下不⽀持stanby数据库
在alter database archivelog模式下也可以实现对⽇志的归档
SQL> ALTER DATABASE ARCHIVELOG MANUAL; --将⽇志模式切换为⼿⼯归档模式
Database altered.
SQL> ALTER DATABASE OPEN; --打开数据库
Database altered.
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT; --对当前的⽇志进⾏归档(建议在mount阶段完成)
System altered.
SQL> ALTER SYSTEM ARCHIVE LOG ALL; --对所有的⽇志进⾏归档
alter system archive log all
*
ERROR at line 1:
ORA-00271: there are no logs that need archiving --没有需要归档的⽇志
4.归档进程的调整
通过设置LOG_ARCHIVE_MAX_PROCESSES 参数,可以指定数据库规定所需初始化的进程数,缺省的归档进程数为2⼀般情况下不需要修改该参数,Oracle会根据归档情况⾃动启动额外的归档进程
也可以动态的增加或减少归档进程数,⽐如有些业务在⽉底需要进⾏⼤量归档,平时则归档较少,对此可以动态修改
修改⽅法
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3;
5.配置归档(两种归档位置配置⽅法)
a.归档到本机且少于等于两个归档位置
设置LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST参数
alter system set log_archive_dest = '/u01/app/oracle/archivelog1' scope = spfile;
alter system set log_archive_duplex_dest = '/u01/app/oracle/archivelog2' scope = spfile;
b.归档到本机或远程主机
设置LOG_ARCHIVE_DEST_n 参数,n最⼤值为10
alter system set log_archive_dest_1 = 'LOCATION=/u01/app/oracle/archivelog3';
alter system set log_archive_dest_2 = 'SERVICE=standby1';
对于远程归档位置,SERVICE选项需要指定远程数据库的⽹络服务名(在a⽂件中配置)
LOG_ARCHIVE_DEST_n的两个常⽤选项
MANADATORY | OPTIONAL:
MANADATORY表⽰归档必须成功复制到⽬的路径之后,联机重做⽇志才能被复⽤,OPTIONAL正好相反REOPEN:
指定归档失败后指定间隔多少时间重试归案,缺省的为300秒
⽰例:
log_archive_dest_1 = 'LOCATION=/u01/app/oracle/archivelog3 manadatory reopen = 600'
log_archive_dest_2 = 'SERVICE=standby1 manadatory reopen'
c.两种归档⽅法异同(前者log_archive_dest、log_archive_duplex_dest ,后者log_archive_dest_n)
两者都可以归档到本机,后者可以归档到远程主机,前者不⽀持该功能
前者最多配置两个归档位置,后者可以配置10个归档位置
两者互不兼容,要么使⽤前者,要么使⽤后者
使⽤后者归档到本地时需要增加LOCATION选项,备份到远程主机需要使⽤SERVICE选项
但上述两种⽅式未指定路径时,归档⽇志位于db_recovery_file_dest 缺省为$ORACLE_BASE/flash_recovey_area
d.归档⽇志命名格式
设置LOG_ARCHIVE_FORMAT参数,Unix下的缺省设置为LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf
%s: ⽇志序列号:
%S: ⽇志序列号(带有前导)
%t: 重做线程编号.
%T: 重做线程编号(带有前导)
%a: 活动ID号
%d: 数据库ID号
%r RESETLOGS的ID值.
alter system set log_archive_format = 'arch_%t_%s_%r.arc';
e.归档位置状态
Valid/Invalid --磁盘位置及服务名等是否有效
Enabled/Disabled --磁盘位置的可⽤状态及数据库能否使⽤该归档位置
Active/Inactive --访问归档⽬的地是否有异常
f.归档成功的最⼩个数(使⽤参数log_archive_min_succeed_dest = n)
alter system set log_archive_min_succeed_dest = 2; --缺省为1
联机重做⽇志组能够被覆盖的前提
所有强制路径归档位置成功实现归档
归档⽬的地的成功归档的个数⼤于或等于上述参数设定的值
当强制个数⼤于该参数设定的个数,则以强制个数为准
当强制个数⼩于该参数设定的个数,则可选的成功归档路径加上强制的归档路径个数⾄少等于该参数设定值
g.控制归档的可⽤性(使⽤参数log_archive_dest_state_n)
alter system set log_archive_dest_state_1 = enable | defer
enable -->缺省状态,可以在该归档位置进⾏归档
defer -->禁⽤该归档位置
h.演⽰归档路径配置及查看归档进程,归档位置状态
SQL> ARCHIVE LOG LIST; --查看⽇志是否处于归档状态
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 24
Next log sequence to archive 26
Current log sequence 26
SQL> ho ps -ef | grep ora_arc --查看归档进程是否已启动
oracle 4062 1 0 11:43 ? 00:00:00 ora_arc0_orcl
oracle 4064 1 0 11:43 ? 00:00:00 ora_arc1_orcl
SQL> SHOW PARAMETER ARCHIVE --查看归档路径是否已设置,为空值表⽰未设置
NAME TYPE VALUE