当前位置:首页 » 数据仓库 » 数据库的逻辑损坏
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

数据库的逻辑损坏

发布时间: 2023-05-22 09:34:35

数据库IO逻辑错误会直接丢失数据吗

数据不会丢失,雹喊猛但需要解决硬盘IO错误。
具体的步骤如下:1.先下载并解压软件打开后,直接双击需要恢复的分区,然后右击软件图标选择《以管理员身份运行》;2.软件打开后,直接双击需要恢复的分区;3.程序扫描到文件后,会放到与要恢复盘同名的目录中;4.将想要恢复的资料打钩,右击选择《复制勾选的文件》,软件会将打钩的文件复制出来;5.最后一步只需要坐等软件将数据复制完毕就完毕源桥了。
以上几渗或个步骤完成,数据库IO错误就可以解决。

Ⅱ 数据库文件丢失的原因有哪些

自然原因 ---- 自然原因主要指由于自然灾害造成的数据被破坏,如水灾、火灾、雷击、地震等造成计算机系统的破坏,导致存储数据被破坏或完全丢失,或 由于操作时断电、意外电磁干扰造成数据丢失或破坏。自然原因造成的数据丢失现象一般表现为硬盘损坏、硬盘无法识别、磁盘读写错误、找不到所需要的文件、文件打不开、文件打开后乱码等。

人为原因 ---- 人为原因主要是指由于使用人员的误操作造成的数据被破坏。如误格式化或误分区、误克隆、误删除或覆盖、环境的潮湿、经常不正常退出、 人为地摔坏或磕碰硬盘等。人为原因造成的数据丢失现象一般表现为操作系统丢失、无法正常启动系统、磁盘读写错误、找不到所需要的文件、文件打不开、文件打开后乱码、硬盘没有分区、提示某个硬盘分区没有格式化、硬盘被强制格式化、硬盘无法识别或发出异响等。

硬件原因 ---- 硬件原因主要是指由于计算机设备的硬件故障(包括存储介质的老化、失效)、磁盘划伤、磁头变形、磁臂断裂、磁头放大器损坏、芯片组或 其他元器件损坏等造成数据丢失或破坏。硬件原因造成的数据丢失现象一般表现为系统不认硬盘,常有一种"咔嚓咔嚓"或"哐当、哐当"的磁阻撞击声,或电机不转、通电后无任何声音、磁头定位不准造成读写错误等现象。

软件原因 ---- 软件原因主要是指由于受病毒感染、零磁道损坏、硬盘逻辑锁、系统错误或瘫痪造成文件丢失或破坏,对数据的破坏等造成数据丢失或破坏。 软件原因造成的数据丢失现象一般表现为操作系统丢失、无法正常启动系统、磁盘读写错误、找不到所需要的文件、文件打不开、文件打开后 乱码、硬盘没有分区、提示某个硬盘分区没有格式化、硬盘被锁等。

Ⅲ 筑业软件显示数据库逻辑错误或丢失是怎么回事

在恢复的时候,逻辑文件名不可以修改,举桐你指定的物理文件存放的位置必须存在,你可以使用 restore filelistonly from disk = ss.bak 看看冲并它原来的逻正判坦辑文件名,然后再恢复就没有问题了。

sqlite SQL logic error or missing database,该怎么解决

sqlite SQL 逻辑错误或数据库丢失,先检查数据库文件是否存在,然后重装。

Ⅳ paradox数据库据说容易损坏,那么是怎么修复的呢

当数据表逻辑损坏时,如果数据库引擎报告表索引头错误,通过分析可知多半是表头中有关块或记录的参数不匹配,比如“使用的块数”大于“总的块数”,或是记录数和块数不匹配。如果只能显示部分数据,可能是表头中“总的记录数”小于实际记录数,也可能是数据块链表错乱。
如果只是表头索引参数出了问题,我们可以通过分析表头相关信息,用16进制编辑器直接进行参数修改就可解决问题;如果是数据块链表出了问题,一般无法直接修改(比如对有成千上万条记录的数据表)。

Ⅵ Oracle数据库遇到ORA-01578坏块错误的原因是什么,求解释

【Oracle数据恢复】ORA-01578错误解析

一般认为ORA-1578是 数据块物理坏块/损坏的一种,不同于逻辑损坏/坏块,其错误信息如下:

[oracle@oel8 dirdat]$ oerr ora 1578
01578, 00000, "ORACLE data block corrupted (file # %s, block # %s)"
// *Cause: The data block indicated was corrupted, mostly e to software
// errors.
// *Action: Try to restore the segment containing the block indicated. This
// may involve dropping the segment and recreating it. If there
// is a trace file, report the errors in it to your ORACLE
// representative

这个1578一兆迹般 会伴随ORA-1110出现,一旦ORACLE读取到存在损坏的块就会报出:

SQL> select * from scott.emp;
select * from scott.emp
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 11, block # 34) 这里的FILE#是 RFN
ORA-01110: data file 6:'/home/oracle/族绝并corrclass.dbf' 这里的是AFN

断裂的数据块Fractured Block:

Corrupt block relative dba: 0x0380e573 (file 14, block 58739)
Fractured block found ring buffer read
Data in bad block -
type: 6 format: 2 rdba: 0x0380e573
last change scn: 0x0288.8e5a2f78 seq: 0x1 flg: 0x04
consistency value in tail: 0x00780601
check value in block header: 0x8739, computed block checksum: 0x2f00
spare1: 0x0, spare2: 0x0, spare3: 0x0
***
Reread of rdba: 0x0380e573 (file 14, block 58739) found same corrupted data

或者错误的校验和checksum

Corrupt block relative dba: 0x0380a58f (file 14, block 42383)
Bad check value found ring buffer read
Data in bad block -
type: 6 format: 2 rdba: 0x0380a58f
last change scn: 0x0288.7784c5ee seq: 0x1 flg: 0x06
consistency value in tail: 0xc5ee0601
check value in block header: 0x68a7, computed block checksum: 0x2f00
spare1: 0x0, spare2: 0x0, spare3: 0x0
***
Reread of rdba: 0x0380a58f (file 14, block 42383) found same corrupted data

或者错误的块头宏陵

Corrupt block relative dba: 0x0d805a89 (file 54, block 23177)
Bad header found ring buffer read
Data in bad block -
type: 6 format: 2 rdba: 0x0d805b08
last change scn: 0x0692.86dc08e3 seq: 0x1 flg: 0x04
consistency value in tail: 0x08e30601
check value in block header: 0x2a6e, computed block checksum: 0x0
spare1: 0x0, spare2: 0x0, spare3: 0x0
***
Reread of rdba: 0x0d805a89 (file 54, block 23177) found valid data

一些可能引起ORA-1578的BUG 列表如下:
如果自己搞不定可以找ASKMACLEAN专业数据库修复团队成员帮您恢复!

Ⅶ 数据库系统中的常见故障有哪些

新增archives 时的状况:
条件和假设:自上次镜像备份以来已经生成新的archive log(s); Archivelog Mode; 有同步的datafile(s) 和control file(s) 的镜像(冷)拷贝;archive log(s) 可用。
恢复步骤:
1. 如果数据库尚未关闭,则首先把它关闭: $ svrmgrl svrmgrl> connect internal
svrmgrl> shutdown abort
2. 将备份文件抄送回原始地点: 所有Database Files
所有Control Files(没有archive(s) 或redo(s) 的情况下,control files 的更新无任何意义)
所有On-Line Redo Logs (Not archives) init.ora file(选项)
3. 启动数据库: $ svrmgrl
svrmgrl> connect internal
svrmgrl> startup
数据文件, 重作日志和控制文件同时丢失或损坏:
条件和假设:Archivelog Mode; 有同步的所有所失文件的镜像(冷)拷贝;archive log(s) 可用
恢复步骤(必须采用不完全恢复的手法):
1. 如果数据库尚未关闭,则首先把它关闭: $ svrmgrl svrmgrl> connect internal
svrmgrl> shutdown abort
2. 将备份文件抄送回原始地点:
所有Database Files
所有Control Files
所有On-Line Redo Logs(Not archives)

init.ora file(选项)

3. 启动数据库然而并不打开:

svrmgrl>startup mount

4. 做不完全数据库恢复,应用所有从上次镜像(冷)备份始积累起来的archives:

svrmgrl> recover database until cancel using backup controlfile;

......

......

cancel

5. Reset the logfiles (对启动而言不可省略):

svrmgrl> alter database open resetlogs;

6. 关闭数据库并做一次全库冷备份。

数据文件和控制文件同时丢失或损坏:

条件和假设:Archivelog Mode; 有同步的datafile(s) 和control file(s) 的冷拷贝;archive log(s) 可用

恢复步骤:

1. 将冷拷贝的datafiles(s) 和control file(s) 抄送回原始地点:

$ cp /backup/good_one.dbf /orig_loc/bad_one.dbf

$ cp /backup/control1.ctl /disk1/control1.ctl

2. 以mount 选项启动数据库:

$ svrmgrl

svrmgrl> connect internal

svrmgrl> startup mount

3. 以旧的control file 来恢复数据库:

svrmgrl> recover database until cancel using backup controlfile;

*** 介质恢复完成

(须在应用完最后一个archive log 后cancel )

4. Reset the logfiles (对启动而言不可省略):

svrmgrl> alter database open resetlogs;

重作日志和控制文件同时丢失或损坏时:

条件和假设:Control Files 全部丢失或损坏;Archivelog Mode; 有Control Files 的镜像(冷)拷贝

恢复步骤:

1. 如果数据库尚未关闭,则首先把它关闭:

$ svrmgrl

svrmgrl> connect internal

svrmgrl> shutdown abort

svrmgrl>exit

2. 以Control File 的镜像(冷)拷贝覆盖损坏了的Control File:

$ cp /backup/control1.ctl /disk1/control1.ctl

3. 启动数据库然而并不打开:

$ svrmgrl

svrmgrl> connect internal

svrmgrl> startup mount

4. Drop 坏掉的redo log (排除硬件故障):

svrmgrl> alter database drop logfile group 2;

5. 重新创建redo log:

svrmgrl> alter database add logfile group 2 '/orig_loc/log2.dbf' size 10M;

6. 以旧的control file 来恢复数据库:

svrmgrl> recover database until cancel using backup controlfile;

(必须马上cancel )

7. Reset the logfiles (对启动而言不可省略):

svrmgrl> alter database open resetlogs;

8. 关闭数据库并做一次全库冷备份

只发生归档重作日志丢失或损坏时:

根据不同环境和情况,选择下述手段之一:

a. 马上backup 全部datafiles (如果系统采用一般热备份或RMAN 热备份)

b. 马上正常关闭数据库并进行冷备份(如果系统采用冷备份)

c. 冒险前进!不做备份而让数据库接着跑,直等到下一个备份周期再做备份。这是在赌数据库在下一个备份周期到来之前不会有需要恢复的错误发生。

注意:冒险前进的选择:如果发生错误而需要数据库恢复,则最多只能恢复到出问题archive log 之前的操作现场。从另一个角度讲,archive log(s) 出现问题时,数据库若不需要恢复则其本身并没有任何问题。

Oracle逻辑结构故障的处理方法:

逻辑结构的故障一般指由于人为的误操作而导致重要数据丢失的情况。在这种情况下数据库物理结构是完整的也是一致的。对于这种情况采取对原来数据库的全恢复是不合适的,我们一般采用三种方法来恢复用户数据。

采用exp/imp工具来恢复用户数据:

如果丢失的数据存在一个以前用exp命令的备份,则可以才用这种方式。

1. 在数据库内创建一个临时用户:

svrmgrl>create user test_user identified by test;

svrmgrl>grant connect,resource to test_user;

2. 从以前exp命令备份的文件中把丢失数据的表按照用户方式倒入测试用户:

$imp system/manager file=export_file_name tables=(lost_data_table_name…) fromuser=lost_data_table_owner touser=test_user constraint=n;

3. 用相应的DML语句将丢失的数据从测试用户恢复到原用户。

4. 将测试用户删除:

svrmgrl>drop user test_user cascede;

采用logminer来恢复用户数据:

Logminer是oracle提供的一个日志分析工具。它可以根据数据字典对在线联机日志、归档日志进行分析,从而可以获得数据库的各种DML操作的历史记录以及各种DML操作的回退信息。根据这些用户就可以将由于误操作而丢失的数据重新加入数据库内。

1. 确认数据库的utl_file_dir参数已经设置,如果没有则需要把这个参数加入oracle的初始化参数文件,然后重新启动数据库。下面例子中假设utl_file_dir=’/opt/oracle/db01’;

2. 创建logminer所需要的数据字典信息,假设生成的数据字典文本文件为dict.ora:

svrmgrl>execute dbms_logmnr_d.build(dictionary_filename=>'dict.ora', dictionary_location=>'/opt/oracle/db01’);

3. 确定所需要分析的日志或者归档日志的范围。这可以根据用户误操作的时间来确定大概的日志范围。假设用户误操作时可能的日志文件为/opt/oracle/db02/oradata/ORCL/redo3.log和归档日志’/opt/oracle/arch/orcl/orclarc_1_113.ora’。

4. 创建要分析的日志文件列表,按日志文件的先后顺序依次加入:

svrmgrl>execute dbms_logmnr.add_logfile(logfilename=>’/opt/oracle/arch/orcl/orclarc_1_113.ora’,options=>dbms_logmnr.NEW);

svrmgrl> execute dbms_logmnr.add_logfile(logfilename=>’ /opt/oracle/db02/oradata/ORCL/redo3.log’,options=>dbms_logmnr.ADDFILE);

5. 开始日志分析,假设需要分析的时间在’2003-06-28 12:00:00’和’2003-06-28 13:00:00’之间:

svrmgrl>execute dbms_logmnr.start_logmnr(dictfilename=>’ /opt/oracle/db01/dict.ora’,starttime=>to_date(’ 2003-06-28 12:00:00’,’YYYY-MM-DD HH:MI:SS’),endtime=>to_date(to_date(‘2003-06-28 13:00:00’,’YYYY-MM-DD HH:MI:SS’));

6. 获取分析结果:

svrmgrl>select operation,sql_redo,sql_undo from v$logmnr_contents;

7. 根据分析结果修复数据。

8.结束logmnr:

svrmgrl>dbms_logmnr.end_logmnr;

9. 用适当的方法对原数据库进行数据库全备份。

利用备份恢复用户数据:

采用这种方法时并不是在原数据库进行恢复,而是利用数据库备份在新的机器上重新建立一个新的数据库。通过备份恢复在新机器上将数据库恢复到用户误操作前,这样就可以获得丢失的数据将其恢复到原数据库。

1. 在新的机器上安装数据库软件。

2. 对于采用带库备份的现场,需要在新的数据库服务器上安装调试相应的备份管软件。

3. 根据用户误操作的时间点进行基于时间点的数据库恢复操作。对于没有采用带库备份的现场,可以选取用户误操作前最近的备份磁带进行恢复;对于才用带库备份的点可以通过基于时间恢复点恢复的rman脚本来进行恢复。

4.重新打开数据库:

svrmgrl>alter database open resetlogs;

5. 从新的数据库中获取丢失的用户数据,通过DML操作将其恢复到原数据库中。

6. 用适当的方法对原数据库进行数据库全备份。

Ⅷ 哪位朋友能告诉我mysql数据库中的表频繁损坏是为什么

出现表损坏的根本原因是:你的表使用了MyISAM存储引擎。MyISAM存储引擎主要用于SELECT,如果用于INSERT, UPDATE, DELETE,由于内部缺陷和异常数据访问经常造成索引文件损坏,注意是“经常”。

因此解决办法有二:
1.用myisamchk工具修复或者是经常对数据表优化或检查。一旦文件损坏只能暂停web访问,用myisamchk工具修复后可恢复正常。(暂时好困性,不能解决根本问题)
2.把表转换为innodb存轮顷储引擎。对用户来说是透明的,对程序逻辑不受任何影友桐念响,永久解决索引文件损坏的问题。

可通过以下语句把存储引擎转换为innodb
ALTER TABLE `dbname`.`tbname` ENGINE = InnoDB;

Ⅸ oracle在没有闪回的情况下怎样找回以删了的表

多项研究表明,40% 的应用程序故障都是由操作员或用户的错误造成的。人非圣贤,孰能无过?但是,这些错误很难避免,而且在没有事先规划和使用正确技术的情况下尤其难以恢复。这样的错误会导致“逻辑”数据损坏,或者导致 IT 基础架构的一个或多个组件停止运行。纠正个别组件的错误相对来说简单,而检测并纠正逻辑数据的损坏,例如意外删除了有价值的数据时,所耗费的操作将导致业务产出的巨大损失。典型的用户错误可能包括意外删除了有价值的数据,错误删除了数据和错误删除了表。避免人为错误 Oracle 数据库体系结构利用了人为错误数据库恢复领域独有的技术进展。Oracle 闪回技术提供了一组新特性,可及时查看数据并在时间上前后滚动数据。使用闪回特性,可以查询历史数据、执行更改分析,以及执行自助修复,以便在数据库联机时从逻辑损坏中恢复。利用 Oracle 闪回技术,您完全可以撤销过去的操作!Oracle9i 引入了闪回查询,从而提供了可从人为错误中恢复的简单、强大和全面的非破坏性机制。它允许用户查看过去某个时间点的数据状态,而无需更改任何数据库结构。 Oracle 数据库 10g 扩展了闪回技术,提供了基于数据库、表、行和事务级别的快速、方便的恢复。闪回技术使恢复过程实现了革命性变化,您只需对更改的数据进行操作。现在,错误恢复所需的时间就相当于错误发生的时间。Oracle 10g 闪回技术包括闪回数据库、闪回表、闪回删除、闪回版本查询以及闪回事务查询。 可以轻松地利用闪回技术进行非修复性操作,如使用闪回查询进行历史审计、利用闪回数据库撤销测试更改。Oracle 数据库 11g 引进了一个创新的方法,使用闪回数据存档来管理和查询长期的历史数据。该版本还提供了简单的一步式事务撤销操作,实现了新的闪回事务功能。 Oracle 数据库 11g 中的新特性 闪回数据存档 闪回数据存档能够以高度的应用程序透明性、安全性及高效的方式自动跟踪和维护对所有 Oracle 数据的历史更改。作为 Oracle Total Recall 选件的组成部分,闪回数据存档为企业提供了快速、集中和极其高效的解决方案,以满足管理所有历史数据的需要。闪回数据存档自动跟踪对数据库中所存储数据的每个更改,同时维护一个安全、高效和易于访问的历史数据存档。捕获的历史数据可以根据业务需要保存任意长的时间,并且可以使用闪回 SQL 查询方便地进行访问。在现有表和新建表上均可立即启用历史数据跟踪,更重要的是,以一种完全应用程序透明的方式进行跟踪。伏轮 闪回数据存档提供了一唯梁个高性能的、存储优化的、具有集中管理界面的解决方案,可以满足组织对数据保留和更改控制的需求。使用闪回数据存档进行历史数据跟踪的主要好处包括: 应用程序透明: 在应用程序没有更改或更改很小的情况下,可以在一个或多个表缺山信上立即启用历史数据捕获。因此,客户可以使用该特性捕获打包应用程序以及自行开发的应用程序的历史数据。 无缝访问: 可以使用熟悉的闪回 SQL 结构轻松访问历史数据。闪回数据存档包括对闪回查询的支持。应用程序可以及时无缝地查询不同时间点的表历史数据。无需拍摄特殊快照既可利用该特性。 安全性: 历史数据一旦生成,任何用户都不能进行修改。这就实现了即取即用,而无需特殊或额外的设置。对内部历史表的访问限制为只读。不允许用户(包括管理员)进行 DML 操作。由于通过闪回查询机制提供了无缝访问,因此应用程序无需直接查询内部历史表。 最小的性能开销: 常规用户事务几乎没有影响。闪回数据存档采用轻型机制来标记要存档的跟踪表上的 DML 操作。通过稍后介绍的后台进程异步生成实际历史记录并进行存档。 存储优化: 在内部对历史数据进行分区和高度压缩,以减少占用的存储空间。闪回数据存档采用高效的压缩模式来压缩内部历史表。此外,它还依据范围分区模式对内部历史表进行自动分区。闪回数据存档中的压缩和分区都是自动管理的,无需特殊管理。 集中管理: 闪回数据存档提供了一个基于策略的集中管理界面,实现了大量正在进行中的管理任务自动化。使用闪回数据存档,可以方便地对表进行分组并设置常规保留策略。新表将从所在的闪回数据存档中自动继承保留参数。Oracle 将根据指定的保留策略自动清除所有跟踪表中过期的历史数据。这就可以将管理员从重复的历史数据管理中解放出来,避免了与人工维护有关的成本高昂的错误(如,错误清除了历史数据)。 闪回事务 大型数据库应用程序依赖复杂的事务序列,以确保一组插入、更新或删除的原子性和一致性。如果出现一个“问题”事务,管理员必须向前追溯,了解哪些更改受该事务的影响并确定任何依赖关系(例如,“问题”事务之后修改了相同数据的事务),从而确保撤销该事务,保留原始的、好的数据状态和任何相关数据。执行这种事务分析可能很费力,尤其对非常复杂的应用程序。通过闪回事务,使用一个 PL/SQL 操作即可实现单个事务(还可以包含它依赖的所有事务)的闪回,或者使用直观的 EM 向导来识别并闪回有问题的事务。闪回事务依赖于给定事务及其相关事务的撤销数据和存档重做日志的可用性,以便撤销更改。Oracle 数据库 10g 第 2 版中的新特性恢复点 当需要进行 Oracle 数据库时间点恢复操作时,DBA 必须确定数据必须回滚到的时间或 SCN。Oracle 数据库 10g 第 2 版用恢复点简化了时间点恢复。恢复点是用户定义的一个名称,与闪回数据库、闪回表和恢复管理器 (RMAN) 结合使用时可以代替 SCN 或时钟时间,可以通过企业管理器或者用 SQL*Plus 或 RMAN 以命令行方式创建。使用恢复点,无需调查事务的 SCN 或时间,使用户能够收藏数据库事务事件。有保证的恢复点确保了始终维护足够的闪回日志,以便返回到恢复点。这意味着快速恢复区将不删除闪回日志,除非当前的保证恢复点不再需要这些日志。可在进行主要数据库更改(如数据库批处理作业或模式升级)之前创建这些特殊恢复点,从而可在需要撤销更改时使用这些恢复点进行闪回。通过RESETLOGS 闪回数据库 通过RESETLOGS 闪回数据库使 RESETLOGS 操作之前创建的闪回日志可用于闪回数据库操作。在 Oracle 数据库 10g 第 2 版中,使用 RESETLOGS 打开数据库后即保留闪回日志。如果直到执行了 RESETLOGS 之后才发现长期存在的逻辑错误,这种情况下该特性非常有用,需要在 RESETLOGS 之前进行闪回。在 Oracle Data Guard 环境中,该功能允许物理备用数据库以读写方式打开,以便稍后闪回更改并将更改转换回物理备用数据库。如果切换操作后发现逻辑错误,可以将主数据库和备用数据库闪回到切换操作前的 SCN 或时间点。Oracle 数据库 10g 第 1 版中的新特性闪回数据库 闪回数据库可快速地将 Oracle 数据库倒回至以前的某个时间,以便纠正由逻辑数据损坏或用户错误造成的任何问题。闪回数据库就像数据库的“倒退按钮”。它提供数据库的时间点恢复,而无需先恢复数据库备份。当您希望消除从磁带恢复数据库备份所花的时间时,数据库时间点恢复是一种快速方法。 闪回数据库功能(可使用 FLASHBACK DATABASE 命令从 RMAN 和 SQL*Plus 启用)与传统的时间点恢复的效果类似。它允许您将数据库返回到其近期的状态。若要启用闪回数据库功能,用 DBA 配置闪回恢复区。快速恢复区是 Oracle 数据库 10g 的一个新特性,它为 Oracle 数据库中所有与恢复相关的文件和操作提供了统一的存储位置。除了闪回数据库日志外,恢复区还包含存档重做日志和 RMAN 备份。有关快速恢复区的详细信息,请参考 Oracle 备份和恢复文档。 Oracle 在快速恢复区内自动创建和管理闪回日志。因为快速恢复区配置了空间定额,闪回日志要受制于这些磁盘空间限制。闪回日志的大小区别很大,这取决于在给定的闪回日志间隔期间数据库更改的读/写速度。旧程序块版本的副本被写入到闪回日志中。如果一天之内更新了 10% 的数据库程序块,则 24 小时闪回日志的大小约为您数据库大小的十分之一。如果将数据库恢复到过去较早时期可能要求更多的磁盘空间,则 DBA 可能会动态地更改此磁盘定额。 闪回为 Data Guard 提供了易于使用的方法来纠正用户错误。闪回数据库既可用在主数据库上又可用在备份数据库上,可快速地将数据库恢复到较早的时间点,从而避免用户错误。同时,如果管理员决定故障切换到备用数据库,但那些用户错误已被应用于备用数据库(例如,由于启用了实时应用特性),则管理员只需将备用数据库闪回到某个安全的时间点。启用闪回数据库的性能开销不到 2%。您可能不希望牺牲任何生产数据库的性能开销,而是实现一种平衡。如果能在数分钟而不是数小时内恢复数据库,则可避免公司上百万美元的收益损失,您愿意将 2% 的资源用于闪回数据库吗?启用闪回数据库功能有以下几方面好处: 免去了恢复备份的时间。当数据库因遇到灾难性故障而关闭时,公司因无法做生意而导致大量收入损失。 消除了备用数据库重做应用延迟。 闪回数据库与 Data Guard 无缝集成。备用数据库现在可以轻松快速闪回到过去的任意时间点,这样在应用重做过程中就不需要延迟。 意外错误纠正。 闪回数据库提供了 Oracle 数据库的连续快照。数据库可以回退到 SCN 或时间戳。 闪回表 当发生人为错误或应用程序错误时,您可能想将一个或多个表状态恢复至故障发生以前的时间点。使用闪回表,DBA 能够将一个或一组表快速轻松地联机恢复到指定时间点。闪回表可在恢复表的同时自动保留其相关属性(如当前索引、触发器和限制),而无需 DBA 查找和恢复应用程序特有的属性。闪回表缓解了执行更为复杂的时间点恢复操作的需求。以下命令将 ORDERS 和 ORDER_ITEMS 表闪回到 7 月 7 日下午 2:33。 FLASHBACK TABLE orders, order_items TO TIMESTAMP (JUL-07-2003, 02:33:00);和闪回查询一样,闪回表也依靠撤销数据来恢复表。因此撤销数据必须可用,这样闪回表才能成功。自动撤销管理特性允许您使用 UNDO_RETENTION 初始化参数指定保留撤销数据的时间。通过使用此参数并适当地规定撤销表空间大小,DBA 能够控制使用闪回表的情况下可修复表的回退时间长短。 DBA 可以使用闪回表特性快速地从人为错误中恢复,它还可以用作自助式修复工具以便从意外修改或删除中恢复。应用程序开发人员可以将闪回表功能合并到他们定制的应用程序中。凭借基于时间点对象的恢复可用性、快速恢复和易用性,该工具相比于介质恢复提供更多的好处。闪回表联机执行恢复操作 将指定表中的所有数据恢复到时间戳或 SCN 描述的先前的时间点。 自动恢复所有的表属性(如索引、触发器以及应用程序所必需的内容),这些应用程序利用闪回的表才能发挥作用。 在分布式环境中维护任何远程状态。例如,所有应用程序要求的表修改都被闪回。 按照约束规定保持数据完整性。Oracle 保留了所有从属对象和参考的完整性。 即使在闪回操作以后,仍然能够将其恢复到最初状态。 闪回删除 回收站是一个虚拟容器,所有被删除的对象都驻留在这里。在回收站中,这些对象占据与创建它们时所占据的相同空间。如果在 USERS 表空间中创建表 EMP,那么删除的表 EMP 保留在 USERS 表空间中。并不移动删除的表和任一相关对象(如索引、约束、嵌套表和其他相关对象),仅对它们进行重命名,使其前缀为 BIN$$。可以继续访问删除表中的数据,甚至可以依据删除表使用闪回查询。在删除回收站对象前,每个用户对回收站对象都拥有相同的权利和权限。可以通过查询新回收站视图来查看删除表。回收站中的对象将保留在数据库中,直到删除对象的所有者决定使用新清除命令永久性删除这些对象。按用户的定额对回收站中的对象计数。但闪回删除是一种非破坏性特性。如果发生下面的情况,将通过空间恢复过程自动清除回收站中的对象用户创建新表或添加导致其超出定额的数据。 表空间需要扩展其文件大小,以适应创建/插入操作。 错误删除了表?没问题。使用闪回删除快速撤销删除。 闪回查询 闪回查询是随 Oracle9i 一起引入的,它提供了查看存在于以前的数据的能力。默认情况下,数据库上的操作使用最近提交的可用数据。如果希望查询过去某个时间的数据库,那么,可以使用闪回查询特性进行此项操作。此特性可以指定时间或系统更改编号 (SCN),并使用提交的数据从对应时间中进行查询。当使用自动撤销管理时,闪回查询机制最有效。 Oracle 数据库将撤销操作当作第一等级的数据库对象。撤销操作具有持久性,可使数据库系统继续有效,也可导致数据库系统崩溃或关闭。为获取更佳性能,它还与其他数据库对象分享数据库缓冲存储器。Oracle 数据库使用超出事务处理提交范围的撤销操作,提供长期运行查询的读取一致性,并从逻辑损坏中恢复。 Oracle 数据库提供了直接指定为保留而进行的撤销数量的方法。此系统自动回收过期的撤销操作,以便为新事务生成撤销提供空间。撤销保留值的选择取决于长期运行查询的长度以及逻辑损坏的恢复需求。然而,用户可以不选择指定的撤销保留,以及允许系统为指定的撤销空间提供最佳保留。此最佳保留考虑到长期运行查询以及从逻辑损坏中恢复的最佳可能范围。并不保证默认的撤销保留。如果用尽用于现行事务的过期撤销,那么,系统可以使用最早的未过期撤销操作。 如果UNDO_RETENTION 设置为大于 5 天,那么,Oraclee 数据库 10g 第 1 版中的一项新功能是可以查询过去 5 天以前的数据。只要为撤销表空间数据文件分配足够的磁盘空间,那么,Oracle 将维护一段时间内的撤消操作。下面描述了确保数据库可以使用依赖于撤销操作的闪回查询和其他闪回特性所需要的步骤:确保数据库使用一个撤销表空间。将 UNDO_MANAGEMENT 初始化参数设置为自动指定。 将UNDO_RETENTION 初始化参数设置为一个可以使撤销操作保留足够时间的值,从而可以及时成功返回您的最长查询或者从人为错误中恢复。 为了保证未过期的撤销不被覆盖,设置撤销表空间的 RETENTION GUARANTEE 子句。 闪回查询的一个独有特性是可以查看过去的数据,然后正确选择如何处理此信息。您可以进行分析,然后撤销更改,或者捕获更改的数据以供将来处理。闪回查询机制非常灵活,可以用于很多场合。可用于:查询过去存在的数据。 将当前数据与过去的数据进行比较。可以比较单独行或进行更复杂的比较,如查找交集或合并。 恢复已删除或更改的数据。 闪回版本查询 闪回版本查询提供了审计表行以及检索有关更改行事务信息的方法。它检索所有提交的行版本,这些行位于或曾经位于发出查询的时间和过去某一时间点之间。它利用自动撤销管理完成此项操作。 闪回版本查询是 SQL 的扩展,可用于检索指定表中不同行的版本,此表存在于特定时间段内。对于任一指定的表,每次执行 COMMIT 语句时,都会创建一个新行版本。闪回版本查询返回存在于指定时间段内的每个行版本的行。使用 SELECT 语句的 VERSIONS BETWEEN 子句调用闪回版本查询功能。 闪回版本查询提供了新的附加列,这些列提供了有关行数据事务的详细信息,此行数据允许 DBA 查明 Oracle 数据库中数据更改的时间和方式。 VERSIONS_XID — 创建此行版本的事务 id VERSIONS_OPERATION — 创建此行版本的操作(如删除、插入和更新) VERSIONS_STARTSCN — 此行版本首次中出现时的 SCN VERSIONS_ENDSCN — 此行版本首次进行更改时的 SCN。 闪回版本查询是 DBA 运行分析和回答“这是怎么发生的?”问题的强大工具。DBA 不仅可以运行手动分析,而且闪回版本查询还是应用程序开发人员的强大工具。可以构建用于审计目的的自定义应用程序。并不是每个人都能够真正解释他/她的操作。 闪回事务查询 您可能会发现表中的数据不知何故被不正确地更改了。为了研究该更改,可使用多个闪回查询及时查看指定点的行数据。更高效的方法是,使用闪回版本查询特性查看一定时间内对行进行的所有更改以及相关的事务 id。该特性允许将 VERSIONS BETWEEM 子句附加至 SELECT 语句,后者指定 SCN 或希望查看其间行值发生变化的时间戳范围。 一旦确定错误事务,就可使用闪回事务查询特性识别该事务进行的其他更改,并请求撤销 SQL 来冲销这些更改。您可以通过 FLASHBACK_TRANSACTION_QUERY 视图获得事务历史记录和撤消 SQL。 如果需要将错误事务的结果倒退回去,可以手动执行撤销 SQL 语句,从而可以轻松地从用户或应用程序错误中恢复。闪回事务查询可以提高对数据库中问题的联机诊断能力,并利于执行事务分析和审计。总结 人为错误是导致系统故障的主要原因之一。这些错误很难避免,而且在没有事先规划和使用正确技术的情况下尤其难以恢复。“正确”技术是:Oracle 数据库 11g。为什么犯错误只需几秒,而恢复却要花费数小时或数天?不应如此并且现在也不会如此。闪回通过只在更改数据上运行引发了恢复变革。一条命令即可修复人为错误导致的损坏。闪回技术在去除了恢复的复杂性的同时,缩短了从难以预测的人为错误恢复的时间。