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

 

创建归档路径:(可以归档要远程)

[oracle@gc1 ~]$ mkdir PROD                            --创建目录PROD

[oracle@gc1 ~]$ cd PROD 

[oracle@gc1 PROD]$ pwd                                   --当前路径

       /home/oracle/PROD 

[oracle@gc1 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、关归档

 

1SQL> shutdown immediate                --正常关库

2SQL> startup mount;                           --启动到mount状态

3SQL> alter database noarchivelog;             --关归档

4SQL> 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指代下面的THREADS指代SEQUENCEr指代RESETLOGS_ID

SQL> desc v$archived_log;

 THREAD# 

 SEQUENCE#                --日志序列号

 RESETLOGS_ID                --周期号

SQL> select THREAD#,SEQUENCE#,RESETLOGS_ID from v$archived_log;   --没有值表示还没有归档

no rows selected

[oracle@gc1 dbs]$ cd /home/oracle/PROD

[oracle@gc1 PROD]$ ls                                                     --发现目录下没有东西

SQL> alter system switch logfile;                           --切一下日志组   ,切了多次用 /

[oracle@gc1 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三个进程