Oracle20060626.docx

上传人:王** 文档编号:1636997 上传时间:2024-11-25 格式:DOCX 页数:15 大小:43.60KB
下载 相关 举报
Oracle20060626.docx_第1页
第1页 / 共15页
Oracle20060626.docx_第2页
第2页 / 共15页
Oracle20060626.docx_第3页
第3页 / 共15页
Oracle20060626.docx_第4页
第4页 / 共15页
Oracle20060626.docx_第5页
第5页 / 共15页
Oracle20060626.docx_第6页
第6页 / 共15页
Oracle20060626.docx_第7页
第7页 / 共15页
Oracle20060626.docx_第8页
第8页 / 共15页
Oracle20060626.docx_第9页
第9页 / 共15页
Oracle20060626.docx_第10页
第10页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Oracle20060626.docx》由会员分享,可在线阅读,更多相关《Oracle20060626.docx(15页珍藏版)》请在优知文库上搜索。

1、OraeIe-快速删除重复的记录做工程的时候,一位同事导致揖的时候,不小心把一个表中的数据全都搞里了,也就是说,这个表里所有的记录都有一条重复的。这个表的数据是千万税的.而且是生产系统。也就是说,不能把所有的记录都删除,而且必须快速的把重复记录剧掉.我此,总结了一下部除IE复记录的方法,以及每种方法的优能点.为了陈诉方便,假设表名为Tb1.表中有三列CO1.1.co1.2.coI3.其中CO1.I.co1.2是主键,并且.co1.1.,co1.2上加了索引。1.通过创立崂时表可以杷数据先导入到一个临时表中,然后初除原求的数据,理把数据导回原表.SQ1.语句如下:createtab1.etb1.

2、_tnp(se1.ectdistinct*fr011tb1.);truncatetab1.etb1.;清空表记录insertintotb1.se1.ect*fromtb1.tnp;/将他时表中的数据插回来.这种方法可以实现需求,但是很明显,对于一个千万级记录的表.这种方法很慢,在生产系铳中,这会给系统带来很大的开销,不可行.2、利用rowid在OraC1.e中.每一条记录都有一个rid.rowid在整个做据串中是唯一的.rowid确定了等好记录悬OraCIC中的薪一个数据文件、块.行上.在重复的记录中,可能所有列的内容都相同,但rowid不会相同.SQ1.语句如下:de1.etefromtb1

3、.whererowidin(se1.ecta.rowidfromtb1.a.tb1.bwherea.rowidb.rowidanda.co1.1.=b.co1.1.anda.co12=b.co1.2)如果已拄知道得条记录只有一条重复的,这个SqI语句适用.但是如果每条记录的重复记录有N条,这个N是未知的,就要考虑适用下面这种方法了。3.利用max或min语数这里也要使用roid.与上面不同的是给合InaX或min函数来实现.SQ1.语句如下de1.etefromtb1.awhererowidnotin(se1.ectmax(b.rowid)fromtb1.bwherea,co1.1.=b.co

4、1.1.anda.co1.2=b.COI2):/这里BaK使用min也可以或者用下面的语句de1.etefromtb1.awhererowidBtb1.whererowidnotin(se1.ectmax(rowid)fromtb1.tgroupbyt.co1.1.t.co1.2);de1.etefromtb1.where(co1.1.,co12)in(se1.ectco1.1,co1.2froratb1.groupbyco1.1.co1.2havingcount()1)androwi1)还有一种方法,对于表中有重复记录的记荥比较少的,并且有索引的情况,比较适用。但定co1.1.,co1.2上

5、有安引,并且Ib1.表中有更复记录的记录比较少.SQ1.语句如下4,利用grouphy.梗商效率Orac1.e物理结构故障的处理方法:Orac1.e物理结构故障是指构成数据库的各小物理文件损坏而导致的各种数据库故障。这些故障可能是由于使件故障造成的,也可能是人为误操作而引起。所以我们首先要判断问题的起因,妞果是硬件故獐则首先妾留决硬件问题。在无硬件问题的前找下我们才能按照下面的处理方发来进一步处理。控制文件般坏:控制文件记录了关于QraC1.e的更要配置信息,如数据阵名.字符集名字,各个数据文件、日志文件的位置等等恬息。控制文件的期坏,会导致数据库异常关闭。一旦缺少控制文件,数据库也无法启动,

6、这是一种比较严重的结误.可以通过查询数据库的日志文件未定位报坏了的控制文件。日志文件位于ORAC1.EBSEadmin/bdiuip/a1.ert_ORC1.ora.提坏单个控制文件:1 .确保或搪库已经关闭,如果没有用下面的命令来关诩战樨库:Svnigr1.shutdownimnedia1.e:2 .杳看初始化文件?ORAC1.EBASEZadminp.琏定所有控制文件的路径。3 .用操作系统命令将其它正稳的控制文件期差错误的控制文件.4 .用下面的命令亘新启时数据库svr三gr1.startup:5 .用适当的方法进行数据库全各份。损坏所有的控制文件:1 .确保数据库已经关闭.如果没有用下

7、面的令令来关闭败据库:svrgr1.shu1.downimnediatc;2 .从相应的备份转果集中恢复量近的控制文件.对于没有采用带库备份的点可以直接从松楷上将最近的控制文件备份恢复到相应目录:对于采用带库备份的点用相应的rman牌水未恢宏最近的控制文件,3 .用下面的命令来创立产生起据库控制文件的脚本:svr-Bgr1.startumount:svr三gr1.a1.terdatabasebackupcontro1.tracenoreset1.ogs;4 .修改第三步产生的trace文件,将其中关于创立控制文件的一局部语句挎贝出来并做些修改.使得它能够表达最新的数据库结构。假设产生的Sq1.

8、文件名字为CreateCOn1.rO1.Sq1.注心TraCe文件的具体路径可以在执行完第3)步操作后查看$0RAC1.EBASEadminbdu三pa1.crtORC1.ora文件来咬定。5 .用下面命令If新创立控制文件:SVrBgrIshutdownabort;svr三gr1.startupno11xunt:svrBgr1.Ccreatecontro1.sq1.:6 .用适当的方法进行数据库全各份。重做日志文件损坏:数据库的所有增,电.改都会记录入重做日志。如果当前激活的重做日志文件损坏,会导致数据库异常关闭。非激活的束儆日志最终也会因为日志加换变为激活的定做日志,所以损坏的芈班活的更做

9、日志最终也会导致效据库的舁常终止.在ipas/mSwitch中等组重做日志只有一个成员,所以在下面的分析中只考虑4做日志盥损坏的情况,而不考虑单个重做日志成员损坏的情况.确定报坏的重做日志的位置及其状态:1 .如果数据库处于可用状态:se1.ectfromv1.ogfi)e;svrgr1.se1.ect*fro41og:2 .如果数据库处于巳羟异常终止:sv111.grstartupmount:svrgr1.se1.ect*froIogfi1.e:sv11gr1.se1.ect*frov$1.og:其中,I。RfiIC的状态为INVAUD表示这组日志文件出现巳羟损坏;Iog状态为InaC1.i

10、vc:表示更俄日志文件处于非三活状态;Active:表示重做日志文件处于激活状态;CUrrenI:表示是重做日志为当前正在使用的日志文仇报坏的日志文件处于非逾活状态:1 .剧除相应的日志坦:Svmgr1.aIterdatabasedrop1.oggroup_number:2 .更新创立相应的日志组:svt三gr1.a1.terdatabaseadd1.oggroupUII1.ber(,1.og_.-)size1or_:损坏的日志文件欠于激活状态且力非当前日志:1.去除相应的日志组:svf三gr1.a1.terdatabasec1.earunarchived1.og8roup_nuber;损坏的

11、日志文件为当前活动日志文件:用命令去除相应的日志组:svrgr1.a1.terdatabasec1.earunarchived1.oggroup_nunber;如果去除失!,则只能做参于时间点的不完全恢复.翻开数据库并且用适当的方法迸行数据库全备份:SvrBgrDa1.terdatabaseopen;局前数据文件损坏:若损坏的数据文件属于非SyStem袋空同,则数据库仍掇可以处于镀开状态可以迸行操作,只是损坏的数据文件不能访问。这时在数据库融开状杰下可以单独讨掇坏的数据文件迸行恢复。若是SyStem表空间的数据文件损坏则数据库系统会异常终止.这时数据库只能以Mount方式翻开,然后再对数据文件

12、进行恢复,可以述it查看戡禺库日志文件来判断当前损坏的数据文件到底是否属于SyStem表空间。非SyStenI表空间的数据文件筑坏1.礴定损坏的文件名字:svr三gr1.se1.ectnamefromv$datastatus=*INVA1.ID:2,将损坏的数据文件处于。ff1.inc犹态:Svt-Bgr1.aIterdatabasedatafi1.e4dataoff1.ine;3.从相应的备份结果集中恢复关于这个数据文件的最近的备份。对于没有采用带库备份的点可以直接从磁带上恢复:对于用争星备份的点用相应的man脚本来恢复。1.恢复数据文件:Svmgr1.aIterdatabaserecove

13、rdatafiIe;5 .使数据库文件OnIine:svrgr1.a1.terdatabasedatafi1.e*dataon1.ine;6 .用适当的方法进行数据库全备份.SyStg表空向的数据文件损坏:1 .以InoUnt方式启动数据库svrBgr1.startupmount:2 .从相应的备份结果集中恢复关于这个数据文件的最近的备份.对于没有栗用带库备份的点可以直接从磁帮上恢复:对于用号库各份的点用相应的Bn卿本来恢复。3 .恢复SySte表空间:svrHgr1.a1.terdatabaserecoverdatafi1.edata;4 .翻开数据库:svr三gr1.a1.terdatab

14、aseopen:5 .用适当的方法进行数据库全各份。表空间损坏:若非SyStem表空间已经损坏,则数据庠仍然可以处于翻开状态可以进行操作,只是损坏的夫空间不能访问。这样在数据库JS开状态下可以单独好损坏的表空间进行恢复。若是SySu表空间损坏则数据库系统会异常终止。这时数据库只能以J1.oUnt方式翻开,然后再对表空间进行恢复.可以通过查看数据库日志文件来判断当前提坏的表空间是否是system表空间.非system表空间损坏:1 .耨损坏的表空间处于。fCine状态:Svmgr1.aItertab1.espacetab1.espacename,off1.ine:2 .从相应的备份结果集中恢复关于这个表空间最近的备份。对于没有采用带军备份的点可以直接从磁带上恢复:常于用带库备份的点用相应的HBan脚本来恢复.3 .恢复表空间:svr三gr1.aIterdatabaserecovertab1.espacetab1.espacename;4 .使表空间OnIine:svr,sr1.a1.tertab1.espace*tabiespacc_nameon1.ine:5 .用适当的方法进行数据库全备份.syste表空向损坏:1.以mount力式启动数据库svmgr1.startupmount:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 数据库

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!