第八章SQLSERVER数据库系统管理一、SQLServer2005的DBA的职能简介:1、要对Windows操作系统有一定的了解:建立用户和组、管理权限、创建共享、应用网络服务等。2、对SQL语言有深入的了解。3、建立、使用数据库。4、管理数据库用户、用户的权限。5、备份和恢复数据。6、保证数据库的安全。二、关于移动、复制数据库:1、移动数据库、或者说是剪切数据库(如从D盘移动到C盘)。是为了:把数据库从一台计算机移动到另一台计算机;或从一块磁盘移动到另一块磁盘中;或从一个分区移动到另一个分区,而不用重新建数据库。在SQLServer中可以用分离(Detach)和附加(Attach)的方法来移动数据库。1)、先分离数据库:Sp_detach_db数据库名称例:sp_detach_dbbbb2)、用剪切将bbb库的文件从D盘移动到C盘一个文件夹下。3)、附加数据库:Sp_attach_db新数据库名称,所有的数据文件的新物理地址例:sp_attach_dbbzx,'d:\bzx\bzx_mdf.mdf','d:\bzx\bzx_ndf.ndf','d:\bzx\bzx_ldf.ldf'2、复制数据库(如:在E盘建一个一样的库)。1)、将bbb库的文件从D盘复制到C盘一个文件夹下。2)、附加数据库。其实移动和复制数据库只是差了分离一步,这主要是从安全性考虑,能够使这个数据库保证永远是唯一的。例:(将数据库student从d盘移动到G盘的文件夹下)1先创建一个数据库:CreatedatabasestudentOn(Name=student_mdf,Filename='d:\sql\student_mdf.mdf',Size=3,Maxsize=10,Filegrowth=1),(Name=student_ndf,Filename='d:\sql\student_ndf.ndf',Size=3MB,Maxsize=30MB,Filegrowth=20%)Logon(Name=student_ldf,Filename='d:\sql\student_ldf.ldf',Size=3,Maxsize=5,Filegrowth=1)2、分离数据库student:sp_detach_dbstudent3、用剪切将d盘的三个文件移动到G盘的文件夹bzx下。4、附加,给新的数据库起名为bzx:sp_attach_dbbzx,'g:\bzx\student_mdf.mdf','g:\bzx\student_ndf.ndf','g:\bzx\student_ldf.ldf'三、数据库的备份与恢复工作:备份是指制作数据库结构和数据库的拷贝,以便在数据库遭到破坏时能够修复数据库。2-1、备份数据库的频繁程度取决于数据库活动情况:1、如果系统处于一个在线事务处理环境中,就要经常性地备份数据库。2、如果系统活动不多,或主要用于决策支持,就不用太频繁备份。3、备份要尽量安排在没有大量更新活动的时候。2-2、SQLServer系统提供了最常用的3种类型备份:全库备份,差异备份,事务日志备份。1.完全数据库备份(全库备份)这是最完整的数据库备份方式,它会将数据库内所有的对象完整地拷贝到指定的设备上。由于它是备份完整内容,因此通常会需要花费较多的时间,同时也会占用较多的空间。对于数据量较少,或者变动较小不需经常备份的数据库而言,可以选择使用这种备份方式。2.差异数据库备份差异数据库备份只会针对自从上次完全备份后所有变动的部分进行备份处理,这种备份模式必须搭配完全数据库备份一起使用,最初的备份使用完全备份保存完整的数据库内容,之后则使用差异备份只记录有变动的部分。由于差异数据库备份只备份有变动的部分,因此比起完全数据库备份来说,通常它的备份速度会比较快,占用的空间也会比较少。对于数据量大且需要经常备份的数据库,使用差异备份可以减少数据库备份的负担。若是使用完全备份搭配差异备份来备份数据库,则在还原数据库的内容时,必须先加载前一个完全备份的内容,然后再加载差异备份的内容。例如,假设我们每天都对数据库“Trade”做备份,其中星期一到星期六做的是差异备份,星期天做完全备份,当星期三发现数据库有问题,需要将数据库还原到星期二的状况时,我们必须先将数据库还原到上星期天完全备份,然后再还原星期二的差异备份。3.事务日志备份事务日志备份与差异数据库备份非常相似,都是备份部分数据内容,只不过事务日志备份是针对自从上一次备份后有变动的部分进行备份处理,而不是针对上一次完全备份后有变动部分的处理。若是使用完全备份配合事务日志来备份数据库,则在还原数据库内容时,必须先加载前一个完全备份的内容,然后再按顺序还原每一个事务日志备份的内容。2-3、数据库的恢复模式分为三类:完全恢复模式(full),大容量日志恢复模式(bulk-logged),简单恢复模式(simple)。完全恢复模式:备份所有的日志和数据,支持完全性的恢复。完全恢复模式可以恢复到任一时间点状态。如果选择了完全恢复模式,则在还原数据库之前一定要先作尾部日志备份。简单恢复模式:它可以最低程度地保证备份恢复后数据的一致性,它通过除去日志开销来简化数据库备份和还原(也就是不还原日志备份),同时这种简化也可能造成部分数据的丢失。最重要的是它不还原日志文件,所以节省空间。其它的与完全恢复模式下的全库备份、差异备份是一样的。简单恢复模式适使用于测试数据和只读数据库中,不可恢复到任一时间点状态。大容量日志恢复模式:简化了日志的操作(如大规模创建索引的还原),这样还原数据库的效率就会提高,并且减少了备份日志文件所需的空间。但同样会造成部分数据的丢失,它只能恢复到最后日志的数据库状态。大容量日志恢复模式比完全恢复模式的效率要高一些,需要的是最小的日志存储空间,但不可恢复到任一时间点,且有数据丢失。当然这三种模式各有特点,所以在选择时要权衡以下因素:数据库的性能,数据丢失的容忍程度,事务日志存储空间需求,备份和恢复过程的简化。简单恢复模式一般用于测试数据和只读数据库;完全恢复模式灵活性很强,可以把数据库恢复到过去某时间点的状态;大容量日志恢复模式的效率要比完全恢复模式要高,需要的存储空间少,但不是很灵活。当执行一个备份时,必须首先创建装载此备份的备份设备。(可以是永久的或是临时的)。另外我们的这些工作是针对于服务器、库这一级的操作,所以备份、恢复操作最好都在Master库下完成。数据库的备份与恢复:1、备份:1)、创建永久性备份设备(备份文件):在用于一个备份操作之前就已创建了的文件称为永久性备份文件。它们也叫作备份装置。如果打算重复使用创建的备份文件或自动化备份数据库的任务,就必须要创建永久性备份文件。语法:Sp_addumpdevice存储文件的设备类型,备份文件的名称,文件的存储路径例:Sp_addumpdevice'disk',stuback,'d:\sql\stuback.bak'说明:存储文件的设备类型:一般为disk文件的存储路径:指的是备份文件存放的物理位置。2)、创建临时备份设备(备份文件):如果不打算复用备份文件,则可创建临时性的备份文件。当做一个数据库的一次性备份或测试备份计划时,可以使用临时性备份文件。BACKUPDATABASE数据库名todisk=物理文件名也就是说不用提前先创建备份文件了。这种形式一般很少用。一、全库备份:这是最简单的备份形式。创建全库备份的语法:方法一、BACKUPDATABASE数据库名to逻辑文件名方法二、BackupDataBase数据库名todisk=物理文件名还原全库备份语法:RESTOREDATABASE数据库名FROM备份文件名例1:1、先创建一个备份设备(备份文件):Sp_addumpdevice'disk',stuback,'d:\sql\stuback.bak'2、作stu库的全库备份:Backupdatabasestutostuback或:Backupdatabasestutodisk='d:\sql\stuback.bak'可以选择任一种方法进行备份。3、在stu库中建一个表abc。Createtableabc(aint)4、将stu库恢复:restoredatabasestufromstuback5、后在stu库中:select*fromabc看是否还存在,是否被还原了。例2:其实,在作全库备份的时候,由于不只是一次的备份,所以有很多时候我们需要恢复到备份某一个时间点、或是某一次的备份,这样就给了我们更多的选择,如:恢复到1月1日的备份,恢复到1月5日的备份,还是1月10日的备份。Sp_addumpdevice'disk',stu8back,'d:\sql\stu8back.bak'createdatabasestu8usestu8Backupdatabasestu8tostu8back--第一个备份createtablea(aint)Backupdatabasestu8tostu8back--第二个备份createtableb(bint)Backupdatabasestu8tostu8back--第三个备份createtablec(cint)Backupdatabasestu8tostu8back--第四个备份createtabled(dint)Backupdatabasestu8tostu8back--第五个备份createtablee(eint)--出现故障restoredatabasestu8fromstu8backwithfile=1usestu8sp_help--可以看到还没有usertable,相当于1月1日restoredatabasestu8fromstu8backwithfile=2usestu8sp_help--可以看到有usertablea,相当于1月5日restoredatabasestu8fromstu8backwithfile=3usestu8sp_help--可以看到有usertablea、b,相当于1月10日restoredatabasestu8fromstu8backwithfile=4usestu8sp_help--可以看到有usertablea、b、c,相当于1月15日restoredatabasestu8fromstu8backwithfile=5usestu8sp_help--可以看到有usertablea、b、c、d,相当于1月20日以上可以看到,可以恢复到一个自定的还原点,所以要作好记录,以便在恢复时,恢复到需要的还原点。withfile=1,此时的索引号为1,这也是系统的默认值,所以可以省略。二、差异备份1、差异备份格式:BACKUPDATABASE数据库名to备份文件名withdifferential说明:WITHDIFFERENTIAL:表示此备份为差异备份。2、恢复差异备份的格式:RESTOREDATABASE数据库名FROM备份文件名[withNORECOVERY|RECOVERY]说明:备份文件名:可以是临时的,也可以是永久的;可以是物理名,也可以是逻辑名。NORECOVERY:当要作多步恢复时,应使用此选项。RECOVERY:该选项用于恢复最后一个文件时使用。注:差异备份要在全库备份的基础之上来作。例:sp_addumpdevice'disk',stu9back,'d:\sql\stu9back.bak'--创建备份文件createdatabasestu9backupdatabasestu9tostu9back--开始在备份文件上作全库的备份usestu9createtableabc(aint)backupdatabasestu9todisk='d:\sql\stu9back.bak'withdifferential--差异备份第一次usestu9createtableabc2(aint)backupdatabasestu9todisk='d:\sql\stu9back.bak'with