一、什么是oracle归档模式:
oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更新数据等,对这些操作
都会记录在联机重做日志里。一般数据库至少要有2个联机重做日志组。当一个联机重做日志组被写满时候,就会发
生日志切换,这时联机重做日志组2成为当前使用的日志,当联机重做日志组2写满的时候,又会发生日志切换,去
写联机重做日志组1,就这样反复进行。
如果数据库处于非归档模式,联机日志在切换时就会丢弃,而在归档模式下,当发生日志切换的时候,被切换的日志
会进行归档。比如,当前在使用联机重做日志1,当1写满的时候,发生日志切换,开始写联机重做日志2,这时联机
重做日志1的内容会被拷贝到另外一个指定的目录下。这个目录叫做归档目录,拷贝的文件叫归档重做日志。
数据库使用归档方式运行时才可以进行灾难性恢复。

二、归档模式与非归档模式区别
非归档模式只能做冷备份,并且恢复时只能做完全备份。最近一次完全备份到系统出错期间的数据不能恢复,
归档模式可以做热备份,并且可以做增量备份,可以做部分恢复。
用archive log list 可以查看当前的模式状态是归档模式还是非归档模式

三、开启归档模式
SQL> alter database archivelog
  2  ;
alter database archivelog
*
第 1 行出现错误:
ORA-01126: 数据库必须已装载到此实例并且不在任何实例中打开

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

SQL> alter database archivelog
  2  ;
alter database archivelog
*
第 1 行出现错误:
ORA-01034: ORACLE not available

SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1292036 bytes
Variable Size             230689020 bytes
Database Buffers          373293056 bytes
Redo Buffers                7094272 bytes
数据库装载完毕。

SQL> alter database archivelog
  2  ;

数据库已更改。

此时如果需要操作库表,则需要先执行一条命令用来打开数据库开关,即

SQL> alter database open
  2  ;

数据库已更改。

注:启用归档模式必须是在数据库处理于装载状态时进行,其步骤一般为
a. 关闭数据库shutdown immediate
b. 装载数据库startup mount
(mount 是装载数据库,比如读取控制文件信息,看下数据文件是否存在之类,但是不打开,startup是启动打开 startup 要经历三部曲 nomount+ mount +open
 oracle启动分为三步:
 nomount --根据参数文件启动实例(instance)
 mount --加载控制文件,让实例和数据库相关联
 open --根据控制文件找到并打开数据文件和日志文件,从而打开数据库)
c. 更改为归档日志模式alter database archivelog
d. 打开数据库alter database open

另外,由非归档模式改为归档模式后,要做一次完全备份,因为非归档模式下产生的备份日志对于归档模式已经不可用了,这一步非常重要!


四、禁用归档模式
a.SQL>shutdown immediate
b.SQL>startup mount
c.SQL>alter database noachivelog
d.SQL>alter database open

五、自动归档和手动归档
在自动归档过程中,将启用ARCn后台进程,该进程在重做日志文件填满后复制这些文件;
在手动归档过程中,必须使用SQL*PLUS 或 Oracle Enterprise Manager 复制这些文件;

启用自动归档或手动归档的原则
1.在决定使用哪种归档模式(自动归档或手动归档)之前,必须将数据库设置为归档(ARCHIVELOG)模式;
2.如果未切换到ARCHIVELOG模式,将导致ARCn无法复制重做日志文件;
3.启用归档进程之前,应彻底关闭数据(使用正常、立即或事务处理选项);

注:如果由于某种原因导致归档进程(ARCn)失败,一旦事务处理活动填满了所有重做日志,oracle服务器就会停止。
将数据库设置为ARCHIVELOG模式将通知Oracle服务器不要覆盖联机重做日志,除非这些日志已经归档。
因此,联机重做日志的归档必须与系统中的事务处理活动(生成重做日志)保持同步。

1).启用自动归档,
 a.设置初始化参数:LOG_ARCHIVE_START=true
 SQL>  alter system set log_archive_start=true;
  alter system set log_archive_start=true
                  *
  第 1 行出现错误:
  ORA-02095: 无法修改指定的初始化参数
  
 SQL> alter system set log_archive_start=true scope=spfile;
  注解:有些参数不能动态修改,需要使用ALTER SYSTEM SET parameter = value  SCOPE = SPFILE,然后重新启动数据库才能生效。
     而ALTER SYSTEM SET parameter = value 使用的默认SCOPE = BOTH,包括同时修改spfile 和当前的设置

 运行过程中,关闭和重启归档日志进行
 SQL>ARCHIVE LOG STOP
 SQL>ARCHIVE LOG START

  b.例程启动后启用自动归档:ALTER SYSTEM ARCHIVE LOG START;
2).手动归档,设置初始化参数LOG_ARCHIVE_START=FALSE
 例程启动后禁用自动归档(即手动归档):ALTER SYSTEM ARCHIVE LOG STOP
  归档当前的日志文件
  SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;
  归档序号为022的日志文件
  SQL>ALTER SYSTEM ARCHIVE LOG SEQUENCE 022;
  归档所有日志文件
  SQL>ALTER SYSTEM ARCHIVE LOG ALL;
  改变归档日志目标
  SQL>ALTER SYSTEM ARCHIVE LOG CURRENT TO '&PATH';