在数据库中,产生数据不一致的根本原因是?

在数据库中,产生数据不一致的根本原因是?,第1张

一般导致数据库中数据不一致的根本原因有三种情况。

第一种情况:数据冗余

假如数据库中两个表都放了用户的地址,在用户的地址发生改变时,如果只更新了一个表的数据,那么两个表就有了不一致的数据。

第二种情况:并发控制不当

假如在飞机票订票系统中,如果两个购票点同时查询某张机票的订购情况,而且分别为订购了这张机票,如果并发控制不当,就会造成同一张机票卖给两个用户的情况。由于系统没有进行并发控制或者并发控制不当,造成数据不一致。

第三中情况:故障和错误

如果软硬件出现故障或者 *** 作错误导致数据丢失或数据损坏,引起数据不一致。因此我们需要提供数据库维护和数据库数据恢复的一些措施。

24. __D___可以减少相同数据重复存储的现象。

A.记录B.字段C.文件D.数据库

25. 在数据库中,产生数据不一致的根本原因是___C__。

A.数据存储量太大B.没有严格保护数据

C.未对数据进行完整性控制D.数据冗余

26. 数据库管理系统(DBMS)是__C___。

A.一个完整的数据库应用系统 B.一组硬件

C.一组软件 D.既有硬件,也有软件

27. 数据库管理系统(DBMS)是__D___。

A.数学软件 B.应用软件 C.计算机辅助设计D.系统软件

28. ____D_是存储在计算机内的有结构的数据集合。

A.网络系统B.数据库系统C. *** 作系统D.数据库

29. 数据库系统的核心是__D___。

A.编译系统B.数据库C. *** 作系统D.数据库管理系统

30. 数据库系统的特点是___A__、数据独立、减少数据冗余、避免数据不一致和加强了数据保护。

A.数据共享B.数据存储C.数据应用D.数据保密

31. 数据库系统的最大特点是___C__。

A.数据的三级抽象和二级独立性B.数据共享性

C.数据的结构化 D.数据独立性

32. 数据库系统是由_B____组成。

A.数据库管理系统、应用程序系统、数据库

B.数据库管理系统、数据库管理员,数据库

C.数据库系统、应用程序系统、用户

D.数据库管理系统、数据库、用户

33. 数据库应用系统是由__C___组成。

A.数据库管理系统、应用程序系统、数据库

B.数据库管理系统、数据库管理员,数据库

C.数据库系统、应用程序系统、用户

D.数据库管理系统、数据库、用户

34. 数据库系统由数据库、__D___和硬件等组成。

A. *** 作系统B.文件系统C.编译系统D.数据库管理系统

35. 数据库系统是在___B__的基础上发展起来的。

A. *** 作系统 B.文件系统 C.编译系统 D.数据库管理系统

36. 数据库系统由于能减少数据冗余,提高数据独立性,并集中检查_A____,由此获得广泛的应用。

A.数据完整性 B.数据层次性 C.数据的 *** 作性 D.数据兼容性

37. 数据的管理方法主要有___D__。

A.批处理和文件系统 B.文件系统和分布式系统

C.分布式系统和批处理D.数据库系统和文件系统

38. 数据库系统和文件系统的主要区别是__B___。

A.数据库系统复杂,而文件系统简单

B.文件系统不能解决数据冗余和数据独立性问题,而数据库系统能够解决

C.文件系统只能管理文件,而数据库系统还能管理其他类型的数据

D.文件系统只能用于小型、微型机,而数据库系统还能用于大型机

39. 数据库管理系统是__B___。

A. *** 作系统的一部分 B.在 *** 作系统支持下的系统软件

C.一种编译程序 D.一种 *** 作系统

40. 在数据库的三级模式结构中,描述数据库中全体数据的全局逻辑结构和特征的是___D__。

A.外模式 B.内模式 C.存储模式 D.模式

41. 数据库系统的数据独立性是指__B___。

A.不会因为数据的变化而影响应用程序

B.不会因为系统数据存储结构与数据逻辑结构的变化而影响应用程序

C.不会因为存储策略的变化而影响存储结构

D.不会因为某些存储结构的变化而影响其他的存储结构

42. 在数据库系统中,通常用三级模式来描述数据库,其中____A_是用户与数据库的接口,是应用程序可见到的数据描述。

A.外模式 B.概念模式 C.内模式 D.逻辑结构 E.层次结构

43. 在数据库系统中,通常用三级模式来描述数据库,__C___是对数据整体的逻辑结构的描述。

A.外模式 B.概念模式 C.内模式 D.逻辑结构 E.层次结构

问题补充:44. 在数据库系统中,通常用三级模式来描述数据库,_C___描述了数据的物理结构。

A.外模式 B.概念模式 C.内模式 D.逻辑结构 E.层次结构

45. 应用数据库的主要目的是为了__C___。

A.解决保密问题 B.解决数据完整性问题

C.共享数据问题 D.解决数据量大的问题

46. 数据库应用系统包括___B__。

A.数据库语言、数据库 B.数据库、数据库应用程序

C.数据管理系统、数据库D.数据库管理系统

47. 实体是信息世界中的术语,与之对应的数据库术语为__D___。

A.文件B.数据库C.字段D.记录

48. 层次型、网状型和关系型数据库划分原则是__D___。

A.记录长度 B.文件的大小

C.联系的复杂程度D.数据之间的联系

49. 按照传统的数据模型分类,数据库系统可以分为三种类型__C___。

A.大型、中型和小型 B.西文、中文和兼容

C.层次、网状和关系 D.数据、图形和多媒体

50. 数据模型用来表示实体间的联系,但不同的数据库管理系统支持不同的数据模型。在常用的数据模型中,不包括___B__。

A网状模型 B.链状模型 C.层次模型 D.关系模型

终于做完了,我也复习了一遍,这些都是书上的基本概念,都很简单的。。你应该自己搞掂的

ORA-1555通常是一个偶然出现的错误。有时在发生了该错误以后,重新运行该任务就有可能不再碰到类似的错误。这个错误最麻烦的是它并不会立刻发生,运行时间长的任务在错误失败以前可能已经运行了一段时间了(可能几个小时)。只是简单地重新运行该任务并不能保证它能成功,可能在运行了一段时间以后仍然失败。

1 原因分析

ORA-1555错的根本原因是因为oracle要保证读一致性。读一致性是指当有多个用户对一个数据块内的行进行修改时,这些块变“脏”或处于变化之中直到被确认。在被确认以前,它们对事务中的所有语句都是可见的,但是对别的事务或语句而言是不可见的。一旦确认以后,对所有后继的事务或语句就都是可见的了。但在事务被确认前的语句不能看到修改,因为这些修改还未发生。

例如,事务T 1(如对某大表的exp *** 作)在2 2 :0 0开始而事务T 2(如对同一大表的update *** 作)在2 2 :0 1时开始,因为T 1需遍历一个很大的表,其读取要花很长的时间,而T 2可能对同一个表中的数据进行基于索引的更新 *** 作。这样, T2可能在几秒钟之内完成,而T 1可能要运行很长时间,假定4 0分钟。当T 1到达T 2做过修改的地方时(根据当前的S C N时间戳可以识别出新作的改变),尽管T 2所进行的写已经被确认,但为了保证读一致性,它不会读到修改后的数据,它只访问在2 2 :0 0时的数据,在2 2 :0 1时所做的改变不能被读取 。T 1从回滚段中读取改变前的数据以保证读一致性。但因为事务T2已经提交,T2事务使用的回滚段oracle认为已经可以重新利用,当回滚段太少或事务较密集时,oracle有可能会用新事务覆盖掉原来T2事务的回滚段,这时T1事务读到被T2修改过的数据时,再从回滚段中就无法找到修改前的数据,这时就会报ORA-1555,snapshot too old错。

下面我们可以结合实例来将此过程回溯一遍:

(1)事务T1在22点开始执行了对某一个大表Test1的exp *** 作(Test1表数据量可能有几千万甚至更多),那么按照经验,此 *** 作可能需要执行40分钟左右或更长

(2)事务T2在22点01分开始执行对Test1表某行的update *** 作,并且 *** 作条件上有索引(将col1为00的行,col2值由90修改为100),故此 *** 作很快完成,比如5秒钟完成 *** 作并commit

(3)此时事务T2已经执行完毕,而事务T1还在执行中

(4)当事务T1需要将col1为00的行导出为dmp文件时,Oracle为了保证读一致性,即T1导出的必须是22点时数据库表的值,故col1为00的行对于T1任务来说值仍然为90,而非100

(5)由于T2事务在22点02分前就已经做完(提交),并且T2认为回滚段是可以重新利用的

(6)如果此时由于回滚段太少或业务量较密集,oracle就可能会重新利用刚才T2事务所使用的回滚段。这时T1事务读到此处时,就会造成无法找到回滚段中修改前的数据,产生错误。

数据库一致性(Database Consistency)是指事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。

保证数据库一致性是指当事务完成时,必须使所有数据都具有一致的状态。在关系型数据库中,所有的规则必须应用到事务的修改上,以便维护所有数据的完整性。

保证数据库的一致性是数据库管理系统的一项功能.比如有两个表(员工/职位),员工表中有员工代码、姓名、职位代码等属性,职位表中有职位代码、职位名称、职位等级等属性。你在其中员工表中进行了插入 *** 作,你插入了一个新员工的信息,而这个新员工的职位是公司新创建的一个职位。如果没有一致性的保证,就会出现有这么一个员工,但是不知道他到底担当什么职责!这个只是它的一个小小方面。

读一致性也是数据库一致性的一个重要方面,在实际中,我们会遇到这种情况:我们对一个表中的某些数据进行了更新 *** 作,但是还没有进行提交,这时另外一个用户读取表中数据。这个时候就出现了读一致性的问题:到底是读什么时候的数据呢?是更新前的还是更新后的?在DBMS中设有临时表,它用来保存修改前的值,在没有进行提交前读取数据,会读取临时表中的数据,这样一来就保证了数据是一致的。(当前用户看到的是更新后的值)

但是还有一种情况:用户user1对表进行了更新 *** 作,用户user2在user1还没有进行提交前读表中数据,而且是大批量的读取(打个比方:耗时3分钟)而在这3分钟内user1进行了提交 *** 作,那又会产生什么影响呢?这个时候怎么保证读写一致性呢?这个时候DBMS就要保证有足够大的临时表来存放修改前的数值,以保证user2读取的数据是修改前的一致数据。然后下次再读取时候就是更新后的数据了。

个人认为:从逻辑上来说:当数据库存在没有结束的事务时,数据库就是不一致的。所以要保持数据库的一致性,就是要确保某一时刻没有事务在数据库上执行即可。例如一般说的数据库一致性备份,就需要在数据库关闭之后再进行。当然从物理存储结构考虑一致性的问题会比较复杂一些,因为涉及到很多文件的修改等问题,例如Oracle中的各类SCN的设置。总的来说,可以简单得认为:所有事务结束后数据库就是一致的。

所以说:数据库的一致性的前提是首先要保证事务的一致性。事务的一致性则需要通过并发控制、锁、隔离性等限制进行保证,具体工作机制可以参见前文,这里就不再研究了。

对于Oracle的一致性检测,只需在mount到open阶段,运行命令recover database即可,DBMS就可以把在线日子文件同步到数据库文件中去。这样Oracle数据库才能正常打开使用。

读完整性,撤销记录,事务

为了维护多版本数据一致性模型,当一个表的数据被更新(写)的同时也在被查询(读)时,Oracle必须创建一个维持读完整性的数据集。当更新发生时,被更新数据的原始值被记录在数据库的undo records中。在事务中的更新 *** 作没有被提交之前,用户查询正在被修改的记录时只能看到她们的原始值。Oracle结合SGA中以及撤销记录中的信息为查询表数据的用户构建了一个 维持读完整性的视图[此视图非彼视图]。

当事务提交后,事务中对数据的修改才被永久记录。在用户事务提交后执行的语句九只能查询到提交后的数据了。

事务是Oracle实现读完整性的关键。事务是一组SQL语句(这组语句或者被一起提交,或者都不被提交),事务的作用是:决定了为查询用户生成的保持读完整性的视图的起始点

控制着被一个事务修改过的数据何时可以被数据库中其它进行读写 *** 作的事务看到


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9649014.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存