在数据库中怎样同时保持数据的完整性和历史数据的完整性。
发布网友
发布时间:2022-03-17 22:06
我来回答
共2个回答
热心网友
时间:2022-03-17 23:35
数据库的安全性、完整性、并发控制和恢复
from: http://bbs.chinaunix.net/viewthread.php?tid=188100
为了保证数据库数据的安全可靠性和正确有效,DBMS必须提供统一的数据保护功能。数据保护也为数据控制,主要包括数据库的安全性、完整性、并发控制和恢复。
1. 数据库的存取控制
ORACLE保护信息的方法采用任意存取控制来控制全部用户对命名对象的存取。用户对对象的存取受特权控制。一种特权是存取一命名对象的许可,为一种规定格式。
ORACLE使用多种不同的机制管理数据库安全性,其中有两种机制:模式和用户。模式为模式对象的集合,模式对象如表、视图、过程和包等。第一数据库有一组模式。
每一ORACLE数据库有一组合法的用户,可存取一数据库,可运行一数据库应用和使用该用户各连接到定义该用户的数据库。当建立一数据库用户时,对该用户建立一个相应的模式,模式名与用户名相同。一旦用户连接一数据库,该用户就可存取相应模式中的全部对象,一个用户仅与同名的模式相联系,所以用户和模式是类似的。
用户的存取权利受用户安全域的设置所控制,在建立一个数据库的新用户或更改一已有用户时,安全管理员对用户安全域有下列决策:
l 是由数据库系统还是由操作系统维护用户授权信息。
l 设置用户的缺省表空间和临时表空间。
l 列出用户可存的表空间和在表空间中可使用空间份额。
l 设置用户资源*的环境文件,该*规定了用户可用的系统资源的总量。
l 规定用户具有的特权和角色,可存取相应的对象。
每一个用户有一个安全域,它是一组特性,可决定下列内容:
l 用户可用的特权和角色;
l 用户可用的表空间的份额;
l 用户的系统资源*。
1) 用户鉴别:
为了防止非授权的数据库用户的使用,ORACLE提供二种确认方法
操作系统确认和相应的ORACLE数据库确认。
如果操作系统允许,ORACLE可使用操作系统所维护的信息来鉴定用户。由操作系统鉴定用户的优点是:
l 用户可更方便地连接到ORACLE,不需要指定用户名和口令。
l 对用户授权的控制集中在操作系统,ORACLE不需要存储和管理用户口令。然而用户名在数据库中仍然要维护。
l 在数据库中的用户名项和操作系统审计跟踪相对应。
ORACLE数据库方式的用户确认:ORACLE利用存储在数据库中的信息可鉴定试图接到数据库的一用户,这种鉴别方法仅当操作系统不能用于数据库用户鉴别时才使用。当用户使用一ORACLE数据库时执行用户鉴别。每个用户在建立时有一个口令,用户口令在建立对数据库连接时使用,以防止对数据库非授权的使用。用户的口令以密码的格式存储在数据库数据字典中,用户可随时修改其口令。
2) 用户的表空间设置和定额
关于表空间的使用有几种设置选择:
l 用户的缺省表空间;
l 用户的临时表空间;
l 数据库表空间的空间使用定额。
3) 用户资源*和环境文件
用户可用的各种系统资源总量的*是用户安全域的部分。利用显式地设置资源*;安全管理员可防止用户无控制地消耗宝贵的系统资源。资源*是由环境文件管理。一个环境文件是命名的一组赋给用户的资源*。另外ORACLE为安全管理员在数据库级提供使能或使不能实施环境文件资源*的选择。
ORACLE可*几种类型的系统资源的使用,每种资源可在会话级、调用级或两者上控制。在会话级:每一次用户连接到一数据库,建立一会话。每一个会话在执行SQL语句的计算机上耗费CPU时间和内存量进行*。对ORACLE的几种资源*可在会话级上设置。如果会话级资源*被超过,当前语句被中止(回滚),并返回指明会话*已达到的信息。此时,当前事务中所有之前执行的语句不受影响,此时仅可作COMMIT、ROLLBACK或删除对数据库的连接等操作,进行其它操作都将出错。
在调用级:在SQL语句执行时,处理该语句有好几步,为了防止过多地调用系统,ORACLE在调用级可设置几种资源*。如果调用级的资源*被超过,语句处理被停止,该语句被回滚,并返回一错误。然而当前事务的已执行所用语句不受影响,用户会话继续连接。
二、 数据完整性
它是指数据的正确性和相容性。数据的完整性是为了防止数据库存在不符合主义的数据,防止错误信息输入和输出,即数据要遵守由DBA或应用开发者所决定的一组预定义的规则。ORACLE应用于关系数据库的表的数据完整性有下列类型:
l 在插入或修改表的行时允许不允许包含有空值的列,称为空与非空规则。
l 唯一列值规则,允许插入或修改的表行在该列上的值唯一。
l 引用完整性规则,同关系模型定义
l 用户对定义的规则,为复杂性完整性检查。
ORACLE允许定义和实施上述每一种类型的数据完整性规则,这些规则可用完整性约束和数据库触发器定义。
完整性约束,是对表的列定义一规则的说明性方法。
数据库触发器,是使用非说明方法实施完整性规则,利用数据库触发器(存储的数据库过程)可定义和实施任何类型的完整性规则。
1. 完整性约束
ORACLE利用完整性约束机制防止无效的数据进入数据库的基表,如果任何DML执行结果破坏完整性约束,该语句被回滚并返回一上个错误。ORACLE实现的完整性约束完全遵守ANSI
X3。135-1989和ISO9075-1989标准。
利用完整性约束实施数据完整性规则有下列优点:
l 定义或更改表时,不需要程序设计,便很容易地编写程序并可消除程序性错误,其功能是由ORACLE控制。所以说明性完整性约束优于应用代码和数据库触发器。
l 对表所定义的完整性约束是存储在数据字典中,所以由任何应用进入的数据都必须遵守与表相关联的完整性约束。
l 具有最大的开发能力。当由完整性约束所实施的事务规则改变时,管理员只需改变完整性约束的定义,所有应用自动地遵守所修改的约束。
l 由于完整性约束存储在数据字典中,数据库应用可利用这些信息,在SQL语句执行之前或由ORACLE检查之前,就可立即反馈信息。
l 由于完整性约束说明的语义是清楚地定义,对于每一指定说明规则可实现性能优化。
l
由于完整性约束可临时地使不能,以致在装入大量数据时可避免约束检索的开销。当数据库装入完成时,完整性约束可容易地使其能,任何破坏完整性约束的任何新行在例外表中列出。
ORACLE的DBA和应用开始者对列的值输入可使用的完整性约束有下列类型:
l NOT NULL约束:如果在表的一列的值不允许为空,则需在该列指定NOT NULL约束。
l
UNIQUE码约束:在表指定的列或组列上不允许两行是具有重复值时,则需要该列或组列上指定UNIQUE码完整性约束。在UNIQUE码约束定义中的列或组列称为唯一码。所有唯一完整性约束是用索引方法实施。
l PRIMARY KEY约束:在数据库中每一个表可有一个PRIMARY KEY约束。包含在PRIMARY
KEY完整性约束的列或组列称为主码,每个表可有一个主码。ORACLE使用索引实施PRIMARY KEY约束。
l FOREIGN
KEY约束(可称引用约束):在关系数据库中表可通过公共列相关联,该规则控制必须维护的列之间的关系。包含在引用完整性约束定义的列或组列称为外来码。由外来码所引用的表中的唯一码或方码,称为引用码。包含有外来码的表称为子表或从属表。由子表的外来码所引用的表称为双亲表或引用表。如果对表的每一行,其外来码的值必须与主码中一值相匹配,则需指定引用完整性约束。
l
CHECK约束:表的每行对一指定的条件必须是TRUE或未知,则需在一列或列组上指定CHECK完整性约束。如果在发出一个DML语句时,CHECK约束的条件计算得FALSE时,该语句被回滚。
3. 并发控制
数据库是一个共享资源,可为多个应用程序所共享。这些程序可串行运行,但在许多情况下,由于应用程序涉及的数据量可能很大,常常会涉及输入/输出的交换。为了有效地利用数据库资源,可能多个程序或一个程序的多个进程并行地运行,这就是数据库的并行操作。在多用户数据库环境中,多个用户程序可并行地存取数据库,如果不对并发操作进行控制,会存取不正确的数据,或破坏数据库数据的一致性。
例:在飞机票售票中,有两个订票员(T1,T2)对某航线(A)的机动性票作事务处理,操作过程如图所示:
数据库中的A111100
T1 READ A A:=A-1 WRITE A
T2 READ A A:=A-1 WRITE A
T1工作区中的A110000
T2工作区中的A 11000
首先T1读A,接着T2也读A。然后T1将其工作区中的A减1,T2也采取同样动作,它们都得0值,最后分别将0值写回数据库。在这过程中没有任何非法操作,但实际上多出一张机票。这种情况称为数据库的不一致性,这种不一致性是由于并行操作而产生的。所谓不一致,实际上是由于处理程序工作区中的数据与数据库中的数据不一致所造成的。如果处理程序不对数据库中的数据进行修改,则决不会造成任何不一致。另一方面,如果没有并行操作发生,则这种临时的不一致也不会造成什么问题。数据不一致总是是由两个因素造成:一是对数据的修改,二是并行操作的发生。因此为了保持数据库的一致性,必须对并行操作进行控制。最常用的措施是对数据进行封锁。
1) 数据库不一致的类型
l 不一致性
在一事务期间,其它提交的或未提交事务的修改是显然的,以致由查询所返回的数据集不与任何点相一致。
l 不可重复读
在一个事务范围内,两个相同查询将返回不同数据,由于查询注意到其它提交事务的修改而引起。
l 读脏数据
如果事务T1将一值(A)修改,然后事务T2读该值,在这之后T1由于某种原因撤销对该值的修改,这样造成T2读取的值是脏的。
l 丢失更改
在一事务中一修改重写另一事务的修改,如上述飞机票售票例子。
l 破坏性的DDL操作
在一用户修改一表的数据时,另一用户同时更改或删除该表。
1) 封锁
在多用户数据库中一般采用某些数据封锁来解决并发操作中的数据一致性和完整性问题。封锁是防止存取同一资源的用户之间破坏性的干扰的机制,该干扰是指不正确地修改数据或不正确地更改数据结构。
在多用户数据库中使用两种封锁:排它(专用)封锁和共享封锁。排它封锁禁止相关资源的共享,如果一事务以排它方式封锁一资源,仅仅该事务可更改该资源,直至释放排它封锁。共享封锁允许相关资源可以共享,几个用户可同时读同一数据,几个事务可在同一资源上获取共享封锁。共享封锁比排它封锁具有更高的数据并行性。
在多用户系统中使用封锁后会出现死锁,引起一些事务不能继续工作。当两个或多个用户彼此等待所封锁数据时可发生死锁。
2) ORACLE多种一致性模型。
ORACLE利用事务和封锁机制提供数据并发存取和数据完整性。在一事务内由语句获取的全部封锁在事务期间被保持,防止其它并行事务的破坏性干扰。一个事务的SQL语句所作的修改在它提交之后所启动的事务中才是可见的。在一事务中由语句所获取的全部封锁在该事务提交或回滚时被释放。
ORACLE在两个不同级上提供读一致性:语句级读一致性和事务级一致性。ORCLE总是实施语句级读一致性,保证单个查询所返回的数据与该查询开始时刻相一致。所以一个查询从不会看到在查询执行过程中提交的其它事务所作的任何修改。为了实现语句级读一致性,在查询进入执行阶段时,在注视SCN的时候为止所提交的数据是有效的,而在语句执行开始之后其它事务提交的任何修改,查询将是看不到的。
ORACLE允许选择实施事务级读一致性,它保证在同一事务内所有查询的数据
4) 封锁机制
ORACLE自动地使用不同封锁类型来控制数据的并行存取,防止用户之间的破坏性干扰。ORACLE为一事务自动地封锁一资源以防止其它事务对同一资源的排它封锁。在某种事件出现或事务不再需要该资源时自动地释放。
ORACLE将封锁分为下列类:
l
数据封锁:数据封锁保护表数据,在多个用户并行存取数据时保证数据的完整性。数据封锁防止相冲突的DML和DDL操作的破坏性干扰。DML操作可在两个级获取数据封锁:指定行封锁和整个表封锁,在防止冲突的DDL操作时也需表封锁。当行要被修改时,事务在该行获取排它数据封锁。表封锁可以有下列方式:行共享、行排它、共享封锁、共享行排它和排它封锁。
l DDL封锁(字典封锁)
DDL封锁保护模式对象(如表)的定义,DDL操作将影响对象,一个DDL语句隐式地提交一个事务。当任何DDL事务需要时由ORACLE自动获取字典封锁,用户不能显式地请求DDL封锁。在DDL操作期间,被修改或引用的模式对象*。
l 内部封锁:保护内部数据库和内存结构,这些结构对用户是不可见的。
热心网友
时间:2022-03-18 00:53
你可以试着做个删除标志,而没有真正删除。这样相对来说会好点
请问什么是数据的完整性?如何保证数据的完整性?
1. 数据约束:在数据库层面应用约束,而非商务规则,确保数据满足预定义的规则。当需求变更时,只需更新数据库层面的限制条件,同时提供用户友好的错误提示。2. 分布式数据管理:对于分布式系统,预估未来数据量,设置标记并在数据传输中同步更新。维护本地拷贝,确保数据一致性。3. 提前预防:在数据进入数...
大数据解决方案
大数据解决方案是上海金轩数字科技有限公司的核心服务之一。我们提供一站式的数据收集、存储、处理、分析和可视化方案,旨在帮助企业从海量数据中提炼有价值的信息,优化决策过程,提高竞争力。我们的解决方案具备高兼容性、高吞吐性、高可用性和高扩展性,能够满足企业不断增长的数据需求,助力企业实现数字化转型和智能化升级。企业规划和实施一个成功的大数据方案需要从多个方面综合考虑。首先,企业需要明确自身的业务需求,确定大数据方案的目标和期望达成的效果。接着,进行大数据技术的调研和选型,选择适合企业业务需求的技术栈和工具。然后,制定详细的大数据方案...
数据库中constraint是什么
约束在数据库设计中起着至关重要的作用。它们不仅保证数据的准确性,还帮助维护数据库的完整性。通过定义合适的约束,可以确保数据库中的数据满足特定的业务规则和需求,防止由于数据错误导致的潜在问题。同时,约束还可以帮助数据库管理员和开发者更好地理解数据之间的关系和依赖,从而更好地管理和优化数据...
数据库六大步骤
在这一阶段,需要选择适当的数据结构(如表、视图、索引等),并确定数据的完整性约束条件(如主键、外键等)。以电商数据库为例,逻辑设计可能包括定义“用户表”及其属性(如用户名、密码、邮箱等),以及设置相应的数据验证规则。4. 物理设计 物理设计关注的是数据库在物理存储层面上的实现。
为保证数据库的完整性,有哪些约束条件?
2. 静态元组约束:- 这类约束应用于关系中的单个元组,规定了不同列之间的特定关系。- 它们仅在单个元组层面起作用,而不跨越多个元组。3. 静态关系约束:- 涉及整个关系(表)中元组之间的相互关系,或不同关系之间的联系。- 这些约束可能包括实体完整性、参照完整性等。4. 动态列级约束:- 在修改...
数据库的数据完整性校验有哪几种方法?
1、唯一性约束:通过为表中的某些字段设置唯一索引,使得这些字段中的值不能重复,从而保证数据库中数据的唯一性。2、外键约束:通过在多个表之间建立外键关联,使得表中的数据能够有效地进行交互,从而保证数据库中数据的完整 3、检查约束:通过在表中设置检查约束,来检查某一列的值是否满足一定的条件,...
数据库完整性靠什么实现?
数据的完整性靠添加约束实现。实现完整性约束的方法依类别不同而不同。完整性约束可以分为两大类:静态约束和动态约束。1、静态约束 静态约束是对数据库状态的约束,有可分为固定约束、隐含约束和显示约束。2、固定约束 是数据模型固有的约束,如关系的属性是原子的,即满足INF的约束。固有约束在DBMS实现...
扩容码是什么意思?
扩容码是在计算机存储领域里常见的一个概念。简单的说,扩容码是一种对存储空间进行扩大的方法。一旦存储空间不足,我们就可以使用扩容码来增加存储空间,以确保计算机的正常运转。这种方法通常是使用特殊的算法进行操作,以确保扩容后的空间能够被充分利用,同时保持数据的整洁性和完整性。扩容码的使用非常...
詹姆斯·尼古拉·格雷研究开发
格雷的主要技术革新包括:首先,将数据库操作划分为事务,以保证操作的原子性和一致性。其次,通过加锁机制,确保并发操作的同时保持数据完整性。他还在系统中建立运行日志,以便在系统故障后进行恢复。最后,他推广了两阶段提交的概念,解决分布式系统中的事务协调问题。格雷的这些创新思维和工作成果被广泛认可...
在数据库中,用户定义的完整性约束通常用于什么方面
可以提高数据库系统的数据质量,从而提高了基于数据库的应用程序的可靠性。同时,它也可以减少数据清洗和维护的工作量,因为可以在数据进入数据库时即时验证数据的准确性。总的来说,用户定义的完整性约束是数据库设计中的重要组成部分,它确保了数据的准确性和可靠性,提高了数据库系统的数据质量。
补入和补录的区别
1、数据丢失或损坏 在某些情况下,数据库中的数据可能会丢失或损坏,这可能是由于硬件或软件故障、黑客攻击等原因造成的。当这种情况发生时,可以进行补录操作来恢复数据,以保持数据的完整性和准确性。操作员会根据数据丢失或损坏的情况进行评估,并决定需要补录的数据类型,然后使用SQL语句将数据更新到数据...