Oracle归档模式及归档日志的操作

在实际应用中,我们需要实现对数据的备份,其实现方式主要有冷备份和热备份两种。现在我们主要讨论热备份的具体操作。热备份也称为联机备份,在数据库的存档模式下进行备份。oracel数据库默认存档模式为关闭状态,要实现数据的热备份,需要改变数据库的存档模式,将其打开。并且需要注意的是数据库的存档模式的操作需要在MOUNT实例中进行,且数据库不能处于OPEN状态。
另外一实操篇:https://www.cnblogs.com/itcui/p/15528423.html

归档模式及归档日志基本概念:

1.1 为什么要给Oracle做归档操作

Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更新数据等,对这些操作都会记录在联机重做日志里。

当ORACLE数据库运行在ARCHIVELOG(归档模式)模式时,所有的事务重做日志都将保存.这意味着对数据库进行的所有事务都留有一个备份,尽管重做日志以循环方式工作,但在一个重做日志被覆盖前均将为其建立一个副本.在重做日志文件复制完成之前,ORACLE数据库将停止一切新的操作,在旧的事务记录完成之前ORACLE不对其进行覆盖.有了所有事务的副本,数据库就可以从所有类型的失败中恢复,包括用户错误或磁盘崩溃.这是一种最安全的数据库工作方式。在实际开发中,归档模式是符合开发的,归档模式可以提高Oracle数据库的可恢复性,生产数据库都应该运行在此模式下,数据库使用归档方式运行时才可以进行灾难性恢复。

1.2 归档日志模式和非归档日志模式的区别:

非归档模式只能做冷备份,并且恢复时只能做完全备份.最近一次完全备份到系统出错期间的数据不能恢复.

归档模式可以做热备份,并且可以做增量备份,可以做部分恢复.

1.3 什么是归档日志

归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换式,后台进程ARCH会将重做日志的内容保存到归档日志中.当数据库出现介质失败时,使用数据文件备份,归档日志和重做日志可以完全恢复数据库。

Linux系统开启归档模式

使用ssh登录到Linux系统:

2.1 切换到oracle用户,然后使用sqlplus /nolog登录到oracle数据上:

su -oracle

sqlplus /nolog

 

2.2 使用oracle系统管理员sysdba登录到数据库:

conn /as sysdba

 

2.3 查看当前oracle的模式:

select log_mode from v$database;

如果当前模式为NOARCHIVELOG,就说明没有开启归档模式

 

2.4 关闭数据库,启动到mount状态:

shutdown immediate;

startup mount;

 

2.5 修改数据库为归档模式

alter database archivelog; (此处的分号不可以省略)

(如果是归档模式改为非归档,则执行: alter database noarchivelog;)

 

2.6 启动数据库:

alter database open;

2.7 再次验证:

执行select log_mode from v$database;

可查看到oracle已经修改为归档模式了

 

Windows开启归档模式

3.1 打开sqlplus工具:

sqlplus工具路径:F:\Oracle\product\11.2.0\dbhome_1\BIN中的sqlplus.exe

双击打开即可。(或者cmd到)

3.2 登录到Oracle数据库:

第一种方式:输入conn /as sysdba回车后提示需要输入口令,此时不必输入口令直接回车即可。

 

第二种方式:输入/as sysdba即可

 

3.3 查看当前oracle的模式:

select log_mode from v$database;(此处的分号不可省略)

如果当前模式为NOARCHIVELOG,就说明没有开启归档模式

 

3.4 关闭数据库,启动到mount状态:

shutdown immediate

startup mount

 

3.5 修改数据库为归档模式

alter database archivelog;(此处的分号不可以省略,如果不加分号会提示“2”,并不会执行数据库修改)

(如果是归档模式改为非归档,则执行: alter database noarchivelog;)

 

3.6 启动数据库:

alter database open;(此处的分号不可以省略,如果不加分号会提示“2”,并不会执行数据库修改)

 

3.7 再次验证:

执行select log_mode from v$database;

可查看到oracle已经修改为归档模式了

 

归档日志的查看及删除:

4.1 归档日志的查询及日志空间增加:

4.1.1 归档日志的查询

SQLPlus执行conn /as sysdba去查看,也可以只直接在PLSQL中查询:

执行:

select * from v$flash_recovery_area_usage;

ARCHIVED LOG行的percent_space_used 表示归档日志占用空间的百分比:

如果 ARCHIVED LOG 超过90% oracle随时有宕机的危险。

4.1.2  增大归档日志空间

该操作需要在SQLPlus中进行:

alter system set db_recovery_file_dest_size=20G;

4.2 删除归档日志释放磁盘空间

删除归档日志需要进入RMAN工具才可操作,RMAN 是Oracle数据库软件自带的备份恢复工具,一种是类似于DOS,通过键盘操作的 命令行方式。

4.2.1 .进入RMAN工具

  1. CMD输入RMAN,如果进不去,提示不是内部或外部命令,则进入数据库bin目录再执行RMAN,如下图

   2.进入RMAN连接数据的两种方法:

(1)可以按照第一点CMD进去先启动RMAN,然后再通过CONNECT命令来连接目标数据库

(2)先指定要连接的目标数据库的实例名“SET ORACLE_ID=实例名”。如果本地库只有一个实例并已经设置了ORACLE_SID环境变量,则不需要再指定ORACLE_SID。RMAN会自动连接到默认实例。如图,再执行RMAN TARGET/

 

   3.需要注意,Linux/UNIX 环境下设置操作系统环境变量应使用export命令,另外ORACLE_SID必须为大写。例如:

 

4.2.2 删除归档日志

  1. 先查看归档日志状态:

RMAN>list archivelog all;

  2.手工删除归档日志文件(删除7天前的所有归档日志)

RMAN>DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

说明:
 SYSDATA-7,表明当前的系统时间7天前,before关键字表示在7天前的归档日志,如果使用了闪回功能,也会删除闪回的数据。 
同样道理,也可以删除从7天前到现在的全部日志,不过这个命令要考虑清楚,做完这个删除,最好马上进行全备份数据库。

  3.退出rman

RMAN> exit

4.3 Windows定时删除归档日志

4.3.1 创建一个删除归档日志的脚本(delete_arch.txt):

connect target  /

run{

    crosscheck archivelog all;

    DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

    delete expired archivelog all;

}

注:如果数据库为单实例数据库直接用“connect target /”连接数据库,如果数据为多实例数据库,需指定特定实例及用户:connect target sys/oracle@hrst即脚本格式为:

connect target  sys/oracle@hrst

run{

    crosscheck archivelog all;

    DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

    delete expired archivelog all;

}

其中DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; //删除七天前的归档日志

4.3.2 创建批处理任务(delete_archive.bat)

rman cmdfile=C:\Users\Tanr\Desktop\定期删除归档日志\delete_arch.txt

当由于电脑系统问题,必须要在Oracle的bin目录才能执行RMAN时,可以这种写法:

F:

cd ..\

cd F:\Oracle\product\11.2.0\dbhome_1\BIN

rman cmdfile=C:\Users\Tanr\Desktop\定期删除归档日志\delete_arch.txt

4.3.3 创建一个windows任务定时调用批处理任务(delete_archive.bat)

开始 => 所有程序 => 附件 => 系统工具 => 任务计划

新建个任务计划了,然后根据要求配置下即可。

一般情况计划任务可设置一周执行一次,没有必要设置每天都执行。

原文地址:https://www.cnblogs.com/itcui/p/15528423.html