首先写下这篇文章只是想对最近对于oracle数据库备份恢复的一个总结,也可以以后作为复习的参考资料,若有错误,留待日后修改,在此对文章内容之正确性不做保证,仅供参考!!
备份之目地在于数据库总有奔溃的一天,没有有效的备份只是在等待那天的到来而已,还有这次只是讨论数据库层次的备份,现假定主机之操作系统数据安全。
首先作为生产数据库应该是处于归档模式工作的,可以通过
Select log_mode from v$database 查询
将数据库至于archivelog模式
Alter database archivelog
首先熟悉下数据库归档模式的概念问题
Oracle数据库在用户之行dml语句之后,并没有马上将修改写入到数据库之中,原因是由于存储结构的原因,需要写入的数据库可能位于分布在无序的存储空间之中,受限于i/o设备的自身特性,这些如果实时写入效率不高,会成为整个数据库性能的瓶颈所在,因此oracle采取先将数据写入联机重做日志文件之中,在联机重做日志文件满足一定条件的时候写入数据库块之中,有次产生了一个问题,要想保存所有的用户操作,只有保存所有的联机重做日志文件,而这oracle采用了归档重做日志文件来实现,这也正是数据库归档模式的意义之所在,oracle在联机重做日志文件(online redologs)写满之后会将将要覆盖的日志文件写入归档重做日志文件(archivelogs)之中,而online redologs和archivelogs是数据库恢复的基础之所在。
有次还必须提到撤销数据文件,默认是undo表空间中的数据文件,撤销表空间的大小关乎闪回查询。
怎么说呢?备份的概念其实很宽泛,在我看来很多方面都是属于备份的范畴,备份的作业其实就是数据恢复,保证数据不丢失而已,
数据库的闪回功能,主要有闪回查询,版本查询,闪回表,闪回数据库,数据库的回收站结构
闪回查询可以用来实现对用户误操作的恢复,一般都是可以闪回到一个scn号或者时间戳的,时间戳对应相应的scn号,
Select current_scn from v$database
Select dbms_flashback.get_system_change_number from dual
查询scn对应时间戳的视图
Select * from smon_scn_time
Select to_char(scn_to_timestamp(scn),’YYYY-MM-DD’) from dual
Select timestamp_to_scn(systimestamp) from dual
闪回查询:
Select * from table as of scn scnnum
Select * from table as of timestamp sysdate-5/1440(5分钟)
闪回版本查询:
Version query提供多个伪列
Versions_startscn Versions_endscn
versions_xid(这个可以用来确定对应事务id)
versions_starttimestamp versions_operation
select Versions_startscn, Versions_endscn , versions_xid
from table versions between scn scnnum1 and scnnum2
闪回事务查询:
Flashback_transaction_query视图保存各个表dml操作的信息
小节:闪回查询,闪回版本查询,闪回事务查询依靠的都是undo数据,需要配置的参数undo_management=auto
Undo_retention 决定撤销数据保存的时间,主要依靠撤销表空间的大小来决定,需要保证数据库尽量不要出现1555错误。
Alter tablespace undo_tablespacename retention guarantee 可以强制保证undo数据保存Undo_retention设置的时间
闪回表查询:
1: 依靠recyclebin结构
Flashback table tablename to before drop
Select * from recyclebin/dba_recyclebin
2:依靠undo表空间结构
Flashback table tablename to scn scnnum
需要启用表的行移动功能
Alter table tablename enable row movement
闪回数据库
实现的基础是flashback logs,该日志记录数据库修改数据的前映像并保存在闪回恢复区中,一般的备份恢复实现的原理是备份数据文件+重做日志,实现数据库的还原恢复,而闪回数据库可以实现将数据库还原到过去的一个时间点
Alter database flashback on
Alter database force logging
Select force_logging,flashback_on from v$database
还有一个参数 db_flashback_retention_target 控制可以闪回数据的时间,若是db_flashback_retention_target的时间为1440,也就是一天,则闪回恢复区的大小为数据库的10%,
注意点:闪回数据库后可以实现两种方式打开数据库
Alter database open read only/open resetlogs
使用resetlogs选项会将闪回scn后产生的重做日志全部清空
使用read only可以将闪回后的数据库以只读方式打开,再次可以将误操作需要导出的表重新导出,然后重新打开数据库并使用recover恢复数据库到最新状态,再导入导出的表
使用rman实现数据库备份恢复
首先了解使用恢复管理器备份恢复的好处
其实备份是一个相当灵活的工作,只要能够达到数据库奔溃后能够恢复以及恢复时间保证,生产数据库性能的影响来综合考虑从而决定备份恢复策略。应该算是数据库管理最难和最重要的工作。
首先备份可以根据不同的划分标准有
一致备份和不一致备份
联机和脱机备份 冷备份和热备份 呵呵 其实他们的意思是一样的!!
在此主要介绍用户管理的备份和rman管理的备份
用户管理的备份主要是指使用操作系统命令实现手工操作的备份,当然使用rman也需要手工操作!!
还有一个问题就是数据库是否处于归档模式,若是数据库是处于非归档模式那就以为这你根本不在乎数据库的数据丢失问题,那样其实只需要拥有数据库备份文件,在奔溃后将数据库还原到备份的时间点即可,使用手工还原的步骤应该就是使用备份文件覆盖源文件即可,备份后的数据当然是丢失了,因为没有完整的重做日志文件,要是完整的归档都在也可是恢复
Rman还是oracle的主要备份工具
优点:增量备份 备份集 块检查 备份管理 备份恢复自动化 支持作业方式(调度程序+资源管理)
映像备份:支持表空间,数据库,数据文件
Rman target sys/password@orcl
Backup as copy database/tablespace tsname format
List backup of databse/tablespace tsname
数据文件的备份
通过dba_data_files v$tablespace v$datafile查询数据文件对用表空间,数据文件路径以及file_id
Backup datafile ‘’/n
List backup of datafile n
控制文件的备份
Backup current controlfile
Backup database include current controlfile
Backup spfile//备份参数文件
归档文件的备份
Backup archivelog all
Backup database plus archivelog;
Rman的备份设置
备份策略的设置 基于时间以及冗余度的策略
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
CONFIGURE RETENTION POLICY TO redundancy n
备份集优化
CONFIGURE BACKUP OPTIMIZATION ON;
备份设备
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
自动备份控制文件和参数文件,默认为off
CONFIGURE CONTROLFILE AUTOBACKUP ON;
磁盘备份生成一份备份集
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
有关备份集加密以及加密算法
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
备份选项还包括:备份标签,通道分配,备份片段大小
还有必须要说明的是恢复目录的设置的问题,恢复目录是用来保存rman备份信息的数据库,不能放在目标数据库中,在另外一篇文章中讲到过恢复目录设置过程。
若是只是管理很少的数据库,只要做好控制文件的多重备份和冗余,可以不必使用恢复目录
Ps:还有一个问题就是
Alter system switch logfile;//重做日志组写入变换
Alter system archive log current;//重做日志归档
Backup archivelog all;//备份归档日志
Commit;//将日志缓冲区中内容写入重做日志
Checkpoint ;//将脏缓冲区快全部写入redo日志中
Lgwr 负责写入redo日志
Ckpt 负责归档redo日志
Dbwn 负责写入脏块
个人认为控制文件应该实现多重复用
Alter system set controlfile=’’;
联机redo日志应该创建多个分组
每组实现至少两个成员,并将每组的一个成员放在一个磁盘路径下,以免磁盘损坏,时刻想着不要将所有鸡蛋放在一个篮子里,重组日志应该放在i/o速度较快的磁盘上 ,避免成为性能瓶颈,oracle工作原理是事务会等待到redo信息写入到日志中才会执行完成。
归档日志同样应该多路复用,并备份一份归档!
Set newname 和switch命令还需要慢慢研究,还有一些备份路径文件名设置的问题暂时还不清楚。data guard dumplicate rac比较高深慢慢学习了
PS:data dump和数据库迁移
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24890594/viewspace-677733/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24890594/viewspace-677733/