损坏数据库文件损坏与坏块处理

数据库损坏  时间:2021-02-08  阅读:()

数据库文件损坏与坏块处理作者徐聪

目录

控制文件损坏处理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。

一对于在非归档模式下的数据库. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。

二对于在归档模式下的数据库. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。

Redo文件损坏处理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。

一非curre ntredo损坏. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。

二 current redo损坏. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。

Undo文件损坏处理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。

方法一使用syst em segment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。

方法二跳过损坏的segment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。

DATAF IL E坏块处理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。

一什么是数据库的坏块. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。

二坏块对数据库产生的影响. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。

三坏块产生的原因. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。

四坏块的处理方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。

五坏块的预先发现的方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .错误未定义书签。

在数据库日常使用中我们经常会遇到各种各样的坏块。在不同文件中或不同对象中的损坏或坏块有着不同的处理方式。

控制文件损坏处理

控制文件遇到坏块时基本现象就是控制文件的损坏数据库无法启动到MOUN T当然一般数据库都有多个控制文件组成。

如果遇到其中的一个或者几个控制文件损坏不是全部控制文件损坏 那么我们可以通过修改pf ile中的c ontrol file初始化参数去除损坏的控制文件或者复制未损坏的控制文件来覆盖损坏的控制文件来达到修复控制文件的目的。

如果遇到所有的控制文件损坏没有做任何备份的情况下那么就要我们手工来创建控制文件。

手工创建控制文件脚本列子如下需要数据库在nomoun t下 

CREATE CONTROLFILE REUSE DATABA SE "orcl" RESETLOGS NOARCH IVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 '/oradata/orcl/redo01 .log' SIZE 256M,

GROUP 2 '/oradata/orcl/redo02 .log' SIZE 256M,

GROUP 3 '/oradata/orcl/redo03.log' SIZE 256M

DATAFI LE

'/oradata/orcl/SUPHISV3.dbf' ,

'/oradata/orcl/SUPHISV301.dbf' ,

'/oradata/orcl/SUPHISV302.dbf' ,

'/oradata/orcl/SUPHISV303.dbf' ,

'/oradata/orcl/SUPHISV304.dbf' ,

'/oradata/orcl/SUPHISV305.dbf' ,

'/oradata/orcl/SUPHISV3CJ.dbf' ,

'/oradata/orcl/SUPHISV3CJ01 .dbf' ,

'/oradata/orcl/SUPHISV3CJ02 .dbf' ,

'/oradata/orcl/SUPHISV3CJ03.dbf' ,

'/oradata/orcl/SUPNCI S.dbf' ,

'/oradata/orcl/SUPNCI S2011.dbf' ,

'/oradata/orcl/supnci s01.dbf' ,

'/oradata/orcl/supnci s02.dbf' ,

'/oradata/orcl/supnci s03.dbf' ,

'/oradata/orcl/supncis04.dbf' ,

'/oradata/orcl/supnci s05.dbf' ,

'/oradata/orcl/supnci s06.dbf' ,

'/oradata/orcl/supnci s07.dbf' ,

'/oradata/orcl/supnci s08.dbf' ,

'/oradata/orcl/sysaux01.dbf' ,

'/oradata/orcl/system01.dbf' ,

'/oradata/orcl/undotbs01.dbf' ,

'/oradata/orcl/users01.dbf'

CHARACTER SET ZHS 16GBK;

注意上面脚本中标红的位置需要重点关注来进行修改。orcl为数据库的SID

NORESE TLOGS/RESETL OGS为是否要重置red olog文件

NOARCH IVELOG/ARCHIV ELOG为数据库是否在归档模式

CHARAC TER SET ZHS16G BK为数据库的字符集

关于是否要重置redo需要根据具体情况进行判断

一对于在非归档模式下的数据库

1) 当redo log文件为未损坏时使用nore setlog snoarch ivelog

此时 当完成控制文件的创建后直接使用alter databa se mount;alter databa se open;

可以直接打开数据库。

2) 当redo log文件也同样损坏使用rese tlogs noarch ivelogalter databa se mount;alter system set "_allow_resetlogs_corruption"=truescope=spfile; --这个参数是关键可以允许Oracle重置REDO日志recover database until cancel ; --使用CANCEL退出运行后才可以使用resetlogs去open数据库alter database open resetlogs;

二对于在归档模式下的数据库

1)所有的onl ine logs好的情况下使用nore setlog sarchve logalter database mount;alter system switch log all;alter databa se open;

2) 如果onl i nelogs损坏使用rese tlogs archiv elog

对于至少有一个有效归档存在的环境RAC必须每个节点都有至少一个归档recove r databa se using backup contro lfile until cancle ; --根据提示输入所需的归档文件的全路径alter databa se open resetl ogs;

对于没有归档存在的环境下alter databa se mount;alter system set "_allow_resetlogs_corruption"=truescope=spfile; --这个参数是关键可以允许Oracle重置REDO日志recover database until cancel ; --使用CANCEL退出运行后才可以使用resetlogs去open数据库alter database open resetlogs;

在上述各个情况下做完打开数据操作后不要忘记添加te mp表空间和做一次数据库全备。

当然可能还会遇到一些其他的报错信息那么久需要对具体问题具体分析了。

Redo文件损坏处理

使用命令查看损坏的red olog是不是当前的red olog使用如下命令select group#,sequence#,archived,status from v$log;

一非curre ntredo损坏

可进行删除和重新添加的操作注意至少有2组redo log文件 如:

ALTER DATABASE DROP LOGFIL E GROUP 3;

Alter databa se add logfil e thread 1 group 3 ( ‘/oradat a/orcl/redo03

.log’ ) size 256M;

二 curren tredo损坏

1  如果有归档和备份可以用不完全恢复startu p mount;recove r databa se until cancel ; --先选择aut o尽量恢复可以利用的归档日志然后重新执行recove r databa se until cancel ; --这次输入cancel完成不完全恢复,用reset logs打开数据alter databa se open resetl ogs --打开数据库

2强制恢复这种方法可能会导致数据不一致startu p mount;alter system set "_allow_reset logs_corrupt ion"=true scope=spfile ;recove r databa se until cancel ; --使用命令cancelalter databa se open resetl ogs;

一般强制恢复恢复后会有u ndo segmen t的问题。

一般操作为重建undo表空间该步骤可在u ndo损坏中看到。

Undo文件损坏处理

Oracle的undo有两种管理方式通过参数un do_man agement来设置auto和manual。

1  当undo_manage ment被设置成MENU AL时使用系统回滚段,即将undo records记录到SYS TEM表空间下的S YSTEM段。

SQL> select segmen t_name,tables pace_n ame,bytes,next_e xtent fromdba_se gments where segmen t_type='ROLLBA CK' ;

SEGMEN T_NA TABLES PACE_NAME BYTES NEXT_E XTENT

SYSTEM SYSTEM 393216 104857 6

通过上面的这条语句我们查到了这个用于rol lback的syste msegmen t存在与sys tem表空间。 默认情况下只有一个se gment并且它还比较小所以如果使用system段来存储undo record s。肯定会影响数据库的性能。所以Oracle是建议使用U ndotables pace来管理und orecord s。

2 当undo_manage ment设置成AUTO时使用UNDO tables pace来管理回滚段。这个时候我们将有多个undosegmen t并且这些se gment是存放在UN DO表空间里的。 这样对DB的性能就会提高。

SQL> select segmen t_name,tables pace_n ame,bytes,next_e xtent fromdba_se gments where segmen t_type='TYPE2 UNDO' ;

SEGMEN T_NAME TABLES PACE_N AME BYTES NEXT_E XTENT

_SYSSM U1$ UNDOTB S1 117964 8 65536_SYSSM U2$ UNDOTB S1 117964 8 65536

_SYSSM U3$ UNDOTB S1 222822 4 65536

_SYSSM U4$ UNDOTB S1 117964 8 65536_SYSSM U5$ UNDOTB S1 262144 65536

_SYSSM U6$ UNDOTB S1 117964 8 65536_SYSSM U7$ UNDOTB S1 117964 8 65536

_SYSSM U8$ UNDOTB S1 117964 8 65536

_SYSSM U9$ UNDOTB S1 117964 8 65536

_SYSSM U10$ UNDOTB S1 117964 8 65536

通过以上SQ L的查询结果我们可以看出有10个un do segmen t来存放un do records。

以上我们是通过dba_s egment表查看的结果。也可以通过v$rol lst at和v$rol lname两个视图来查看信息。 这2个视图会显示所有ro llback段的信息。 包括syst em段和undo段。

SQL> col name format a15

SQL> select s.usn,n.name,s.extent s,s.hwmsiz e,s.status fromv$rollstat s, v$rollname n where s.usn=n.usn;

USN NAME EXTENT S HWMSIZE STATUS

---------- --------------- ---------- ---------- ---------------

0 SYSTEM 6 385024 ONLINE

1 _SYSSM U1$ 3 765952 0 ONLINE

2 _SYSSM U2$ 3 969113 6 ONLINE

3 _SYSSM U3$ 4 746291 2 ONLINE

4 _SYSSM U4$ 3 766689 28 ONLINE

5 _SYSSM U5$ 4 851148 8 ONLINE

6 _SYSSM U6$ 3 746291 2 ONLINE

7 _SYSSM U7$ 3 334807 04 ONLINE

8 _SYSSM U8$ 3 857702 4 ONLINE

9 _SYSSM U9$ 3 746291 2 ONLINE

10 _SYSSM U10$ 3 137543 68 ONLINE

11 rows select ed.

3 UNDO损坏的情况

出现这种情况大多数是因为异常宕机在启动的时候报的错误。 DB不能启动。

比如 ORA-00600: intern al error code,argume nts: [4194],

对于Undo损坏的情况能用备份恢复最好如果不能就只能通过一些特殊的方法来恢复。

方法一使用syst emsegmen t

步骤如下

1 用spfi l e创建pfi l e然后修改参数

#*.undo_t ablesp ace='UNDOTB S1'

#*.undo_m anagem ent='AUTO'

#*.undo_t ablesp ace

#*.undo_r etenti on

undo_m anagem ent='MANUAL 'rollba ck_segments='SYSTEM'

2用修改之后的pfile重启DB

SQL> STARTU P MOUNT pfile=' /oracle /produc t/10.2.0/dbs/initorcl.ora' ;

3删除原来的表空间创建新的UNDO表空间

SQL> drop tables pace undotb s;

SQL> create undo tables pace undotb s1 datafi le '/u01/oradat a/undotbs1.dbf' size 10M;

4关闭数据库修改pfi l e参数然后用新的p file创建spfi le在正常启动数据库。

*.undo_t ablesp ace='UNDOTB S1'

*.undo_m anagem ent='AUTO'

#undo_m anagem ent='MANUAL '

#rollba ck_segments='SYSTEM '

方法二跳过损坏的s egment

在方法一里面使用了systemsegmen t。 undosegmen t一般有多个我们可以通过alert log来查看正在使用的是哪些s egment这些段有可能损坏了。那么只需要把这些损坏的s egment跳过先正常启动D B在创建新的U NDO表空间在切换一下。

1 修改pfi l e添加参数

*._corru pted_r ollbac k_segments='_SYSSM U11$' , '_SYSSM U12$' , '_SYSSM

U13$'

这些字段的值我们通过al ert log查看。 也可以通过如下命令查看

#string s system01.dbf | grep _SYSSM U | cut -d $ -f 1 | sort -u

HostKvm香港VPS七折:$5.95/月KVM-2GB内存/40GB硬盘/500GB月流量

HostKvm是一家成立于2013年的国外主机服务商,主要提供VPS主机,基于KVM架构,可选数据中心包括日本、新加坡、韩国、美国、俄罗斯、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。商家本月针对香港国际机房提供特别7折优惠码,其他机房全场8折,优惠后2G内存香港VPS每月5.95美元起,支持使用PayPal或者支付宝付款。下面以香港国际(HKGlobal)为...

御云(RoyalYun):香港CN2 GIA VPS仅7.9元每月起,美国vps仅8.9/月,续费同价,可叠加优惠

御云怎么样?炎炎暑期即将来临,御云(royalyun)香港、美国服务器开启大特惠模式。御云是新成立的云服务提供商,主要提供香港、美国的云服务器,不久将开启虚拟主机业务。我们的香港和美国主机采用CN2 GIA线路。目前,香港cn2 gia vps仅7.9元每月起,美国vps仅8.9/月,续费同价,可叠加优惠,香港云服务器国内延迟一般在50ms左右,是搭建网站的最佳选择,但是请不要用于违法用途。点击进...

HostYun(22元/月)全场88折优惠香港原生IP大带宽

在之前的一些文章中有提到HostYun商家的信息,这个商家源头是比较老的,这两年有更换新的品牌域名。在陆续的有新增机房,价格上还是走的低价格路线,所以平时的折扣力度已经是比较低的。在前面我也有介绍到提供九折优惠,这个品牌商家就是走的低价量大为主。中秋节即将到,商家也有推出稍微更低的88折。全场88折优惠码:moon88这里,整理部分HostYun商家的套餐。所有的价格目前都是原价,我们需要用折扣码...

数据库损坏为你推荐
郭吉军郭吉军和管鹏这两个站长怎么样?群里有人骂郭吉军二战中受害最大的国家?手机区号打电话怎么加区号?ps抠图技巧请教PS抠图技巧!!!迅雷云点播账号求个迅雷VIP 是VIP就可以 只用来看云点播 改密码是孙子。 谢了 ! 362135668@qq.comlinux虚拟机怎么样在Linux下安装虚拟机iphone6上市时间iphone6什么时候上市,价格是多少?blogcn远目是什么意思?中国杀毒软件排行榜谁知道世界杀毒软件排名?关闭qq相册图标在不删除照片的情况下如何关闭QQ相册图标
购买域名 过期域名抢注 x3220 locvps edis directadmin 国外网站代理服务器 免费全能空间 193邮箱 空间出租 昆明蜗牛家 如何建立邮箱 国外视频网站有哪些 跟踪路由命令 空间登入 美国盐湖城 论坛主机 免费asp空间申请 摩尔庄园注册 徐州电信 更多