系统开机按f2怎么修复系统自动修复硬盘,对SQL数据库文件有影响吗

目前SQL Server数据库作为微软一款优秀的RDBMS,其本身启动的时候是很少出问题的,我们在平时用的时候,很少关注起启动过程,或者很少了解其底层运行过程,大部分的过程只关注其内部的表、存储过程、视图、函数等一系列应用方式,而当有一天它运行的正常的时候突然启动不起来了,这时候就束手无策了,能做的或许只能是重装、配置、还原等,但这一个过程其实是一个非常耗时的过程,尤其当我们面对是庞大的生产库的时候,可能在这火烧眉毛的时刻,是不允许你再重搭建一套环境的。
所以作为一个合格的数据库使用者,我们要了解其启动、运行过程的事情,一旦发生问题,我们也能及时定位,迅速解决。
闲言少叙,我们进入本篇的正题。&
SQL Server本身就是一个Windows服务,每一个实例对应的就是一个sqlserver.exe进程。这是一个可执行的文件,默认就放在SQL Server的安装目录下,当我们启动的时候,就是直接调用这个文件,然后启动这个服务。&
第一部分、SQL Server实例启动的方法和启动所发生的问题
& SQL Server实例分为下面几种启动方法:
(1)在Windows服务控制台里手动启动,或者自动启动(默认),这个也是最常用的方式
(2)第二种方式是SQL Server本身自己提供的启动方式,我们这里可以手动启动
(3)在SQL Server的SSMS里面手动启动它,这个方式一般大部分利用这种方式进行手动重启
(4)通过Windows命令窗口,用'net start'命令手动启动,这种方法也可以用
以上这几种方式都可以启动SQL Sever,并且都会在SQL 日志信息中有所记录。
----------------------------------------------------------霸气的分割线-----------------------------------------------------------------------
第二部分、SQL Server实例启动的详细过程以及所发生的问题项
第一步、检查注册表项
当一个sqlserver.exe文件开始启动的时候,首先要干的第一件事就是先检查它的配置信息存放于注册表的值项
比较重要的几个键值有下面几个:
AuditLevel:其实就是SQL 如何记录用户登录记录;
LoginMode:是SQL Server服务器身份验证方式等;
BackupDirectory:默认的备份路径等信息;
关于注册表信息简要了解即可,不建议做任何修改,当然这些值的信息默认在SQL Server中都能设置:
在不修改注册表的情况下,一般这一步的启动顺序一般不会出现问题,当然出现问题了也通常没有办法解决,大部分的解决方式只有重装了。
但这一步骤,通常出现以下两个个问题通常是可以解决的:
&1&启动账号权限问题
如果我们启动SQL Server的进程使用的账号连读注册表的权限都没有,那这个服务是怎么也启动不了的,通常这时候连SQL 的错误日志都没有能力生成出来。
这时候我们该如何发现呢,虽然这时候它没有能力创建SQL 的错误日志,但是它在Windows层面留下了痕迹,我们来看:
我将服务启动账号设置成gust来宾账号,来启动该服务
这时候会产生以下错误信息:
在Windows的日志信息里也会产生一条错误日志记录:
这里的拒绝访问指的就是拒绝访问注册表信息了。
解决方法:
此问题的解决方式就很简单了,只需要将当然的用户提权到SQL Server服务的启动账号就行了,提权的方式也很简单,只需要添加到SQL的本地用户的启动服务组就可以了。
当然,也可以直接换一个更高级别的用户登录。一般默认都用的超级管理员账户。
&2&访问日志和文件夹出现问题
默认在SQL Server启动的时候会创建一个启动日志文件,记录所有正确的日志信息,当然也包括错误的日志信息,如果这时候找不到这个日志信息的路径,或者已经存在一个日志,但是日志被锁定了(某些NB的杀毒软件擅长干这个),这时候这个服务也是启动不了的,同样也创建不出SQL Server的日志文件,这时候我们还得借助于Windows平台本身,来解决。
SQL Server启动的创建的日志文件路径,同样存在于注册表项里,我们来看这个参数:
这里我们故意改成一个错误的路径,来启动下看看:
会产生以下错误
系统的错误日志信息
错误说明的很清楚。
解决方法:
这个问题解决起来也很简单,只需要检查好该路径,确保路径下的文件正确就可以。
不过有一点需要注意,当SQL Server还没启动起来的时候,有部分错误信息日志需要检查Windows平台下的系统日志。
----------------------------------------------------------霸气的分割线-----------------------------------------------------------------------
&第二步、检查系统配置环境,包括硬盘、内存与CPU等
当我们进行完第一步的时候,SQL Server已经读取完注册表信息,完成了它的errorlog文件的创建,然后开始进行第二步的进行,这一步骤所有的信息就会按照顺序依次记录到errorlog文件中,我们可以通过查看该文件来详细跟踪这一步骤的进行,根据上一步的注册表信息,我们先来手动清空下这个日志,然后重启一下SQL Server服务,查看下这个日志记录
我们简单大致分了以下几大步骤:
一、首先检查系统的软件环境,包括OS版本、电脑信号、内存、硬盘、注册表基础配置项是否正确等
二、启动系统数据库master
三、开始利用服务用户登录系统、启动系统资源数据库、检查数据库版本信息等
四、启动系统数据库model
五、开始网络配置进行连接,对外提供服务,使用的默认的1433端口
我们接着分析下面的日志:
六、其实完成上面的第五步之后,也就开始启动msdb系统数据库
七、这时候开始真正的启动用户数据库,并且完整各个库的完整性校验,并且在启动用户数据库之前,先将系统库的tempdb进行清空
八、在搭建完成之后,才开始启系统的另外一个数据库tempdb
上面的整个SQL& Server系统启动的过程产生了详细的日志记录,我们下面会依次按照该步骤进行详细的进行逐步分析。
在检查系统软硬件环境的过程中,基本不会发生什么致命错误。比较常见的问题就是内存配置问题,其实在上面的日志记录中有一句特别重要,它反映的就是SQL Server利用内存的情况,我们来看:
这句话的意思是将所有的数据页锁定到内存中,作为大部分数据库而言,内存就是生命线,SQL Server同样也是,如果系统(64bit中)没有内存压力的情况下,才能将数据页正常的锁定到内存中,如果内存压力过大,系统内存是不允许将数据页也加入到内存中,而这样导致的问题就是SQL& Server严重的性能问题。
很多用户希望限制SQL Server内存使用,并且有些客户机将它限制到服务都不能启动的情况,这时候在SQL Server的日志中是这样展现的,我们来看:
可以看到,该错误的原因还是挺清楚的,修复该错误的解决方法也很简单,将内存配置调大就可以。
跟内存有关的还有一种特殊的情况,就是SQL Server的启动账号在服务器上没有Lock page in memory的权限,如果没有这个权限,在明细日志中查看不到上面的日志记录,该问题的解决方法也很简单,只需要将需要权限加上就可,加权限的方式如下:
经过上面的步骤基本,完成数据的软硬件检测过程。
----------------------------------------------------------霸气的分割线-----------------------------------------------------------------------
&第三步、启动系统数据库master
master数据库是SQL Server系统启动过程中的第一个系统库,是非常关键的数据库。如果这个库不能被正常打开,则SQL Server就不能正常启动。
和其它数据库一样,master数据库也分为数据文件和日志文件,启动的过程是依次打开,然后做恢复动作,如果这个过程没问题的话,在Errorlog日志文件中,我们会看到如下的这句话:
如果这个过程出现了任何问题,SQL Server的启动过程都会被中断,启动过程失败。
而这个过程发生的错误,无非就集中以下几种情况,我们来分析一下:
&1&在指定的路径找不到master数据的数据文件或日志文件
关于这个SQL Server的最主要的系统数据库的路径,它是以注册表形式存在的,在一下注册表项,可以看到
如果在该路径下找不到这个系统数据库的话,服务是启动不了的,并且会产生相应的错误日志信息,我们来模拟下,关掉服务,将这两个文件移除走,然后启动看一下:
首先,该服务是启动失败的
我们来看一下系统日志
看Errorlog的日志信息
可以看到,该问题提示错误信息还是挺详细的。我们来看第二种情况
&2&文件找到了,但是没有权限访问,或者不能以排他的方式打开该文件(默认的是独占锁进行文件打开的)
此种情况也是有可能产生的,比如某些NB的杀毒软件就可以干这个事,让你的系统库无法访问,这样同样也是启动不了的,我们这样来看,提示的错误的信息有哪些:
来看Errorlog的错误记录:
&3&文件找到了,访问权限也有,但是文件有问题,就是说是数据库损坏了
这个问题也经常出现,比如磁盘坏掉了,恢复后发现文件有问题,不能正常打开,这种问题我们来看错误信息:
日志中的信息
关于master系统库的启动过程,基本就是上面的三种错误,关于这三种问题,我们该如何解决呢?
解决方法:首先如果根据错误日志定位出问题的性质,如果是前两种问题其实是挺好解决的,比如文件没找到、权限项不对等,这些问题相应的去解决就可以,最棘手的就是第三种情况,出现这种情况最理想的情况是master数据库进行了备份,通过备份文件进行恢复就可以,一切就可以正常,当然通过暴力的停掉服务,拷贝文件进去也可以解决。
最揪心的就是这个库就没备份,那该如何解决呢?这种方式的解决就得借助SQL Server的安装程序,进行重建master数据了,但是这种方式重建的master数据库会导致以前的SQL Server的设定全部清空掉。
清空的信息包括:所有的账户信息(意味着需要重建)、msdb中的所有job信息等(也需要重建)、用户数据库信息(必须全部重新附加attch上)
而这一系列过程如果是一个生产库,可能会是一个非常大的工作量!
----------------------------------------------------------霸气的分割线-----------------------------------------------------------------------
&第四步、启动系统资源数据库,并检查数据版本信息
资源数据库是SQL Server2005中引入的逻辑数据库,在实例下是看不到的,但是有它的物理文件,主数据库默认名称为:mssqlsystemresource.mdf、日志名称为:mssqlsystemresource.ldf
如果该数据库启动的过程中也出现了问题,那SQL Server也不能正常启动。
这个系统数据库比较特别,它是一个只读数据库,完全由SQL Server自己维护,用户是不能更改的,所以我们只要保证它的是数据库文件和日志完好就可以,不需要对它进行任何的跟踪和维护。
当然如果非要看这个数据库,可以通过单用户的DAC方式进行连接。
所以这个数据库在一般情况下不会发生意外,基本上是能正常启动,不过特殊情况下,不能启动的情况就以下两种:
&1&数据库文件不存在,无法访问,或者文件坏掉了
其实它的报的错误信息,类似于上面的master数据库,我来截个图,看一下:
这个是errorlog记录的错误信息
在windows层面也有它自己的错误日志信息:
&2&资源数据库的版本和SQL Server的版本不一致
这个有可能是人为的更改了这个资源数据库,导致现有的资源数据库文件和数据库版本不一致,这样的话也会导致错误的形成
windwos平台也记录下了该错误的信息,看下面的图片:
解决方法:
关于资源库的这两个问题解决方法,非常的简单。只要找到和这台服务器上的SQL Server的版本一致的数据库,拷贝过来就行。
当然最好的预防措施是:每当安装完SQL Server或者打完补丁之后,就及时的备份这个两个文件,放在安全的地方,用的时候拷贝过来就行,备份是数据库管理员的天职
当然有时候在紧急的情况下,找不到相同版本的数据库,理论上这个库是只读的,所以不会发生任何改变,我们随便找一台机器,安装一下同版本数据库,然后拷贝过来就行,当然一定注意的是这里面是相同版本。&
----------------------------------------------------------霸气的分割线-----------------------------------------------------------------------
第五步、启动系统数据库model
model系统数据库同样也是SQL Server启动过程中用到的一个非常关键的数据库,如果这个库损坏,SQL Server启动也会失败,关于model数据不能启动的原因基本和master的类似,同样也是两种:1、数据库文件早不到或者不能访问;2、数据库文件能访问但是是损坏的文件。
诊断此种问题的方式也和上面的两种方式一样,查看启动过程产生的errorlog文件或者windows系统日志,这里我们就不重现该问题了。
我们只给出此种问题的解决方法:
1、如果该库我们已经做过备份,那最直接也是最有效的解决方式就是直接还原,这里的还原方式可能和普通库的还原方式不一样,因为SQL& Server实例还没有启动,我们恢复过程采取以下过程:
a.用参数启动SQL Server,在命令提示行中执行以下命令,这样的话SQL Server启动就会跳过model数据库恢复这一步
net start MSSQLSERVER /f /m /T3608
b.现在恢复model数据库,打开SSMS,直接输入
RESTORE DATABASE model FROM DISK ='G:\data\model.bak'
MOVE 'modeldev' TO 'E:\dataDefaultFileManger\MSSQL10.MSSQLSERVER\MSSQL\DATA\model.mdf'
MOVE 'modellog' TO 'E:\dataDefaultFileManger\MSSQL10.MSSQLSERVER\MSSQL\DATA\model.ldf'
c.恢复成功后,直接重启SQL Server既可以。
2、将SQL Server关闭,然后直接采取暴力的方式将model数据文件拷贝回来就可以,这种方式简单有效,但是非常规操作
3、还有一种方式是利用setup安装文件,重建该数据库,过程缓慢,稍显复杂,很不推荐。
----------------------------------------------------------霸气的分割线-----------------------------------------------------------------------
第六步、开始网络配置进行连接,对外提供服务,使用的默认的1433端口
当上面的几个重要的系统库都已经启动完成之后,下一步就是开始检查网络环境,进行网络服务的配置,对外进行提供服务了,一般来讲,在SQL Server中利用的网络启动协议有三种:Shared Memory、Named Pope和TCP/IP,其实在日常我们最常用的就是TCP/IP这种方式了,并且默认开启的是1433端口。
我们来看一下正常启动过程中,该部分的详细日志:
这里面的Shared Memory是专供本地连接通过LPC(Local Procedure Call)技术向SQL Server做的连接。它不走网络层,所以他是速度最快的连接方式。正常启动后会显示上面的正常日志。
Named Pipe方式正常启动,也会显示出上面的日志。可以看到。
这其中我们最常用的TCP/IP这种方式,也正常的启动了,并且指定了两种访问方式,ipv4/ipv6,然后后面加上了1433端口号。
在这个过程中最常出现的问题就是,1433端口被其它程序占用,这样就导致TCP/IP协议无法正常启动,这样我们会看到如下日志信息
并且在windows 系统日志中也会有记录
解决方法:
其实这里出现的问题还是挺好解决的,只需要找到占用这个端口的应用程序,采取措施让它把这个端口给让出来就可以。
当然出现这些问题就意味着客户端已经无法通过TCP/IP这种远程连接的方式进行连接访问了。
这时候一般管理员可以采用SQL Server给其提供的&专用管理员连接&(DAC)进行连接,这种方式我们以后再介绍。
当然,在SQL Server启动的过程中,一般出现这种网络问题,或者协议不能成功加载,SQL Server会报出错误信息,但是一般情况下是不会影响SQL Server的正常启动的。受影响的可能只是出问题的那种协议功能。
我们只需要根据日志,定位问题,然后解决掉,重新启动就可以了。
----------------------------------------------------------霸气的分割线-----------------------------------------------------------------------
第七步、开始启动msdb系统数据库
关于msdb这个系统数据库,它是被安排在系统库中接近最后一个了,除了用户数据库和临时库tempdb之外,当启动过程中已经进行到这一步的时候,其实我们的实例就已经启动起来了,并且能够连接。
我们知道msdb这个库中主要的存储的信息是应用各个库的备份信息,各种job的历史跑批信息等,其实诸多的都是来自于用户数据库所产生的一些客观数据。
我们来看一下这个库出现了问题会产生什么现象:
我将这个库文件移除走,然后重新启动服务,启动过程中没有报任何错误,并且能够顺利启动,我们用SSMS直接连接过去,也可以正常连接
但是当我们点击开数据的时候,其实是看不到任何用户数据库的,并且会产生一个错误提示:
看来是不能使用的,我们来查看一下错误日志:
虽然这个库的重要性比起master之类的库重要性要稍显差一些,但是缺少了它我们的SQL Server虽然能启动,但是依然不能使用。
解决方法:
要解决这个问题其实方式就很多种了,因为到此我们的SQL Server实例已经能够正常启动了,我们可以采取:
1、利用备份还原该库,参考文章前面的方式(推荐)
2、关掉服务,利用暴力的拷贝文件的方式进行恢复,简单有效,非常规操作
3、找台相同的环境,找到相同的文件,直接拷贝过来使用
4、利用安装文件进行恢复(不推荐)
----------------------------------------------------------霸气的分割线-----------------------------------------------------------------------
第八步、启动用户数据库,并且完整各个库的完整性校验,并且在启动用户数据库之前,先将系统库的tempdb进行清空
本步骤所遇到的问题层出不穷,各种样式,我打算再重新组织一篇文章,专门列举,此篇就不介绍了。
但有一点需要记住:在这一步之前SQL Server会将tempdb这个系统库清空掉,也就是说,每次的重启操作,系统都会将tempdb清空,然后重建,这一步一般不会发生异常,成功之后会出现以下日志信息:
第九步、开始重建系统的另外一个数据库tempdb
tempdb这个库比较特殊,每次重启的时候都是重新创建的,SQL Server会根据master数据库里的记录的信息以model数据库为版本进行创建。所以只要我们保证model数据库没有问题,然后硬盘没有问题,tempdb的数据库文件就应该没有问题。
关于temdb这个库的所有配置信息是存储于master的数据库中的,里面的内容信息是存储于model系统库中的
这样就带来了一个问题,有时候我们的master的库是从别的机器下面备份下来的,所以它里面会记录这个tempdb这个库在原来机器上的路径,这样在启动创建的时候就会报错。
所以我们需要执行以下命令更改这个库路径
a、用参数启动SQL Server
net start MSSQLSERVER /f
b.修改数据文件和日志文件路径
ALTER DATABASE tempdb MODIFY FILE(NAME=tempdev,FILENAME='C:\right path....\temdb.mdf');
ALTER DATABASE tempdb MODIFY FILE(NAME=tempdev,FILENAME='C:\right path....\temdblog.ldf');
c.正常启动数据库既可以
还有一种情况,就是创建该文件的时候,提供的硬盘空间不足,或者权限不够,我们也是根据上面的方式,修改到一个正确的路径,并且确保权限正确。
也可以更改temp文件的大小,默认是4M,代码如下:
ALTER DATABASE tempdb MODIFY FILE(NAME=tempdev,SIZE=100MB);
ALTER DATABASE tempdb MODIFY FILE(NAME=tempdev,SIZE=100MB);
至此,如果上面的整个过程都没出问题的话,一个正常的SQL Server就可以启动成功的。
本篇文章到此结束了.....此篇耗时三天.....为了尽可能的呈现出所有的问题现象,我对本地的SQL Server进行了多种无情的蹂躏、各种的摧残,力求能够重显各种不同的应用场景问题现象,然后尽可能的找到合适的解决方案,当然还有很多的情况没有展现出来,后续遇到,会一一补充进来,当然有遇到不能解决的,也可以留言,我们一起分析解决。
关于用户数据库启动过程,这个过程是一个问题较易发生的步骤,神马质疑、恢复中、不可用等等现象,我后续的文章中列举分析。
已经补充出该篇的关联篇:
如果您看了本篇博客,觉得对您有所收获,请不要吝啬您的&推荐&。&
阅读(...) 评论()Oracle数据库恢复:数据块损坏与恢复详解
查看: 3503|
摘要: 所谓损坏的数据块,是指块没有采用可识别的 Oracle 格式,或者其内容在内部不一致。通常情况下,损坏是由硬件故障或操作系统问题引起的。Oracle 数据库将损坏的块标识为“逻辑损坏”或“介质损坏”。
1.什么是块损坏:
所谓损坏的数据块,是指块没有采用可识别的 Oracle 格式,或者其内容在内部不一致。通常情况下,损坏是由硬件故障或操作系统问题引起的。Oracle 数据库将损坏的块标识为“逻辑损坏”或“介质损坏”。如果是逻辑损坏,则是 Oracle 内部错误。Oracle 数据库检测到不一致之后,就将逻辑损坏的块标记为损坏。如果是介质损坏,则是块格式不正确;从磁盘读取的块不包含有意义的信息。
通过恢复块,或者删除包含损坏块的数据库对象(或同时采用这两种方式),可以修复介质损坏的块。如果介质损坏是由硬件故障引起的,则只有修复了硬件故障后,才能彻底解决问题。
只要对块执行读或写操作,就会执行下列一致性检查:
--高速中的 DBA(数据块地址)值与块缓冲区中的 DBA 值比较的结果
--块校验和(如果启用)
损坏的块被标识为以下类别:
--介质损坏
--逻辑(或软件)损坏
2.块损坏故障现象:ORA-01578
ORA-01578 错误:“ORACLE data block corrupted (file # %s, block # %s)”:
--发现损坏的数据块时生成此信息
--始终返回相对文件号和块号
--返回到发出查询的会话(该查询在发现损坏时执行)
--显示在 alert.log 文件中
一般情况下,ORA-01578 错误是由硬件问题引起的。如果 ORA-01578 错误始终返回相同的参数,则最可能的原因是块介质损坏。
如果返回的参数每次都有变化,则可能存在硬件问题。应检查和页面空间,并检查 I/O 子系统,以便查找有问题的控制器。
注:ORA-01578 会返回相对文件号,但随之出现的 ORA-01110 错误会显示绝对文件号。
3.如何处理损坏
--检查预警日志和操作系统日志文件。
--使用可用的诊断工具,找出损坏的类型。
--多次运行检查功能,确定错误是否持续存在。
--根据需要,从损坏的对象中恢复数据。
--解决硬件问题:
磁盘控制器、
--根据需要,从损坏的对象中恢复或还原数据。
始终尝试确定错误是否持续出现。多次运行 ANALYZE 命令;如果可能,可执行关闭再启动操作,然后再次尝试早先发生故障的操作。查找是否有其它损坏。如果发现一个损坏的块,则可能还存在其它损坏的块。
硬件故障必须立即解决。遇到硬件问题时,应与供应商取得联系,在检查并修复了计算机后再继续工作。此时应运行一次全面的硬件诊断会话。
硬件故障的类型可能会有很多种:
--I/O 硬件或故障
--操作系统
--I/O 或高速缓存问题
--内存或分页问题
--磁盘修复实用程序
4.实时验证块完整性:DB_BLOCK_CHECKING :
可通过将 DB_BLOCK_CHECKING 初始化参数设置为 TRUE 启用数据库块检查。只要修改了数据块或索引块,此项检查就会检查数据块和索引块的内部一致性。DB_BLOCK_CHECKING 是一个动态参数,可使用 ALTER SYSTEM SET 语句修改此参数。对于系统表空间,将始终启用块检查。块检查通常会产生 1% 到 10% 的开销,具体取决于工作量。正在执行的更新或插入操作越多,执行块检查的开销就会越高。DB_BLOCK_CHECKING 有以下四个可能的值:
--OFF:除 SYSTEM 之外的所有表空间都不执行块检查。
--LOW:在内存中块的内容发生更改之后(例如,在执行 UPDATE 或 INSERT 语句以及在执行磁盘上读取后),执行基本的块头检查。
--MEDIUM:执行所有 LOW 检查, 对所有不是按索引组织的表块执行语义块检查。
--FULL:执行所有 LOW 和 MEDIUM 检查, 对索引块执行语义检查。
初始化参数 DB_BLOCK_CHECKING:
--在对每个块执行自我一致性检查时,控制检查的处理程度
--可防止内存和数据损坏
--可使用 ALTER SESSION 命令或 ALTER SYSTEM DEFERRED 命令进行设置
5.块介质恢复
大多数情况下,第一次遇到损坏时,数据库会将块标记为介质损坏,然后将其写到磁盘上。在该块得到恢复之前,不能对其执行任何后续读取操作。只能对标记为损坏或者未通过损坏检查的块执行块恢复。可使用 RMAN RECOVER...BLOCK 命令执行块介质恢复。默认情况下,RMAN 会在闪回日志中搜索好的块副本,然后在完全备份或 0 级增量备份中搜索块。如果 RMAN 找到了好的副本,则会还原这些副本,并对块执行介质恢复。块介质恢复只能将重做日志用于介质恢复,不能使用增量备份。
V$DATABASE_BLOCK_CORRUPTION 视图显示由数据库组件(如 RMAN 命令、ANALYZE、dbv、SQL 查询等)标记为损坏的块。对于以下类型的损坏此视图会增加相应的行:
--物理/介质损坏:数据库无法识别块:校验和无效、块内容全部为零或者块头不完整。默认情况下,物理损坏检查处于启用状态。
--逻辑损坏:块的校验和有效,块头和块尾也匹配,但是内容不一致。块介质恢复不能修复逻辑块损坏。默认情况下,逻辑损坏检查处于禁用状态。通过指定 BACKUP、RESTORE、RECOVER 和 VALIDATE 命令的 CHECK LOGICAL 选项,可以启用逻辑损坏检查。
块介质恢复:
--降低平均恢复时间 (MTTR)
--提高介质恢复期间的可用性
--恢复期间数据文件保持联机状态
--只有正在恢复的块是不可访问的
--使用 RMAN RECOVER...BLOCK 命令调用
--使用闪回日志以及完全备份或 0 级备份还原块
--使用重做日志执行介质恢复
--V$DATABASE_BLOCK_CORRUPTION 视图显示标记为损坏的块
6.块介质恢复的先决条件
--目标数据库必须处于 ARCHIVELOG 模式
--包含损坏块的数据文件的备份必须是完全备份或 0 级备份。
--要使用代理副本,必须先将它们还原到非默认位置
--RMAN 只能使用归档的重做日志进行恢复
--要使用闪回日志,必须启用闪回数据库
以下先决条件适用于 RECOVER ... BLOCK 命令:
--目标数据库必须以 ARCHIVELOG 模式运行,并且必须是打开的,或是使用当前控制文件装载的。
--包含损坏块的数据文件备份必须是完全备份或 0 级备份,不能是代理副本。如果只存在代理副本备份,则可将它们还原到磁盘上的非默认位置;在这种情况下,RMAN 会认为它们是数据文件副本,在块介质恢复过程中会在其中搜索块。
--RMAN 只能使用归档的重做日志进行恢复。RMAN 不能使用 1 级增量备份。块介质恢复不能恢复丢失或无法访问的归档重做日志,但有时可以恢复丢失的重做记录。
--必须在目标数据库上启用闪回数据库,这样 RMAN 才能在闪回日志中搜索损坏块的好副本。如果启用了闪回事件记录,并且此事件记录包含损坏块的较旧但未损坏的版本,则 RMAN 可以使用这些块,因而可能会提高恢复的速度。
7.RECOVER...BLOCK 命令
--确定包含要进行恢复的块的备份
--读取备份并将请求的块累积到内存缓冲区
--必要时,通过从备份中读取归档日志来管理块介质恢复会话
RECOVER DATAFILE 6 BLOCK 3; Recover a single block
RECOVER Recover multiple blocks
DATAFILE 2 BLOCK 43 in multiple data files
DATAFILE 2 BLOCK 79
DATAFILE 6 BLOCK 183;
RECOVER CORRUPTION LIST; Recover all blocks logged in V$DATABASE_BLOCK_CORRUPTION
恢复单个块:
在进行块恢复之前,必须确定损坏的块。一般情况下,会在以下位置中报告块损坏:
--LIST FAILURE、VALIDATE 或 BACKUP ...VALIDATE 命令的结果
--V$DATABASE_BLOCK_CORRUPTION 视图
--标准输出中的错误消息
--预警日志文件和用户跟踪文件(在 V$DIAG_INFO 视图中标识)
--SQL ANALYZE TABLE 和 ANALYZE INDEX 命令的结果
--DBVERIFY 实用程序的结果
例如,可能会在用户跟踪文件中发现以下消息:
ORA-01578: ORACLE data block corrupted (file # 7, block # 3)
ORA-01110: data file 7: '/oracle/oradata/orcl/tools01.dbf'
ORA-01578: ORACLE data block corrupted (file # 2, block # 235)
ORA-01110: data file 2: '/oracle/oradata/orcl/undotbs01.dbf'
--确定了块以后,在 RMAN 提示符下运行 RECOVER ...BLOCK 命令,指定损坏块的文件号和块编号。
DATAFILE 7 BLOCK 3
DATAFILE 2 BLOCK 235;
8.使用10231事件进行处理:(块损坏但没有备份,没办法回复的情况下)
在sqlplus中执行如下命令:
ALTER SYSTEM SET EVENTS='10231 trace name context forever,level 10';
然后导出该表:
exp test/test file=t.dmp tables=t;
在数据库中删除该表
drop table t;
imp test/test file=t.dmp tables=t;
最后关闭10231事件:
ALTER SYSTEM SET EVENTS='10231 trace name context off';
上一篇:下一篇:}

我要回帖

更多关于 电脑开机修复系统问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信