Oracle归档模式及归档日志的操作
在实际应用中,我们需要实现对数据的备份,其实现方式主要有冷备份和热备份两种。现在我们主要讨论热备份的具体操作。热备份也称为联机备份,在数据库的存档模式下进行备份。oracel数据库默认存档模式为关闭状态,要实现数据的热备份,需要改变数据库的存档模式,将其打开。并且需要注意的是数据库的存档模式的操作需要在MOUNT实例中进行,且数据库不能处于OPEN状态。
另外一实操篇:https://www.cnblogs.com/itcui/p/15528423.html
1 归档模式及归档日志基本概念:
1.1 为什么要给Oracle做归档操作:
Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更新数据等,对这些操作都会记录在联机重做日志里。
当ORACLE数据库运行在ARCHIVELOG(归档模式)模式时,所有的事务重做日志都将保存.这意味着对数据库进行的所有事务都留有一个备份,尽管重做日志以循环方式工作,但在一个重做日志被覆盖前均将为其建立一个副本.在重做日志文件复制完成之前,ORACLE数据库将停止一切新的操作,在旧的事务记录完成之前ORACLE不对其进行覆盖.有了所有事务的副本,数据库就可以从所有类型的失败中恢复,包括用户错误或磁盘崩溃.这是一种最安全的数据库工作方式。在实际开发中,归档模式是符合开发的,归档模式可以提高Oracle数据库的可恢复性,生产数据库都应该运行在此模式下,数据库使用归档方式运行时才可以进行灾难性恢复。
1.2 归档日志模式和非归档日志模式的区别:
非归档模式只能做冷备份,并且恢复时只能做完全备份.最近一次完全备份到系统出错期间的数据不能恢复.
1.3 什么是归档日志:
归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换式,后台进程ARCH会将重做日志的内容保存到归档日志中.当数据库出现介质失败时,使用数据文件备份,归档日志和重做日志可以完全恢复数据库。
2 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已经修改为归档模式了
3 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 归档日志的查看及删除:
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工具
- 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 删除归档日志
- 先查看归档日志状态:
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)
开始 => 所有程序 => 附件 => 系统工具 => 任务计划
新建个任务计划了,然后根据要求配置下即可。
一般情况计划任务可设置一周执行一次,没有必要设置每天都执行。