解释归档和非归档模式之间的不同和它们各自的优缺点?
答:归档模式是指可以备份所有的数据库transactions并恢复到任意一个时间点。
非归档模式则相反,不能恢复到任意一个时间点。
但是非归档模式可以带来数据库性能上的少许提高。
记忆方式:归档模式>热备份>恢复任意时间点>性能少许下降
非归档模式>冷备份>恢复完全备份>性能少许提高
一。查看oracle数据库是否为归档模式:
- 1.select name,log_mode from v$database;
- NAME LOG_MODE
- ------------------ ------------------------
- QUERY NOARCHIVELOG
- 2.使用ARCHIVE LOG LIST 命令
- Database log mode No Archive Mode
- Automatic archival Disabled
- Archive destination /data/oracle/product/10.2.0/db_1//dbs/arch
- Oldest online log sequence 739
- Current log sequence 741
二。什么是Oracle归档模式?
Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更新数据等,对这些操作都会记录在联机重做日志里。一般数据库至少要有2个联机重做日志组。当一个联机重做日志组被写满的时候,就会发生日志切换,这时联机重做日志组2成为当前使用的日志,当联机重做日志组2写满的时候,又会发生日志切换,去写联机重做日志组1,就这样反复进行。
如果数据库处于非归档模式,联机日志在切换时就会丢弃. 而在归档模式下,当发生日志切换的时候,被切换的日志会进行归档。比如,当前在使用联机重做日志1,当1写满的时候,发生日志切换,开始写联机重做日志2,这时联机重做日志1的内容会被拷贝到另外一个指定的目录下。这个目录叫做归档目录,拷贝的文件叫归档重做日志。
数据库使用归档方式运行时才可以进行灾难性恢复。
1.归档日志模式和非归档日志模式的区别
非归档模式只能做冷备份,并且恢复时只能做完全备份.最近一次完全备份到系统出错期间的数据不能恢复.
归档模式可以做热备份,并且可以做增量备份,可以做部分恢复.
用ARCHIVE LOG LIST 可以查看期模式状态时归档模式还是非归档模式
===============================================================
三。配置数据库的归档模式
改变非归档模式到归档模式:
Sql代码
- 1)SQL>SHUTDOWN NORMAL/IMMEDIATE; 先down下数据
- 2)SQL>START MOUNT; 启动数据库实例到mount状态,但不要打开
- 3)SQL>ALTER DATABASE ARCHIVELOG; 设置数据库为归档日志模式
- 4)SQL>ALTER DATABASE OPEN; 打开数据库
- 5)SQL>archive log list; 确认数据库现在处于归档日志模式
- 6)SQL>archive log all; 将这个时间点的redo logs归档
[sql] view plain copy
- 1)SQL>SHUTDOWN NORMAL/IMMEDIATE; 先down下数据
- 2)SQL>START MOUNT; 启动数据库实例到mount状态,但不要打开
- 3)SQL>ALTER DATABASE ARCHIVELOG; 设置数据库为归档日志模式
- 4)SQL>ALTER DATABASE OPEN; 打开数据库
- 5)SQL>archive log list; ��Ц��Ȫ,��Ц��� 确认数据库现在处于归档日志模式
- 6)SQL>archive log all; 将这个时间点的redo logs归档
5)SQL>做一次完全备份,因为非归档日志模式下产生的备份日志对于归档模式已经不可用了.这一步非非常重要!
Sql代码
- SQL>alter tablespace users begin bacup;
[sql] view plain copy
- SQL>alter tablespace users begin bacup;
====================
如果停止归档模式就用
alter database noarchivelog
========================
改变归档模式到非归档模式:
Sql代码
- 1)SQL>SHUTDOWN NORMAL/IMMEDIATE;
- 2)SQL>START MOUNT;
- 3)SQL>ALTER DATABASE NOARCHIVELOG;
- 4)SQL>ALTER DATABASE OPEN;
[sql] view plain copy
- 1)SQL>SHUTDOWN NORMAL/IMMEDIATE;
- 2)SQL>START MOUNT;
- 3)SQL>ALTER DATABASE NOARCHIVELOG;
- 4)SQL>ALTER DATABASE OPEN;
3.启用自动归档: LOG_ARCHIVE_START=TRUE
归档模式下,日志文件组不允许被覆盖(重写),当日志文件写满之后,如果没有进行手动归档,那么系统将挂起,知道归档完成为止.
这时只能读而不能写.
运行过程中关闭和重启归档日志进程
SQL>ARCHIVE LOG STOP
SQL>ARCHIVE LOG START
4.手动归档: LOG_ARCHIVE_START=FALSE
归档当前日志文件
SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;
归档序号为052的日志文件
SQL>ALTER SYSTEM ARCHIVE LOG SEQUENCE 052;
归档所有日志文件
SQL>ALTER SYSTEM ARCHIVE LOG ALL;
改变归档日志目标
SQL>ALTER SYSTEM ARCHIVE LOG CURRENT TO '&PATH';
5.归档模式和非归档模式的转换
第4步的逆过程.
6.配置多个归档进程
Q:什么时候需要使用多个归档进程?
A:如果归档过程会消耗大量的时间,那么可以启动多个归档进程,这是个动态参数,可以用ALTER SYSTEM动态修改.
SQL>ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=10;
Oracle9i中最多可以指定10个归档进程
与归档进程有关的动态性能视图
v$bgprocess,v$archive_processes
7.配置归档目标,多归档目标,远程归档目标,归档日志格式
归档目标 LOG_ARCHIVE_DEST_n
本地归档目标:
SQL>LOG_ARCHIVE_DEST_1 = "LOCATION=D:ORACLEARCHIVEDLOG";
远程归档目标:
SQL>LOG_ARCHIVE_DEST_2 = "SERVICE=STANDBY_DB1";
强制的归档目标,如果出错,600秒后重试:
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_4 = "LOCATION=E:ORACLEARCHIVEDLOG MANDATORY REOPEN=600";
可选的归档目标,如果出错,放弃归档:
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_3 = "LOCATION=E:ORACLEARCHIVEDLOG OPTIONAL";
归档目标状态:关闭归档目标和打开归档目标
关闭归档目标1
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1 = DEFER
打开归档目标2
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2 = ENABLE
归档日志格式
LOG_ARCHIVE_FORMAT
8.获取归档日志信息
V$ARCHVIED_LOG
V$ARCHVIE_DEST
V$LOG_HISTORY
V$DATABASE
V$ARCHIVE_PROCESSES
ARCHIVE LOG LIST;
oracle11g RAC 启动归档模式
根据客户要求,需要将归档日志存放在ASM上。因此需要在ASM建归档路径
ASMCMD> mkdir arch
ASMCMD> cd arch
ASMCMD> pwd
+data1/kdcs/arch
修改归档路径参数
SQL> alter system set log_archive_dest_1='location=+data1/kdcs/arch' scope=spfile sid='*';
System altered.
关闭数据库,全部节点都要关闭
[grid@zhcs-db1 ~]$ srvctl stop database -d kdcs
检查数据库关闭后状态
[grid@zhcs-db1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA1.dg
ONLINE ONLINE zhcs-db1
ONLINE ONLINE zhcs-db2
ora.LISTENER.lsnr
ONLINE ONLINE zhcs-db1
ONLINE ONLINE zhcs-db2
ora.OCR_DISK.dg
ONLINE ONLINE zhcs-db1
ONLINE ONLINE zhcs-db2
ora.asm
ONLINE ONLINE zhcs-db1 Started
ONLINE ONLINE zhcs-db2 Started
ora.gsd
OFFLINE OFFLINE zhcs-db1
OFFLINE OFFLINE zhcs-db2
ora.net1.network
ONLINE ONLINE zhcs-db1
ONLINE ONLINE zhcs-db2
ora.ons
ONLINE ONLINE zhcs-db1
ONLINE ONLINE zhcs-db2
ora.registry.acfs
ONLINE ONLINE zhcs-db1
ONLINE ONLINE zhcs-db2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE zhcs-db1
ora.cvu
1 OFFLINE OFFLINE
ora.kdcs.db
1 OFFLINE OFFLINE Instance Shutdown
2 OFFLINE OFFLINE Instance Shutdown
ora.kdcs.ser_scanip.svc
1 OFFLINE OFFLINE
2 OFFLINE OFFLINE
ora.oc4j
1 ONLINE ONLINE zhcs-db2
ora.scan1.vip
1 ONLINE ONLINE zhcs-db1
ora.zhcs-db1.vip
1 ONLINE ONLINE zhcs-db1
ora.zhcs-db2.vip
1 ONLINE ONLINE zhcs-db2
将一个节点数据库启动到mount状态
[grid@zhcs-db1 ~]$ srvctl start instance -d kdcs -i kdcs1 -o mount
修改数据库的归档模式并启动数据库
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 +DATA1/kdcs/arch
Oldest online log sequence 86
Next log sequence to archive 87
Current log sequence 87
SQL>
启动2节点数据库
[grid@zhcs-db1 ~]$ srvctl start instance -d kdcs -i kdcs2
检查集群状态
[grid@zhcs-db1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA1.dg
ONLINE ONLINE zhcs-db1
ONLINE ONLINE zhcs-db2
ora.LISTENER.lsnr
ONLINE ONLINE zhcs-db1
ONLINE ONLINE zhcs-db2
ora.OCR_DISK.dg
ONLINE ONLINE zhcs-db1
ONLINE ONLINE zhcs-db2
ora.asm
ONLINE ONLINE zhcs-db1 Started
ONLINE ONLINE zhcs-db2 Started
ora.gsd
OFFLINE OFFLINE zhcs-db1
OFFLINE OFFLINE zhcs-db2
ora.net1.network
ONLINE ONLINE zhcs-db1
ONLINE ONLINE zhcs-db2
ora.ons
ONLINE ONLINE zhcs-db1
ONLINE ONLINE zhcs-db2
ora.registry.acfs
ONLINE ONLINE zhcs-db1
ONLINE ONLINE zhcs-db2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE zhcs-db1
ora.cvu
1 OFFLINE OFFLINE
ora.kdcs.db
1 ONLINE ONLINE zhcs-db1 Open
2 ONLINE ONLINE zhcs-db2 Open
ora.kdcs.ser_scanip.svc
1 ONLINE ONLINE zhcs-db1
2 ONLINE ONLINE zhcs-db2
ora.oc4j
1 ONLINE ONLINE zhcs-db2
ora.scan1.vip
1 ONLINE ONLINE zhcs-db1
ora.zhcs-db1.vip
1 ONLINE ONLINE zhcs-db1
ora.zhcs-db2.vip
1 ONLINE ONLINE zhcs-db2
[grid@zhcs-db1 ~]$
RMAN备份及恢复归档日志的语法
一.备份所有归档日志文件
RMAN> backup archivelog all delete input;
二: restore archivelog 的各种选项
1.恢复全部归档日志文件
RMAN> restore archivelog all;
2.只恢复5到8这四个归档日志文件
RMAN> restore archivelog from logseq 5 until logseq 8;
3.恢复从第5个归档日志起
RMAN> restore archivelog from logseq 5;
4.恢复7天内的归档日志
RMAN> restore archivelog from time 'sysdate-7';
5. sequence between 写法
RMAN> restore archivelog sequence between 1 and 3;
6.恢复到哪个日志文件为止
RMAN> restore archivelog until logseq 3;
7.从第五个日志开始恢复
RMAN> restore archivelog low logseq 5;
8.到第5个日志为止
RMAN> restore archivelog high logseq 5;
三:如果想改变恢复到另外路径下 则可用下面语句
set archivelog destination to 'd:\backup';
RMAN> run
2> {allocate channel ci type disk;
3> set archivelog destination to 'd:\backup';
4> restore archivelog all;
5> release channel ci;
6> }
【MOS】配置RMAN清除已应用到备库的归档日志 (文档 ID 1577382.1)
文档内容
目标
解决方案
参考
Oracle Database - Enterprise Edition - 版本 10.2.0.1 到 10.2.0.5 [发行版 10.2]
本文档所含信息适用于所有平台
我们需要利用RMAN自动从FRA清除已经应用到备库的归档日志。
1) Bug 6216036:
在10g中,使用CONFIGURE命令配置的归档日志删除策略
仅适用于自动删除闪回恢复区的归档日志。
其他的删除机制,如DELETE ARCHIVELOG或DELETE INPUT不遵守这个配置。
2)APPLIED ON STANDBY - 启用闪回恢复区删除已应用在属性为mandatory的备库的归档日志。
更多信息请查看 Oracle Data Guard Concepts and Administration
http://docs.oracle.com/cd/B19306_01/backup.102/b14194/rcmsynta015.htm#sthref289
在11g此限制已解除。
解决方案
DataGuard的配置中,当数据库满足下列条件时,FRA下的归档日志将被自动清除,。如果您需要在主库清除,将其设置在主库。
1) 11g之前,如果不使用mandatory ARCHIVELOG目标,数据库(主库和备库)必须更改下面的参数并重新启动:
SQL> alter system set "_log_deletion_policy"='ALL' scope=spfile;
2) 在RMAN中配置下列参数(主库和备库):
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
警告:对于10g,如果设置了APPLIED ON STANDBY, 即使FRA 中的文件没有备份也会被清除。
11g: 从11g 开始,我们对归档日志删除策略的配置进行了增强,包含了 APPLIED ON [ALL] STANDBY [BACKED UP n TIMES TO DEVICE TYPE ] 选项。该选项确认归档日志已经被应用,并且在主库进行过备份后才可以被清除。
3) 归档日志必须已应用到备库。运行下面的查询列出所有已应用到备库的归档日志:
select a.thread#, a.sequence#, a.applied
from v$archived_log a, v$database d
where a.activation# = d.activation#
and a.applied='YES'
/
4) FRA有空间压力
当归档日志从FRA自动删除,你会看到数据库的alert.log报出以下信息:
Sat Jun 18 01:00:32 2011
Deleted Oracle managed file /opt/app/oracle/FRA/ORA102/archivelog/2011_05_30/o1_mf_1_151_6y71q675_.arc
Deleted Oracle managed file /opt/app/oracle/FRA/ORA102/archivelog/2011_05_31/o1_mf_1_151_6y87pzg4_.arc
参考
NOTE:331924.1 - RMAN backups in Max Performance/Max Availability Data Guard Environment
BUG:6216036 - RMAN+DG ARCHIVELOG DELETION POLICY APPLIED ON STANDBY NOT RESPECTED
NOTE:740322.1 - RMAN Archived Redo Logs Are Deleted Before Being Applied at Standby Database
遇到ORA-00257的错误,需要做的就是删除归档日志,释放空间。需要强调的是:如果数据库拥有物理备份机制,请先备份归档日志,再做删除操作。以下是无备份机制的步骤处理:
1、 在操作系统bash下,声明操作数据库实例:
orcl1:/home/oracle@db1>export ORACLE_SID=orcl1
2、 运行RMAN命令:
orcl1:/home/oracle@db1>rman target /
3、 检查归档日志状态
RMAN>crosscheck archivelog all;
4、 删除无效归档日志
RMAN>delete noprompt expired archivelog all;
5、 执行rman命令删除归档日志(7天前):
RMAN>delete archivelog all completed before 'sysdate-7';
以下是有备份机制的处理步骤:
1、 在操作系统bash下,声明操作数据库实例:
orcl1:/home/oracle@db1>export ORACLE_SID=orcl1
2、 运行RMAN命令:
orcl1:/home/oracle@db1>rman target /
3、 检查归档日志状态
RMAN>crosscheck archivelog all;
4、 删除无效归档日志
RMAN>delete noprompt expired archivelog all;
5、 执行备份归档日志并删除操作:
RMAN>backup archivelog all format '$ORA_BACKUP_LOCATION/ARCHBAK_%d_%T_%s' tag arch_bak delete all input;
注意:$ORA_BACKUP_LOCATION变量为归档日志备份路径,ARCHBAK_%d_%T_%s为归档日志备份文件名格式。请根据实际情况进行具体设置。