归档模式可以提高Oracle数据库的可恢复性,生产数据库都应该运行在此模式下,归档模式应该和相应的备份策略相结合,只有归档模式没有相应的备份策略只会带来麻烦。
本文简单介绍如何启用和关闭数据库的归档模式。
1.shutdown normal或shutdown immediate关闭数据库
[oracle@jumper oracle]$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on Sat Oct 15 15:48:36 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
2.启动数据库到mount状态
SQL> startup mount;
ORACLE instance started.
Total System Global Area 101782828 bytes
Fixed Size 451884 bytes
Variable Size 37748736 bytes
Database Buffers 62914560 bytes
Redo Buffers 667648 bytes
Database mounted.
3.启用或停止归档模式
如果要启用归档模式,此处使用
alter database archivelog 命令。
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /opt/oracle/oradata/conner/archive
Oldest online log sequence 148
Next log sequence to archive 151
Current log sequence 151
如果需要停止归档模式,此处使用:
alter database noarchivelog 命令。
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 101782828 bytes
Fixed Size 451884 bytes
Variable Size 37748736 bytes
Database Buffers 62914560 bytes
Redo Buffers 667648 bytes
Database mounted.
SQL> alter database noarchivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Enabled
Archive destination /opt/oracle/oradata/conner/archive
Oldest online log sequence 149
Current log sequence 152
4.修改相应的初始化参数
Oracle10g之前,你还需要修改初始化参数使数据库处于自动归档模式。
在pfile/spfile中设置如下参数:
log_archive_start = true
重启数据库此参数生效,此时数据库处于自动归档模式。
也可以在数据库启动过程中,手工执行:
archive log start
使数据库启用自动归档,但是重启后数据库仍然处于手工归档模式。
从Oracle10g开始,log_archive_start参数已经废除
采用Oracle Archive Log模式和非Archive Log模式对备份恢复的影响
备份的目的在于,当系统或数据库出现问题时,能够快速将数据库进行恢复。对于Oracle数据库,一般有两种备份方式:“物理备份”和“逻辑备份”。“物理备份”指的是以copy数据文件方式进行备份;“逻辑备份”指的是用export等方式将数据从数据库中抽取出来。物理备份又可以分为冷备份和热备份。以下是各种备份的说明及前提条件。
- Cold Backup(冷备份) 主要指在关闭数据库的状态下进行的数据库完全备份,备份内容包括所有数据文件、控制文件、联机日志文件、ini文件。
- Hot Backup(热备份) 指在数据库处于运行状态下,对数据文件和控制文件进行备份,要使用热备份必须将数据库运行在(Archive Log)归档方式下。
- Export(逻辑备份)这是最简单的备份方法,可按数据库中某个表、某个用户或整个数据库来导出,并且支持全部、累计、增量三种方式。使用这种方法,数据库必须处于打开状态,而且如果数据库不是在restrict状态将不能保证导出数据的一致性。
“物理备份”方式以相当于copy数据文件的方式进行备份,恢复时可以快速以相当于copy的方式将备份的数据copy回来,所以备份速度特别是恢复速度非常快。
如果不采用Archive Log模式运行Oracle数据库,只有两种可用的备份方法:冷备份或export逻辑备份。根据关键业务服务器的特点,停下数据库进行冷备份是根本不可能的,因此如果不采用Archive Log,只能进行逻辑备份。
如果仅采用“逻辑备份”方式,恢复时会有以下两个主要问题:
1. 无法恢复到最近时间点的数据。只能恢复到上一次export时的数据状态,当天的数据将丢失。Archive Log模式下的物理备份可以用数据文件备份及Archive Log备份,将数据库恢复到数据库失败前的时间点,不会丢失数据。
2. 完成恢复可能需要很长时间。恢复只能用import方法进行,所以需要的时间包括:
a. create database及所有的tablespace: 以每2分钟初始化一个2G的数据文件来计算,建立一个400G的Oracle数据库需要约6.7个小时。
b. import。时间较难确定,但保守估计应在10个小时以上(如果import过程中出现问题,恢复时间将延长)
3. 恢复时步骤较多,易出现人为故障。
由于 这些原因,一般备份/恢复时都把export/import的方式做为辅助备份/恢复方式,对一些重要的表进行二级保护。这种备份方式也称为“逻辑备份”方式,当某些重要的表被意外删除时可进行逻辑import恢复。
而对于整个数据库的日常备份/恢复,需要采用“物理备份”方式,即以相当于copy数据文件的方式进行备份,恢复时可以快速以相当于copy的方式将备份的数据copy回来。一般物理备份/恢复都采用Oracle RMAN工具来进行。
下面是“逻辑备份”与“物理备份”在数据库故障时的恢复比较:
1. Oracle逻辑错误造成无法启动
逻辑恢复: 重新create database及各tablespace,import。可恢复到上次export的数据
物理恢复: 将所有datafile copy回来,并利用archivelog将数据库recover到故障前的状态
2. 某一个datafile故障或丢失
逻辑恢复: 重新create database及各tablespace,import。可恢复到上次export的数据
物理恢复: 将该datafile copy回来
3. 某一个tablespace故障
逻辑恢复: 重新create database及各tablespace,import。可恢复到上次export的数据
物理恢复: 将该tablespace copy回来
4. 意外drop table
逻辑恢复: Import 该table
物理恢复: 将备份恢复到另一服务器上,export该table,在原数据库中import
5. 意外drop user
逻辑恢复: Import 该user
物理恢复: 将备份恢复到另一服务器上,export该user,在原数据库中import
6. 意外drop tablespace
逻辑恢复: 情况较复杂,恢复易造成数据库表之间的参照完整性被破坏。在此不做分析
物理恢复: 情况较复杂,恢复易造成数据库表之间的参照完整性被破坏。在此不做分析