好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Oracle物理结构故障的处理方法.doc

24页
  • 卖家[上传人]:桔****
  • 文档编号:552755808
  • 上传时间:2022-12-30
  • 文档格式:DOC
  • 文档大小:53KB
  • / 24 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • Oracle-迅速删除反复的记录做项目的时候,一位同事导数据的时候,不小心把一种表中的数据全都搞重了,也就是说,这个表里所有的记录均有一条反复的这个表的数据是千万级的,并且是生产系统也就是说,不能把所有的记录都删除,并且必须迅速的把反复记录删掉对此,总结了一下删除反复记录的措施,以及每种措施的优缺陷为了陈诉以便,假设表名为Tbl,表中有三列col1,col2,col3,其中col1,col2是主键,并且,col1,col2上加了索引1、通过创立临时表可以把数据先导入到一种临时表中,然后删除原表的数据,再把数据导回原表,SQL语句如下:create table tbl_tmp (select distinct * from tbl);truncate table tbl;//清空表记录insert into tbl select * from tbl_tmp;//将临时表中的数据插回来这种措施可以实现需求,但是很明显,对于一种千万级记录的表,这种措施很慢,在生产系统中,这会给系统带来很大的开销,不可行2、运用rowid在Oracle中,每一条记录均有一种rowid,rowid在整个数据库中是唯一的,rowid拟定了每条记录是Oracle中的哪一种数据文献、块、行上。

      在反复的记录中,也许所有列的内容都相似,但rowid不会相似SQL语句如下:delete from tbl where rowid in (select a.rowid from tbl a, tbl b where a.rowid>b.rowid and a.col1=b.col1 and a.col2 = b.col2)如果已经懂得每条记录只有一条反复的,这个sql语句合用但是如果每条记录的反复记录有N条,这个N是未知的,就要考虑合用下面这种措施了3、运用max或min函数这里也要使用rowid,与上面不同的是结合max或min函数来实现SQL语句如下delete from tbl a where rowid not in (select max(b.rowid) from tbl b where a.col1=b.col1 and a.col2 = b.col2);//这里max使用min也可以或者用下面的语句delete from tbl a where rowid < (select max(b.rowid) from tbl b where a.col1=b.col1 and a.col2 = b.col2);//这里如果把max换成min的话,前面的where子句中需要把"<"改为">"跟上面的措施思路基本是同样的,但是使用了group by,减少了显性的比较条件,提高效率。

      SQL语句如下:delete from tbl where rowid not in (select max(rowid) from tbl t group by t.col1, t.col2 );delete from tbl where (col1, col2) in (select col1,col2 from tbl group by col1,col2 having  count(*) > 1) and rowid  not in (select  min(rowid) from tbl group by col1,col2 having  count(*) > 1)尚有一种措施,对于表中有反复记录的记录比较少的,并且有索引的状况,比较合用假定col1,col2上有索引,并且tbl表中有反复记录的记录比较少,SQL语句如下4、运用group by,提高效率Oracle物理构造故障的解决措施:Oracle物理构造故障是指构成数据库的各个物理文献损坏而导致的多种数据库故障这些故障也许是由于硬件故障导致的,也也许是人为误操作而引起因此我们一方面要判断问题的起因,如果是硬件故障则一方面要解决硬件问题。

      在无硬件问题的前提下我们才干按照下面的解决方发来进一步解决控制文献损坏:控制文献记录了有关Oracle的重要配备信息,如数据库名、字符集名字、各个数据文献、日记文献的位置等等信息控制文献的损坏,会导致数据库异常关闭一旦缺少控制文献,数据库也无法启动,这是一种比较严重的错误可以通过查询数据库的日记文献来定位损坏了的控制文献日记文献位于$ORACLE_BASE/admin/bdump/alert_ORCL.ora.损坏单个控制文献:1. 保证数据库已经关闭,如果没有用下面的命令来关闭数据库:svrmgrl>shutdown immediate;2. 查看初始化文献$ORACLE_BASE/admin/pfile/initORCL.ora,拟定所有控制文献的途径3. 用操作系统命令将其他对的的控制文献覆盖错误的控制文献4. 用下面的命令重新启动数据库svrmgrl>startup;5. 用合适的措施进行数据库全备份损坏所有的控制文献:1. 保证数据库已经关闭,如果没有用下面的命令来关闭数据库:svrmgrl>shutdown immediate;2. 从相应的备份成果集中恢复近来的控制文献对于没有采用带库备份的点可以直接从磁带上将近来的控制文献备份恢复到相应目录;对于采用带库备份的点用相应的rman脚本来恢复近来的控制文献。

      3. 用下面的命令来创立产生数据库控制文献的脚本:svrmgrl>startup mount;svrmgrl>alter database backup controlfile to trace noresetlogs;4. 修改第三步产生的trace文献,将其中有关创立控制文献的一部分语句拷贝出来并做些修改,使得它可以体现最新的数据库构造假设产生的sql文献名字为createcontrol.sql.注意:Trace文献的具体途径可以在执行完第3)步操作后查看$ORACLE_BASE/admin/bdump/alert_ORCL.ora文献来拟定5. 用下面命令重新创立控制文献:svrmgrl>shutdown abort;svrmgrl>startup nomount;svrmgrl>@createcontrol.sql;6. 用合适的措施进行数据库全备份重做日记文献损坏:数据库的所有增、删、改都会记录入重做日记如果目前激活的重做日记文献损坏,会导致数据库异常关闭非激活的重做日记最后也会由于日记切换变为激活的重做日记,因此损坏的非激活的重做日记最后也会导致数据库的异常终结在ipas/mSwitch中每组重做日记只有一种成员,因此在下面的分析中只考虑重做日记组损坏的状况,而不考虑单个重做日记成员损坏的状况。

      拟定损坏的重做日记的位置及其状态:1. 如果数据库处在可用状态:select * from v$logfile;svrmgrl>select * from v$log;2. 如果数据库处在已经异常终结:svrmlgr>startup mount;svrmgrl>select * from v$logfile;svrmgrl>select * from v$log;其中,logfile的状态为INVALID表达这组日记文献浮现已经损坏;log状态为Inactive:表达重做日记文献处在非激活状态;Active: 表达重做日记文献处在激活状态;Current:表达是重做日记为目前正在使用的日记文献损坏的日记文献处在非激活状态:1. 删除相应的日记组:svrmgrl>alter database drop logfile group group_number;2. 重新创立相应的日记组:svrmgrl>alter database add log file group group_number (’log_file_descritpion’,…) size log_file_size;损坏的日记文献处在激活状态且为非目前日记:1. 清除相应的日记组:svrmgrl>alter database clear unarchived logfile group group_number;损坏的日记文献为目前活动日记文献:用命令清除相应的日记组:svrmgrl>alter database clear unarchived logfile group group_number;如果清除失败,则只能做基于时间点的不完全恢复。

      打开数据库并且用合适的措施进行数据库全备份:svrmgrl>alter database open;部分数据文献损坏:若损坏的数据文献属于非system表空间,则数据库仍然可以处在打开状态可以进行操作,只是损坏的数据文献不能访问这时在数据库打开状态下可以单独对损坏的数据文献进行恢复若是system表空间的数据文献损坏则数据库系统会异常终结这时数据库只能以Mount方式打开,然后再对数据文献进行恢复可以通过查看数据库日记文献来判断目前损坏的数据文献究竟与否属于system表空间非system表空间的数据文献损坏1. 拟定损坏的文献名字:svrmgrl>select name from v$datafile where status=’INVALID’;2. 将损坏的数据文献处在offline状态:svrmgrl>alter database datafile ‘datafile_name’ offline;3. 从相应的备份成果集中恢复有关这个数据文献的近来的备份对于没有采用带库备份的点可以直接从磁带上恢复;对于用带库备份的点用相应的rman脚本来恢复4. 恢复数据文献:svrmgrl>alter database recover datafile ‘file_name’;5. 使数据库文献online:svrmgrl>alter database datafile ‘datafile_name’ online;6. 用合适的措施进行数据库全备份。

      system表空间的数据文献损坏:1. 以mount方式启动数据库svrmgrl>startup mount;2. 从相应的备份成果集中恢复有关这个数据文献的近来的备份对于没有采用带库备份的点可以直接从磁带上恢复;对于用带库备份的点用相应的rman脚本来恢复3. 恢复system表空间:svrmgrl>alter database recover datafile ‘datafile_name’;4. 打开数据库:svrmgrl>alter database open;5. 用合适的措施进行数据库全备份表空间损坏:若非system表空间已经损坏,则数据库仍然可以处在打开状态可以进行操作,只是损坏的表空间不能访问这样在数据库打开状态下可以单独对损坏的表空间进行恢复若是system表空间损坏则数据库系统会异常终结这时数据库只能以Mount方式打开,然后再对表空间进行恢复可以通过查看数据库日记文献来判断目前损坏的表空间与否是system表空间.非system表空间损坏:1. 将损坏的表空间处在offline状态:svrmgrl>alter tablespace ‘tablespace_name’ offline;2. 从相应的备份成果集中恢复有关这个表空间近来的备份。

      对于没有采用带库备份的点可以直接从磁带上恢复;对于用带库备份的点用相应的rman脚本来恢复。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.