1、第21章 备份与还原数据库学习导读前面介绍的SQL Server的安全机制只能降低因为安全机制而引起错误的可能性。所谓安全机制引起的错误,是指因为SQL Server的安全机制使用不当而引起的,如不具有某个权限的用户进行相应的操作。可以说,SQL Server的安全机制能保证用户在使用SQL Server时,不发生安全机制(权限)引起的安全风险。而本章介绍的备份与还原数据库的技术,能够在数据库发生损坏的情况下,修改和还原数据库。备份是对数据库操作之前进行的,安全机制是在数据库操作时进行的,而还原是在数据库操作之后进行的。1数据库损坏数据库损坏在数据库被损坏时,需要了解数据库损坏的原因,而后再采
2、取相应的动作。这在SQL Server的备份和还原技术不太成熟的时候尤其重要。现在,SQL Server 2008的备份与还原技术已经能够完全恢复这些被损坏的数据。不过,了解这些致使数据库发生损坏的原因还是有一定的好处的,如可以帮助用户快速地定位问题所在,为解决时间争取充足的时间。2错误操作错误操作错误操作是引起数据库的数据和结构损坏的主要原因。其中,数据库管理员的错误操作更容易引发数据库的数据和结果的损坏。因为数据库管理员具有操作数据库数据和结果的权限,所以限制数据库管理员的权限是至关重要的。以下两种方式可以在某种程度上减少用户操作的可能性:编写相关的存储过程;使用AFTER触发器代替原始的
3、INSERT语句、UPDATE语句或DELETE语句,并在数据库管理员插入、更新或删除数据时,给予相应的提示。3错误操作错误操作其中,一个简单的方式就是编写一个触发器,将管理员插入、更新或删除的数据进行回显,或导入到相应的文件中,或者做相应的记录或备份。USE database_demoGOCREATE TABLE student(id INT)GOCREATE TRIGGER confirm_INSERT_triggerON student AFTER INSERTAS BEGIN SELECT 添加的数据,*FROM inserted END GO4错误操作错误操作CREATE TRIGG
4、ER confirm_update_triggerON student AFTER UPDATEAS BEGIN SELECT 修改的数据,*FROM insertedENDGOCREATE TRIGGER confirm_delete_triggerON student AFTER DELETEAS BEGIN SELECT 删除的数据,*FROM deletedENDGO5错误操作错误操作当再对表student执行INSERT、UPDATE、DELETE语句时,SQL Server将会自动执行相应的触发器,回显管理员要插入和删除的数据:USE database_demoGOINSERT I
5、NTO student VALUES(100)GODELETE FROM student WHERE id=1006硬件损坏硬件损坏一般情况下,服务器的硬件损坏将会对数据库产生影响,甚至造成数据库损坏。q服务器的主板发生损坏。这种情况下,用户应及时关闭服务器电源,以免损坏硬盘。如果硬盘没有损坏,直接将硬盘挂接到类似硬件配置的其他服务器上即可以使用,因为硬盘包括了操作系统、SQL Server以及数据库。这时,如果数据库正在操作,数据库肯定会受到影响,而内存中的数据也将丢失。q内存损坏。显然,需要更换内存,而内存中的数据也将丢失。7硬件损坏硬件损坏q硬盘损坏。这种情况下,需要对硬盘中的数据进行恢
6、复和修复。如果不成功,那么只能丢弃硬盘中的数据,显然,这种情况下可能丢失大量的数据。而使用备份和还原技术处理受损的数据库,将会把数据库损坏的损失降低到最少。8备份备份在SQL Server中,备份的目标只能是整个数据库或数据库的文件。也就是说,用户不能够对数据库中的子对象进行单独备份,如不能对表进行单独备份。执行备份操作后,得到的就是当前数据库或文件的一个副本。9恢复模式恢复模式在设计数据库的备份方案时,需要考虑对待事务日志的态度。在SQL Server中,使用恢复模式来区分对待事务日志的态度。其中,恢复模式对应于数据库选项RECOVERY,其可用值为SIMPLE、FULL以及BULK_LOG
7、GED。10恢复模式恢复模式1SIMPLE(简单恢复模式)当数据库采用的恢复模式为SIMPLE时,备份操作将不会备份事务日志,而只备份数据库或数据库的文件。在该模式下,对待事务日志的操作较为粗糙,即直接将事务日志进行截断处理,自动回收日志空间以减少空间需求,而不考虑管理事务日志,所以该模式可以减少管理事务日志的资源消耗(包括时间和计算机资源)。11恢复模式恢复模式在简单恢复模式下,由于没有备份相应的事务日志,所以备份副本之后的操作是无法保证的,即副本之后的工作面临着很大的丢失风险。在数据库损坏时,只能使用前面的备份副本,将数据恢复到备份副本的那个时刻,其后的数据库操作都需要重新执行。12恢复模
8、式恢复模式在设计备份方案时,如果采用该模式,那么一定要确保备份操作的时间间隔尽可能小,以防止大量数据丢失,大量的操作需要重新执行。但如果时间间隔过短,将影响SQL Server的正常使用。毕竟,备份操作需要占用一定的时间。13恢复模式恢复模式一般情况下,该模式较少被大型、重要的数据库应用系统采用。因为这种模式可能会丢失备份副本之后操作的数据,而数据丢失对于重要的数据库系统来说,结果是较为严重的。当数据库处于该模式时,支持备份的目标为文件和数据库,其中,以数据库为主。用户不要刻意地去备份数据库文件,因为备份的文件是孤立的,不一定再还原到数据库中。14恢复模式恢复模式在SIMPLE模式下,备份数据
9、库的方式分为完整备份和增量备份。具体内容如下:q完整备份是指备份当前数据库的所有对象和数据。采用完整备份获得备份副本的数据量较大,但是副本不依赖于其他备份副本,可以直接被用于还原操作。q增量备份是指以前面的某个完整备份为基础,只备份在完整备份基础上的改变。采用增量备份获得的副本数据量较小,不过会依赖于其他备份副本。用户可以用完整备份和增量备份配合,减少备份操作花费的时间。这可以算是在SIMPLE模式备份的一种方案。15恢复模式恢复模式2FULL(完整恢复模式)如果数据库采用的恢复模式为FULL,那么备份操作将备份数据和事务日志。不过,该模式不支持文件备份。在该模式下,备份操作将从备份事务日志直
10、至备份操作结束,所以在该模式下,备份得到的事务日志不仅包括备份之前的事务操作,还包括从备份开始到备份结束这个期间的事务操作。这样,该模式下的备份副本不但能够依据事务日志将备份开始之前的事务进行恢复,而且可以对备份开始至备份结束的事务操作进行恢复。16恢复模式恢复模式该模式下备份副本最大的优势是:可以在恢复操作时,将数据库恢复到副本的任意时刻点。确切地说,这是事务日志的作用。如果采用FULL,那么将降低工作丢失的可能性。因此,这是一种推荐的恢复模式。不过,该模式下的备份也具有一定的缺点。其中,较为明显的缺点是:备份事务日志需要消耗大量的时间和资源。用户在基于该模式进行备份时,需要在完整备份后进行
11、事务日志的备份。这种经常备份带来的时间和资源占用也是需要重视的。17恢复模式恢复模式基于FULL的备份主要是对数据库的备份。相对于SIMPLE模式,该模式提供了更加强大的数据保护功能,也是使用最多的备份恢复模式。与SIMPLE模式类似,在FULL模式下备份数据库的方式也分为完整备份和增量备份。18恢复模式恢复模式3BULK_LOGGED(大容量日志恢复模式)BULK_LOGGED可以看作是一种特殊的、优化的FULL(完整恢复模式)。这种情况较少使用。19管理数据库的恢复模式管理数据库的恢复模式前面提到,在SQL Server 2008中,恢复模式对应于数据库的选项RECOVERY。可以使用SQ
12、L Server Management Studio和SQL语句对该数据库选项进行查看和修改。下面将以SQL语句为主来介绍如何查看、修改数据库的恢复模式。20管理数据库的恢复模式管理数据库的恢复模式1查看数据库的恢复模式既然数据库的恢复模式是数据库的一个选项,那么用户可以使用系统视图sys.databases查看当前SQL Server实例中数据库的恢复模式。为便于查看数据库的恢复模式,这里基于系统视图sys.databases编写了一个存储过程。该存储过程具有一个参数dbname,用于指定要查看恢复模式的数据库名称,该参数的默认值为NULL。当dbname值为NULL时,存储过程将查询所有数
13、据库的恢复模式。21管理数据库的恢复模式管理数据库的恢复模式USE database_demoGOCREATE PROCEDURE check_db_recovery_model dbname NCHAR(30)=NULLASBEGINIF dbname is NULLSELECT name,recovery_model_desc,user_access_desc,state_descFROM sys.databasesELSESELECT name,recovery_model_desc,user_access_desc,state_descFROM sys.databasesWHERE d
14、atabase_id=DB_ID(dbname)END22管理数据库的恢复模式管理数据库的恢复模式在执行了上述SQL语句后,将在当前数据库database_demo下创建一个存储过程。用户可以像使用系统存储过程那样使用该存储过程。如下SQL语句在使用存储过程,没有为存储过程指定参数,将查看当前SQL Server实例中所有数据库的恢复模式。USE database_demoGOEXECUTE check_db_recovery_model23管理数据库的恢复模式管理数据库的恢复模式如下SQL语句将查看database_demo的恢复模式。USE database_demoGOEXECUTE c
15、heck_db_recovery_model database_demo24管理数据库的恢复模式管理数据库的恢复模式2修改数据库的恢复模式可以使用ALTER DATABASE语句的SET子句更改数据库的恢复模式,其语法结构如下:ALTER DATABASE database_demoSET RECOVERY FULL|BULK_LOGGED|SIMPLE其中组成元素意义如下:qFULL:通过使用事务日志备份,在媒体发生故障后提供完整的恢复。如果数据文件损坏,媒体恢复可以还原所有已提交的事务。这是常用的恢复模式。25管理数据库的恢复模式管理数据库的恢复模式qBULK_LOGGED:在某些大规模或
16、大容量操作中,可以提供最佳性能,占用的日志空间也最少,因此,在媒体发生故障后,可以提供恢复。在BULK_LOGGED恢复模式下,这些操作的日志记录最少,不常用。qSIMPLE:系统将提供占用日志空间最小的简单备份策略。服务器故障恢复的不再需要的日志空间可被自动重用,不适于实际工作中的SQL Server备份。26管理数据库的恢复模式管理数据库的恢复模式如下SQL语句将修改database_demo的恢复模式为SIMPLE。USE masterGOALTER DATABASE database_demoSET RECOVERY SIMPLEEXECUTE check_db_recovery_mo
17、del database_demo27管理数据库的恢复模式管理数据库的恢复模式3使用SQL Server Management Studio在数据库的属性窗口的选项标签中,恢复模式选项可以用来设置数据库的恢复模式。28在在SIMPLESIMPLE恢复模式下备份恢复模式下备份前面提到过,完整数据库备份将包含数据库中的所有数据,而增量数据库备份将包含相对于完整数据库备份的增量数据。其中,完整数据库备份适于规模较小的数据库,而增量数据库备份适于规模较大的数据库。下面将介绍一个在数据库SIMPLE恢复模式下的备份方案。该方案使用了完整数据库备份和增量数据库备份。该备份方案的大致步骤如下:29在在SIM
18、PLESIMPLE恢复模式下备份恢复模式下备份(1)为数据库创建一个完整数据库备份;(2)在一定时间间隔内,对数据库进行增量数据库备份。为了方便演示,这里假设两次增量数据库备份的时间间隔为10分钟;(3)等超过了时间间隔后,重新进行一次完整数据库备份。假设两次完整数据库备份的时间间隔为20分钟。30在在SIMPLESIMPLE恢复模式下备份恢复模式下备份1更改数据库的恢复模式为SIMPLE(简单恢复模式)将database_demo的恢复模式更改为SIMPLE。USE masterGOALTER DATABASE database_demoSET RECOVERY SIMPLEUSE data
19、base_demoGOEXECUTE check_db_recovery_model database_demo31在在SIMPLESIMPLE恢复模式下备份恢复模式下备份2创建一个完整备份(1)在对象资源管理器中,右击database_demo,选择任务-备份,打开备份数据库窗口。32在在SIMPLESIMPLE恢复模式下备份恢复模式下备份(2)在备份数据库窗口的常规标签的备份类型下拉列表框中选择完整选项,再点选数据库单选按钮,该窗口的说明如下:q备份类型:是指备份的方式,完整和差异q备份组件:是指备份的对象,数据库、文件和文件组q名称:是备份集的名称q备份集过期时间:是指该备份集过期的时间
20、。当为0时,代表该备份集永不过期q目标:是该备份要存放的位置,主要分为磁盘和磁带33在在SIMPLESIMPLE恢复模式下备份恢复模式下备份(3)在备份数据库窗口的选项标签中,点选备份到新媒体集并清除所有现有备份集单选按钮,在新建媒体集名称文本框中输入“第一个媒体集”。34在在SIMPLESIMPLE恢复模式下备份恢复模式下备份(4)单击确定按钮,备份操作开始。结束时,将打开窗口提示。35在在SIMPLESIMPLE恢复模式下备份恢复模式下备份创建备份所对应的语句:USE database_demoGOBACKUP DATABASE database_demoTO DISK=C:db_demo
21、.bakWITH FORMAT,MEDIANAME=第一个媒体集,NAME=database_demo-完整数据库备份GO36在在SIMPLESIMPLE恢复模式下备份恢复模式下备份其中组成元素的意义:qBACKUP DATABASE是备份操作的主要语句qDISK指示备份的目标是磁盘qFORMAT指示删除现有的媒体集qMEDIANAME指示媒体集的名称qNAME是备份集的名称37在在SIMPLESIMPLE恢复模式下备份恢复模式下备份3进行事务操作在下面的这段时间内,将进行事务操作,其SQL语句如下。USE database_demoGOCREATE TABLE tb_test_simple_
22、backup(id INT,name NCHAR(10)GOINSERT INTO tb_test_simple_backup VALUES(3704,LXP)38在在SIMPLESIMPLE恢复模式下备份恢复模式下备份4创建增量备份在间隔一定时间(10分钟)后,就可以(基于上面创建的完整备份)创建一个增量备份,那么该增量备份的时间范围是从上一次备份至本次备份,备份内容为这两次备份之间的事务操作。具体在备份数据库窗口中选择备份类型为差异。39在在SIMPLESIMPLE恢复模式下备份恢复模式下备份差异备份的SQL语句例子:USE database_demoGOBACKUP DATABASE d
23、atabase_demoTO DISK=C:db_demo.BAKWITHMEDIANAME=第一个媒体集,NAME=database_demo差异备份WITH中不使用FORMAT时,将会把备份集追加到媒体集中。40在在SIMPLESIMPLE恢复模式下备份恢复模式下备份5创建一个完整备份在多次创建增量备份后,需要重新创建一个完整备份。在创建一个新的完整备份时,要考虑是否删除原有的媒体集。如果要重新创建一个媒体集,则需要将原备份文件移动到别处或重命名,以免覆盖原有的内容。41还原还原有了上面对数据库进行备份而获得的副本后,就可以进行还原操作了。其实,还原操作一般发生在数据库发生损坏后。为了演示
24、还原操作,这里以前面SIMPLE(简单恢复模式)下创建的备份为例,直接在现有的SQL Server 2008实例中进行还原操作。42查看备份的内容查看备份的内容在SQL Server 2008中,可以使用SQL Server Management Studio和SQL语句查看备份的内容。不过,使用SQL语句较为复杂,需要很长的代码,而SQL Server Management Studio较为简单。在SQL Server Management Studio中查看备份内容的具体步骤如下。43查看备份的内容查看备份的内容(1)打开备份数据库窗口。(2)在常规标签中,单击内容按钮,打开设备内容窗口,
25、可以查看备份的内容。44SIMPLESIMPLE(简单恢复模式)下的还原(简单恢复模式)下的还原为了演示还原操作,需要将数据库database_demo进行一定程度上的损坏。为了简便起见,这里直接将数据库database_demo删除。下面将在SQL Server Management Studio中,使用还原操作恢复被删除的数据库database_demo。45SIMPLESIMPLE(简单恢复模式)下的还原(简单恢复模式)下的还原(1)在对象资源管理器中,在数据库上单击右键,选择“还原数据库”命令。46SIMPLESIMPLE(简单恢复模式)下的还原(简单恢复模式)下的还原(2)在还原数据
26、库窗口中选择database_demo为目标数据库,选择包含集的文件,并选择所有可用的备份集,单击确定按钮。47SIMPLESIMPLE(简单恢复模式)下的还原(简单恢复模式)下的还原如果用户的源设备单选按钮右侧没有相应的内容,可以指定一个。48SIMPLESIMPLE(简单恢复模式)下的还原(简单恢复模式)下的还原(3)在完成还原操作后,将打开提示还原完成的窗口。49SIMPLESIMPLE(简单恢复模式)下的还原(简单恢复模式)下的还原还原完成后,可用如下SQL语句查看数据库的表:USE database_demoGOSELECT syst.name,syst.type_desc,sysc
27、.name,type_name(sysc.user_type_id),sysc.max_lengthFROM sys.tables AS syst left JOIN sys.columns AS sysc ON syst.object_id=sysc.object_idORDER BY syst.name50SIMPLESIMPLE(简单恢复模式)下的还原(简单恢复模式)下的还原也可以查看表中数据:USE database_demoGOSELECT*FROM tb_test_simple_backup51SIMPLESIMPLE(简单恢复模式)下的还原(简单恢复模式)下的还原还原操作对应的S
28、QL语句:USE masterGORESTORE DATABASE database_demoFROM DISK=c:db_demo.BAKWITH FILE=1,NORECOVERYGORESTORE DATABASE database_demoFROM DISK=c:db_demo.BAKWITH FILE=2,RECOVERYGO52SIMPLESIMPLE(简单恢复模式)下的还原(简单恢复模式)下的还原RESTORE DATABASE database_demoFROM DISK=C:db_demo.bakWITH FILE=3,RECOVERYGO53小结小结本章主要介绍数据库的备份还原,定期备份数据库是数据库管理员必须要做的事情。只有在备份了相应的数据库后,才能在数据库出现问题时,使用备份文件及时恢复数据。在备份与还原的相互配合之下,管理员可以提高数据库的安全性。54
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。