1、归档和非归档的区别:
1)归档会在日志切换时,备份历史日志,用于OLTP,可以进行冷备份和热备份,可以实现数据库完全恢复、不完全恢复(基于时间点)
2)归档会启用arch的后台进程、占用磁盘空间
3)非归档用于OLAP/DSS,只能冷备份,只能恢复到最后次备份状态
不指定归档位置,就默认存放到上面的位置进行归档。
归档日志Archieved Log files 和一般的联机日志文件的区别:归档可以理解成对当前联机日志的备份和整理,内容一样。
归档模式可以恢复到最后一次提交,非归档模式只能恢复到最后一次备份。归档可以防止数据的丢失。例如昨晚做了备份就只能恢复到昨晚,归档就可以恢复到刚才。
虽然会降低一些系统性能(10%),但是安全更重要。
OLTP必须归档。
OLAP以查询和批处理为主,可以几个月切一次日志。
有些库可以不开归档,因为那些数据丢了也无所谓,很快就可以重别地导一份。
2、开归档
SQL> shutdown immediate -->正常关库
SQL> startup mount -->启动到mount状态
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /home/oracle/PROD
Oldest online log sequence 429
Current log sequence 433
创建归档路径:(可以归档要远程)
[[email protected] ~]$ mkdir PROD --创建目录PROD
[[email protected] ~]$ cd PROD
[[email protected] PROD]$ pwd --当前路径
/home/oracle/PROD
[[email protected] dbs]$ vi initPROD.ora --修改初始化参数,添加如下信息
log_archive_dest_1=‘location=/home/oracle/PROD mandatory‘ --mandatory是指等待归档完成才切日志组
SQL> alter database archivelog;
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/oracle/PROD
Oldest online log sequence 429
Next log sequence to archive 433
Current log sequence 433
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
一般归档日志在500-800M
3、关归档
(1)SQL> shutdown immediate --正常关库
(2)SQL> startup mount; --启动到mount状态
(3)SQL> alter database noarchivelog; --关归档
(4)SQL> select log_mode from v$database; --查询归档信息
LOG_MODE
------------
NOARCHIVELOG
4、学习参数
SQL> show parameter arch; --归档位置查询
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target integer 0
log_archive_config string
log_archive_dest string
log_archive_dest_1 string
log_archive_dest_10 string
log_archive_dest_2 string
log_archive_dest_3 string
log_archive_dest_4 string
log_archive_dest_5 string
log_archive_dest_6 string
log_archive_dest_7 string
log_archive_format string %t_%s_%r.dbf
--这里的t指代下面的THREAD,S指代SEQUENCE,r指代RESETLOGS_ID
SQL> desc v$archived_log;
THREAD#
SEQUENCE# --日志序列号
RESETLOGS_ID --周期号
SQL> select THREAD#,SEQUENCE#,RESETLOGS_ID from v$archived_log; --没有值表示还没有归档
no rows selected
[[email protected] dbs]$ cd /home/oracle/PROD
[[email protected] PROD]$ ls --发现目录下没有东西
SQL> alter system switch logfile; --切一下日志组 ,切了多次用 /
[[email protected] PROD]$ ls --发现有东西了,与下面的查询相匹配
SQL> select THREAD#,SEQUENCE#,RESETLOGS_ID from v$archived_log; --查出东西了
THREAD# SEQUENCE# RESETLOGS_ID
---------- ---------- ------------
1 9 839515155
1 10 839515155
1 11 839515155
1 12 839515155
1 13 839515155
1 14 839515155
5、归档进程
SQL> show parameter arch;
log_archive_max_processes integer 2 --最大进程号为2,可能有0,1,2三个进程