免费智能真题库 > 历年试卷 > 系统架构设计师 > 2016年下半年 系统架构设计师 上午试卷 综合知识
  第12题      
  知识点:   备份与恢复技术   事务   数据库
  关键词:   数据库   转储   数据        章/节:   数据库系统       

 
假设某证券公司的股票交易系统中有正在运行的事务,此时,若要转储该交易系统数据库中的全部数据,则应采用(12)方式。
 
 
  A.  静态全局转储
 
  B.  动态全局转储
 
  C.  静态增量转储
 
  D.  动态增量转储
 
 
 

 
  第48题    2012年下半年  
   58%
在数据库系统中,“事务”是访问数据库并可能更新各种数据项的一个程序执行单元。为了保证数据完整性,要求数据库系统..
  第46题    2012年下半年  
   48%
在数据库系统中,“事务”是访问数据库并可能更新各种数据项的一个程序执行单元。为了保证数据完整性,要求数据库系统..
  第45题    2012年下半年  
   46%
在数据库系统中,“事务”是访问数据库并可能更新各种数据项的一个程序执行单元。为了保证数据完整性,要求数据库系统..
   知识点讲解    
   · 备份与恢复技术    · 事务    · 数据库
 
       备份与恢复技术
        数据库系统中可能发生各种各样的故障,大致可以分以下几类:
        (1)事务内部的故障。事务内部的故障有的是可以通过事务程序本身发现的,有的是非预期的,不能由事务程序处理。例如,输入数据违反完整性约束、运算溢出、并行事务发生死锁而被选中撤销该事务等。事务故障意味着事务没有到达预期的终点(COMMIT或者显式的ROLLBACK),因此,数据库可能处于不正确状态。这样,系统就要强行回滚此事务,即撤销该事务已经做出的任何对数据库的修改,使得该事务好像根本没有启动一样。
        (2)系统范围内的故障。系统故障是指造成系统停止运转的任何事件,使得系统要重新启动。例如,中央处理器故障、操作系统故障、突然停电等,这类故障影响正在运行的所有事务,但不破坏数据库。这时内存中的内容,尤其是数据库缓冲区中的内容都将丢失,使得运行事务都非正常止,从而造成数据库可能处于不正确的状态,数据库恢复子系统必须在系统重新启动时让所有非正常终止的事务回滚,把数据库恢复到正确的状态。
        (3)介质故障。系统故障常称为软故障(Soft Crash),介质故障称为硬故障(Hard Crash)。硬故障指外存故障,如磁盘的磁头碰撞、瞬时的强磁场干扰等。这类故障将破坏数据库或部分数据库,并影响正存取这部分数据的所有事务,这类故障比前两类故障发生的可能性小得多,但破坏性最大。
        (4)计算机病毒。计算机病毒是一种人为的故障或破坏,是一些恶作剧者研制的一种计算机程序,这种程序与其他程序不同,它像微生物学所称的病毒一样可以繁殖和传播,并造成对计算机系统包括数据库的危害。
        总结各类故障,对数据库的影响有两种可能性,一是数据库本身被破坏,二是数据库没有被破坏,但数据可能不正确,这是因为事务的运行被终止所造成的。
               数据备份
               备份(转储)是指DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本(后援副本)。当数据库遭到破坏后就可以利用后备副本把数据库恢复,这时,数据库只能恢复到备份时的状态,从那以后的所有更新事务必须重新运行才能恢复到故障时的状态。
               备份可分为静态备份(冷备份)和动态备份(热备份)。静态备份是指备份期间不允许(或不存在)对数据库进行任何存取、修改活动。静态备份简单,但备份必须等待用户事务结束才能进行,同样,新的事务必须等待备份结束才能执行。显然,这会降低数据库的可用性;动态备份是指备份期间允许对数据库进行存取或修改,即备份和用户事务可以并发执行。动态备份可克服静态备份的缺点,但是,备份结束时后援副本上的数据并不能保证正确有效。
               备份还可以分为海量备份和增量备份。海量备份是指每次备份全部数据库。增量备份则指每次只备份上次备份后更新过的数据。如果数据库很大,事务处理又十分频繁,则增量备份方式是很有效的。
               日志文件
               事务日志是针对数据库改变所做的记录,它可以记录针对数据库的任何操作,并将记录结果保存在独立的文件中。这种文件就称为日志文件。对于任何一个事务,事务日志都有非常全面的记录,根据这些记录可以将数据文件恢复成事务前的状态。从事务动作开始,事务日志就处于记录状态,事务执行过程中对数据库的任何操作都记录在内,直到用户提交或回滚后才结束记录。
               日志文件是用来记录对数据库每一次更新活动的文件,在动态备份方式中,必须建立日志文件,后援副本和日志文件综合起来才能有效地恢复数据库;在静态备份方式中,也可以建立日志文件,当数据库毁坏后可重新装入后援副本把数据库恢复到备份结束时刻的正确状态,然后利用日志文件,把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤销处理。这样不必重新运行那些已完成的事务程序就可把数据库恢复到故障前某一时刻的正确状态。
               例如,在热备份期间的某时刻t1,系统把数据A=100备份到了磁带上,而在时刻t2,某一事务对A进行了修改使A=200。备份结束,后备副本上的A已是过时的数据了。为此,必须把备份期间各事务对数据库的修改活动登记下来,建立日志文件。这样,后备副本加上日志文件就能把数据库恢复到某一时刻的正确状态。
               事务在运行过程中,系统把事务开始、事务结束(包括COMMIT和ROLLBACK),以及对数据库的插入、删除、修改等每一个操作作为一个登记记录存放到日志文件中。每个记录包括的主要内容有:执行操作的事务标识、操作类型、更新前数据的旧值(对插入操作而言此项为空值)、更新后的新值(对删除操作而言此项为空值)。登记的次序严格按并行事务操作执行的时间次序,同时遵循“先写日志文件”的规则。写一个修改到数据库中和写一个表示这个修改的日志记录到日志文件中是两个不同的操作,有可能在这两个操作之间发生故障,即这两个写操作只完成了一个,如果先写了数据库修改,而在日志记录中没有登记这个修改,则以后就无法恢复这个修改了。因此,为了安全,应该先写日志文件,即首先把修改记录写到日志文件上,然后再写数据库的修改。这就是“先写日志文件”的原则。
               数据恢复
               把数据库从错误状态恢复到某一个已知的正确状态的功能,称为数据库的恢复。数据恢复的基本原理就是冗余,建立冗余的方法有数据备份和登录日志文件等。可根据故障的不同类型,采用不同的恢复策略。
                      事务故障的恢复
                      事务故障的恢复是由系统自动完成的,对用户是透明的(不需要DBA的参与)。其步骤如下:
                      ①反向扫描日志文件,查找该事务的更新操作。
                      ②对该事务的更新操作执行逆操作。
                      ③继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。
                      ④如此处理下去,直至读到此事务的开始标记,事务故障恢复完成。
                      系统故障的恢复
                      系统故障的恢复在系统重新启动时自动完成,不需要用户干预。其步骤如下:
                      ①正向扫描日志文件,找出在故障发生前已经提交的事务,将其事务标识记入重做(Redo)队列。同时找出故障发生时尚未完成的事务,将其事务标识记入撤销(Undo)队列。
                      ②对撤销队列中的各个事务进行撤销处理:反向扫描日志文件,对每个Undo事务的更新操作执行逆操作。
                      ③对重做队列中的各个事务进行重做处理:正向扫描日志文件,对每个Redo事务重新执行日志文件登记的操作。
                      介质故障与病毒破坏的恢复
                      介质故障与病毒破坏的恢复步骤如下:
                      ①装入最新的数据库后备副本,使数据库恢复到最近一次备份时的一致性状态。
                      ②从故障点开始反向扫描日志文件,找出已提交事务标识并记入Redo队列。
                      ③从起始点开始正向扫描日志文件,根据Redo队列中的记录,重做已完成的任务,将数据库恢复至故障前某一时刻的一致状态。
                      有检查点的恢复技术
                      检查点记录的内容可包括建立检查点时刻所有正在执行的事务清单,以及这些事务最近一个日志记录的地址。采用检查点的恢复步骤如下:
                      ①从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录。
                      ②由该检查点记录得到检查点建立时所有正在执行的事务清单队列(A)。
                      ③建立重做队列(R)和撤销队列(U),把A队列放入U队列中,R队列为空。
                      ④从检查点开始正向扫描日志文件,若有新开始的事务T1,则把T1放入U队列;若有提交的事务T2,则把T2从U队列移到R队列;直至日志文件结束。
                      ⑤对U队列的每个事务执行Undo操作,对R队列的每个事务执行Redo操作。
 
       事务
               概述
               事务(Transaction)是一系列的数据库操作,是数据库应用程序的基本逻辑单位,即应用程序对数据库的操作都应该以事务的方式进行。
               事务是一个操作序列,这些操作“要么都做,要么都不做”,是数据库环境中不可分割的逻辑工作单位。事务和程序是两个不同的概念,一般一个程序可包含多个事务。
               事务通常由数据库操纵语言或其他高级语言(如SQL、CoBOL、C、C++、Java等)书写的用户程序来实现。一个事务由应用程序的一组操作序列组成,它以BEGIN TRANSACTION语句开始,以END TRANSACTION结束语句。
               事务定义的语句如下:
               (1)BEGIN TRANSACTION:事务开始。
               (2)END TRANSACTION:事务结束。
               (3)COMMIT:事务提交。该操作表示事务成功地结束,它将通知事务管理器该事务的所有更新操作现在可以被提交或永久地保留。
               (4)ROLLBACK:事务回滚。该操作表示事务非成功地结束,它将通知事务管理器出故障了,数据库可能处于不一致状态,该事务的所有更新操作必须回滚或撤销。
               典型的例子是银行转账业务。对“从账户A转入账户B金额x元”业务,站在顾客角度来看,转账是一次单独操作;而站在数据库系统的角度它至少是由两个操作组成的,第一步从账户A减去x元,第二步给账户B加上x元。下面是银行转账事务的伪代码:
               
               SQL中事务的开始与结束
               SQL标准规定当一条SQL语句被执行,就隐式地开始了一个事务,SQL中的Commit work和Rollback work语句之一会结束一个事务。
               (1)Commit work:提交当前事务。这意味着将该事务所做的更新在数据库中永久保存。一旦事务被提交后,一个新的事务自动开始。
               (2)Rollback work:回滚当前事务。这意味着将撤销该事务对数据库的更新。这样,数据库恢复到该事务执行第一条语句之前的状态。
               需要注意的是,若事务已执行了Commit work,就不能用Rollback work来撤销。数据库系统能保证在发生诸如某条SQL语句错误、断电、系统崩溃的情况下,若事务还没有执行Commit work,则所造成的影响将被回滚。对断电、系统崩溃的情况,回滚是在系统重新启动时进行。
 
       数据库
        数据库(DataBase,DB)是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
        系统使用的所有数据存储在一个或几个数据库中。
   题号导航      2016年下半年 系统架构设计师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第12题    在手机中做本题