1、,朱华廷(9i OCP)2007-01,Oracle9i数据库专题培训 第二讲(备份和恢复),内 容,备份和恢复概述 相关的实例和存储结构 备份 恢复 Exp&Imp SQL*Loader 常见操作,1,Oracle基础培训,备份和恢复概述,备份和恢复概述,目的 保护数据库,避免因失败不可用。 增加失败平均间隔(MTBF Mean Time Between Failure) 减少重做平均时间(MTTR Mean Time To Recover) 数据丢失最小化 这便需要一种备份机制。如果没有备份,当数据库出现故障后,不可能恢复到错误前的状态,备份和恢复概述,故障种类 语句故障:不需要DBA干预
2、 发生情况 应用程序(存储过程)中的逻辑错误 向表中插入不合法数据 执行没有权限的操作 创建表时,超出表空间限额 向表中插入或修改数据,表空间已没有空间 Oracle的解决措施 Oracle或操作系统会返回错误号和错误信息,语句回滚,DBA或开发者可以通过返回的错误进行修正 用户进程故障:不需要DBA干预 发生情况 用户非法中断连接。例如用户关闭SQL*PLUS 会话非法中断。例如客户端重启 用户程序抛出地址异常,导致会话中断。如果应用程序没有捕获机制,会发生以上情况 Oracle解决措施 PMON诊断并清除非法中断的用户进程,DBA很少干预 PMON回滚事务,释放用户进程占用的资源和锁,备份
3、和恢复概述,故障种类(续) 用户错误:需要DBA干预 发生情况 用户误操作,清空表数据或删除表 Truncate/Drop 用户删除了表数据 Delete 用户提交了数据的修改,但发现有误 Update Commit Oracle解决措施 提供回滚机制,允许多版本存在,可使用闪回 提供日志机制,可进行恢复 实例故障:不需要DBA真正干预 发生情况 电源突然中断 服务器硬件损坏,服务器不能正常工作 五个关键背景进程之一发生错误(DBWn LGWR PMON SMON CKPT) Oracle解决措施 重启时,Oracle自动执行实例修复 SMON前滚后,然后执行事务回滚,备份和恢复概述,故障种类
4、(续) 介质故障:严重错误,需要DBA干预 发生情况 磁盘物理损伤 读写文件时出现物理故障 文件意外删除 解决措施 依赖于选择的备份方式,进行数据恢复。 网络故障,备份和恢复概述,选择备份策略 业务 操作 管理:资源 技术,Q&A,Oracle备份和恢复,2,相关的实例和存储结构,相关的实例和存储结构,Data Buffer Cache DataFiles DBWn Redo Log Buffer LGWR 重做日志 CKPT Control Files ARCn 归档日志 Large Pool,相关的实例和存储结构,Instance,SGA,Database buffer cache,Lar
5、ge pool,Java pool,Shared pool,Data dict. cache,Shared SQL and PL/SQL,ARCn,User process,Server process,PGA,Database,Datafile 1,Datafile 2,Datafile 3,Control file,Redo log file 1,Redo log file 2,Parameter file,Password file,Archived log files,PMON,DBW0,SMON,LGWR,CKPT,DBW1,Redo log buffer,Data Buffer C
6、ache DBWn Datafiles,相关的实例和存储结构,Instance,SGA,Database buffer cache,Large pool,Java pool,Shared pool,Data dict. cache,Shared SQL and PL/SQL,ARCn,User process,Server process,PGA,Database,Datafile 1,Datafile 2,Datafile 3,Control file,Redo log file 1,Redo log file 2,Parameter file,Password file,Archived
7、log files,PMON,SMON,LGWR,CKPT,Redo log buffer,DBWn,Redo Log Buffer LGWR Redo Log Files,相关的实例和存储结构,Group 1,log1a.rdo,log1b.rdo,Group 2,log2a.rdo,log2b.rdo,Group 3,Disk 1 (Member a),Disk 2 (Member b),log3a.rdo,log3b.rdo,Multiplexed Redo Log Files,相关的实例和存储结构,Instance,SGA,Database buffer cache,Large poo
8、l,Java pool,Shared pool,Data dict. cache,Shared SQL and PL/SQL,ARCn,User process,Server process,PGA,Database,Datafile 1,Datafile 2,Datafile 3,Redo log file 1,Redo log file 2,Parameter file,Password file,Archived log files,PMON,SMON,LGWR,CKPT,Redo log buffer,DBWn,CKPT Control Files,Control files,相关的实
9、例和存储结构,Instance,SGA,Database buffer cache,Large pool,Java pool,Shared pool,Data dict. cache,Shared SQL and PL/SQL,ARC0,User process,Server process,PGA,Database,Datafile 1,Datafile 2,Datafile 3,Control file,Redo log file 1,Redo log file 2,Password file,Archived log files dest 1,Parameter file,Passwor
10、d file,Archived log files dest 2,ARC1,Redo log buffer,ARCn Archived Log Files,相关的实例和存储结构,Large Pool Can be configured as a separate memory area in the SGA to be used for: Oracle backup and restore operations I/O server processes Session memory for the shared servers Is sized by the LARGE_POOL_SIZE p
11、arameter,Oracle备份和恢复,3,Oracle数据库备份,Oracle数据库备份,几个术语 全备份:当数据库打开或正常关闭状态下,对所有数据文件和控制文件的备份,称为全备份。可以不包含日志文件 部分备份:数据库打开或正常关闭状态下,对表空间、数据文件或控制文件的备份称为部分备份。 一致性备份:数据库正常关闭状态下,数据文件和控制文件的Checkpoint是一致的,正常关闭后,进行的全备份称为一致性备份。 非一致性备份:在打开状态下,除非只读模式,数据文件和控制文件的Checkpoint处于不一致状态。非正常关闭状态下,数据文件和控制文件的Checkpoint也处于不一致状态,此种情
12、况下的全备份称为非一致性备份。不一致性备份需要恢复。 注意:在非归档模式下,只用一致性备份是有效的。,Oracle数据库备份,归档对备份操作的影响,Physical backup,Closed database,NOARCHIVELOG mode,Closed or open database,ARCHIVELOG mode,Oracle数据库备份,冷备份:数据库正常关闭状态下的全备份,2,3,4,SHUTDOWN IMMEDIATE,HOST cp /backup/,STARTUP OPEN,1,Control files,Password file,Parameter file,Dataf
13、iles,Redo log files,Oracle数据库备份,获取需要备份的文件及存放路径,V$DATAFILE,V$CONTROLFILE,V$LOGFILE,DBA_DATA_FILES,Oracle数据库备份,热备份:数据库正常运行状态下的备份,可以作全备份也可以部分备份。热备份只有在归档模式下有效。,Tablespace backup,Tablespace USERS,users02.dbf,users01.dbf,Datafile backup,Tablespace USERS,users01.dbf,users02.dbf,Oracle数据库备份,备份步骤,Database Ba
14、ckup,Datafile 2,144,Datafile 1,143,SQL ALTER TABLESPACE users 2 BEGIN BACKUP;,SQL !cp /users01.dbf /BACKUP/users01.dbf,Database,Datafile 1,Datafile 2,Datafile 3,Control files,Redo log file 1,Redo log file 2,145,145,145,144,145,144,Oracle数据库备份,备份步骤,SQL ALTER SYSTEM ARCHIVE LOG CURRENT;,Database Backu
15、p,Datafile 2,144,Datafile 1,143,Database,Datafile 1,Datafile 2,Datafile 3,Control files,Redo log file 1,Redo log file 2,145,145,145,144,145,145,SQL ALTER TABLESPACE users 2 END BACKUP;,Oracle数据库备份,热备份原则 备份时间要求尽可能的短。数据文件处于备份状态后,数据库仍和以前一样执行事务,该数据文件的所有数据变更块都将写入日志文件,会产生大量日志。因此,每次只备份一个表空间,或一个数据文件。 建议采用自动
16、化的脚本,降低产生错误的机率。,Oracle数据库备份,热备份异常处理 备份过程中,系统可能失败,电源可能掉电,种种情况都会导致备份失败。如果备份失败,那么备份将是不可用的,需重新备份。 处于备份状态的数据文件因文件头被冻结,因此启动时,和其他数据文件处于非一致性状态,不能进行恢复,导致启动失败。 通过V$Backup视图查看处于备份状态的数据文件(Mount状态下) 执行ALTER DATABASE END BACKUP或ALTER DATABASE DATAFILE filename|number END BACKUP 打开数据库。,SQLStartup Mount; SQLALTER D
17、ATABASE End Backup; SQLALTER DATABASE Open;,Oracle数据库备份,控制文件备份 当数据库结构或状态发生变更后,应执行控制文件的备份 备份策略 多镜像策略:控制文件存放在多个路径,有多个镜像,确保其安全性 完全备份:数据库关闭状态下的拷贝 备份为重建脚本: 命令:ALTER DATABASE BACKUP CONTROLFILE TO TRACE 脚本存放路径:USER_DUMP_DEST 备份为一二进制文件: 命令:ALTER DBATABASE BACKUP CONTROLFILE TO filename,ALTER DATABASE BACKU
18、P CONTROLFILE TO TRACE;,Oracle数据库备份,CREATE CONTROLFILE REUSE(set) DATABASE “ORCL“(“orcl_new”) NORESETLOGS NOARCHIVELOGMAXLOGFILES 32MAXLOGMEMBERS 2MAXDATAFILES 254MAXINSTANCES 1MAXLOGHISTORY 452 LOGFILEGROUP 1 D:ORACLEORADATAORCLREDO01.LOG SIZE 1M,GROUP 2 D:ORACLEORADATAORCLREDO02.LOG SIZE 1M,GROUP
19、3 D:ORACLEORADATAORCLREDO03.LOG SIZE 1M DATAFILED:ORACLEORADATAORCLSYSTEM011.DBF,D:ORACLEORADATAORCLRBS01.DBF,D:ORACLEORADATAORCLUSERS01.DBF,D:ORACLEORADATAORCLTEMP01.DBF,D:ORACLEORADATAORCLTOOLS01.DBF,D:ORACLEORADATAORCLINDX01.DBF CHARACTER SET ZHS16GBK; ALTER DATABASE OPEN NORESETLOGS; ALTER TABLE
20、SPACE TEMP ADD TEMPFILE D:ORACLEORADATAUTEMP.DBFSIZE 10485760 REUSE AUTOEXTEND ON;,Oracle数据库备份,参数文件备份,CREATE PFILE FROM SPFILE;,CREATE PFILE = /backup/init.ora FROM SPFILE;,Oracle数据库备份,DBVerify工具 用于验证数据文件中数据块结构完整性,从而达到验证有效性的目的。当遇到数据破坏问题时,恢复前,验证备份文件的有效性。 验证的文件可以是在线的,也可以是离线的,可以是整个文件,也可以是文件的一部分。,1,2,DB
21、VERIFY,datafiles,Online,Error reporting,Offline,3,4,Online,%dbv file=/ORADATA/u03/users01.dbf logfile=dbv.log Start=1 End=500,Oracle备份和恢复,4,Oracle数据库恢复,Oracle数据库恢复,术语 完全恢复:恢复到失败点。一般是在数据文件或控制文件丢失或遭到破坏后进行的恢复。前提条件: 有备份:备份以来的所有日志 无备份:自创建以来所有日志 不完全恢复:恢复到指定的时间点。除非特殊需要,一般不使用不完全恢复,因为不完全恢复会造成数据丢失。前提条件: 有恢复点前
22、所有文件的物理备份 有从备份到恢复点之间的所有日志文件,Oracle数据库恢复,恢复步骤,Restored datafiles,Database containing committed and uncommitted transactions,Recovered database,Redo applied,Undo applied,5,4,3,2,1,Oracle数据库恢复,非归档模式下的恢复,Restore from the most recent backup,Password File,Parameter File,Password File,Parameter File,Passwo
23、rd File,Parameter File,Backup,Database,146,Control files,Database,144,Control files,Oracle数据库恢复,操作步骤 1.Shut down the instance.SQL SHUTDOWN IMMEDIATE 2.Restore the datafiles and the control file from the most recent whole database backup. $ cp /db01/BACKUP/*.dbf /ORADATA/u*/* # restores datafiles 3.P
24、erform cancel-based recovery. SQL RECOVER DATABASE UNTIL CANCEL USING BACKUP CONTROLFILE SQL CANCEL 4.Open the database with the RESETLOGS option.SQL ALTER DATABASE OPEN RESETLOGS;,Oracle数据库恢复,优点 便于操作,减少误操作率,降低风险 恢复花费的时间取决于拷贝占用的时间 缺点 从备份点以后的数据全部丢失,必须手工补录 仅能恢复到备份点 即使一个数据文件破坏,也必须恢复整个数据库 适合场景 两次备份间隔的数据
25、容许丢失 可通过备份快速恢复启用 数据很少发生变化,非OLTP,Oracle数据库恢复,归档模式下的完全恢复 Closed database recovery for: System datafiles Undo segment datafiles Whole database Open database recovery, with database initially opened (for file loss) Open database recovery with database initially closed (for hardware failure) Data file re
26、covery with no datafile backup,Oracle数据库恢复,归档模式下的恢复,Restore from the most recent backup,Password File,Parameter File,Backup,Database,146,Control files,Database,146,Control files,Oracle数据库恢复,Closed database recovery(关闭数据库恢复步骤) 关闭实例 SQL SHUTDOWN IMMEDIATE 打开数据库到Mount状态 SQL STARTUP MOUNT 还原文件 $ cp /db0
27、1/BACKUP/*.dbf /ORADATA/u*/* 恢复数据库 SQL RECOVER DATABASE; 或SQL RECOVER DATAFILE filename|number; 打开数据库 SQL ALTER DATABASE OPEN; 适合场景 系统表空间文件或回滚表空间文件遭到破坏 整个数据库或一些主要数据文件需要恢复,Oracle数据库恢复,关闭数据库恢复举例,Shut down the instance,1,Restore datafile 1 (Log Sequence 144),2,Open the database,4,Mounted Database,Recov
28、ered Database,Closed Database,146,Datafile 2,145,Redo log file 2,3,3,3,Oracle数据库恢复,Open database recovery, with database initially opened (数据文件遭到破坏,但没有导致Down机) 文件离线SQL SELECT d.file# f#, d.name, d.status, h.status2 FROM v$datafile d, v$datafile_header h3 WHERE d.file# = h.file#; SQL ALTER DATABASE D
29、ATAFILE n OFFLINE IMMEDIATE 还原遭破坏的文件$ cp /db01/BACKUP/*.dbf /ORADATA/u*/* 恢复 SQL RECOVER TABLESPACE tsname; 或SQL RECOVER DATAFILE filename|number; 文件在线SQL ALTER DATABASE DATAFILE n ONLINEOR SQL ALTER TABLESPACE tsname ONLINE,Oracle数据库恢复,适合场景 文件丢失或遭到破坏,但没有导致数据库关闭 系统需要全天不间断运行,仅允许短时间的Down机 破坏文件不属于系统表空间
30、和回滚表空间 说明 在某些情况下,数据文件会自动离线。恢复前,通过警告日志查明离线原因,在线后,可能需要进行数据恢复 表空间离线,会导致表空间的所有数据文件都不可访问;如果表空间包含多个数据文件,一个数据文件离线后,表空间仍然可用,仅这个数据文件的数据不能访问,Oracle数据库恢复,举例,1,2,4,3,Take datafile 2 offline,Restore datafile 2 (Log Sequence 144),Bring datafile 2 online,Open Database,Recovered Database,Open Database,3,3,Oracle数据库
31、恢复,Open database recovery with database initially closed (数据文件遭到破坏,并导致Down机) 打开数据库到Mount状态SQL STARTUP MOUNT 确定遭破坏的数据文件离线SQL SELECT d.file# f#, d.name, d.status, h.status2 FROM v$datafile d, v$datafile_header h3 WHERE d.file# = h.file#; SQL ALTER DATABASE DATAFILE n OFFLINE IMMEDIATE 打开数据库SQL ALTER D
32、ATABASE OPEN; 还原数据文件$ cp /db01/BACKUP/*.dbf /ORADATA/u*/*必要时需指定数据文件到新位置 :SQL ALTER DATABASE RENAME FILE TO 恢复SQL RECOVER TABLESPACE tsname; 或SQL RECOVER DATAFILE filename|number; 将文件置为在线 SQL ALTER DATABASE DATAFILE n ONLINE,Oracle数据库恢复,适合场景 介质或硬件遭到损坏,导致系统Down机 系统需要全天不间断运行,仅允许短时间的Down机 需要还原的文件不属于系统表空
33、间和回滚表空间,Oracle数据库恢复,举例,Take datafile 2 offline,2,Restore datafile 2,4,Bring datafile 2 online,6,1,Mount the database,3,Open the database,5,Open Database,Recovered Database,Closed Database,5,5,Oracle数据库恢复,Data file recovery with no datafile backup(数据文件遭到破坏,且没有备份) *如果数据库当前状态为关闭,则需要首先将数据库置为Mount状态SQL S
34、TARTUP MOUNT 将数据文件置为离线SQL ALTER DATABASE DATAFILE n OFFLINE IMMEDIATE; *打开数据库SQL ALTER DATABASE OPEN; 重建数据文件SQL ALTER DATABASE CREATE DATAFILE filename AS new file name; 恢复SQL RECOVER TABLESPACE tsname; 或SQL RECOVER DATAFILE filename|number; 将数据文件置为在线SQL ALTER DATABASE DATAFILE n ONLINE,Oracle数据库恢复,
35、适合场景 介质损坏,导致没有备份的数据文件的丢失 自文件创建后的所有归档日志都存在 需要还原的文件不属于系统表空间和回滚表空间,Oracle数据库恢复,举例,Open Database,Bring the datafile or tablespace online,4,1,Take the datafile or tablespace offline,2,Re-create the datafile,3,Recovered Database,Open Database,Datafile 4,3,3,Oracle数据库恢复,控制文件的恢复 用当前的控制文件拷贝进行还原 用CREATE CONTR
36、OL FILE 命令,你必须知道所有数据文件列表,可通过ALTER DATABASE BACKUP CONTROLFILE TO TRACE获取 使用RECOVER DATABASE USING BACKUP CONTROLFILE。前提为有历史的控制文件备份,使用现在的日志文件进行恢复 适合场景 全部或部分控制文件遭到破坏或丢失 修改数据库名称 修改控制文件的其他项,Oracle数据库恢复,归档模式下的不完全恢复 完全恢复时,因一归档文件损坏导致无法进行 联机日志和数据文件同时丢失,联机日志没有镜像 控制文件丢失,但不知道数据库的结构,只有一个以前的控制文件备份 用户操作错误,误删除一重要表
37、或删除一些重要数据并提交 种类 基于时间:知道失败点确切时间 基于SCN:恢复到指定的SCN,一般用于分布式数据库。 基于Cancel:在恢复的提示符下,输入CANCEL,控制恢复。一般用于日志文件不全。,Oracle数据库恢复,步骤 关闭数据库,进行全备份 还原所有数据文件,包含系统表空间和回滚表空间的数据文件,但不要还原控制文件、参数文件、日志文件和密码文件Mount数据库,确保数据文件在线 恢复数据文件到恢复点 打开数据库,重设日志 验证恢复的有效性 关闭数据库,进行全备份,Oracle数据库恢复,操作注意事项 小心谨慎的执行每一步 恢复前后都要进行数据库备份 验证恢复是否成功 转移归档
38、日志文件,以防和恢复后数据库产生的归档日志产生混淆。执行不完全恢复后,日志将从0重新开始记录。 恢复前后查看警告日志文件。在执行不完全恢复时,整个恢复的执行过程都被记录在警告日志文件中,包括错误信息、提示信息以及SCN号 。,Oracle数据库恢复,举例 基于时间的恢复 场景描述 当前时间是上午12:00 表Employee被Drop,时间为11:45 当前数据库的活动很小 表必须恢复 问题分析 知道失败的确切时间点,所以可以使用基于时间的恢复 步骤 关闭数据库,进行全备份SQL SHUTDOWN IMMEDIATE$ cp /ORADATA/u*/* /db01/BACKUP/*.dbf 还
39、原所有数据文件$ cp /db02/BACKUP/*.dbf /ORADATA/u*/* Mount数据库,确保所有文件在线SQL STARTUP MOUNT,Oracle数据库恢复,步骤(续) 恢复到失败时间点SQL recover database until time 2007-02-18 11:44:00 打开数据库SQL alter database open resetlogs; 验证恢复正确性 关闭数据库,进行全备份SQL SHUTDOWN IMMEDIATE$ cp /ORADATA/u*/* /db01/BACKUP/*.dbf 打开数据库,补录11:45之后的 数据,Ora
40、cle数据库恢复,Shut down and back up,1,Mount the database,2,Restore all datafiles,3,Open with Resetlogs,5,Back up the database,6,Datafile 3,Redo log File 2,Datafile 2,Control Files,Redo log File 1,Datafile 1,Database,145,146,146,146,146,146,Datafile 3,Redo log File 2,Datafile 2,Control Files,Redo log File
41、 1,Datafile 1,Recovered Database,0,1,1,1,1,1,EMP,Datafile 3,Datafile 2,Datafile 1,Restored Database,146,144,144,144,EMP,Redo log File 2,145,Archived log file,144,4,Redo log File 1,146,Control Files,Oracle数据库恢复,恢复常用视图,V$DATAFILE,V$ARCHIVED_LOG,V$RECOVER_FILE,V$RECOVER_LOG,V$DATAFILE_HEADER,Oracle备份和恢
42、复,5,Exp&Imp,Exp&Imp,Export,Import,Exp&Imp,用途 Archive historical data Save table definitions to protect them from user error failure Move data between machines and databases or between different versions of the Oracle server Transport tablespaces between databases 执行方式 Command-line interface An inter
43、active dialog Parameter files Oracle Enterprise Manager,Exp&Imp,执行级别其他说明,Full Database Mode Tables definitions Tables dataGrants IndexesTables constraints,Table Mode Table definitions Table data (all or selected rows) Owners table grants Owners table indexes Table constraints,User Mode Tables defini
44、tions Tables data Owners grants Owners indexes Tables constraints,Tablespace Mode Table definitionsGrantsIndexes Table constraints Triggers,Exp&Imp,其他说明 使用Export工具,必须具有Create Session权限和EXP_FULL_DATABASE角色权限 使用Import工具,必须具有Create Session权限和IMP_FULL_DATABASE角色权限,Exp&Imp,语法 Exp keword=v1,v2,vn SQLhost
45、exp keword=v1,v2,vn 举例 表:exp / Tables=table1,tables Rows=Y file=exp1.dmp 用户:exp hr/hr Owner=hr Direct=Y file=exp2.dmp 表空间:exp system/managerexp as sysdba Tablespaces=ts_temp Transport_Tablespace=Y Log=exp.log 整个数据库:exp / Full=y Direct=Y 帮助:Exp Help=Y 说明: 如果不指定文件名称,默认使用文件名为expdata.dmp; 如果Transport_ta
46、blespace=y,必须使用Sysdba权限用户登录,Exp&Imp,Direct原理,Buffer cache,Generate SQL commands,Write blocks,Direct Path,Dump file,Export,Export,Oracle Server,Read blocks,Evaluating buffer,TTC buffer,Buffer cache manager,SQL command processing,Two-Task common (TTC),Direct Path,Conventional Path,Exp&Imp,概念: 当参数DIREC
47、TY时,启用直接路径方式。该方式可快速传递数据。其原理为导出时,不经过SQL _Command处理层,直接从数据文件将数据块读到Exp会话内存区,然后在TTC中将直接转换为Export工具期望的数据格式。整个过程不和实例资源发生竞争 特性: 数据在TTB已经是Export期望的格式,不需要数据转化。但列数据及格式仍不同于直接转换的数据格式 使用一个优化的,没有任何断言的Select语句 限制 不能交互式调用 客户端和服务器端的字符集必须相同 不受Buffer参数的影响 行不能包含LOBS对象(8.1.5后可以,含有Lob字段的对象会自动使用Conversion模式导出,导入后数据正确) 不能检
48、测坏块 指定 使用命令行Direct=y 或在参数文件中指定 exp parafile=exp.txt,Exp&Imp,参数使用说明 Direct:使用direct=y, 效率提高,但由于没有经过数据格式的验证 ,在IMP的时候有可能出错。 Buffer:选一个适中的好了,太大了也不见得能提高导出效率 Compress:将数据努力压缩到初始分区,默认为Y。在字典管理方式下的表空间,可以消除碎片,使用本地管理后,存储参数不再起作用,Exp&Imp,Imp Create table definitions Extract data from a valid Export file Import f
49、rom a complete or cumulative Export file Recover from user-error failures,Exp&Imp,执行级别,Mode Description Table Import specified tables into a schema. User Import all objects that belong to a schema Tablespace Import all definitions of the objects contained in the tablespace Full Database Import all objects from the export file,