概述
Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入、删除、更新等,对这些操作都会记录在联机重做日志里。一般数据库至少要有2个联机重做日志组。如果数据库处于非归档模式,联机日志在切换时就会丢弃,而在归档模式下,当发生日志切换的时候,被切换的日志会进行归档。
归档模式和非归档模式的优缺点归档模式的优点
- 可以进行完全、不完全恢复:由于对数据库所做的全部改动都记录在日志文件中,如果发生硬盘故 障等导致数据文件丢失的话,则可以利用物理备份和归档日志完全恢复数据库,不会丢失任何数据。可以进行联机热备:所谓联机热备,就是在数据库运行状态下,对数据库进行备份。备份时用户对 数据库的使用不受任何影响。
- 可以实施 Data Guard:可以部署 1 个或多个备用数据库,从而最大限度地提供灾难保护手段。
- 可以实施 Stream:利用 Stream 技术,可以实现最简单的单向复制到复杂的双向复制、多向复制, 提供更加灵活的数据冗余方案。
- 表空间可以脱机:可以备份部分数据库,比如重要的表空间。
- 能够增量备份:只需做一次完全备份,以后只备份发生改变的数据,可以提高备份速度
- 更多的优化选项:随着 Oracle 版本升级,在联机热备方面不断有新的优化策略出现。
归档模式的缺点
- 需要更多的磁盘空间保存归档日志;
- DBA 会有更多的管理工作,包括维护归档空间、备份归档日志。
非归档模式的缺点
- 只能进行脱机备份,也就是所谓的“ 冷备份”,和联机备份的“ 热备份” 相对应,数据库必须完全 关闭后备份,在备份过程中数据库不可用。
- 必须备份整个数据库,不能只备份部分数据库。
- 不能增量备份,对于 TB 级数据库(VLDB) ,这是一个非常大的缺点。
- 只能部分恢复,如果数据文件丢失需要恢复,DBA 只能恢复最后一次的完全备份,而之后的所有 数据库改变全部丢失。
非归档模式的优点
- DBA 的管理工作减少,因为非归档模式不产生归档日志,因此 DBA 不用考虑对归档的管理;性能会有提升。
非归档模式不生成归档日志,从数据安全角度来说,这种模式缺点是主要的,而优点可以忽略不计。
一、单实例启用归档
1.1 oracle 9i
对于oracle 9i启用日志归档的方法如下:
- ALTER SYSTEM SET log_archive_start=TRUE SCOPE=spfile;
- ALTER SYSTEM SET log_archive_dest_1='location=/u01/oradata/MYSID/archive/' SCOPE=spfile;
- ALTER SYSTEM SET log_archive_format='arch_%t_%s.arc' SCOPE=spfile;
- SHUTDOWN IMMEDIATE;
- STARTUP MOUNT;
- ARCHIVE LOG START;
- ALTER DATABASE ARCHIVELOG;
- ALTER DATABASE OPEN;
1.2 oracle 10g及其以上版本
在oracle 10g中log_archive_start参数和archive log start命令被废弃。其方法如下:
- ALTER SYSTEM SET log_archive_dest_1='location=/u01/oradata/MYSID/archive/' SCOPE=spfile;
- ALTER SYSTEM SET log_archive_format='arch_%t_%s_%r.arc' SCOPE=spfile;
- SHUTDOWN IMMEDIATE;
- STARTUP MOUNT;
- ALTER DATABASE ARCHIVELOG;
- ALTER DATABASE OPEN;
二、RAC归档
由于ALTER DATABASE ARCHIVELOG仅当数据库以独占模式挂载时,才能执行该命令。这意味着必须先停止整个群集数据库,然后才能执行该操作。
2.1 oracle 9i
1、设置相关的存档参数
- ALTER SYSTEM SET log_archive_start = TRUE范围= spfile;
- ALTER SYSTEM SET log_archive_dest_1 ='location = / u01 / oradata / MYDB / archive /'SCOPE = spfile;
- ALTER SYSTEM SET log_archive_format ='arch_%t_%s.arc'SCOPE = spfile;
2、由于我们需要以独占模式挂载数据库,因此我们必须还更改以下参数
- ALTER SYSTEM SET cluster_database=FALSE SCOPE=spfile;
3、停止集群
- $ srvctl stop database -d MYDB
4、在群集关闭的情况下,我们可以连接到单个节点并发出以下命令。
- STARTUP MOUNT;
- ARCHIVE LOG START;
- ALTER DATABASE ARCHIVELOG;
- ALTER SYSTEM SET cluster_database=TRUE SCOPE=spfile;
- SHUTDOWN IMMEDIATE;
请注意,该CLUSTER_DATABASE参数已被重置为其原始值。由于数据文件和spfile在所有实例之间共享,因此该操作仅需要从单个节点执行。
5、再次启动集群数据库
- $ srvctl start database -d MYDB
当前设置将所有存档日志放置在同一目录中。这是可以接受的,因为线程(%t)是存档格式的一部分,可以防止实例之间的任何名称冲突。如果需要位于特定于节点的位置,LOG_ARCHIVE_DEST_1则可以为每个实例使用相关的SID前缀。
2.2 oracle 10gR1
如果LOG_ARCHIVE_DEST_n未设置参数,则已归档的重做日志将放置在FRA中。如果要手动指定其位置和文件名格式,可以按以下步骤进行操作。
1、设置归档相关参数
- ALTER SYSTEM SET log_archive_dest_1 ='location = / u01 / oradata / MYDB / archive /'SCOPE = spfile;
- ALTER SYSTEM SET log_archive_format ='arch_%t_%s_%r.arc'SCOPE = spfile;
2、由于我们需要以独占模式挂载数据库,因此我们还必须更改以下参数。
- ALTER SYSTEM SET cluster_database=FALSE SCOPE=spfile;
3、在群集关闭的情况下,我们可以连接到单个节点并发出以下命令。
- STARTUP MOUNT;
- ALTER DATABASE ARCHIVELOG;
- ALTER SYSTEM SET cluster_database=TRUE SCOPE=spfile;
- SHUTDOWN IMMEDIATE;
请注意,该CLUSTER_DATABASE参数已被重置为其原始值。由于数据文件和spfile在所有实例之间共享,因此该操作仅需要从单个节点执行。
4、启动集群数据库
- $ srvctl start database -d MYDB
2.3 oracle 10gR2
从10gR2开始,您不再需要CLUSTER_DATABASE在此过程中重置参数。
如果LOG_ARCHIVE_DEST_n未设置参数,则已归档的重做日志将放置在FRA中。如果要手动指定其位置和文件名格式,可以按以下步骤进行操作。
1、设置归档相关参数
- ALTER SYSTEM SET log_archive_dest_1 ='location = / u01 / oradata / MYDB / archive /'SCOPE = spfile;
- ALTER SYSTEM SET log_archive_format ='arch_%t_%s_%r.arc'SCOPE = spfile;
2、在命令行中,我们可以使用以下命令停止整个集群数据库并以装入模式启动它。
- $ srvctl stop database -d MYDB
- $ srvctl start database -d MYDB -o mount
一旦数据库处于mount模式可以用下面的命令启动归档
- sqlplus / as sysdba
- ALTER DATABASE ARCHIVELOG;
- EXIT;
由于数据文件和spfile在所有实例之间共享,因此该操作仅需要从单个节点执行。
3、停止并重新启动集群数据库
- $ srvctl stop database -d MYDB
- $ srvctl start database -d MYDB
2.4 oracle 11g
配置方法同oracle 10gR2
2.5 oracle 12c
配置方法同oracle 10gR2
三、总结
1、此文汇集了oracle各版本单机和集群启用归档的方法,以备工作中查询备用。