Oracle 如何启用归档模式

oracleEDU2017-08-29
38
image.png

归档模式
设置归档的目的:保留日志
当日志组切换换的时候,把日志文件拷贝到一个地方,这个动作称为归档,产生的文件称为归档文件。
1
检查数据库是否处于归档模式
SQL> archive log list ;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USEDB_RECOVERY_FILE_DEST
Oldest online log sequence 19
Current log sequence 22
或者
SQL> select LOG_MODE from v$database;
LOG_MODE
——————
NOARCHIVELOG
没有归档 ,日志直接被覆盖,只能在用在线日志文件 不能保存日志。
2
启用归档模式
1. 设置归档名字
SQL> show parameter format
NAME TYPE VALUE
—————————————————— —————- ———————————————
log_archive_format string %t
%s%r.dbf
默认格式: %t
%s%r.dbf
%s log sequence number 关系S 表示序列号
%S log sequence number, zero filled
%t thread number
%T thread number, zero filled
%a activation ID
%d database ID
%r resetlogs ID
例如,修改设置为:orcl
%s%t%r.arc
alter system set logarchive_format=’rcl%s%t%r.arc’ scope=spfile;
shtudown immediate;
startup
检查:
show parameter format
SQL> show parameter logarchive_format
NAME TYPE VALUE
—————————————————— —————- ———————————————
log_archive_format string rcl
%s%t%r.arc
2. 归档路径
重点之一:知道归档文件在哪里
重点之二:知道归档已经占用多少,避免空间不足,归档无法完成,数据库down机。
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_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
log_archive_dest_18 string
log_archive_dest_19 string
log_archive_dest_2 string
log_archive_dest_20 string
log_archive_dest_21 string
log_archive_dest_22 string
log_archive_dest_23 string
log_archive_dest_24 string
log_archive_dest_25 string
log_archive_dest_26 string
log_archive_dest_27 string
log_archive_dest_28 string
log_archive_dest_29 string
log_archive_dest_3 string
log_archive_dest_30 string
log_archive_dest_31 string
log_archive_dest_4 string
log_archive_dest_5 string
log_archive_dest_6 string
log_archive_dest_7 string
log_archive_dest_8 string
log_archive_dest_9 string
最多可以同时生产31份归档文件。
如果归档文件不指定路径 ,则使用的默认在快速恢复区。
查看快速恢复区
SQL> show parameter recovery
NAME TYPE VALUE
—————————————————— —————- ———————————————
db_recovery_file_dest string +FRA 配置了
db_recovery_file_dest_size big integer 5G
查到归档文件在 +fra asm磁盘组
如果快速恢复区也没有设置呢? 归档文件的默认路径 $ORACLE_HOME/dbs

查找归档文件:
先查看变量:log_archive_dest_n
在找快速恢复区:db_recovery_file_dest
最后找 $ORACLE_HOME/dbs
2.1. 要求有arch1、arch2两个归档目录,一次生成两份归档
#su - oracle
$mkdir u01/app/oracle/arch1
$mkdir u01/app/oracle/arch2
$host ls u01/app/oracle
#建立两个文件夹
设置
LOCATION=path_name | SERVICE=service_name }
location 归档在本机
service 归档在异地
SQL> alter system set log_archive_dest_1=’location=/u01/app/oracle/arch1’
SQL> alter system set log_archive_dest_2=’location=/u01/app/oracle/arch2’
SQL> show parameter log_archive_dest
log_archive_dest_1 string location=/u01/app/oracle/arch1
log_archive_dest_2 string location=/u01/app/oracle/arch2
#表示每次归档都产生2份 都是存在本地的目录arch1 和arch2
2.2. 考虑归档目录是否有足够的空间存放归档文件
如果归档占用磁盘空间满 —> 数据库宕机
估算一下可能需要的空间
原理:每次日志组切换就产生归档文件 ,拷贝日志文件就是一个日志组大小
方法:每个日志文件大小 —> 每次归档文件大小,假设日志组50M
多久切换一次 —> 切换频率,如每隔20分切换一次
一天产生的归档文件大小 = 50M2460/20=3.6G
保留8天 占用空间为28.8G
转移归档到其他地方备份;
删除不需要的归档。
i. 实施步骤
查出日志文件大小
select group#,BYTES/1024/1024 ||’M’ from v$log;
GROUP# BYTES/1024/1024||’M’
————— —————————-
1 50M
2 50M
3 50M
每次日志组写满了,就会切换,切换就要归档 每次产生一个50M的归档文件,可在警告日志里查出切换平率。假设每隔10分钟切换一次。
3. 启动归档
shutdown immediate ; 一定正常关闭
startup mount ;
alter database archivelog ;
alter database open ;
检查
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/app/oracle/arch2
Oldest online log sequence 23
Next log sequence to archive 26
Current log sequence 26
SQL> select LOG_MODE from v$database ;

LOG_MODE
——————
ARCHIVELOG

看进程
ps -elf |grep arc |grep ora_ 归档进程
日志组切换
SQL> select GROUP#, THREAD# ,SEQUENCE#,STATUS,ARCHIVED
from v$log;
GROUP# THREAD# SEQUENCE# STATUS ARC
————— ————— ————— ———————— —-
1 1 55 CURRENT NO 是序列55
2 1 52 INACTIVE YES
3 1 53 INACTIVE YES
4 1 54 INACTIVE YES
alter system switch logfile ; 切换日志组的时候就归档
SQL> select GROUP#, THREAD# ,SEQUENCE#,STATUS,ARCHIVED
from v$log;
GROUP# THREAD# SEQUENCE# STATUS ARC
————— ————— ————— ———————— —-
1 1 55 ACTIVE YES 产生了归档文件序列55
2 1 56 CURRENT NO
3 1 53 INACTIVE YES
4 1 54 INACTIVE YES
在/u01/app/oracle/arch1 和/u01/app/oracle/arch2会生成55的归档
[oracle@oracleEDU trace]$ ll u01/app/oracle/arch1
total 3356
-rw-r——- 1 oracle asmadmin 2138624 Aug 16 18:50 rcl_52_1_853023319.arc
-rw-r——- 1 oracle asmadmin 1024 Aug 16 18:50 rcl_53_1_853023319.arc
-rw-r——- 1 oracle asmadmin 5120 Aug 16 18:50 rcl_54_1_853023319.arc
-rw-r——- 1 oracle asmadmin 1270784 Aug 16 18:57 rcl_55_1_853023319.arc
[oracle@oracleEDU trace]$ ll u01/app/oracle/arch2
total 3356
-rw-r——- 1 oracle asmadmin 2138624 Aug 16 18:50 rcl_52_1_853023319.arc
-rw-r——- 1 oracle asmadmin 1024 Aug 16 18:50 rcl_53_1_853023319.arc
-rw-r——- 1 oracle asmadmin 5120 Aug 16 18:50 rcl_54_1_853023319.arc
-rw-r——- 1 oracle asmadmin 1270784 Aug 16 18:57 rcl_55_1_853023319.arc

手工归档
alter system archive log current;
#在单实例 和alter system switch logfile 一样的效果
#在集群环境:在一个节点上敲这个命令,所有节点切换日志组,产生归档文件

  1. 取消归档模式
    shutdown immediate;
    startup mount ;
    alter database noarchivelog ;
    alter database open ;