第16章备份与恢复数据库备份模式16.2数据库备份概述16.1备份数据库16.3数据库手动恢复16.4本章内容采取各种措施来保证数据库的安全性和完整性,但硬件故障、软件错误、病毒、误操作、故意破坏,仍有可能发生,影响数据的正确性,甚至会破坏数据库使数据部分或全部丢失。提供了把数据库从错误状态恢复到某一正确状态的功能——恢复(以备份为基础)16.1数据库备份概述1.备份和恢复:指为保护数据库免于数据破坏或在发生数据破坏后进行数据重建的各种策略和步骤。备份:是指对重建数据库的数据所建立的副本。恢复:指利用备份的数据进行重建数据库的过程。2.备份的类型逻辑备份:数据的备份(导出Exp)导出数据库对象——.dmp文件物理备份:将物理文件的副本存放在备份设备上联机备份(热备份)归档备份脱机备份(冷备份)非归档备份注意:物理备份:是任何一种备份和恢复的基础逻辑备份:是物理备份的补充单靠逻辑备份,无法对数据库进行完全恢复。Oracle数据库的备份包括以下两种类型:备份物理备份逻辑备份物理备份是对数据库的操作系统物理文件(如数据文件、控制文件和日志文件等)的备份逻辑备份是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份16.2数据库备份模式归档模式:Archivelog非归档模式:NoArchivelog查看数据库的工作模式:Selectname,created,log_modefromv$database;ORACLE数据库两种运行方式•归档方式(ARCHIVELOG),归档方式的目的是当数据库发生故障时最大限度恢复数据库,可以保证不丢失任何已提交的数据。•不归档方式(NOARCHIVELOG),只能恢复数据库到最近的回收点(冷备份或是逻辑备份)。LGWRNOARCHIVELOGRedoLog1RedoLog2LGWRARCHARCHIVELOGRedoLog2RedoLog1启动Oracle自动归档P386(1)shutdownimmediate;//立即关闭(2)startupmount;//启动例程,装载(3)alterdatabasearchievelog;//设为归档(4)alterdatabaseopen;//打开数据库(5)archieveloglist;//显示归档列表16.3备份数据库(一)物理备份备份:数据文件.dbf控制文件.ctl日志文件.log1.脱机备份(无成本复制copypaste)在数据库关闭后,备份物理文件。脱机备份的步骤(1)以DBA用户登录,列出各类文件SQLselectnamefromv$datafile;SQLselectnamefromv$controlfile;SQLselectmemberfromv$logfile;(2)以DBA用户关闭数据库SQLconnect/assysdbaSQLshutdownimmediate;(3)复制各个文件到硬盘上,“控制文件”互为镜像,复制一个即可。SQLhostcopyD:\oracle\product\10.1.0\oradata\*.dbfE:\backup\SQLhostcopyD:\oracle\product\10.1.0\oradata\*.ctlE:\backup\SQLhostcopyD:\oracle\product\10.1.0\oradata\*.logE:\backup\(4)启动例程打开数据库SQLconnect/assysdbaSQLstartup2.联机备份24*7模式在数据库运行的情况下,采用“归档方式”DBA安排在数据库不使用或使用较低情况下进行步骤:(1)以DBA登录,确定表空间所包含的数据文件SQLconnect/assysdbaSQLselectfile_namefromdba_data_filesWheretablespace_name=upper(‘users’);(2)设置表空间为备份模式SQLaltertablespaceusersbeginbackup;(3)复制数据文件SQLHostcopyD:\oracle\product\10.1.0\oradata\*.dbfE:\backup\(4)表空间返回正常模式SQLaltertablespaceusersendbackup;对控制文件进行联机备份SQLalterdatabasebackupcontrolfileto‘E:\backup\’;(二)逻辑备份导出和导入实用程序的特点有:•可以按时间保存表结构和数据•允许导出指定的表,并重新导入到新的数据库中•可以把数据库迁移到另外一台异构服务器上•在两个不同版本的Oracle数据库之间传输数据•在联机状态下进行备份和恢复•可以重新组织表的存储结构,减少链接及磁盘碎片1.Export导出(1)导出方式:表:导出一个指定的基本表(定义、数据、索引、约束)用户:属于一个用户的所有对象全数据库:数据库中所有的对象DBA用户:具有3种方式普通用户:具有表和用户2种方式(2)查看参数说明:exphelp=yes(3)3种方式导出实例表方式tables用户方式owner全数据库full(1)导出用户自身所拥有的表Expscott/tigertables=(name,emp)file=export1.dmp(2)当用户导出其他用户表时,具有DBA或Exp_full_database角色Expsystem/jq405tables=(scott.name,scott.emp)file=export2.dmp(3)用户只导出表结构,而不导出表中的数据Expscott/tigertables=(name,emp)file=export1.dmprows=n例题Inctype增量导出参数complete(默认)Cumulative(积累)——导出上次全导出后修改的表Increment(增量)——导出上次导出后修改过的表2.Import导入P392(1)参数说明C:\Imphelp=y(2)导入方式由导出方式决定,3种实例表方式tables用户方式fromuser、touser全数据库full=y16.4数据库手动恢复实例恢复:实例运行期间,出现故障,下次启动自动恢复,无须用户参与。介质恢复:对损坏的数据文件和控制文件进行修复。1.完全恢复将数据库恢复到失败点,丢失的所有数据都被恢复即:恢复到数据库损坏的时刻,使数据库恢复到最新状态适用于:归档方式将数据库自上次备份后至失败点之间连续的归档日志记录保存下来。1.完全恢复例题①登录Connectsystem/jq405assysdba②切换到非归档模式Shutdownimmediate;Startupmount;Alterdatabasenoarchivelog;Alterdatabaseopen;③关闭数据库,脱机备份整个库Shutdownimmediate;④启动数据库,在user中建表Startup;Createtablet_test(Opvarchar2(20),op_datedate)Tablespaceusers;Insertintot_testvalues(‘insert’,sysdate);Insertintot_testvalues(‘update’,sysdate);(1)NoArchivelog恢复P397⑤关闭数据库,删除数据文件user01.dbf⑥重启数据库,无法找到user01.dbf,出现错误Startup;⑦只将user01.dbf复制到数据库,出现错误无法使用单个备份文件恢复,必须使用所有的数据库文件⑧将所有数据文件复制到数据库,启动Startup;⑨查看:select*fromt_test;表不存在(2)Archivelog方式恢复P398①数据库在Archivelog模式②system表空间进行联机备份Altertablespacesystembeginbackup;Altertablespacesystemendbackup;③建表,插入数据④shutdown关闭数据库,并删除system01.dbf⑤startup打开库,无法找到数据文件⑥切换system为offline状态Alterdatabasedatafile‘D:\oracle\...\system01.dbf’offline;⑦将备份的system01.dbf复制到数据库文件,使用Recover命令进行恢复Recoverdatafile‘D:\oracle\...\system01.dbf’;⑧修改数据库为online,打开数据库Alterdatabasedatafile‘D:\oracle\...\system01.dbf’online;Alterdatabaseopen;⑨查看:select*fromt_test;2.不完全恢复使数据库恢复到过去某一状态3种类型:基于时间Untiltime基于更改Untilchange基于撤销Untilcancel执行不完全恢复:需要立即关闭数据库基于时间的不完全恢复P400①所有数据文件备份②删除“vendition.商品信息”表,对联机日志文件归档,并查看删除表的时间Selectto_char(sysdate,’dd-month-yyyyhh24:mi:ss’)DateFromdual;Altersystemswitchlogfile;//归档日志文件③shutdown断开用户,防止用户继续对数据库操作④对数据库文件进行脱机备份⑤从误操作前创建的备份中恢复受影响的数据文件。⑥使用RecoverDatabaseuntiltime’19-6月-201310:25:13’;⑦完成介质恢复后,打开数据库并重置日志文件。Alterdatabaseopenresetlogs;Selectcount(*)fromvendition.商品信息;例题数据库的备份与恢复是保证数据库安全运行的一项重要内容,也是数据库管理员的一项重要职责。在实际的应用中,数据库可能会遇到一些意外的破坏,导致数据库无法正常运行。数据库的一个备份就是数据库中数据的一份复件,该复件包括了数据库所有重要的组成部分,如控制文件、数据文件、日志文件等。当数据库因意外事故而无法正常运行时,就可以用该备份对数据进宪恢复,将意外损失降低到最小。小结