很多朋友对于数据库数据修复和修复数据库的作用不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
在信息化时代,数据库已经成为企业、机构和个人不可或缺的存储工具。由于各种原因,数据库数据丢失或损坏的情况时有发生。这时,数据库数据修复就显得尤为重要。本文将带您走进数据库数据修复的世界,揭秘数据恢复的神秘面纱。
一、数据库数据修复的重要性
1. 数据安全:数据库是存储重要数据的仓库,一旦数据丢失或损坏,将给企业、机构和个人带来不可估量的损失。
2. 业务连续性:数据库中的数据是企业、机构日常运营的基础,数据修复可以保证业务的连续性。
3. 合规要求:许多行业对数据安全有严格的要求,数据库数据修复有助于满足合规要求。
二、数据库数据修复的常见原因
1. 硬件故障:服务器、存储设备等硬件故障可能导致数据库数据损坏。
2. 软件故障:数据库软件本身存在缺陷或配置错误,可能导致数据损坏。
3. 人为操作:误操作、恶意攻击等人为因素可能导致数据库数据丢失或损坏。
4. 自然灾害:地震、洪水等自然灾害可能导致数据库硬件损坏,进而导致数据丢失。
三、数据库数据修复的步骤
1. 数据备份:在修复数据之前,首先要确保有完整的数据备份。
2. 故障分析:根据故障现象,分析故障原因。
3. 数据恢复:根据故障原因,采取相应的数据恢复方法。
4. 数据验证:恢复后的数据需要进行验证,确保数据的完整性和准确性。
5. 系统优化:对数据库进行优化,提高系统性能。
四、数据库数据修复的方法
1. 物理损坏:对于物理损坏的数据库,可以采用以下方法进行修复:
更换硬件:更换损坏的硬件设备,如硬盘、内存等。
数据恢复软件:使用数据恢复软件对损坏的数据库进行修复。
2. 逻辑损坏:对于逻辑损坏的数据库,可以采用以下方法进行修复:
数据库修复工具:使用数据库修复工具对数据库进行修复。
手动修复:根据数据库的日志文件,手动修复损坏的数据。
3. 人为操作:对于人为操作导致的数据库损坏,可以采取以下方法进行修复:
数据备份:使用数据备份恢复数据。
数据库修复工具:使用数据库修复工具恢复数据。
五、数据库数据修复的注意事项
1. 备份的重要性:定期进行数据备份,确保在数据丢失或损坏时能够及时恢复。
2. 备份策略:制定合理的备份策略,确保备份的完整性和可靠性。
3. 故障分析:在修复数据之前,要充分了解故障原因,避免重复故障。
4. 数据验证:恢复后的数据需要进行验证,确保数据的完整性和准确性。
5. 系统优化:对数据库进行优化,提高系统性能。
表格:数据库数据修复方法对比
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 物理损坏修复 | 硬件故障、自然灾害等 | 恢复速度快、数据完整性好 | 成本较高、需要专业技术人员 |
| 逻辑损坏修复 | 软件故障、人为操作等 | 恢复速度快、成本低 | 需要一定的技术知识、可能存在数据丢失风险 |
| 人为操作修复 | 误操作、恶意攻击等 | 恢复速度快、成本低 | 需要一定的技术知识、可能存在数据丢失风险 |
| 数据备份恢复 | 数据丢失或损坏时 | 恢复速度快、成本低 | 需要定期进行数据备份 |
总结
数据库数据修复是保障数据安全、业务连续性的重要手段。了解数据库数据修复的常见原因、步骤、方法及注意事项,有助于我们在面对数据丢失或损坏时,能够迅速采取有效措施,将损失降到最低。
电脑上数据库坏了该如何恢复正常
如果没有主数据库,您就无法成功地启动SQL Server。在本文里,我将向您介绍在发生崩溃的情况下如何修复主数据库,并告诉您如何重建主数据库,如果有必要的话。
制定预案
制定一个应对崩溃和/或主数据库故障的预案十分重要。这将有助于您在碰到灾难的情况下按照既定的方法进行处理,而不是迫于压力仓促作出反应。我碰到过很多很容易就陷入惊慌的状况,但是由于保持冷静并按照正确的方法来处理问题,我最后成功地度过了所有的困境。
怎么才能知道您的主数据库已经崩溃?
在正式开始讨论碰到系统故障如何修复和重建的主数据库之前,我们需要先了解如何辨别它已经崩溃了。要说明这一点,我会弄垮一个主数据库,告诉您主数据库崩溃会发生什么样的症状。
现在让我们假设您的公司碰到了电涌,造成SQL Server重启。在重新启动的时候,SQL Server却没有正常启动。如果查看错误日志,您会看到主数据库崩溃或者丢失。既然您知道需要查看什么信息,那就让我们看看如何修复主数据库。
修复您的主数据库
修复主数据库的第一步是使用“重建向导(Rebuild Wizard,Rebuildm.exe),它放在\Program Files\Microsoft SQL Server\80\Tools\BINN目录下。现在就让我们来看看重建向导是如何工作的。
双击Rebuildm.exe启动对话框。
在这个对话框里,您可以指定数据库服务器的修复设置,以及原始安装的数据文件的位置。要让这一过程更容易和更快,就要把x86目录从SQL的光盘上复制到硬盘上,并把指向改到本地的副本。一旦验证完了所有的信息,点击“重建(Rebuild)”。然后系统就会提示您确认操作
点击“确定(Yes)”。一旦重建过程完成,您会看到一条重建成功的消息。您现在就有了一个全新的主数据库,准备好修复主数据库了。
首先,打开命令行提示符,输入\Program Files\Microsoft SQL Server\MSSQL\BINN\目录下的sqlservr.exe–c–m命令,启动单用户模式下的SQL Server。
在单用户模式下启动SQL Server之后,您可以利用备份文件修复主数据库。您可以用“查询分析器(Query Analyzer)”或者“SQL企业管理器(SQL Enterprise Manager)”来修复它。
如果使用企业服务器,就要右击主数据库,选择“所有任务|修复数据库(All Tasks| Restore Database)”,浏览到您设备所在的位置,点击两次“OK”,您就可以成功地修复主数据库了。
如果由于某种原因您的修复操作无法成功完成,那么您可以试试别的方法。只用简单地重建主数据库并添加驻留在数据目录下的所有数据库就可以了。您可以用企业管理器或者查询分析器来添加数据库。在企业管理器里,右击“数据库(Databases)”,选择“添加数据库(Attach Database)”
怎么修复数据库 修复数据库坏块方法
修复数据库坏块
dbv
你也可以用dbv工具看一下你现在其他的数据文件有没有还有坏块的
dbv file='yourfilename'
恢复方法:
当Oracle数据库出现坏块时,Oracle会在警告日志文件(alert_SID.log)中记录坏块的信息:
ORA-01578: ORACLE data block corrupted(file# 7, block#)
ORA-01110: data file:'/oracle1/oradata/V920/oradata/V816/users01.dbf'
其中,<AFN>代表坏块所在数据文件的绝对文件号,代表坏块是数据文件上的第几个数据块
出现这种情况时,应该首先检查是否是硬件及操作系统上的故障导致Oracle数据库出现坏块。在排除了数据库以外的原因后,再对发生坏块的数据库对象进行处理。
1.确定发生坏块的数据库对象
SELECT tablespace_name,
segment_type,
owner,
segment_name
FROM dba_extents
WHERE file_id=
AND between block_id AND block_id+blocks-1;
2.决定修复方法
如果发生坏块的对象是一个索引,那么可以直接把索引DROP掉后,再根据表里的记录进行重建;
如果发生坏块的表的记录可以根据其它表的记录生成的话,那么可以直接把这个表DROP掉后重建;
如果有数据库的备份,则恢复数据库的方法来进行修复;
如果表里的记录没有其它办法恢复,那么坏块上的记录就丢失了,只能把表中其它数据坏上的记录取出来,然后对这个表进行重建。
3.用Oracle提供的DBMS_REPAIR包标记出坏块
exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('','');
4.使用Create table as select命令将表中其它块上的记录保存到另一张表上
create table corrupt_table_bak
as
select* from corrupt_table;
5.用DROP TABLE命令删除有坏块的表
drop table corrupt_table;
6.用alter table rename命令恢复原来的表
alter table corrupt_table_bak
rename to corrupt_table;
7.如果表上存在索引,则要重建表上的索引
PART2
2014.7.22研究恢复数据库坏块:
Oracle调用标准C的系统函数,对数据块进行读写操作,因此,坏块是有可能由以下几种原因产生:
硬件的I/O错误
操作系统的I/O错误或缓冲问题
内存或paging问题
磁盘修复工具
一个数据文件的一部分正在被覆盖
Oracle试图访问一个未被格式化的系统块失败
数据文件部分溢出
Oracle或者操作系统的bug
遇到“ORA-01578:ORACLE data block corrupted”错误
处理方法:1.rman的recover命令可以在数据库保持open状态下只恢复受损的数据块
2.如果没有备份,万不得已之下也可以采用DBMS_REPAIR包的存储过程将受损坏块隔离,同时尽可能地挽救部分数据。
rman backup命令也是检查坏数据块的好工具一旦读取ORA-19566即可有问题
此时可用backup validate tablespace user观察详细的信息,可查看到坏块数与跟踪文件
grep‘corrupt’/u01/app/oracle/diag/rdbms/br/br/trace/**.trc
恢复数据块:rman》recover datafile 5 block 203;
批量恢复受损的数据块:recover corruption list;
数据块坏块一号坏块,需要做:
run{
sql'alter database datafile 5 offline';
restore datafile 5;
recover datafile 5;
sql'alter database datafile 5 online'
}
使用exp/imp恢复
在这种情况下肯定会造成数据的丢失,在这种情况下应采取将数据导出然后重建表再进行导入的方法,来尽量恢复损坏数据块中的数据,但是在有坏块的情况下是不允许导出的,如下命令:Exp test/test file=t.dmp tables=t;
导出命令在执行中会报ORA-01578错误,在这错误提示中会提示那个文件号的文件以及这个文件中的哪个块被损坏,如:ORA—01578:ORACLE数据块损坏(文件号 4,块号 35)
针对以上的提示首先查询那些对象被损坏:
Select tablespace_name,segment_type,owner,segment_name From dba_extents Where file_id=4 and 35 between block_id and block_id+blocks-1;
如果被损坏的块是索引,通常可以通过索引重建来解决,如果损坏的是数据(segment_type为table),那么通过设置如下内部事件使得Exp操作跳过坏块。
Alter session set events=’10231 trace name context forever,level 10’;
然后重新执行导出命令,导出相关的表,然后执行Drop Table命令删除相关表,之后重建表最后导入数据。
使用DBMS_REPAIR恢复
用DBMS_REPAIR当然也会丢失数据。这里不做详细的介绍,有兴趣的可以查看oracle的在线文
3、使用dbms_repair包进行坏块处理
1)首先建立repair_table,用于存放dbms_repair.check_object检测出来的坏块信息
SQL> declare
2begin
3dbms_repair.admin_tables
4(table_name=>'REPAIR_TABLE',–表名
5table_type=> dbms_repair.repair_table,
6action=> dbms_repair.create_action,
7tablespace=>'USERS');–用于指定该表存放的表空间
8end;
9/
PL/SQL过程已成功完成。
SQL> col owner format a10
SQL> col object_name format a20
SQL> col object_type format a20
SQL> select owner, object_name, object_type
2from dba_objects
3where object_name like'%REPAIR_TABLE';
OWNEROBJECT_NAMEOBJECT_TYPE
————————————————–
SYSREPAIR_TABLETABLE
SYSDBA_REPAIR_TABLEVIEW
Oracle自动创建了一个DBA_REPAIR_TABLE视图。
2)使用dbms_repair.check_object进行坏块检测
SQL> set serveroutput on size 100000;
SQL> declare
2rpr_count int;
3begin
4rpr_count:= 0;
5dbms_repair.check_object(
6schema_name=>'SYS',–指定对象模式,也就是对象的所有者
7object_name=>'TEST',–指定对象名,也就是表名
8repair_table_name=>'REPAIR_TABLE',
9corrupt_count=> rpr_count);
10dbms_output.put_line('repair block count:'
11||to_char(rpr_count));
12end;
13/
repair block count: 4
PL/SQL过程已成功完成。
SQL> select object_name, block_id, corrupt_type, marked_corrupt,
2corrupt_description, repair_description
3from repair_table;
OBJECT_NAMEBLOCK_ID CORRUPT_TYPE MARKED_COR
—————————————————-
CORRUPT_DESCRIPTION
——————————————————————————-
REPAIR_DESCRIPTION
——————————————————————————-
TEST196148 TRUE
mark block software corrupt
TEST206148 TRUE
mark block software corrupt
TEST236148 TRUE
mark block software corrupt
TEST316148 TRUE
mark block software corrupt
通过运行dbms_repair.check_object,将坏块信息存放到了repair_table表中,其中有个字段marked_corrupt,用于标识该块是否被标识为坏块,当被标识为true时,即该块被标识为坏块。其中这一步跟oracle文档中的描述有点进入,根据oracle文档,当执行完dbms_repair.check_object时,并不会进行坏块标识,也就是marked_corrupt列的值应该为false,而只有当执行dbms_repair.fix_corrupt_blocks过程后才会进行坏块标识。
3)使用dbms_repair.fix_corrupt_blocks进行坏块标识
SQL> declare
2fix_block_count int;
3begin
4fix_block_count:= 0;
5dbms_repair.fix_corrupt_blocks(
6schema_name=>'SYS',
7object_name=>'TEST',
8object_type=> dbms_repair.table_object,
9repair_table_name=>'REPAIR_TABLE',
10fix_count=> fix_block_count);
11dbms_output.put_line('fix blocks count:'||
12to_char(fix_block_count));
13end;
14/
fix blocks count: 0
PL/SQL过程已成功完成。
我们可以见到到fix blocks count=0,即在上一步进行check_object时已经进行了坏块标识了,这一步其实可以省略。(不过没有测试过!)
oracle 数据库修复 要如何实施呢
Oracle数据恢复专题
备份恢复是Oracle中永恒的话题,只要有数据就有备份恢复的需求。而在国内对于备份以及备份的可用性往往被企业所忽视。这造成了再数据库恢复上存在着东西方的差异。更多的老外DBA把经历花在对Oracle内部原理和性能优化的研究上。
oracle data block structure
而我们国内 DBA似乎必须要精通一门额外的技术==》在没有任何备份的情况下恢复Oracle数据库中数据的技术!虽然这在大多数情况下是屠龙之技,但很多时候却又变成了衡量一个DBA技术水准的标准了,(这样不好..不好)。
当然也并不是说这种无备份下的数据恢复是无技术含金量的,实际上它们很需要对Oracle数据文件、数据块及其数据结构的理解,以及对数据字典构成的了解。
这里我们总结Oracle数据恢复专题的专题,包括一些在无备份情况下的数据恢复:例如DUL和BBED工具恢复等技术。
【数据恢复】利用构造ROWID实现无备份情况下绕过ORA-1578、ORA-8103、ORA-1410等逻辑/物理坏块问题
【数据恢复】ORA-600[kccpb_sanity_check_2]一例
Oracle rman中set newname可能很慢
如何清除Oracle控制文件中的无用记录,例如v$archived_log中的deleted归档日志记录
如何找回被create or replace覆盖的PL/SQL对象
Archivelog Completed Before VS UNTIL TIME
ASM丢失disk header导致ORA-15032、ORA-15040、ORA-15042 Diskgroup无法mount
Overcome ORA-600[4xxx] open database
数据恢复:解决ORA-600[kghstack_free2][kghstack_err+0068]一例
清理RMAN Catalog恢复目录
如何rename datafile name中存在乱码的数据文件
11g新特性recover corruption list
解决ORA-01578错误一例
Script:收集介质恢复诊断信息
如何重建SYSAUX表空间上的对象
Oracle数据恢复:解决ORA-00600:[4000] ORA-00704: bootstrap process failure错误一例
Script:检查数据库当前是否有备份操作在执行中
数据恢复:模拟2个逻辑坏块
Script:收集Oracle备份恢复信息
Oracle备份恢复:Rman Backup缓慢问题一例
了解rman catalog的兼容性
Oracle内部错误:ORA-00600[2608]一例
使用bbed解决ORA-01189错误
Fractured block found during backing up datafile
手动递增SCN号的几种方法:How to increase System Change Number by manual
DBMS_REPAIR example
Oracle的损坏/坏块主要分以下几种:
ORA-1578
ORA-8103
ORA-1410
ORA-1499
ORA-1578
ORA-81##
ORA-14##
ORA-26040
ORA-600 Errors
Block Corruption
Index Corruption
Row Corruption
UNDO Corruption
Control File
Consistent Read
Dictionary
File/RDBA/BL
关于数据库数据修复的内容到此结束,希望对大家有所帮助。




