实际 英文只用了2G,这个11G怎么清理

苹果系统占11g内存 怎么办?系统怎么会占这么多内存 搞的现在我手机有点卡了 求助!_百度知道
苹果系统占11g内存 怎么办?系统怎么会占这么多内存 搞的现在我手机有点卡了 求助!
我有更好的答案
如果您的手机存储空间已满,有可能是由于程序内保存的数据导致的,比如“相机”所产生的照片、“QQ/视频软件产生的媒体缓存;微信”的缓存和已下载的本地文件、小视频等,听歌软件&#47,都会占用系统空间,而您查看的存储空间上标示的应用总共 5GB,可能是没有计算这些数据在内的请问您是在哪里看到的这个数字的呢
通用存储空间
很奇怪不是吗?
系统占用的内存大小加上软件所产生的系列垃圾比较多,软件越多占用内存越多
那怎么办 能删掉吗 ?现在手机用什么软件都有一点卡
你仔细看看11.0.3这是系统版本
并不是系统占用11G内存
采纳率:100%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。扫二维码下载作业帮
3亿+用户的选择
下载作业帮安装包
扫二维码下载作业帮
3亿+用户的选择
140g盐,一天平,7g 、2g砝码各一个,如何只利用这些东西3次把盐分成50g和90g?
作业帮用户
扫二维码下载作业帮
3亿+用户的选择
(1)用7g+2g的砝码称出9g盐,140g-9g=131g(2)用7g+2g砝码把131g盐分成两部分61g,70g (61+2+7=70)(3)用2g砝码和9g盐把61g盐分成50g和11g两部分(61-9-2=11,11+50=61).11g+9g+70g=90g
为您推荐:
其他类似问题
1. 先称出70g的盐; 2. 在70g的盐中再称出20克; 3. 将20g和剩下的放在一起,就是一个50g,一个90g了!
第一次: 7、2g砝码称出9g盐,结果盐分成9g与131g第二次:将9g盐与7g、2g都作为砝码,结果将盐分为18g与113g注意:这时盐已经分为三份:9g、18g、113g,还有两个砝码第三次:将18g盐与7g砝码发在左托盘,将2g砝码放在右托盘,然后在113g盐中取盐添置右托盘中,可获取23g盐。这时盐分为9g,18g,23g与90g。即三次,...
(1)先用2g砝码将盐分成两部分:71g、69g+2g;(2)再用两个砝码(9g)将71g分成两部分:40g、31g+9g;(3)再用2g砝码将40g分成两部分:21g、19g+2g;将21g盐+上第一次得到的69g就是90g了。21+69=90
扫描下载二维码Oracle 11g清理数据库历史日志_数据库技术_Linux公社-Linux系统门户网站
你好,游客
Oracle 11g清理数据库历史日志
来源:Linux社区&
作者:neverinit
1.&创建存放数据库待删除日志文件路径
用于存放准备删除,这里假设放在/home//delete路径下
$ cd /home/oracle/delete
$ mkdir &-p &audit_file_dest &background_dump_dest &user_dump_dest &core_dump_dest listenr_log_dest
2.&查看不同数据库日志文件所在路径
$ sqlplus / as sysdba
SQL& show parameter dest
找到audit_file_dest,background_dump_dest,user_dump_dest,core_dump_dest对应的值
audit_file_dest路径下存放的是数据库审计信息文件
background_dump_dest路径下存放的是数据库的trace文件和alert日志文件
user_dump_dest路径下存放的是sql trace之后session的trace文件
core_dump_dest路径下存放的是应用程序日志,除非数据库出了问题,否则基本上不会有什么信息
下文使用黑体的audit_file_dest,background_dump_dest,user_dump_dest,core_dump_dest代替真实路径。
3.&数据库审计信息文件清理
进入audit_file_dest路径下,将30天之前的文件移到准备删除的文件夹,执行命令如下:
(1)执行如下命令查看当前所在路径,确定是否无误
$ cd audit_file_dest
(2)执行如下命令查看30天前的审计文件
$ find audit_file_dest&-mtime +30 -name \*.aud&
(3)执行如下命令,将文件移至待删除文件夹
$ find audit_file_dest&-mtime +30 -name \*.aud -exec mv&{} /home/oracle/delete/audit_file_dest \;
(4)查看审计目录下30天前的审计文件以及待删除文件夹下的文件
$ find audit_file_dest&-mtime +30 -name \*.aud
$ ls /home/oracle/delete/audit_file_dest
(5)等待2日,确保日志文件移走对Oracle数据库运行无影响之后,手工执行删除命令
$ cd /home/oracle/delete
$ rm -rf audit_file_dest
4.&数据库trace文件和alert日志清理
4.1.&清理trace文件
进入background_dump_dest路径下,将30天之前的文件移到准备删除的文件夹,执行命令如下:
(1)执行如下命令查看当前所在路径,确定是否无误
$ cd background_dump_dest
(2)执行如下命令查看30天前的审计文件
$ find background_dump_dest&-mtime +30 -name \*.tr*&
(3)执行如下命令,将文件移至待删除文件夹
$ find background_dump_dest&-mtime +30 -name \*.tr* -exec mv&{} /home/oracle/delete/background_dump_dest \;
(4)查看审计目录下30天前的审计文件以及待删除文件夹下的文件
$ find background_dump_dest&-mtime +30 -name \*.aud
$ ls /home/oracle/delete/background_dump_dest
(5)等待2日,确保日志文件移走对Oracle数据库运行无影响之后,手工执行删除命令
$ cd /home/oracle/delete
$ rm -rf background_dump_dest
4.2.&清理alert日志
alert日志,可以直接删除alert日志(或echo清理),可自动生成,无需关闭数据库(前提最好是将原来的cp备份)
(1)进入日志所在路径
$ cd background_dump_dest(2)cp备份cp& alert_$ORACLE_SID.log alert_$ORACLE_SID.log.bak (确保空间足够)(3)删除原来alert日志文件& 方法1:echo&&alert_$ORACLE_SID.log (这个方法清理后原来的alert文件还在)& 方法2:rm alert_$ORACLE_SID.log& (直接删除掉)(4)测试方法2删除的alert文件会自动生成SQL& alter s(5)看是否生成新的日志文件SQL&&show parameter dumpSQL&&exit$ cd /u01/app/oracle/diag/rdbms/db11g/db11g/trace$ ls -lrt&可看到最新生成的alert日志文件
5.&数据库sql trace文件清理
数据库默认user_dump_dest和background_dump_dest路径一致,如不一致,参考4.1的方法进行操作即可。
6.&数据库监听日志清理
Oracle 11g的监听日志和告警日志分别在$ORACLE_BASE/diag/tnslsnr/hostname/listener/trace和$ORACLE_BASE/diag/tnslsnr/hostname/listener/alert目录下,前面的hostname根据实际主机名而定,以下对监听日志和告警日志所在目录简称为trace目录和alert目录。& trace目录下产生的日志文件比较大,是主要清理的对象,而alert目录下产生的文件比较小,基本不需要清除。在trace目录下监听日志是一个名为listener.log的文件,而在alert目录下警告日志是一个名为log.xml的文件,这个日志每到11M左右就会分割成一个log_XXXX.xml的日志,逐渐累加。
删除监听日志的方法如下:切换到oracle用户$ su oracle$&lsnrctl set log_status off$ mv listener.log listener.log.bak& &
&(备份一下监听文件 )$&lsnrctl set log_status on& & (这时候会自动创建一个listener.log文件)监听日志启动后就会自动创建一个全新的listener.log文件,备份好的文件可以删除。如果不执行上述的命令直接删除listener.log,系统是不会创建的。警告日志可以用以下命令移动或者删除(先到指定目录下,再执行此命令)find . -mtime +10 -exec mv {} /home/oracle/delete/listenr_log_dest&\;
要看警告日志可以在oracle用户下执行adrci$adrci在adrci目录下可以输入help可以看帮助命令。输入help show alert,可以看到show alert的详细用法。show alert会提示让你选择日志的目录或者退出adrci& show alertChoose the alert log from the following homes to view:1: diag/rdbms/db1/db12: diag/tnslsnr/oracle/listenerQ: to quitPlease select option: 1输入1就看db1下的,输入2就看listener目录下的,输入q就退出。看完alert的日志后输入 :q退出,操作方法跟vi命令类似。SHOW TRACEFILE可以看到监听日志文件
7.&adrci命令使用
11G adrci(Automatic Diagnostic Repository Command Interpreter)清理 ALERT|INCIDENT|TRACE|CDUMP|HM|UTSCDMP目录下的文件PS:补充11g还可用adrci清理: 具体步骤如下$ adrciADRCI: Release 11.2.0.4.0 - Production on Fri Jun 2&18:31:34&2017Copyright (c) , Oracle and/or its affiliates.& All rights reserved.ADR base = "/u01/app/oracle"adrci& show homeADR Homes:diag/tnslsnr/db/listener
diag/rdbms/cams/camsadrci& set homepath diag/rdbms/cams/camsadrci& help purge& Usage: PURGE [[-i &id1& | &id1& &id2&] |& &
&[-age &mins& [-type ALERT|INCIDENT|TRACE|CDUMP|HM|UTSCDMP]]]:& Purpose: Purge the diagnostic data in the current ADR home. If no& &
& &option is specified, the default purging policy will be used.& Options:& & [-i id1 | id1 id2]: Users can input a single incident ID, or a& & range of incidents to purge.& & [-age &mins&]: Users can specify the purging policy either to all& & the diagnostic data or the specified type. The data older than &mins&& & ago will be purged& & [-type ALERT|INCIDENT|TRACE|CDUMP|HM|UTSCDMP]: Users can specify what type of& & data to be purged.& Examples:& & purge& & purge -i 123 456& & purge -age 60 -type incident如果要清理 /u01/app/oracle/diag/rdbms/cams/cams目录下的内容,可以使用该方法。
更多Oracle相关信息见 专题页面
本文永久更新链接地址:
相关资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款手机流量套餐
价&&&&&&& 格:5-280元/月
适用品牌:
适用地市:
即日起流量月套餐马上升级,套餐内流量在2G、3G、4G网络均可使用!多档套餐赠送一年流量,加量不加价!
手机流量5元套餐(30M)
手机流量10元套餐(100M)
手机流量20元套餐(300M)
手机流量30元套餐(500M)
手机流量50元套餐(1000M)
手机流量70元套餐(2G)
手机流量100元套餐(3G)
手机流量200元套餐(6G)
手机流量280元套餐(11G)
(1)流量升级优惠说明:2014年1月1日-12月31日,广东移动全品牌客户办理对应手机流量套餐,可以享受为期一年的流量赠送,已办理的客户自动升级,无需亲自办理;新办理客户在半小时内生效,变更套餐下个月结日开始生效(全球通1日)。
(2)使用范围:上述套餐包含的流量为国内2G/3G/4G流量(不含台港澳),流量不区分省内、省外,不区分2G、3G、4G网络;赠送流量为省内2G/3G/4G通用流量或省内4G单模流量,仅限省内网络使用(单模仅限于4G网络),可享受12个月流量优惠赠送。
(3)4G使用说明:如需使用4G网络流量,需升级4G飞享套餐、4G上网套餐其中之一,详情可进入。
(4)生效规则:客户当月未开通套餐,办理套餐半小时内生效,修改、取消下一月结日生效(全球通1日)。
(5)半月扣费规则:半月租半资源。首次办理手机流量套餐,离下一个动态月结日(全球通1日)不足15天,按半月租收取,送套餐的一半流量。
(6)流量封顶规则:超套餐外流量费用达到500元后不再扣费;另外,超套餐外流量达到15G自动关闭上网功能,如需继续使用,请办理叠加包恢复。当月总流量达到100G系统自动关闭上网功能,下一月结日自动恢复(全球通1日)。
(7)&超套餐即停功能:如您使用4G网络,套餐内的4G流量用尽后将单停4G上网功能,如需继续使用4G网络,请办理4G叠加包恢复或下个计费月恢复。请注意在省外漫游状态下国内4G流量用完、省内4G流量未用完的情况下不会停4G功能。
(8)套餐外资费说明:超套餐使用2G/3G流量1元/M,4G流量0.29元/M。部分套餐客户超2G/3G流量按原套餐标准资费计费(如全球通上网套餐、商旅套餐、全球通本地套餐、动感地带3G网聊卡、神州行3G上网套餐55-888元、4G商旅套餐、4G飞享套餐、4G上网套餐等客户按0.5元/M计)
(9)流量到期说明:套餐内所包含的服务为优惠业务,均为当月有效;当月未使用部分,系统将在月结日(全球通每月1日)自动清零。
(10)如您现有已无法办理的旧套餐(如万花筒套餐、无限量套餐),办理预付费4G手机流量套餐后,将无法办回旧套餐,请留意使用。
◆短信办理方式:
BLSJLL至10086
QXSJLL至10086
CXTC至10086
查询套餐剩余流量
CXLL至10086
◆WAP方式:wap.gd.10086.cn
◆APP方式:扫一扫二维码,下载“广东移动10086”轻松办理053:数据库高级管理:
第一部分:数据库备份与恢复... 4
第一章:备份恢复概述... 4
1.1 备份的意义: 4
1.2 数据库故障的类型:... 4
1.3 制定你的备份和恢复的计划... 4
1.4 备份恢复分类... 5
1.5 备份恢复方式... 5
1.6 完全恢复与不完全恢复... 5
1.7 归档与非归档... 6
第二章:手工备份与恢复... 6
2.1 手工备份:... 6
2.2 手工备份和恢复的命令... 6
2.3 备份前应对数据库进行检查: 7
2.4 手工非一致性备份(热备份)的执行方式及热备份的监控(v$backup)... 7
2.5 dbv&& (db verify)检查数据文件是否有坏块... 9
第三章:手工完全恢复... 9
3.1 完全恢复;... 10
3.2 完全恢复的步骤... 10
3.3 手工完全恢复可以基于三个级别... 10
3.4 恢复过程可以查看的视图:... 10
3.5 非归档模式下只能做全备的完整还原,还原后仍会缺失联机日志文件... 11
3.6 归档模式下手工完全恢复的实验... 11
3.7 手工完全恢复特点小结:... 18
第四章:手工不完全恢复(归档模式)... 20
4.1 不完全恢复的特点:... 20
4.2 不完全恢复(Incomplete recover) 适用环境:... 20
4.3 不完全恢复的基本类型:... 20
4.4 不完全恢复的操作步骤(恢复模式对象的传统方法):... 21
4.5、logminer 工具的使用... 21
4.6 不完全恢复范例:... 21
第五章:闪回 flashback. 41
5.1 flashback 的功能:... 41
5.2 flashback分类:(DBA-II PPT:253)... 42
第六章:RMAN(recover management 恢复管理器)概述... 55
6.1 rman的定义和功能: 55
6.2 rman的优点:... 56
6.3 rman的架构:... 56
6.4 rman 连接目标库方法... 56
6.5、查看rman的默认配置,修改rman的配置信息... 57
6.6 rman备份的分类:... 61
6.7 rman的命令格式:... 61
第七章:rman(备份)... 62
7.1 rman备份分类:... 62
7.2 rman归档方式备份常用语法:... 62
7.3 增量备份: 63
7.4 块变更跟踪(block change tracking) 64
7.5 数据恢复顾问DRA. 65
第八章:rman 完全恢复... 66
8.1 recover 恢复:... 66
8.2 完全恢复:... 67
第九章:rman 不完全恢复... 77
9.1 rman 不完全恢复的三个标准模式:... 77
第十章:目录库和辅助库... 91
10.1 创建目录库(Catalog database)的必要性... 91
10.2 Catalog database 的配置... 92
10.3 RMAN存储脚本... 93
10.4 虚拟专用目录(ppt85-86) 94
10.5 Auxiliary Database. 94
第十一章: rman 维护... 95
11.1 rman 使用和维护... 95
11.2 list& 命令一览... 95
11.3 crosscheck:... 95
11.4 report 报告命令一览... 96
11.5 delete& 删除备份命令一览... 97
第二部分 优化oracle数据库... 97
第十二章 Oracle 资源管理... 97
12.1 为什么要使用Oracle资源管理器... 97
12.2 Oracle 资源管理的基本概念: PPT:406. 98
12.3 一个资源管理中创建组、计划、及指令的例子:... 99
12.4 其他的资源指令和阀值... 102
12.5 配置测试使用者组自动切换... 103
第十三章 Oracle 自动任务调度... 104
13.1 Oracle任务调度概述... 104
13.2 理解以下概念:... 105
13.3 例子... 106
13.4 通过调度程序窗口控制一个计划... 108
13.5 Window和Job Class. 109
第十四章 AWR与警报系统... 110
14.1 Oracle数据库采样ASH和AWR。... 110
14.2 相关的一些概念: 110
14.3 ADDM (Automatic Database Dianostic Monitor) 111
14.4 自动维护作业 AutoTask. 113
14.5 使用服务器生成警报系统... 113
第十五章:Oracle 性能调优... 114
15.1 SQL的硬解析和软解析... 114
15.2 11g内存管理... 118
15.3 查看Oracle的执行计划:... 120
15.4 SQL计划管理 SPM.. 121
15.5 Database Replay(数据库重放)... 122
附录 Oracle一周备份计划范例... 122
第一部分:数据库备份与恢复
第一章:备份恢复概述
1.1 备份的意义:
&&&& 1)保护数据,避免因为各种故障而丢失数据
&&&& 2)MTBF:平均故障间隔时间
&&&& 3)MTTR:平均恢复时间
1.2 数据库故障的类型:
&&&& 1)user process failure:& pmon 自动处理
&&&& 2)user errors :&&&&& 需要dba通过备份恢复
&&&& 3)instance failure: & smon 自动处理
&&&& 4)media failure:&&&& 必须通过备份和日志恢复&& (介质恢复)
1.3 制定你的备份和恢复的计划
&&&& 1)根据生产环境的恢复周期,制定详细的备份计划,然后严格执行
&&&& 2)对备份,要在一定的时间内利用测试环境,进行故障恢复的练习
1.4 备份恢复分类
&&&& 1)逻辑备份与恢复 面向object&&&
&&&& 2)物理备份与恢复 面向media failure& (直接面向磁盘上的数据文件)
1.5 备份恢复方式
&&&& 逻辑备份与恢复
&&&& 1)传统的导入导出:exp/imp:
&&&& 2)数据泵导入导出:expdp/impdp
//逻辑备份就是热备 (数据库打开时)数据库对象某一时刻状态,不能运用在media failure(介质)上,逻辑备份的恢复就是还原备份,没有recover的概念,只有restore(还原)的概念。
&&&& 物理备份与恢复
&&&& 1)手工备份与恢复, 通过OS 的命令,完成备份与还原,然后再运用日志进行恢复。
&&&& 2)自动备份与恢复, 利用oracle 的备份恢复工具rman (或其他备份恢复软件),还原与恢复过程自动完成。
//物理备份从方式上可以有一致性备份(冷备)和非一致性备份(热备)
//完整的备份方案应该以物理备份为主,逻辑备份辅助(用于备份一些重要的表)
//逻辑备份比较适合不同平台之间的迁移,而物理备份是从哪来到哪去。
1.6 完全恢复与不完全恢复
media failure 后,需要运用日志进行recover,
1)完全恢复:利用完整备份或部分备份,可以将datafile恢复到failure前得最后一次commit,不会出现数据丢失。
2)不完全恢复:需要运用完整备份和日志将database恢复到过去的某个时间点(或SCN),有数据丢失。
1.7 归档与非归档
归档模式:redo log 写入 archive log
非归档模式:没有archive log, redo log 循环覆盖
&&&&&&&&&&&&&&&&&
手工冷备& 手工热备 RMAN冷备&&& RMAN热备&&& 完整还原&&& 完全恢复&&& 不完全恢复&& &&& ----------------------------------------------------------------------------归档模式:&&&&&
yes &&& yes&&&& yes&&&& yes&&&& yes&&&& yes &&&&&&& yes
非归档模式:&&& yes&&&& no&&&&& yes &&&&&&& no&&&&& yes&&&& no&&&&&&&&&&&&& no
1)非归档模式运行时必须备份那些文件:控制文件和整个数据文件集,并且必须首先干净的关闭数据库(冷备)
2)当处于非归档模式下时,在丢失数据文件后唯一的选择是执行完整的数据库还原,而不能进行恢复。
3)非归档模式下,RMAN只能做冷备。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
第二章:手工备份与恢复
2.1 手工备份:
&&& 1)数据库全备:备份database的所有数据块(datafiles、controlfile)
&&& 2)部分备份:只备份单个表空间或datafile(archivelog 模式)
&&& 3)一致性备份(冷备份):在数据库正常关闭情况下做备份,数据库处于一致性状态。
&&& 4)非一致性备份(热备份):database 在open状态下备份。
2.2 手工备份和恢复的命令
&&& 1)备份和还原使用os 命令
&&& 2)恢复用sqlplus命令:recover
2.3 备份前应对数据库进行检查:
&有关的视图:v$datafile\v$datafile_header\v$controlfile\v$logfile\dba_tablespaces\dba_data_files
&1) 检查需要备份的数据文件
SQL& select name from v$
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
SQL& select file_id,file_name,tablespace_name from dba_data_&&
&2)检查要备份控制文件
SQL& select name from v$
&3)在线redo日志不需要做备份
2.4 手工非一致性备份(热备份)的执行方式及热备份的监控(v$backup)
注意:对只读的表空间不能做热备份,临时表空间不需要备份
&1)在备份前要进入backup mode(backup模式),
&&& 即:执行begin backup (在数据文件上生成检查点,写入scn ,将来恢复的时候以此scn 为起点)
SQL& alter d& &&&& //对整个库做热备份&&
SQL& alter
&&&&&&&&&&&&&&&&&&&&&&&
SQL& alter tablespac&& //对表空间做备份
SQL& alter tablesp
&2)备份期间利用v$backup 监控
SQL& alter tablespa
SQL& select file#,checkpoint_change# from v$datafile_
&&&& FILE# CHECKPOINT_CHANGE#
---------- ------------------
&&&&&&&& 1&&&&&&&&&&& 2414314
&&&&&&&& 2&&&&&&&&&&& 2414314
&&&&&&&& 3&&&&&&&&&&& 2414314
&&&&&&&& 4&&&&&&&&&&& 2414314
&&&&&&&& 5&&&&&&&&&&& 2414314
&&&&&&&& 6&&&&&&&&&&& 2430480&&&&&&&& & //在备份期间 ,scn 不发生变化
&&&&&&&& 7&&&&&&&&&&& 2414314
SQL& select * from v$
&&&& FILE# STATUS&&&&&&&&&&&&&&& CHANGE# TIME
---------- ------------------ ---------- -------------------
&&&&&&&& 1 NOT ACTIVE&&&&&&&&&&&&&&&&& 0
&&&&&&&& 2 NOT ACTIVE&&&&&&&&&&&&&&&&& 0
&&&&&&&& 3 NOT ACTIVE&&&&&&&&&&&&&&&&& 0
&&&&&&&& 4 NOT ACTIVE&&&&&&&&&&&&&&&&& 0
&&&&&&&& 5 NOT ACTIVE&&&&&&&&&&&&&&&&& 0
&&&&&&&& 6 ACTIVE&&&&&&&&&&&&&&& 2-07-30 11:07:19
&&&&&&&& 7 NOT ACTIVE&&&&&&&&& &&&&&&&&0
STATUS 是ACTIVE,表示可以备份相应的数据文件。
$cp test01.dbf test01.bak
备份完毕,执行end backup
SQL& alter tables&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
SQL& select * from v$
&&&& FILE# STATUS& &&&&&&&&&&&&&&CHANGE# TIME
---------- ------------------ ---------- -------------------
&&&&&&&& 1 NOT ACTIVE&&&&&&&&&&&&&&&&& 0
&&&&&&&& 2 NOT ACTIVE&&&&&&&&&&&&&&&&& 0
&&&&&&&& 3 NOT ACTIVE&&&&&&&&&&&&&&&&& 0
&&&&&&&& 4 NOT ACTIVE&&&&&&&&&&&&&&&&& 0
&&& &&&&&5 NOT ACTIVE&&&&&&&&&&&&&&&&& 0
&&&&&&&& 6 NOT ACTIVE&&&&&&&&&&& 2-07-30 11:07:19
&&&&&&&& 7 NOT ACTIVE&&&&&&&&&&&&&&&&& 0
*考点:不能备份临时表空间,甚至不能将它们置于备份模式。
2.5 dbv&& (db verify)检查数据文件是否有坏块
在手工备份前,应该检查datafile 是否有坏块,备份完后对备份也做检查
[oracle@timran admin]$ dbv
DBVERIFY: Release 11.1.0.6.0 - Production on Mon Jul 30 11:11:07 2012
Copyright (c) , Oracle.& All rights reserved.
Keyword&&&& Description&&&&&&&&&&&&&&&&&&& (Default)
----------------------------------------------------
FILE&&&&&&& File to Verify&&&&&&&&&&&&&&&& (NONE)
START&&&&&& Start Block&&&&&&&&&&&&&&&&&&& (First Block of File)
END&&&&&&&& End Block&&&&&&&&&&&&&&&&&&&&& (Last Block of File)
BLOCKSIZE&& Logical Block Size&&&&&&&&&&&& (8192)
LOGFILE&&&& Output Log&&&&&&&&&&&&&&&&&&&& (NONE)
FEEDBACK&&& Display Progress&&&&&&&&&&&&&& (0)
PARFILE&&&& Parameter File&&&&&&&&&&&&&&&& (NONE)
USERID&&&&& Username/Password&&&&&&&&&&&&& (NONE)
SEGMENT_ID& Segment ID (tsn.relfile.block) (NONE)
HIGH_SCN&&& Highest Block SCN To Verify&&& (NONE)
&&&&&&&&&&& (scn_wrap.scn_base OR scn)&&&&&&&&&&
[oracle@timran admin]$
针对某个datafile做坏块检查
[oracle@timran admin]$ dbv file=/u01/oradata/timran11g/system01.dbf
第三章:手工完全恢复
3.1 完全恢复;
通过备份、归档日志、current redo ,将database恢复到failure 前的最后一次commit状态。
3.2 完全恢复的步骤
&&&& 1)restore:还原所有或部分datafile
&&&& 2)recover:利用归档日志和当前的redo日志做恢复
3.3 手工完全恢复可以基于三个级别
&&& recover database:& 关键文件(系统表空间、undo数据文件、控制文件)损坏或数据库的大部分datafile丢失,只能mount状态完成
&&& recover tablespace:非关键表空间损坏,表空间下某些数据文件不能访问,一般是在open下完成
&&& recover datafile:& 非关键文件损坏,单个或几个datafile丢失,可以在mount或open 状态完成
什么是关键数据文件:如果关键文件损坏,数据库将不能维持在open状态,或崩溃或死机!
考点:那些数据文件是关键文件:三个;1)system01.dbf, 2)undo tablespace,3)control file
3.4 恢复过程可以查看的视图:
&&& 1)v$recover_file: 查看需要恢复的datafile
&&& 2)v$recovery_log: 查看recover 需要的redo 日志
&&& 3)v$archvied_log: 查看已经归档的日志
3.5 非归档模式下只能做全备的完整还原,还原后仍会缺失联机日志文件
(因为只备数据文件和控制文件),需要在mount下发出
&&& alter database clear logfile group& &组号&. (如果是在RMAN下还原,这一过程是自动完成的)。
3.6 归档模式下手工完全恢复的实验
前提: 1)有一套datafile全备, 2)使用当前控制文件, (当前控制文件是好的) 3)自备份以来的归档日志和当前联机日志是完整的,
范例1:recover database
说明:由于media failure& 适用于系统表空间出了问题 即system01.dbf损坏。或丢失了大部分datafile,
SQL& select * from scott.
&&&&&&& ID
----------
&&&&&&&& 1
在这个状态下先在os下做一个数据文件和控制文件的冷备。
SQL& shutdown immediate
[oracle@timran ~] $cp /u01/oradata/timran11g/*.dbf& /u01/back1
[oracle@timran ~] $cp /u01/oradata/timran11g/*.ctl& /u01/back1
[oracle@timran ~] $startup
SQL& insert into scott.test values(2);
SQL& select * from scott.
&&&&&&& ID
----------
&&&&&&&& 2
&&&&&&&& 1
SQL&select * from v$
&&& GROUP#&&& THREAD#& SEQUENCE#&&&&& BYTES&&& MEMBERS ARCHIVED STATUS&&&&&&&&&& FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- -----------
&&&&&&&& 1&&&&&&&&& 1&&&&&&& 167&& &&&&&&&&& 1 NO&&&&&& CURRENT&&&&&&&&& 2-7-30 9
&&&&&&&& 2&&&&&&&&& 1&&&&&&& 165&& &&&&&&&&& 1 YES&&&&& INACTIVE&&&&&&&& 2-7-29 1
&&&&&&&& 3&&&&&&&&& 1&&&&&&& 166&& &&&&&&&&& 1 YES&&&&& INACTIVE&&&&&&&& 2-7-29 2
SQL& alter s
SQL& alter system
SQL& select * from v$
&&& GROUP#&&& THREAD# &SEQUENCE#&&&&& BYTES&&& MEMBERS ARCHIVED STATUS&&&&&&&&&& FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- -------- ---------------- ----------
&&&&&&&& 1&&&&&&&&& 1&&&&&&& 170&& &&&&&&&&& 1 NO&&&&&& CURRENT&&&&&&&& &2-7-30 1
&&&&&&&& 2&&&&&&&&& 1&&&&&&& 168&& &&&&&&&&& 1 YES&&&&& INACTIVE&&&&&&&& 2-7-30 1
&&&&&&&& 3&&&&&&&&& 1&&&&&&& 169&& &&&&&&&&& 1 YES&&&&& INACTIVE&&&&&&&& 2-7-30 1
SQL& insert into scott.test values(3);
SQL& select * from scott.
&&&&&&& ID
----------
&&&&&&&& 2
&&&&&&&& 3
&&&&&&&& 1
1)模拟介质失败
[oracle@timran ~]$ rm /u01/oradata/timran11g/*.dbf&&&&& //数据库在打开的情况下就删掉了所有dbf文件
SQL& shutdown abort&&&&&&&&&&&&
&& //数据库直接abort了
ORACLE instance shut down.
2)启动database
SQL& startup&&&&&&&&&&&&&&&&&&& &&
ORACLE instance started.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/u01/oradata/timran11g/system01.dbf'
SQL&select file#,error from v$recover_
&&&& FILE# ERROR
---------- -----------------------------------------------------------------
&&&&&&&& 1 FILE NOT FOUND
&&&&&&&& 2 FILE NOT FOUND
&&&&&&&& 3 FILE NOT FOUND
&&&&&&&& 4 FILE NOT FOUND
&&&&&&&& 5 FILE NOT FOUND
&&&&&&&& 6 FILE NOT FOUND
&&&&&&&& 7 FILE NOT FOUND
SQL& select file#,checkpoint_change# from v$
&&&& FILE# CHECKPOINT_CHANGE#
---------- ------------------
&&&&&&&& 1&&&&&&&&&&& 2436025
&&&&&&&& 2&&&&&&&&&&& 2436025
&&&&&&&& 3&&&&&&&&&&& 2436025
&&&&&&&& 4&&&&&&&&&&& 2436025
&&&&&&&& 5&&&&&&&&&&& 2436025
&&&&&&&& 6&&&&&&&&&&& 2436025
&&&&&&&& 7&&&&&&&&&&& 2436025
SQL& select file#,checkpoint_change# from v$datafile_&
&&&& FILE# CHECKPOINT_CHANGE#
---------- ------------------
&&&&&&&& 1&&&&&&&&&&& 2414314
&&&& &&&&2&&&&&&&&&&& 2414314
&&&&&&&& 3&&&&&&&&&&& 2414314
&&&&&&&& 4&&&&&&&&&&& 2414314
&&&&&&&& 5&&&&&&&&&&& 2414314
&&&&&&&& 6&&&&&&&&&&& 2430480
&&&&&&&& 7&&&&&&&&&&& 2414314
3)启动失败,控制文件和数据文件头的scn不一致,需要做介质恢复。
//此例是数据库open状态在os下直接删除了所有数据文件,所以这里最好不要做日志切换,否则情况复杂。
//控制文件记录的scn 应大于需恢复的数据文件头部的scn,这样才能满足完全恢复的条件。
首先还原所有数据文件
[oracle@timran ~]$ cp /u01/back1/*.dbf /u01/oradata/timran11g
4)恢复database
可以先查看一下恢复时需要的归档日志
SQL& col archive_name for a50;
SQL& select * from v$recovery_
&& THREAD#& SEQUENCE# TIME&&&&&&&&&&&&&&&& ARCHIVE_NAME
---------- ---------- -------------------- ------------------------------------------------
&&&&&&&& 1 ##########
09:39:31& /u01/disk1/timran/arch_1_7.log
&&& &&&&&1 ##########
13:11:22& /u01/disk1/timran/arch_1_8.log
SQL& recover database
ORA-00279: change 2414314 generated at 07/30/:32 needed for thread 1
ORA-00289: suggestion : /u01/disk1/timran/arch_1_7.log
ORA-00280: change 2414314 for thread 1 is in sequence #167
13:21:13 Specify log: {&RET&=suggested | filename | AUTO | CANCEL}
5)打开数据库
SQL& select * from scott.
&&&&&&& ID
----------
&&&&&&&& 2
&&&&&&&& 3
&&&&&&&& 1
范例2:recover tablespace(状态:database open)
说明:针对的是非关键表空间的损坏,基于表空间的完全恢复实际上还是对其下的datafile的恢复
这种情形非常实用,通常是某个非关键表空间不可访问了,并没有造成oracle宕掉, 只需要针对个别有问题的tablespace或datafile去做单独的恢复操作,
也就是说恢复时数据库整体是online的,而局部表空间是offline的,数据库不需要shutdown。
恢复表空间(删除了tablespace的所有的datafile)
1)了解一下当前状态,有个test表空间,
SQL& select file_id,file_name,tablespace_name from dba_data_
&& FILE_ID FILE_NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& TABLESPACE_NAME
---------- -------------------------------------------------- ------------------------------
&&&&&&&& 4 /u01/oradata/timran11g/users01.dbf&&&&&&&&&&&&&&&&&&& USERS
&&&&&&&& 3 /u01/oradata/timran11g/sysaux01.dbf&&&&&&&&&&&&&&&&&& SYSAUX
&&&&&&&& 2 /u01/oradata/timran11g/undotbs01.dbf&&&&&&&&&&&&&&&&& UNDOTBS1
&&&&&&& &1 /u01/oradata/timran11g/system01.dbf&&&&&&&&&&&&&&&&&& SYSTEM
&&&&&&&& 5 /u01/oradata/timran11g/example01.dbf&&&&&&&&&&&&&&&&& EXAMPLE
&&&&&&&& 7 /u01/oradata/timran11g/abcd01.dbf&&&&&&&&&&&&&&&&&&&& ABCD
&&&&&&&& 6 /u01/oradata/timran11g/test01.dbf&&&& &&&&&&&&&&&&&&&&TEST
SQL& conn scott/scott
Connected.
SQL& create table t1 (name char(10))
SQL& insert into t1 values('a');
SQL& select * from t1;
--------------------------------------------------
2)模拟表空间损坏,数据库open下,直接删除表空间下的数据文件&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
[oracle@timran ~]$ rm /u01/oradata/timran11g/test01.dbf
[oracle@timran ~]$
3)查证该表空间上的表不可访问了
SQL& alter system flush buffer_&& //清除data buffer
SQL& conn / as sysdba&&&&&&&&&& //换个session登陆,访问t1表,内存里已经没有了,只好做哦物理读,所以报错!
Connected.
SQL& select * from scott.t1;
select * from scott.t1
ERROR at line 1:
ORA-01116: error in opening database file 6
ORA-01110: data file 6: '/u01/oradata/timran11g/test01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
4)看看scn的情况
SQL& select file#,checkpoint_change# from v$
&&&& FILE# CHECKPOINT_CHANGE#
---------- ------------------
&&&&&&&& 1&&&&&&&&&&& 3550907
&&&&&&&& 2&&&&&&&&&&& 3550907
&&&&&&&& 3&&&&&&&&&&& 3550907
&&&&&&&& 4&&&&&&&&&&& 3550907
&&&&&&&& 5&&&&&&&&&&& 3550907
&&&&&&&& 6&&&&&&&&&&& 3550339
SQL& select file#,checkpoint_change# from v$datafile_
&&&& FILE# CHECKPOINT_CHANGE#
---------- ------------------
&&&&&&&& 1&&&&&&&&&&& 3550907
&&&&&&&& 2&&&&&&&&&&& 3550907
&&&&&&&& 3&&&&&&&&&&& 3550907
&&&&&&&& 4&&&&&&&&&&& 3550907
&&&&&&&& 5&&&&&&&&&&& 3550907
&&&&&&&& 6&&&&&&&&&&&&&&&&& 0
5)数据库open下,使用备份还原这个表空间下的数据文件
[oracle@timran ~]$ cp /u01/back1/test01.dbf /u01/oradata/timran11g
[oracle@timran ~]$
6)表空间offline
SQL& alter tab&&&& //注意:当前的数据库状态是open,数据字典里还有这个表空间。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
7)恢复tablespace
ORA-00279: change 2430480 generated at 07/30/:19 needed for thread 1
ORA-00289: suggestion : /u01/disk1/timran/arch_1_7.log
ORA-00280: change 2430480 for thread 1 is in sequence #167
13:33:28 Specify log: {&RET&=suggested | filename | AUTO | CANCEL}
8)表空间online
SQL& alter ta&&&&& //注意:此时数据库状态一直是open的。
SQL& select * from scott.t1;
--------------------------------------------------
范例3:(recover datafile,database mount或open状态)
恢复datafile, 同范例2不同的是: datafile是在数据库mount状态下恢复的(当然也可以open下进行)
1) 模拟环境:
SQL& insert into scott.t1 values('b');
SQL& select * from scott.t1;
--------------------------------------------------
2)在open 状态下删除datafile
[oracle@timran ~]$ rm /u01/oradata/timran11g/test01.dbf
[oracle@timran ~]$
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
3)关闭数据库
SQL& shutdown abort
4)用备份还原该datafile
[oracle@timran ~]$ cp /u01/backup/test01.dbf /u01/oradata/timran11g
5)mount下恢复datafile
SQL&startup mount
13:48:33 SQL& recover datafile 6;
ORA-00279: change 2430480 generated at 07/30/:19 needed for thread 1
ORA-00289: suggestion : /u01/disk1/timran/arch_1_7.log
ORA-00280: change 2430480 for thread 1 is in sequence #167
13:48:47 Specify log: {&RET&=suggested | filename | AUTO | CANCEL}
7)打开数据库
SQL& select * from scott.t1;
--------------------------------------------------
3.7 手工完全恢复特点小结:
3.7.1 recover database&
& (关键文件损坏,数据库abort,恢复一定是在mount下)
os: 使用cp 还原所有dbf
3.7.2 recover tablespace&
(非关键文件,一般是open下恢复)
os:使用cp 还原该表空间XXX下的所有数据文件
1)alter tablespace XXX
2)recover tablespace XXX;
3)alter tablespace XXX
3.6.3 recover datafile&&
&(非关键文件,database mount or open)
os:cp 还原相关的数据文件(mount)
1)recover datafile 6,8;
os:cp 还原相关的数据文件(open)
1)alter database datafile 6,8
2)recover datafile 6,8;
3)alter database datafile 6,8
完全恢复的条件:
1.有一个备份
2.有一个备份
3.控制文件是新的,是当前的控制文件
第四章:手工不完全恢复(归档模式)
4.1 不完全恢复的特点:&&&&
&&&&& 1)让整个database 回到过去某个时间点,不能避免数据丢失。
&&& &&2)想跳过坏日志而继续恢复所有其他工作是不可能的,前滚没有这个功能(考点)。
&&&& &3)必须以sysdba身份连接进行不完全恢复,普通用户或sysoper都不行(考点)。
&&&&& 4)语句只有recover database until 这种形式,表示整个数据库回到某个时间点或SCN,而until是指恢复在时间点前停止(考点)。
4.2 不完全恢复(Incomplete recover) 适用环境:
&&&&&& 1)在过去的某个时间点重要的数据被破坏。
&&&&&& 2)在做完全恢复时,丢失了归档日志或当前online redo log(考点)
&&&&&& 3)当误删除了表空间时(有备份)
&&&&&& 4)丢失了所有的控制文件,使用备份的控制文件恢复时&&&&&&
4.3 不完全恢复的基本类型:
&&&&& 1)基于时间点 (until time):&&&&&&&&& 使整个数据库恢复到过去的一个时间点前&&&&&&&
&&& 2)基于scn (until change):&&&&&&&&&&& 使整个数据库恢复到过去的某个SCN前
&& 2)基于cancel (until cancel):&&&&&&&&&& 使整个数据库恢复到归档日志或当前日志的断点前
& 3)基于误删除表空间(使用备份的controlfile): 使整个数据库恢复到误删除表空间前
4.4 不完全恢复的操作步骤(恢复模式对象的传统方法):
& &1)先通过logmnr 找到误操作的时间点
&&&&& 2)对现在的database做新全备
&&&&& 3)还原该时间点前所有的datafile
&&&&& 4)在mount状态下,对database做recover,恢复到过去的时间点
&&&&& 5)将恢复出来的table做逻辑备份(exp)
&&&&& 6)再将全备还原
&&&&& 7)将导出的表导入database(imp)
4.5、logminer 工具的使用
&&&& 对redo log 进行挖掘,找出在某个时间点所作的DDL 或DML 误操作(包括:时间点、scn 、sql语句)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
4.6 不完全恢复范例:
恢复过去某个时间点误操作的table
4.6.1 基于时间点的不完全恢复
1)环境:scott用户在test表空间下有个t1表
SQL& conn scott/scott
SQL& create table t1(id int)
SQL& insert into t1 values(1);
SQL& insert into t1 values(2);
SQL& insert into t1 values(3);
SQL& select * from t1;
&&&&&&& ID
----------
&&&&&&&& 1
&&&&&&&& 2
&&&&&&&& 3
2)误删除了t1表,并purge了。
SQL& drop table t1
SQL& select * from v$
&&& GROUP#&&& THREAD#& SEQUENCE#&&&&& BYTES&&& MEMBERS ARCHIVED STATUS&&&&&&&&&& FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- -----------
&&&&&&&& 1&&&&&&&&& 1&&&&&&& 131&& &&&&&&&&& 1 YES&&&&& INACTIVE&&&&&&&&&&&&&& 2-6-13 1
&&&&&&&& 2&&&&&&&&& 1&&&&&&& 132&& &&&&&&&&& 1 YES&&&&& INACTIVE&&&&&&&&&&&&&& 2-6-13 1
&&&&&&&& 3&&&&&&&&& 1&&&&&&& 133&& &&&&&&&&& 1 NO&&&&&& CURRENT&&&&&&&&&&&&&&& 2-7-18 1
SQL& alter s
SQL& select name from v$archived_
--------------------------------------------------------------------------------
/u01/disk1/timran/arch_1_9.log
/u01/disk1/timran/arch_1_0.log
/u01/disk1/timran/arch_1_1.log
/u01/disk1/timran/arch_1_2.log
/u01/disk1/timran/arch_1_3.log& //drop table t1 purge这个动作的日志条目记录在此归档日志里了。
/u01/disk1/timran/arch_1_4.log
/u01/disk1/timran/arch_1_5.log
116 rows selected
3)通过logmr 找出误操作的ddl命令的timestamp 或 san
SQL& show parameter utl&&&&&&&&&&
NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& TYPE&&&&&&& VALUE
------------------------------------ ----------- ------------------------------
create_stored_outlines&&&&&&&&&&&&&& string
utl_file_dir&&&&&&&&&&&&&&&&&&&&&&&& string&&&&& /home/oracle/logmnr&&&& (先建上这个目录)
SQL& execute dbms_logmnr_d.build('dict.ora','/home/oracle/logmnr',dbms_logmnr_d.store_in_flat_file);
SQL& execute dbms_logmnr.add_logfile(logfilename=&'/u01/disk1/timran/arch_1_3.log',options=&dbms_logmnr.new);
SQL& execute dbms_logmnr.add_logfile(logfilename=&'/u01/disk1/timran/arch_1_4.log',options=&dbms_logmnr.addfile);
SQL& execute dbms_logmnr.start_logmnr(dictfilename=&'/home/oracle/logmnr/dict.ora',options=&dbms_logmnr.ddl_dict_tracking);
SQL& select username,scn,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss'),sql_redo from v$logmnr_contents WHERE lower(sql_redo) like 'drop table%';
USERNAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SCN TO_CHAR(TIMESTAMP,'YYYY-MM-DDH SQL_REDO
------------------------------ ---------- ------------------------------ -----------------------------------------------
SCOTT&&&&&&&&&&&&&&&&&&&&&&&&&&&& 2-07-18 16:44:55&&&&&&&&&&& d
SCOTT&&&&&&&&&&&&&&&&&&&&&&&&&&&& 2-07-18 16:45:01&&&&&&&&&&& drop
SCOTT&&&&&&&&&&&&&&&&&&&&&&&&&&&& 2-08-01 17:28:29&&&&&&&&&&& drop table t1
SQL& execute dbms_logmnr.end_
4) 关闭数据库,删除所有dbf,准备做不完全恢复
SQL& shutdown abort
[oracle@timran ~]$ cd /u01/oradata/timran11g
[oracle@timran ~]$ rm *.dbf
5)还原所有备份的数据文件
[oracle@timran ~]$ cp /u01/back1/*.dbf ./
6)根据log miner提供的信息,做基于时间点的不完全恢复
17:31:43 SQL& startup
ORACLE instance started.
Total System Global Area&
Fixed Size&&&&&&&&&&&&&&&&& 1218968 bytes
Variable Size&&&&&&&&&&&&&
Database Buffers&&&&&&&&&
Redo Buffers&&&&&&&&&&&&&&& 7168000 bytes
Database mounted.
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/u01/oradata/timran11g/system01.dbf'
17:33:07 SQL& recover database until time ' 17:28:29';
ORA-00279: change 1917581 generated at 07/18/:34 needed for thread 1
ORA-00289: suggestion : /u01/disk1/timran/arch_1_3.log
ORA-00280: change 1917581 for thread 1 is in sequence #133
17:33:17 Specify log: {&RET&=suggested | filename | AUTO | CANCEL}
Log applied.
Media recovery complete.
7)resetlogs方式打开数据库
SQL& alter dat
SQL& select * from scott.t1;
&&&&&&& ID
----------
&&&&&&&& 1
&&&&&&&& 2
&&&&& &&&3
9)看看resetlogs后,日志sequence重置了(重置是指sequence又从一开始了)()。
SQL& select * from v$
&&& GROUP#&&& THREAD#& SEQUENCE#&&&&& BYTES&&& MEMBERS ARCHIVED STATUS&&&&&&&&&& FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- -----------
&&&&&&&& 1&&&&&&&&& 1&&&&&&&&& 0&& &&&&&&&&& 1 YES&&&&& UNUSED&&&&&&&&&&&&&&&&&&&&&& 0
&&&&&&&& 2&&&&&&&&& 1&&&&&&&&& 0&& &&&&&&&&& 1 YES&&&&& UNUSED&&&&&&&&&&&&&&&&&&&&&& 0
&&&&&&&& 3&&&&&&&&& 1&&&&&&&&& 1&& &&&&&&&&& 1 NO&&&&&& CURRENT&&&&&&&&&&&&&&& 2-8-1 17
4.6.2 基于SCN的不完全恢复
在手工基于scn的不完全恢复的命令子句是change关键字,与基于时间的不完全恢复类似,其命令格式只要将recover命令换成下面即可:
SQL& recover database until change 1918000;&
这里不多赘述了。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
4.6.3 基于cancel的不完全恢复
范例2:在做完全恢复时,丢失了部分归档日志
1)模拟环境
SQL& select * from t1;
&&&&&&& ID
----------
&&&&&&&& 1
&&&&&&&& 2
&&&&&&&& 3
SQL& select * from v$
& &&GROUP#&&& THREAD#& SEQUENCE#&&&&& BYTES&&& MEMBERS ARCHIVED STATUS&&&&&&&&&& FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- -----------
&&&&&&&& 1&&&&&&&&& 1&&&&&&&&& 0&& & &&&&&&&&1 YES&&&&& UNUSED&&&&&&&&&&&&&&&&&&&&&& 0
&&&&&&&& 2&&&&&&&&& 1&&&&&&&&& 0&& &&&&&&&&& 1 YES&&&&& UNUSED&&&&&&&&&&&&&&&&&&&&&& 0
&&&&&&&& 3&&&&&&&&& 1&&&&&&&&& 1&& &&&&&&&&& 1 NO&&&&&& CURRENT&&&&&&&&&&&&&&& 2-8-1 17
SQL& insert into t1 values (111);
SQL& alter s
SQL& select * from v$
&&& GROUP#&&& THREAD#& SEQUENCE#&&&&& BYTES&&& MEMBERS ARCHIVED STATUS&&&&&&&&&& FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- -----------
&&&&&&&& 1&&&&&&&&& 1&&&&&&&&& 2&& &&&&&&&&& 1 YES&&&&& INACTIVE&&&&&&&&&&&&&& 2-8-1 17
&&&&&&&& 2&&&&&&&&& 1&&&&&&&&& 3&& &&&&&&&&& 1 YES&&&&& ACTIVE&&&&&&&&&&&&&&&& 2-8-1 17
&&&&&&&& 3&&&&&&&&& 1&&&&&&&&& 4&& &&&&&&&&& 1 NO&&&&&& CURRENT&&&&&&&&&&&&&&& 2-8-1 17
SQL& insert into t1 values (444);
SQL& alter s
SQL& select * from v$
&&& GROUP#&&& THREAD#& SEQUENCE#&&&&& BYTES&&& MEMBERS ARCHIVED STATUS&&&&&&&&&& FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- -----------
&&&&&&&& 1&&&&&&&&& 1&&&&&&&&& 5&& &&&&&&&&& 1 YES&&&&& INACTIVE&&&&&&&&&&&&&& 2-8-1 17
&&&&&&&& 2&&&&&&&&& 1&&&&&&&&& 6&& &&&&&&&&& 1 YES&&&&& ACTIVE&&&&&&&&&&&&&&&& 2-8-1 17
&&&&&&&& 3&&&&&&&&& 1&&&&&&&&& 7&& &&&&&&&&& 1 NO&&&&&& CURRENT&&&&&&&&&&&&&&& 2-8-1 17
SQL& insert into t1 values (777);
SQL& select * from t1;
&&&&&&& ID
----------
&&&&&&&& 1
&&&&&&&& 2
&&&&&&&& 3&&&&&&&&&
&&&&&& 111&&&&&&&&& //这个动作的日志条目记录在sequence 1里
&&&&&& 444&&&&&&&&& //这个动作的日志条目记录在sequence 4里
&&&&&& 777&&&&&&&&& //这个动作的日志条目记录在sequence 7里
2)模拟数据文件介质损坏,并需要恢复的归档日志有断点
SQL& shutdown abort
[oracle@timran ~]$ cd /u01/oradata/timran11g
[oracle@timran ~]$ rm user01.dbf&&&&&&& 假设users 表空间的datafile损坏
3)再模拟某归档日志损坏
[oracle@timran ~]$ cd /u01/disk1/timran
[oracle@timran ~]$ ll
总计 359672
-rw-r----- 1 oracle oinstall&&&&
16:52 arch_1_9.log
-rw-r----- 1 oracle oinstall -01 17:07 arch_1_0.log
-rw-r----- 1 oracle oinstall&& -01 17:48 arch_1_.log
-rw-r----- 1 oracle oinstall&&&&
17:48 arch_1_.log
-rw-r----- 1 oracle oinstall&&&&
17:48 arch_1_.log
-rw-r----- 1 oracle oinstall&&&
17:49 arch_1_.log
-rw-r----- 1 oracle oinstall&&&&
17:49 arch_1_.log
-rw-r----- 1 oracle oinstall&&&
17:49 arch_1_.log
-rw-r----- 1 oracle oinstall&&&&
17:49 arch_1_.log
[oracle@timran ~]$ mv arch_1_.log arch_1_.delete&
[oracle@timran ~]$ ll
-rw-r----- 1 oracle oinstall&&&&
16:52 arch_1_9.log
-rw-r----- 1 oracle oinstall -01 17:07 arch_1_0.log
-rw-r----- 1 oracle oinstall&& -01 17:48 arch_1_.log
-rw-r----- 1 oracle oinstall&&&&
17:48 arch_1_.log
-rw-r----- 1 oracle oinstall&&&&
17:48 arch_1_.log
-rw-r----- 1 oracle oinstall&&&
17:49 arch_1_.delete //日志不连续了,假设在sequence 4断掉了
-rw-r----- 1 oracle oinstall&&&&
17:49 arch_1_.log
-rw-r----- 1 oracle oinstall&&&
17:49 arch_1_.log
-rw-r----- 1 oracle oinstall&&&&
17:49 arch_1_.log
4)尝试对某数据文件的完全恢复
SQL& startup
ORACLE instance started.
Total System Global Area&
Fixed Size&&&&&&&&&&&&&&&&& 1218968 bytes
Variable Size&&&&&&&&&&&&&
Database Buffers&&&&&&&&&
Redo Buffers& &&&&&&&&&&&&&&7168000 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '/u01/oradata/timran11g/users01.dbf'
SQL& select file#,error from v$recover_&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&& FILE# ERROR
---------- -----------------------------------------------------------------
&&&&&&&& 4 FILE NOT FOUND
[oracle@timran ~]$cp /u01/back1/users01.dbf /u01/oradata/timran11g/users01.dbf //还原单个数据文件,企图基于datafile的完全恢复
06:09:07 SQL& recover datafile 4;
有如下报错:
ORA-00308: cannot open archived log '/u01/disk1/timran/arch_1_.log'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
//完全恢复失败,因为缺少归档日志:(/u01/disk1/timran/arch_1_.log),只能做基于cancel的不完全恢复。
5)使用备份还原所有的datafile
[oracle@timran ~]$ cd /u01/oradata/timran11g
[oracle@timran ~]$ rm *.dbf
[oracle@timran ~]$ cp /u01/back1/*.dbf ./
6)进行基于cancel的不完全恢复
SQL& recover d
ORA-00279: change 1918785 generated at 08/01/:41 needed for thread 1
ORA-00289: suggestion : /u01/disk1/timran/arch_1_.log
ORA-00280: change 1918785 for thread 1 is in sequence #4
17:56:15 Specify log: {&RET&=suggested | filename | AUTO | CANCEL}&
ORA-00308: cannot open archived log '/u01/disk1/timran/arch_1_.log'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
ORA-00308: cannot open archived log '/u01/disk1/timran/arch_1_.log'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
//选auto不好使,再来一遍选cancel.
17:56:21 SQL& recover d
ORA-00279: change 1918785 generated at 08/01/:41 needed for thread 1
ORA-00289: suggestion : /u01/disk1/timran/arch_1_.log
ORA-00280: change 1918785 for thread 1 is in sequence #4
17:56:23 Specify log: {&RET&=suggested | filename | AUTO | CANCEL}
Media recovery cancelled.
//选择cancel ,在丢失的归档日志前终止recover
7) resetlogs打开数据库
SQL& alter dat
SQL& select * from scott.t1;
&&&&&&& ID
----------
&&&&&&&& 1
&&&&&&&& 2
&&&&&&&& 3
&&&&&& 111
4.6.4 基于backup controlfile (备份控制文件)的恢复(有一定复杂性)
不完全恢复中的复杂性是& 恢复数据文件的时候&& 使用备份的控制文件。
1)为什么会使用备份的控制文件? 主要有三种情况:
第一种:控制文件全部丢失。(当然还有trace方法)&&
第二种:全备与当前控制文件不匹配,比如全备后又增/删了表空间。
第三种:resetlogs打开后,数据库开始一个新的化身,若还想恢复打开时间点之后的旧化身的数据,需要与之匹配的备份控制文件。
2)使用备份的控制文件恢复数据库的语法:
recover database usin& //符合条件时,实现完全恢复
recover database until [time|change] usin& //不完全恢复
然后会有如下选项:
Specify log: {&RET&=suggested | filename | AUTO | CANCEL}
AUTO:&&&&& 是指自动的使用archivelog前滚恢复,但一般不包括current log的恢复;
filename:
输入当前文件的路径和文件名,是指current log的恢复
CANCEL: && 退出。
1)在控制文件丢失后进行恢复将会将会出现停机时间,因此不能联机执行控制文件的恢复。
2)使用backup controlfile子句的恢复数据库之后,一律要使用alter database open resetlogs打开数据库。
环境:当前控制文件损坏,数据文件损坏,有全备但之后增加了表空间,并备份了配套的控制文件。
模式:所有数据文件备份(老)------(新建表空间abcd)-----备份控制文件(次新)------日志文件(新)
分析:新建表空间数据文件损坏, 全备里没有该数据文件的备份及控制文件描述,当前控制文件又丢失,只能用备份的控制文件恢复。
SQL& select * from v$
&&&&&& TS# NAME&&&&&&&&&&&&&&&&&&&&&&&&&& INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
&&&&&&&& 0 SYSTEM&&&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
&&&&&&&& 1 SYSAUX&&&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
&&&&&&&& 4 USERS&&&&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
&&&&&&&& 6 EXAMPLE&&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
&&&&&&&& 8 TEST &&&&&&&&&&&&&&&&&&&&&&&&&&YES NO& YES
&&&&&&&& 2 UNDOTBS1&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
&&&&&&&& 3 TEMP&&&&&&&&&&&&&&&&&&&&&&&&&& NO& NO& YES
SQL& select * from v$
&&& GROUP#&&& THREAD#& SEQUENCE#&&&&& BYTES&&& MEMBERS ARC STATUS&&&&&&&&&& FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
&&&&&&&& 1&&&&&&&&& 1&&&&&&&&& 7&& &&&&&&&&& 1 NO& CURRENT&&&&&&&&&&&&&&& 3-01-17 13:55:19
&&&&&&&& 2&&&&&& &&&1&&&&&&&&& 5&& &&&&&&&&& 1 YES INACTIVE&&&&&&&&&&&&&& 3-01-17 13:54:14
&&&&&&&& 3&&&&&&&&& 1&&&&&&&&& 6&& &&&&&&&&& 1 YES INACTIVE&&&&&&&&&&&&&& 3-01-17 13:54:48
SQL& create tablespace abcd datafile '/u01/oradata/timran11g/abcd01.dbf' size 5m;
SQL& create table scott.a1 (name char(10))
SQL& insert into scott.a1 values('a');
SQL& select * from scott.a1;
----------
SQL& alter s
2)备份控制文件
19:17:55 SQL& alter database backup controlfile to '/u01/oradata/timran11g/con.bak1';
3) 模拟abcd01.dbf损坏
[oracle@timran ~]$rm /u01/oradata/timran11g/abcd01.dbf&&&&&&&&& //数据库open状态,删除abcd01.dbf数据文件
SQL& alter system flush buffer_&&&&&&&&&&&&&&&&&& //db buffer 清空
SQL& conn / as sysdba&&&&&&&&&& &&&&&&&&&&&&&&& //换个session查看 a1表物理读失败
SQL& select * from scott.a1;
select * from scott.a1
&&&&&&&&&&&&&&&&&&& *
第 1 行出现错误:
ORA-00376: 此时无法读取文件 3
ORA-01110: 数据文件 3: '/u01/oradata/timran11g/abcd01.dbf'
4)关闭数据库
5)恢复所有数据文件备份,准备做不完全恢复
[oracle@timran timran11g]$ cd /u01/oradata/timran11g
[oracle@timran timran11g]$ rm *.ctl
[oracle@timran timran11g]$ rm *.dbf
[oracle@timran timran11g]$ cp /u01/back1/*.dbf ./
[oracle@timran timran11g]$ cp con.bak1 control01.ctl
[oracle@timran timran11g]$ cp con.bak1 control02.ctl
[oracle@timran timran11g]$ cp con.bak1 control03.ctl
SQL& startup
ORACLE 例程已经启动。
Total System Global Area&
Fixed Size&&&&&&&&&&&&&&&&& 1300352 bytes
Variable Size&&&&&&&&&&&&
Database Buffers&&&&& &&&&& bytes
Redo Buffers&&&&&&&&&&&&&&& 6131712 bytes
数据库装载完毕。
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL& col name for a50;
SQL& select file#,checkpoint_change#,name from v$
&&&& FILE# CHECKPOINT_CHANGE# NAME
---------- ------------------ --------------------------------------------------
&&&&&&&& 1&&&&&&&&&&& 6676574 /u01/oradata/timran11g/system01.dbf
&&&&&&&& 2&&&&&&&&&&& 6676574 /u01/oradata/timran11g/sysaux01.dbf
&&&&&&&& 3&&&&&&&&&&& 6676601 /u01/oradata/timran11g/abcd01.dbf
&&&&&&&& 4&&&&&&&&&&& 6676574 /u01/oradata/timran11g/user01.dbf
&&&&&&&& 5&&&&&&&&&&& 6676574 /u01/oradata/timran11g/example01.dbf
&&&&&&&& 6&&&&&&&&&&& 6676574 /u01/oradata/timran11g/test01.dbf
&&&&&&&& 7&&&&&&&&&&& 6676574 /u01/oradata/timran11g/undotbs01.dbf
SQL& select file#,checkpoint_change#& from v$datafile_
&&&& FILE# CHECKPOINT_CHANGE#
---------- ------------------
&&&&&&&& 1&&&&&&&&&&& 6676343
&&&&&&&& 2&&&&&&&&&&& 6676343
& &&&&&&&3&&&&&&&&&&&&&&&&& 0
&&&&&&&& 4&&&&&&&&&&& 6676343
&&&&&&&& 5&&&&&&&&&&& 6676343
&&&&&&&& 6&&&&&&&&&&& 6676343
&&&&&&&& 7&&&&&&&&&&& 6676343
可以看出:1)file3 在控制文件里记录是abcd01.dbf,而与之对应的数据文件3是不存在的,2)备份的数据备份的scn比控制文件scn的还老。
6)使用备份控制文件恢复
SQL& recover database usin
ORA-00283: 恢复会话因错误而取消
ORA-01110: 数据文件 3: '/u01/oradata/timran11g/abcd01.dbf'
ORA-01157: 无法标识/锁定数据文件 3 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 3: '/u01/oradata/timran11g/abcd01.dbf'
//此错是因为老备份里没有abcd表空间,但只要控制文件里记录了abcd就好办,方法是建一个datafile的空文件,而其中内容可由日志文件recover(前滚)时填补出来。
SQL& alter database create datafile '/u01/oradata/timran11g/abcd01.dbf';&&
---再次使用备份控制文件恢复
SQL& recover database usin
ORA-00308: 无法打开归档日志 '/u01/disk1/timran/arch_1_.log'
ORA-27037: 无法获得文件状态
Linux Error: 2: No such file or directory
Additional information: 3
//archive日志前滚结束了,但当前日志里还有信息需要恢复
//注意: 对于这个例子来说,一定要看清提示:如果当前日志没有归档,则直接要输入filename 不能输入auto,否则open时会失败。
SQL& recover database usin&&&&&&&&&&&& //再次做恢复
指定日志: {&RET&=suggested | filename | AUTO | CANCEL}
/u01/oradata/timran11g/redo03.log&&&&&&&&&&&&&&&&&& //把蛇头(当前日志)给它。
已应用的日志。
完成介质恢复。
7)resetlogs打开数据库
SQL& alter dat
SQL& select * from scott.a1;
----------------------------------------
范例2:(属于第一种情况)
环境:当前控制文件损坏,新建表空间在备份控制文件之后。
模式:全备(老)-----备份控制文件(次新)-----新建表空间timran------日志文件(新)
分析:整个恢复过程中datafile结构有了变化,变化发生在备份控制文件之后,新增了表空间timran,控制文件备份里没有此表空间记录,但日志里有。
SQL& drop tablespace abcd including co
SQL& alter database backup controlfile to '/u01/oradata/timran11g/con.bak2';
SQL& create tablespace timran datafile '/u01/oradata/timran11g/timran01.dbf' size 5m;
SQL& create table scott.r1 (id int)
SQL& insert into scott.r1 values(1);
SQL& select * from v$
&&&&&& TS# NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& INC BIG FLA ENC
---------- -------------------------------------------------- --- --- --- ---
&&&&&&&& 0 SYSTEM&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
&&&&&&&& 1 SYSAUX&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
&&&&&&& 14 TIMRAN&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
&&&&&&&& 4 USERS&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&YES NO& YES
&&&&&&&& 6 EXAMPLE&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
&&&&&&&& 8 TEST&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
&&&&&&&& 3 TEMP&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& NO& NO& YES
&&&&&&&& 2 UNDOTBS1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
SQL& select * from scott.r1;
&&&&&&& ID
----------
&&&&&&&& 1
SQL&& select * from v$
&&& GROUP#&&& THREAD#& SEQUENCE#&&&&& BYTES&&& MEMBERS ARC STATUS&&&&&&&&&& FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
&&&&&&&& 1&&&&&&&&& 1&&&&&&&&& 1&& &&&&&&&&& 1 NO& CURRENT&&&&&&&&&&&&&&& 3-01-17 14:08:18
&&&&&&&& 2&&&&&&&& &1&&&&&&&&& 0&& &&&&&&&&& 1 YES UNUSED&&&&&&&&&&&&&&&&&&&&&& 0
&&&&&&&& 3&&&&&&&&& 1&&&&&&&&& 0&& &&&&&&&&& 1 YES UNUSED&&&&&&&&&&&&&&&&&&&&&& 0
2)模拟新建数据文件损坏
[oracle@timran timran11g]rm timran01.dbf
SQL&alter system flush buffer_
SQL&conn / as sysdba
SQL&select * from scott.r1;
第 1 行出现错误:
ORA-01116: 打开数据库文件 3 时出错
ORA-01110: 数据文件 3: '/u01/oradata/timran11g/timran01.dbf'
ORA-27041: 无法打开文件
Linux Error: 2: No such file or directory
Additional information: 3
3) 关闭数据库
SQL&shutdown abort
4)还原所有数据文件,以老控制文件替换当前控制文件
[oracle@timran timran11g]$ cd /u01/oradata/timran11g
[oracle@timran timran11g]$ rm *.ctl
[oracle@timran timran11g]$ rm *.dbf
[oracle@timran timran11g]$ cp /u01/back1/*.dbf ./
[oracle@timran timran11g]$ cp con.bak2 control01.ctl
[oracle@timran timran11g]$ cp con.bak2 control02.ctl
[oracle@timran timran11g]$ cp con.bak2 control03.ctl
5)启动数据库
SQL& startup
ORACLE 例程已经启动。
数据库装载完毕。
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL& select file#,checkpoint_change#,name from v$
&&&& FILE# CHECKPOINT_CHANGE# NAME
---------- ------------------ --------------------------------------------------
&&&&&&&& 1&&&&&&&&&&& 6677122 /u01/oradata/timran11g/system01.dbf
&&&&&&&& 2&&&&&&&&&&& 6677122 /u01/oradata/timran11g/sysaux01.dbf
&&&&&&&& 4&&&&&&&&&&& 6677122 /u01/oradata/timran11g/user01.dbf
&&&&&&&& 5&&&&&&&&&&& 6677122 /u01/oradata/timran11g/example01.dbf
&&&&&&&& 6&&&&&&&&&&& 6677122 /u01/oradata/timran11g/test01.dbf
&&&&&&&& 7&&&&&&&&&&& 6677122 /u01/oradata/timran11g/undotbs01.dbf
SQL& select file#,checkpoint_change# from v$datafile_
&&&& FILE# CHECKPOINT_CHANGE#
---------- ------------------
&&&&&&&& 1&&&&&&&&&&& 6676343
&&&&&&&& 2&&&&&&&&&&& 6676343
&&&&&&&& 4&&&&&&&&&&& 6676343
&&&&&&&& 5&&&&&&&&&&& 6676343
&&&&&&&& 6&&&&&&&&&&& 6676343
&&&&&&&& 7&&&&&&&&&&& 6676343
6)使用备份控制文件恢复数据库
SQL& recover database usin
ORA-00279: 更改 6676343 (在 01/16/:39 生成) 对于线程 1 是必需的
ORA-00289: 建议: /u01/disk1/timran/arch_1_.log
ORA-00280: 更改 6676343 (用于线程 1) 在序列 #4 中
指定日志: {&RET&=suggested | filename | AUTO | CANCEL}
指定日志: {&RET&=suggested | filename | AUTO | CANCEL}
/u01/oradata/timran11g/redo01.log
ORA-00283: 恢复会话因错误而取消
ORA-01244: 未命名的数据文件由介质恢复添加至控制文件
ORA-01110: 数据文件 3: '/u01/oradata/timran11g/timran01.dbf'
ORA-01112: 未启动介质恢复
SQL& select file#,checkpoint_change#,name from v$
&&&& FILE# CHECKPOINT_CHANGE# NAME
---------- ------------------ --------------------------------------------------
&&&&& &&&1&&&&&&&&&&& 6678002 /u01/oradata/timran11g/system01.dbf
&&&&&&&& 2&&&&&&&&&&& 6678002 /u01/oradata/timran11g/sysaux01.dbf
&&&&&&&& 3&&&&&&&&&&& 6677999 /u01/oracle/dbs/UNNAMED00003&&&&& //注意这个问题,老控制文件不知道之后的timran01.dbf
&&&&&&&& 4&&&&&&&&&&& 6678002 /u01/oradata/timran11g/user01.dbf
&&&&&&&& 5&&&&&&&&&&& 6678002 /u01/oradata/timran11g/example01.dbf
&&&&&&&& 6&&&&&&&&&&& 6678002 /u01/oradata/timran11g/test01.dbf
&&&&&&&& 7&&&&&&&&&&& 6678002 /u01/oradata/timran11g/undotbs01.dbf
SQL& select file#,checkpoint_change# from v$datafile_
&&&& FILE# CHECKPOINT_CHANGE#
---------- ------------------
&&&&&&&& 1&&&&&&&&&&& 6678002
&&&&&&&& 2&&&&&&&&&&& 6678002
&&&&&&&& 3&&&&&&&&&&&&&&&&& 0
&&&&&&&& 4&&&&&&&&&&& 6678002
&&&&&&&& 5&&&&&&&&&&& 6678002
&&&&&&&& 6&&&&&&&&&&& 6678002
&&&&&&&& 7&&&&&&&&&&& 6678002
7)重命名数据文件
SQL& alter database create datafile '/u01/oracle/dbs/UNNAMED00003' as '/u01/oradata/timran11g/timran01.dbf';
//上面的命令一石二鸟,自动完成了两个动作1)加了一个数据文件timran01.dbf,2)重命名控制文件UNNAMED00003为timran01.dbf
SQL& select file#,checkpoint_change#,name from v$
&&&& FILE# CHECKPOINT_CHANGE# NAME
---------- ------------------ --------------------------------------------------
&&&&&&&& 1&&&&&&&&&&& 6678002 /u01/oradata/timran11g/system01.dbf
&&&&&&& &2&&&&&&&&&&& 6678002 /u01/oradata/timran11g/sysaux01.dbf
&&&&&&&& 3&&&&&&&&&&& 6677999 /u01/oradata/timran11g/timran01.dbf
&&&&&&&& 4&&&&&&&&&&& 6678002 /u01/oradata/timran11g/user01.dbf
&&&&&&&& 5&&&&&&&&&&& 6678002 /u01/oradata/timran11g/example01.dbf
&&&&&&&& 6&&&&&&&&&&& 6678002 /u01/oradata/timran11g/test01.dbf
&&&&&&&& 7&&&&&&&&&&& 6678002 /u01/oradata/timran11g/undotbs01.dbf
SQL& recover database usin
ORA-00279: 更改 6677999 (在 01/17/:50 生成) 对于线程 1 是必需的
ORA-00289: 建议: /u01/disk1/timran/arch_1_.log
ORA-00280: 更改 6677999 (用于线程 1) 在序列 #1 中
指定日志: {&RET&=suggested | filename | AUTO | CANCEL}
/u01/oradata/timran11g/redo01.log
已应用的日志。
完成介质恢复。
8)resetlogs打开数据库
SQL& alter dat
SQL& select * from scott.r1;
&&&&&&& ID
----------
&&&&&&&& 1
&&&&&&&& 2
&&&&&&&& 3
范例3 恢复删除的表空间(属于第二种情况)
环境:用户使用正常操作命令删除了表空间及其数据文件,但之后又希望恢复删除的表空间。全备里有这个表空间的数据文件。
模式:全备(老)------控制文件备份(次新)-----删除表空间------所需日志(新)
分析:当用户使用drop tablesapce xxx including contents and datafiles 这条DDL语句后,数据库的结构发生了变更,涉及了三个地方。
a)控制文件
b)该表空间下的数据文件
c)系统表空间(数据字典)(数据字典和DDL操作有关)
特别提醒的是:当前的控制文件里已经没有该表空间的信息了,所以不能使用当前的控制文件做恢复。恢复这个表空间要满足三个条件:
a)要有该表空间的数据文件备份
b)使用不完全恢复(基于时间点或scn)
c)使用备份的控制文件,而这个控制文件里含有该表空间的信息。
SQL& select * from v$
&&&&&& TS# NAME&&&&&&&&&&&&&&&&&&&&&&&&&& INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
&&&&&&&& 0 SYSTEM&&&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
&&&&&&&& 1 SYSAUX&&&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
&&&&&&&& 5 UNDOTBS2&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
&&&&&&&& 4 USERS&&&&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
&&&&&&&& 6 EXAMPLE&&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
&&&&&&&& 8 TEST&&&&&&&&&&&&&&&&&&&&&&&&&& YES NO& YES
&&&&&&&& 3 TEMP&&&&&&&&&&&&&&&&&&&&&&&&&& NO& NO& YES
SQL& create table scott.t1(id int)
SQL& insert into scott.t1 values(1);
SQL& alter s
2)记录下当前scn
SQL& select current_scn from v$
CURRENT_SCN
-----------
&&& 7222848
3)备份控制文件
SQL& alter database backup controlfile to '/u01/oradata/timran11g/con.bak'
4)删除表空间及数据文件
SQL& drop tablespace test including co
SQL& shutdown abort
5)删除所有数据文件和当前控制文件,还原所有数据文件及备份的控制文件
[oracle@timran timran11g]$ rm *.dbf
[oracle@timran timran11g]$ rm *.ctl
[oracle@timran timran11g]$ cp /u01/back1/*.dbf ./
[oracle@timran timran11g]$ cp con.bak control01.ctl
[oracle@timran timran11g]$ cp con.bak control02.ctl
[oracle@timran timran11g]$ cp con.bak control03.ctl
6)启动数据库后,要做基于时间点(或SCN)的不完全恢复
SQL& startup
数据库装载完毕。
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选
SQL& recover database until change 7222848 usin
7)以不完全恢复方式打开数据库
SQL& alter dat
SQL& select * from scott.t1;
&&&&&&& ID
----------
&&&&&&&& 1
范例4 (针对第三种情况)略
第五章:闪回 flashback
5.1 flashback 的功能:
利用flashback log 或 undo data 对database 可以恢复到过去某个点,可以作为不完恢复的补充
5.2 flashback分类:(DBA-II PPT:253)
&& 1)flashback drop
&& 2)flashback query (新添flashback database archive)
&& 3) flashback table
&& 4)flashback version query
&& 5)flashback transaction
&& 6)flashback database
5.2.1闪回drop 又名闪回删除
1)每个用户都有一个回收站,drop table时(非purge),实际上把table改名后放入了recyclebin(回收站)。
SQL& show parameter recyclebin
NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& TYPE&&&&&&& VALUE
------------------------------------ ----------- ------------------------------
recyclebin&&&&&&&&&&&&&&&&&&&&&&&&&& string&&&&& ON
//如果参数设为off 就取消了用户的回收站,那么当你drop table就相当于purge了。
SQL& conn scott/
SQL& select *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
TNAME&&&&&&&&&&&&&&&&&&&&&&&&& TABTYPE& CLUSTERID
------------------------------ ------- ----------
DEPT&&&&&&& &&&&&&&&&&&&&&&&&&&TABLE
EMP&&&&&&&&&&&&&&&&&&&&&&&&&&& TABLE
BONUS&&&&&&&&&&&&&&&&&&&&&&&&& TABLE
SALGRADE&&&&&&&&&&&&&&&&&&&&&& TABLE
TEST&&&&&&&&&&&&&&&&&&&&&&&&&& TABLE
T01&&&&&&&&&&&&&&&&&&&&&&&&&&& TABLE
T02&&&&&&&&&&&&&&&&&&&&&&&&&&& TABLE
SQL& drop table t01;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
SQL&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
ORIGINAL NAME&&& RECYCLEBIN NAME&&&&&&&&&&&&&&& OBJECT TYPE& DROP TIME
---------------- ------------------------------ ------------ -------------------
T01&&&&&&&&&&&&& BIN$qrJLbL74ZgvgQKjA8Agb/A==$0 TABLE&&&&&&& :06:52:38
假设如果回收站里有两个t01表,注意闪回和清除缺省含义&&&&&&&&&&& create table a (name char(10));&& insert into a values('timran');&&&
看以下两条语句:
SQL& flashback table t01& & //闪回的是最新的那个t01的表(考点)。
SQL& purge table t01;&&&&&&&&&&&&&& //清除的是最老的那个t01表(考点)。
避免混淆 可以直接点出回收站里的表名
SQL& flashback table " BIN$qrJLbL74ZgvgQKjA8Agb/A==$0" to befroe drop
SQL& purge table "BIN$qrJLbL74ZgvgQKjA8Agb/A==$0"
SQL&&& &&&&&&&&&& //清空回收站&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
SQL&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
3)如何恢复同一个schema下准备闪回的表已有同名的对象存在,闪回drop需要重命名.
SQL&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&SQL& create table test as select *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
SQL& select *&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&
TNAME&&&&&&&&&&&&&&&&&&&&&&&&& TABTYPE& CLUSTERID
------------------------------ ------- ----------
DEPT&&&&&&&&&&&&&&&&&&&&&&&&&& TABLE
EMP&&&&&&&&&&&&&&&&&&&&&&&&&&& TABLE
BONUS&&&&&&&&&&&&&&&&&&&&&&&&& TABLE
SALGRADE&&&&&&&&& &&&&&&&&&&&&&TABLE
BIN$qrJLbL76ZgvgQKjA8Agb/A==$0 TABLE
TEST&&&&&&&&&&&&&&&&&&&&&&&&&& TABLE
06:56:50 SQL&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
ORIGINAL NAME&&& RECYCLEBIN NAME&&&&&&&&&&&&&&& OBJECT TYPE& DROP TIME
---------------- ------------------------------ ------------ -------------------
TEST&&&&&&&&&&&& BIN$qrJLbL76ZgvgQKjA8Agb/A==$0 TABLE&&&&&&& :06:56:36
SQL& flashback table&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
flashback table test to before drop
ERROR at line 1:
ORA-38312: original name is used by an existing object
SQL& flashback table test to before drop rename to test_&& &
//闪回drop语句中使用了重命名
&& //把b表重命名为a
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
4)system 表空间的表没有闪回drop,drop table系统表空间的表会直接被删除(考点)
SQL& conn /as sysdba&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
SQL& create table test as select * from user_&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
SQL&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SQL&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
5)如果一个表上面有索引和约束,drop后再闪回表,索引和约束还在吗?
SQL& select *
TNAME&&&&&&&&&&&&&&&&&&&&&&&&& TABTYPE& CLUSTERID
------------------------------ ------- ----------
BONUS&&&&&&&&&&&&&&&&&&&&&&&&& TABLE
DEPT&&&&&&&&&&&&&&&&&&&&&&&&&& TABLE
EMP&&&&&&&&&&&&&&&&&&&&&&&&& &&TABLE
SALGRADE&&&&&&&&&&&&&&&&&&&&&& TABLE
SQL& create table t (id int,name char(10));
SQL& alter table t add constraint pk_t primary key(id);
SQL& insert into t values (1,'sohu');
SQL& insert into t values (2,'sina');
SQL& select *
&&&&&&& ID NAME
---------- ----------
&&&&&&&& 1 sohu
&&&&&&&& 2 sina
-----看一眼约束和索引
SQL& select * from user_
SQL& select * from user_
SQL& select *
TNAME&&&&&&&&&&&&&&&&&&&&&&&&& TABTYPE& CLUSTERID
------------------------------ ------- ----------
BIN$yF3hbvIcioTgQAB/AQAJlg==$0 TABLE
BONUS&&&&&&&&&&&&&&&&&&&&&&&&& TABLE
DEPT&&&&&&&&&&&&&&&&&&&&&&&&&& TABLE
EMP&&&&&&&&&&&&&&&&&&&&&&&&&&& TABLE
SALGRADE&&&&&&&&&&&&&&&&&&&&&& TABLE
-----表被drop到回收站,再看一眼约束和索引
SQL& select * from user_&&&&&&& //索引不见了
SQL& select * from user_&&&&&&& //约束有,但乱码
SQL& flashback ta
闪回完成。
SQL& select *
&&&&&&& ID NAME
---------- ----------
&&&&&&&& 1 sohu
&&&&&&&& 2 sina
-----再看约束和索引
SQL& select * from user_&&&&&&& //索引回来了,但乱码
SQL& select * from user_&&&&&&& //约束也在,但乱码
-----分别重命名索引和约束
SQL& alter index "BIN$yF3hbvIbioTgQAB/AQAJlg==$0" rename to pk_t;
SQL& alter table t rename constraint "BIN$yF3hbvIaioTgQAB/AQAJlg==$0" to pk_t;
-----再看约束和索引
5.2.2 闪回查询 flashback query:(用于DML 误操作)
利用在undo tablespace 里已经被提交的undo block(未被覆盖),可以通过查询的方式将表里面的记录回到过去某个时间点。
通过设置undo_retention参数设置前镜像的保留时间。
查询的语法:
select&& &&&& as of scn | timestamp
create table scott.student (sno int,sname char(10),sage int);
insert into scott.student values(1,'Tom',21);
insert into scott.student values(2,'Kite',22);
insert into scott.student values(3,'Bob',23);
insert into scott.student values(4,'Mike',24);
SQL& select * from scott.
&&&&&& SNO SNAME&&&&&&&&&&& SAGE
---------- ---------- ----------
&&&&&&&& 1 Tom&&&&&&&&&&&&&&& 21
&&&&&&&& 2 Kite&&&&&&&&&&&&&& 22
&&&&&&&& 3 Bob&&&&&&&&&&&&&&& 23
&&&&&&&& 4 Mike&&&&&&&&&&&&&& 24
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss')&&& //取时间1
select current_scn from v$& //取scn 1
delete scott.student where sno=1;
select * from scott.
&&&&&& SNO SNAME&&&&&&&&&&& SAGE
---------- ---------- ----------
&&&&&&&& 2 Kite&&&&&&&&&&&&&& 22
&&&&&&&& 3 Bob&&&&&&&&&&&&&&& 23
&&&&&&&& 4 Mike&&&&&&&&&&&&&& 24
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss')&&& //取时间2
select current_scn from v$&& //取scn 2
update scott.student set sage=50;
select * from scott.
&&&&&& SNO SNAME&&&&&&&&&&& SAGE
---------- ---------- ----------
&&&&&&&& 2 Kite&&&&&&&&&&&&&& 50
&&&&&&&& 3 Bob&&&&&&&&&&&&&&& 50
&&&&&&&& 4 Mike&&&&&&&&&&&&&& 50
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss')&&& //取时间3
select current_scn from v$取scn 3
select * from student as of timestamp to_date('取时间2','yyyy-mm-dd hh24:mi:ss');
select * from student as of scn 取scn1;
create table student2 as select * from scott.student as of scn 取scn1;
rename student2
*考点:可以查询以前某个时间点的数据库,但是永远不能对过去时间点得数据库做DML操作。
5.2.3 闪回表& flashback table
闪回表是把表里的数据 回退 到以前的某个时刻或者SCN上。自动恢复相关的属性,包括索引、触发器等。前提是对表启用行移动。
语法:&&&&
flashback table &table_name& to timestamp | scn
alter table student
flashback table student to scn XXXXX
把表的时间一下子闪回到所指的scn。
注意:sys的表不能闪回。
3)闪回归档查询补充11g新特性FLASHBACK ARCHIEVE
3.1)概念:
无限期的存储表行的前镜像,通过后台进程FBDA,捕捉必要的数据并将其保存在归档上,然后可以使用常规闪回查询命令查询需要的数据,但闪回可以回朔到多年以前。
闪回归档要求创建一个或多个表空间,然后为每个归档指定保留期并指定归档保护的表和一个可选的配额,指定原有的表空间技术上是可行的,但是oracle建议它们与常规的数据分开更好。
3.2)一道考题的问题:有两个版本的答案,我们来实验一下:
Note the output of
SQL& SELECT flashback_archieve_name, status FROM dba_flashback_
FLASHBACK_ARCHIEVE_NAME STATUS
You executed the following command to enable Flashback Data Archive on the
EXCHANGB_PATE table:
ALTER TABLE exchange_rate FLASHBACK ARCHIEVE;
What is the outcome of this command?
A.The table uses the default Flashback Data Archive.
B.The Flashback Data Archive Is created In the SYSAUX tablespace.
C.The Flashback Data Archive is created in the same tablespace where the tables are stored.
D.The command generates an error because no flashback Data Archive name is specified and there is no default Flashback Data Achieve.
答案:a或d都有
首先需要建一个表空间,然后当建立flashback archive 在这个表空间上时 你可以带上关键字default, 这样status状态就会显示出default,&
(这个题却没有显示出default,说明前面flashback archive的时候没有加default关键字)然后,你指定表使用这个表空间时不用做任何说明就可以了,所以这个答案应该是d
下面是我做的测试, 看看default有与没有的差异:
SQL& create

我要回帖

更多关于 实际控制人 的文章

 

随机推荐