1、恢复数据库库,数据库挂了,怎么办? 在生产环境中,数据库挂了是非常危险的,那意味着数据将丢失,那意味着业务将停止。假如这是个银行系统,假如这个数据库归你维护,那你就惨了! 从本节开始就教大家如何让数据库在几分钟之内恢复,如何恢复丢失的数据。,在Oracle 10g中, Flash back家族分为以下成员: Flashback Database, Flashback Drop,Flashback Query(分Flashback Query,Flashback Version Query, Flashback Transaction Query 三种) 和Flashback Table。,Fl
2、ash back家族,Flashback Database 功能非常类似与RMAN的不完全恢复, 它可以把整个数据库回退到过去的某个时点的状态, 这个功能依赖于Flashback log 日志。 比RMAN更快速和高效。 因此Flashback Database 可以看作是不完全恢复的替代技术,Flashback Database,1. Flashback Database 不能解决Media Failure, 这种错误RMAN恢复仍是唯一选择2. 如果删除了数据文件或者利用Shrink技术缩小数据文件大小,这时不能用Flashback Database技术回退到改变之前的状态,这时候就必须先
3、利用RMAN把删除之前或者缩小之前的文件备份restore 出来, 然后利用Flashback Database 执行剩下的Flashback Datbase。3. 如果控制文件是从备份中恢复出来的,或者是重建的控制文件,也不能使用Flashback Database。4. 使用Flashback Database锁能恢复到的最早的SCN, 取决与Flashback Log中记录的最早SCN。,Flashback Database的限制,Flashback Database 整个架构包括一个进程Recover Writer(RVWR)后台进程,Flashback Database Log日志
4、和Flash Recovery Area。一旦数据库启用了Flashback Database, 则RVWR进程会启动,该进程会向Flash Recovery Area中写入Flashback Database Log, 这些日志包括的是数据块的 “ 前镜像(before image)“, 这也是Flashback Database 技术不完全恢复块的原因。,Flashback Database的原理,启用Flashback Database,配置Flash Recovery Area 要想使用Flashback Database, 必须使用Flash Recovery Area,因为Flas
5、hback Database Log只能保存在这里。 要配置的2个参数如下,一个是大小,一个是位置。如果数据库是RAC,flash recovery area 必须位于共享存储中。数据库必须处于archivelog 模式 启用Flash Recovery Area: ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=5G SCOPE=BOTH; ALTER SYSTEM SET DB_RECOVERY_FILE_DEST= G:dbrecovery SCOPE=BOTH; 禁用Flash Recovery Area: ALTER SYSTEM SET DB
6、_RECOVERY_FILE_DEST= ;,Flash Recovery Area设置说明,对于Flash Recovery Area,Oracle 是这样建议的,flash recovery area 设置的越大,flashback database 的恢复能力就越强,因此建议flash recovery area 能够放的下所有的数据文件,增量备份,以及所有尚未备份的归档文件,当然还有它自己产生的flashback logs。在数据库运行过程中,oracle 自动向该区域写入文件,当剩余空间不足15%的时候,它就会在alert 中增加警告,提示你空间不足。但此时不会影响数据库的正常运转,
7、直到所有空间统统被用掉之后,oracle 首先尝试删除寻些过期的文件,冗余文件或备份过的文件,如果这些做完了,还是没有空闲空间的话,数据库就被挂了,归档,要想flashback功能运行数据库必须运行在归档模式下 确认当前数据模式select dbid,name,log_mode from v$database;或archive log list; 关闭数据库:shutdown normal 启动数据库到mount状态:startup mount 设置归档:alter database archivelog 查看更改后的状态:archive log list 重新启动数据库:alter data
8、base open;,启用数据库Flashback 功能,数据库启动到mount状态 startup mount; 检查Flashback 功能, 缺省时功能是关闭的select name,current_scn,flashback_on from v$database; 启用falshback功能:alter databse flashback on; 再次查看flashback功能是否开启:select name, current_scn, flashback_on from v$database; 设置db_flashback_retension_targetalter system s
9、et db_flashback_retention_target=1440 scope=both; 该参数用来控制flashback log 数据保留的时间,或者说,你希望flashback database 能够恢复的最早的时间点。默认值是1440,单位是minute,即24 小时,需要注意的是该参数虽然未直接指定flash recovery area大小,但却受其制约,举个例子假如数据库每天有10%左右的数据变动的话,如果该初始化参数值设置为1440,则flash recovery area 的大小至少要是当前数据库实际容量的10%,如果该初始化参数设置为2880,则flash recov
10、ery area 的大小就至少是数据库所占容量的20%。 启用数据库:alter database open;,FLASHBACK数据库操作示例,检查是否启动了flash recovery area Show parameter db_recovery_file 检查是否启用了归档 Archive log list 检查是否启用了falshback database; Select flashback_on from v$database; 检查当前的scn select current_scn from v$database; 查询当前的时间 Select to_char(sysdate,y
11、yyy-mm-dd hh24:mi:ss) from dual; 进入ljf用户下删除表emp72;,执行闪回恢复,关闭数据库:shutdown immediate 启动到mount状态:startup mount 执行恢复:分timestamp 或者SCN两种 flashback database to timestamp to_timestamp(2012-05-28 17:20:13,yyyy-mm-dd hh24:mi:ss); flashback database to scn 1310424; 执行alter database open resetlogs;先执行alter dat
12、abase open read only 命令以read-only 模式打开数据库,然后立刻通过逻辑导出的方式将误操作涉及表的数据导出,再执行recover database 命令以重新应用数据库产生的redo,将数据库修复到flashback database 操作前的状态,然后再通过逻辑导入的方式,将之前误操作的表重新导入,这样的话对现有数据的影响最小,不会有数据丢失。 查看被删除的表是否恢复过来。,V$FLASHBACK_DATABASE_LOG,Flashback Database 所能回退到的最早时间,取决与保留的Flashback Database Log 的多少, 该视图就可以查
13、看许多有用的信息。 Oldest_flashback_scn,oldest_flashback_time:这两列记录可以恢复的最早时间点。 Flashback_size记录当前使用的flash recovery area空间的大小。 Retension_target:系统定义的策略。 Estimated_flashback_size根据策略对空间大小的估计值 select oldest_flashback_scn os,to_char(oldest_flashback_time,yyyy-mm-dd hh24:mi:ss)ot,retention_target rt,flashback_size fs,estimated_flashback_size es from v$flashback_database_log,V$FLASHBACK_DATABASE_STAT,这个视图用来对Flashback log 空间情况进行更细粒度的记录和估计。 这个视图以小时为单位记录单位时间内数据库的活动量,Flashback_Data 代表Flashback log产生数量,DB_Date 代表数据改变数量,Redo_Data代表日志数量,通过这3个数量可以反映出数据的活动特点,更准确的预计Flash Recovery Area的空间需求.,Thanks,