一种坏块修复方法及装置与流程

文档序号:15694777发布日期:2018-10-19 18:51阅读:179来源:国知局
本发明涉及数据库
技术领域
:,尤其涉及一种坏块修复方法及装置。
背景技术
::坏块是指在数据库的一个或多个数据块内出现内容混乱的现象,由于正常的数据块都有固定的合法内容格式,坏块的出现,导致数据库进程无法正常解析数据块的内容,进而使数据库进程报错乃至挂起,并级联导致整个数据库实例出现异常。相关技术中,当数据库实例出现异常时,数据库维护人员才对数据库进行坏块排查进而修复,这样时效性差,往往会造成数据库正常访问无法进行,从而降低用户体验。技术实现要素:为了解决上述技术问题,本发明提供一种坏块修复方法,能够在一定程度上保证能够对数据库进行正常访问,提高用户体验。为了达到本发明目的,本发明提供了一种坏块修复方法,包括:创建数据库的全备份脚本;根据获得的全备份脚本创建所述数据库的增量备份脚本;根据预设备份工具和获得的增量备份脚本创建坏块修复脚本;根据获得的坏块修复脚本修复所述数据库中的坏块。所述根据获得的坏块修复脚本修复数据库中的坏块,包括:定期执行所述坏块修复脚本替换所述数据库中增添的数据块,以修复所述数据库中的坏块。所述根据获得的坏块修复脚本修复数据库中的坏块,包括:定期执行所述坏块修复脚本替换所述数据库中增添的数据块,以修复所述数据库中的坏块。如果不能够确定所述坏块发生的位置,还包括:判断所述数据库是否存在备份;如果所述数据库存在备份,将所述数据库中所有数据块导出,并将所述备份中所有数据块导入所述数据库,以修复所述坏块。所述根据坏块发生的位置修复坏块,包括:如果所述坏块发生的位置是索引,获取发生所述坏块的索引;获取与获得的索引对应的数据表;删除获得的索引,并根据获得的数据表重新建立索引,以修复所述坏块。如果所述坏块发生的位置是数据表,还包括:获取发生所述坏块的数据表;根据预先建立的数据表与数据表的关联关系判断是否存在与发生所述坏块的数据表相关联的数据表;如果存在与所述与发生坏块的数据表相关联的数据表,获取所述与发生坏块的数据表相关联的数据表作为第一数据表;删除所述发生坏块的数据表,并根据所述第一数据表重新生成能够替代所述发生坏块的数据表的数据表,以修复所述坏块。如果不存在所述与发生坏块的数据表相关联的数据表,还包括:将所述发生坏块的数据表中除所述坏块以外其他所有数据块保存在预先建立的第二数据表中;删除所述存在坏块的数据表,并将所述第二数据表的名称修改为所述存在坏块的数据表的名称,以修复所述坏块。本发明还提供了一种坏块修复装置,包括:创建模块,用于创建数据库的全备份脚本;所述创建模块,还用于根据获得的全备份脚本创建所述数据库的增量备份脚本;所述创建模块,还用于根据预设备份工具和获得的增量备份脚本创建坏块修复脚本;修复模块,用于根据获得的坏块修复脚本修复所述数据库中的坏块。本发明还提供了一种坏块修复装置,包括:处理器和存储器,其中,存储器中存储有以下可被处理器执行的指令:创建数据库的全备份脚本;根据获得的全备份脚本创建所述数据库的增量备份脚本;根据预设备份工具和获得的增量备份脚本创建坏块修复脚本;根据获得的坏块修复脚本修复所述数据库中的坏块。本发明还提供了一种计算机可读存储介质,所述存储介质上存储有计算机可执行指令,所述计算机可执行指令用于执行以下步骤:创建数据库的全备份脚本;根据获得的全备份脚本创建所述数据库的增量备份脚本;根据预设备份工具和获得的增量备份脚本创建坏块修复脚本;根据获得的坏块修复脚本修复所述数据库中的坏块。与现有技术相比,本发明至少包括:创建数据库的全备份脚本;根据获得的全备份脚本创建数据库的增量备份脚本;根据预设备份工具和获得的增量备份脚本创建坏块修复脚本;根据获得的坏块修复脚本修复数据库中的坏块。从本发明提供的技术方案可见,由于根据获得的坏块修复脚本进行了数据库中坏块的修复,因此实现了在数据库实例出现异常前对数据库中的坏块进行修复,从而在一定程度上保证了数据库的正常访问,提高了用户体验。本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。附图说明附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。图1为本发明实施例提供的一种坏块修复方法的流程示意图;图2为本发明实施例提供的一种坏块修复装置的结构示意图。具体实施方式为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。本发明实施例提供一种坏块修复方法,如图1所示,该方法包括:步骤101、创建数据库的全备份脚本。具体的,数据库通常分为层次式数据库、网络式数据库和关系式数据库三种。在当今的互联网中,最常见的数据库模型主要是两种,即关系型数据库和非关系型数据库,关系型数据库包括:oracle、mysql、sybase、dbii,非关系型数据库包括:hbase、mongodb、redis。oracle的特点:支持多用户、大事务量的高性能事务处理;数据安全性和完整性控制;支持分布式数据库和分布处理;基于客户端/服务器技术。oracle的应用场景:大型企事业单位。mysql的特点:开源,体积小,速度快。mysql的应用场景:中小型全球广域网(worldwideweb,web)网站。sybase的特点:基于客户/服务器体系结构;是一种高性能、可编程数据库。sybase的应用场景:较多使用在电信行业。dbii的特点:dbii提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模应用程序的执行能力,具有与平台无关的基本功能和结构化查询语言(structuredquerylanguage,sql)命令。dbii的应用场景:适用于数据仓库、在线事物处理、大型应用系统,在企业级的应用最为广泛。具有较好的可伸缩性,可支持从大型机到单用户环境,应用于第二代操作系统(operatingsystem/2,os/2)、windows等平台下。hbase的特点:属于列存储数据库。hbase是谷歌google的bigtable的开源实现,建立在分布式文件系统(hadoopdistributedfilesystem,hdfs)上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。hbase的应用场景:通常用来应对分布式存储海量数据;适用于偏好bigtable,并且需要对大数据进行随机、实时访问的场合。mongodb的特点:属于文档型数据库。可以存储比较复杂的数据类型。高性能、易部署、易使用。支持动态查询。支持完全索引,包含内部对象。使用高效的二进制数据存储,包括大型对象(如视频等)。mongodb的应用场景:广泛应用于各种大型门户网站和专业网站,大大降低了企业运营成本。redis的特点:属于键值存储数据库。性能高,扩展性强。易部署、高并发。redis的应用场景:适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。具体的,以oracle为例,创建数据库的全备份脚本可以通过以下代码实现:vi/home/oracle/backupfull.sh编辑backupfull.sh添加下列语句exportoracle_base=/u01/app/oracleexportoracle_sid=orclexportoracle_home=/u01/app/oracle/product/10.2.0/db_1exportpath=$oracle_home/bin:$pathrmantarget/<<eof_rmanrun{allocatechannelc1typedisk;ackupincrementallevel0tag'db0'format'/home/oracle/rmanbackup/db0_%d_%t_%s'databaseincludecurrentcontrolfile;sql'altersystemarchivelogcurrent';backupfilesperset5format'/home/oracle/rmanbackup/cf0_%d_%t_%s'archivelogalldeleteinput;deletenopromptobsolete;releasechannelc1;}步骤102、根据获得的全备份脚本创建数据库的增量备份脚本。具体的,以oracle为例,根据获得的全备份脚本创建数据库的增量备份脚本可以通过以下代码实现:vi/home/oracle/incrl.sh编辑incrl.sh添加下列语句exportoracle_base=/u01/app/oracleexportoracle_sid=orclexportoracle_home=/u01/app/oracle/product/10.2.0/db_1exportpath=$oracle_home/bin:$pathrmantarget/<<eof_rmanrun{allocatechannelc1typedisk;backupincrementallevel1tag'db1'format'/home/oracle/rmanbackup/db1_%d_%t_%s'databaseincludecurrentcontrolfile;sql'altersystemarchivelogcurrent';backupfilesperset5format'/home/oracle/rmanbackup/cf1_%d_%t_%s'archivelogalldeleteinput;deletenopromptobsolete;releasechannelc1;}步骤103、根据预设备份工具和获得的增量备份脚本创建坏块修复脚本。需要说明的是,预设备份工具可以是rman(recoverymanager),rman是一种用于备份(backup)、还原(restore)和恢复(recover)数据库的oracle工具。具体的,根据预设备份工具和获得的增量备份脚本创建坏块修复脚本可以通过以下代码实现:vi/home/oracle/recover.sh编辑recover.sh添加下列语句exportoracle_base=/u01/app/oracleexportoracle_sid=orclexportoracle_home=/u01/app/oracle/product/10.2.0/db_1exportpath=$oracle_home/bin:$pathrmantarget/<<eof_rmanrun{recoverdatafile5noredo;}步骤104、根据获得的坏块修复脚本修复数据库中的坏块。具体的,根据获得的坏块修复脚本修复数据库中的坏块包括:定期执行坏块修复脚本替换数据库中增添的数据块,以修复数据库中的坏块。需要说明的是,定期执行可以指在定好的时间去执行,还可以指每隔预设时间间隔执行,其中,预设时间间隔可以是3min,或是5min,还可以是任意时间间隔。具体的,可以使用linux的crontab设置自动修复:crontab–e按enter后,可以像vi编辑器一样输入下面内容(周日和周三凌晨1:00执行0级全库备份,周一、二、四、五、六凌晨1:30执行增量备份,5点执行坏块自动修复脚本)01**0/home/oracle/backupfull.sh>>/home/oracle/backupfull.log01**3/home/oracle/backupfull.sh>>/home/oracle/backupfull.log301**1-2/home/oracle/incrl.sh>>/home/oracle/incr.log301**4-6/home/oracle/incrl.sh>>/home/oracle/incr.log05**1-2/home/oracle/recover.sh>>/home/oracle/recover.log05**4-6/home/oracle/recover.sh>>/home/oracle/recover.log本发明实施例所提供的坏块修复方法,创建数据库的全备份脚本;根据获得的全备份脚本创建数据库的增量备份脚本;根据预设备份工具和获得的增量备份脚本创建坏块修复脚本;根据获得的坏块修复脚本修复数据库中的坏块。从本发明提供的技术方案可见,由于根据获得的坏块修复脚本进行了数据库中坏块的修复,因此实现了在数据库实例出现异常前对数据库中的坏块进行修复,从而在一定程度上保证了数据库的正常访问,提高了用户体验。可选地,根据获得的坏块修复脚本修复数据库中的坏块之后,还包括:步骤105、定期检测数据库中是否存在坏块。需要说明的是,经过上述步骤101~104,还可能存在坏块,因此进一步需要定期检测。步骤106、如果确定存在坏块,判断是否能够确定坏块发生的位置。具体的,坏块可能发生在索引,或发生在数据表,还可能发生在任意位置。步骤107、如果能够确定坏块发生的位置,根据坏块发生的位置修复坏块。具体的,确定坏块发生的位置可以通过以下代码实现:selecttablespace_name,segment_type,owner,segment_namefromdba_extentswherefile_id=andbetweenblock_idandblock_id+blocks-1。可选地,如果不能够确定坏块发生的位置,还包括:步骤108、判断数据库是否存在备份。步骤109、如果数据库存在备份,将数据库中所有数据块导出,并将备份中所有数据块导入数据库,以修复坏块。具体的,可以使用exp/imp命令进行修复,代码实现如下:exptest/testfile=t.dmptables=t。可选地,根据坏块发生的位置修复坏块,包括:步骤107a、如果坏块发生的位置是索引,获取发生坏块的索引。步骤107b、获取与获得的索引对应的数据表。步骤107c、删除获得的索引,并根据获得的数据表重新建立索引,以修复坏块。可选地,如果坏块发生的位置是数据表,还包括:步骤107d、获取发生坏块的数据表。步骤107e、根据预先建立的数据表与数据表的关联关系判断是否存在与发生坏块的数据表相关联的数据表。具体的,数据表与数据表之间是有关联关系的,这种关联关系会预先进行存储。步骤107f、如果存在与与发生坏块的数据表相关联的数据表,获取与发生坏块的数据表相关联的数据表作为第一数据表。需要说明的是,第一数据表是为了标识与发生坏块的数据表相关联的数据表,并不起限定作用。步骤107g、删除发生坏块的数据表,并根据第一数据表重新生成能够替代发生坏块的数据表的数据表,以修复坏块。可选地,如果不存在与发生坏块的数据表相关联的数据表,还包括:步骤107h、将发生坏块的数据表中除坏块以外其他所有数据块保存在预先建立的第二数据表中。需要说明的是,第二数据表是为了标识预先建立的用于存放数据块的数据表,并不起限定作用。步骤107i、删除存在坏块的数据表,并将第二数据表的名称修改为存在坏块的数据表的名称,以修复坏块。具体的,首先可以用oracle提供的dbms_repair包标记出坏块,代码实现如下:execdbms_repair.skip_corrupt_blocks(”,”)然后用createtableasselect命令将表中其它块上的记录保存到另一张表上,代码实现如下:createtablecorrupt_table_bakasselect*fromcorrupt_table再然后用droptable命令删除有坏块的表,代码实现如下:droptablecorrupt_table最后用altertablerename命令替换表名,代码实现如下:altertablecorrupt_table_bakrenametocorrupt_table还需要说明的是,如果表上存在索引,则要重建表上的索引。本发明实施例还提供一种坏块修复装置,如图2所示,该坏块修复装置2包括:创建模块21,用于创建数据库的全备份脚本。创建模块21,还用于根据获得的全备份脚本创建数据库的增量备份脚本。创建模块21,还用于根据预设备份工具和获得的增量备份脚本创建坏块修复脚本。修复模块22,用于根据获得的坏块修复脚本修复数据库中的坏块。可选地,修复模块22,具体用于定期执行坏块修复脚本替换数据库中增添的数据块,以修复数据库中的坏块。可选地,还包括:检测模块23,用于定期检测数据库中是否存在坏块。判断模块24,用于如果确定存在坏块,判断是否能够确定坏块发生的位置。修复模块22,还用于如果能够确定坏块发生的位置,根据坏块发生的位置修复坏块。可选地,如果不能够确定坏块发生的位置,判断模块24,还用于判断数据库是否存在备份。修复模块22,还用于如果数据库存在备份,将数据库中所有数据块导出,并将备份中所有数据块导入数据库,以修复坏块。可选地,修复模块22具体用于:如果坏块发生的位置是索引,获取发生坏块的索引。获取与获得的索引对应的数据表。删除获得的索引,并根据获得的数据表重新建立索引,以修复坏块。可选地,如果坏块发生的位置是数据表,修复模块22具体还用于:获取发生坏块的数据表。根据预先建立的数据表与数据表的关联关系判断是否存在与发生坏块的数据表相关联的数据表。如果存在与与发生坏块的数据表相关联的数据表,获取与发生坏块的数据表相关联的数据表作为第一数据表。删除发生坏块的数据表,并根据第一数据表重新生成能够替代发生坏块的数据表的数据表,以修复坏块。可选地,如果不存在与发生坏块的数据表相关联的数据表,修复模块22具体还用于:将发生坏块的数据表中除坏块以外其他所有数据块保存在预先建立的第二数据表中。删除存在坏块的数据表,并将第二数据表的名称修改为存在坏块的数据表的名称,以修复坏块。本发明实施例所提供的坏块修复装置,创建数据库的全备份脚本;根据获得的全备份脚本创建数据库的增量备份脚本;根据预设备份工具和获得的增量备份脚本创建坏块修复脚本;根据获得的坏块修复脚本修复数据库中的坏块。从本发明提供的技术方案可见,由于根据获得的坏块修复脚本进行了数据库中坏块的修复,因此实现了在数据库实例出现异常前对数据库中的坏块进行修复,从而在一定程度上保证了数据库的正常访问,提高了用户体验。在实际应用中,创建模块21、修复模块22、检测模块23和判断模块24均可由位于坏块修复装置中的中央处理器(centralprocessingunit,cpu)、微处理器(microprocessorunit,mpu)、数字信号处理器(digitalsignalprocessor,dsp)或现场可编程门阵列(fieldprogrammablegatearray,fpga)等实现。本发明实施例还提供一种用于坏块修复的装置,包括存储器和处理器,其中,存储器中存储有以下可被处理器执行的指令:创建数据库的全备份脚本。根据获得的全备份脚本创建数据库的增量备份脚本。根据预设备份工具和获得的增量备份脚本创建坏块修复脚本。根据获得的坏块修复脚本修复数据库中的坏块。可选地,存储器中具体存储有以下可被处理器执行的指令:定期执行坏块修复脚本替换数据库中增添的数据块,以修复数据库中的坏块。可选地,存储器中还存储有以下可被处理器执行的指令:定期检测数据库中是否存在坏块。如果确定存在坏块,判断是否能够确定坏块发生的位置。如果能够确定坏块发生的位置,根据坏块发生的位置修复坏块。可选地,如果不能够确定坏块发生的位置,存储器中还存储有以下可被处理器执行的指令:判断数据库是否存在备份。如果数据库存在备份,将数据库中所有数据块导出,并将备份中所有数据块导入数据库,以修复坏块。可选地,存储器中具体存储有以下可被处理器执行的指令:如果坏块发生的位置是索引,获取发生坏块的索引。获取与获得的索引对应的数据表。删除获得的索引,并根据获得的数据表重新建立索引,以修复坏块。可选地,如果坏块发生的位置是数据表,存储器中还具体存储有以下可被处理器执行的指令:获取发生坏块的数据表。根据预先建立的数据表与数据表的关联关系判断是否存在与发生坏块的数据表相关联的数据表。如果存在与与发生坏块的数据表相关联的数据表,获取与发生坏块的数据表相关联的数据表作为第一数据表。删除发生坏块的数据表,并根据第一数据表重新生成能够替代发生坏块的数据表的数据表,以修复坏块。可选地,如果不存在与发生坏块的数据表相关联的数据表,存储器中还具体存储有以下可被处理器执行的指令:将发生坏块的数据表中除坏块以外其他所有数据块保存在预先建立的第二数据表中。删除存在坏块的数据表,并将第二数据表的名称修改为存在坏块的数据表的名称,以修复坏块。本发明实施例还提供一种计算机可读存储介质,存储介质上存储有计算机可执行指令,计算机可执行指令用于执行以下步骤:创建数据库的全备份脚本。根据获得的全备份脚本创建数据库的增量备份脚本。根据预设备份工具和获得的增量备份脚本创建坏块修复脚本。根据获得的坏块修复脚本修复数据库中的坏块。可选地,计算机可执行指令具体用于执行以下步骤:定期执行坏块修复脚本替换数据库中增添的数据块,以修复数据库中的坏块。可选地,计算机可执行指令还用于执行以下步骤:定期检测数据库中是否存在坏块。如果确定存在坏块,判断是否能够确定坏块发生的位置。如果能够确定坏块发生的位置,根据坏块发生的位置修复坏块。可选地,如果不能够确定坏块发生的位置,计算机可执行指令还用于执行以下步骤:判断数据库是否存在备份。如果数据库存在备份,将数据库中所有数据块导出,并将备份中所有数据块导入数据库,以修复坏块。可选地,计算机可执行指令具体用于执行以下步骤:如果坏块发生的位置是索引,获取发生坏块的索引。获取与获得的索引对应的数据表。删除获得的索引,并根据获得的数据表重新建立索引,以修复坏块。可选地,如果坏块发生的位置是数据表,计算机可执行指令还具体用于执行以下步骤:获取发生坏块的数据表。根据预先建立的数据表与数据表的关联关系判断是否存在与发生坏块的数据表相关联的数据表。如果存在与与发生坏块的数据表相关联的数据表,获取与发生坏块的数据表相关联的数据表作为第一数据表。删除发生坏块的数据表,并根据第一数据表重新生成能够替代发生坏块的数据表的数据表,以修复坏块。可选地,如果不存在与发生坏块的数据表相关联的数据表,计算机可执行指令还具体用于执行以下步骤:将发生坏块的数据表中除坏块以外其他所有数据块保存在预先建立的第二数据表中。删除存在坏块的数据表,并将第二数据表的名称修改为存在坏块的数据表的名称,以修复坏块。虽然本发明所揭露的实施方式如上,但的内容仅为便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1