3.SQL Sewer数据库恢复
在SQL Sever的数据库中,系统数据库占据着非常重要的位置。一般来讲如果用户数据库坏了,可以通过还原用户数据库备份而达到恢复用户数据的目的。而如果Maser数据库损坏了,用户将无法启动SQL Server来还原其他任何数据库。所以恢复SQL Server 2000用户数据库的前提是保证系统数据库正常。
(1)系统数据库概述。
在SQL Server数据库中,系统信息存储在系统数据库中。安装SQL Server后,自动建立了4个系统数据库。它们分别是Master数据库、model数据库、tempdb数据库和msdb数据库。当服务器配置为复制分发服务器时,系统数据库还将包括distribution数据库。SQL Server依靠这些数据库来运行,这些数据库中的每个库都在服务器上执行特定的功能。
Master数据库从整体上控制SQL Server的所有方面。这个数据库中包括所有的配置信息、用户登录信息、当前正在服务器中运行过程的信息等等。Master数据库是整个系统中最重要的数据库。如果丢失Master数据库,恢复所有用户数据库将是非常困难的事。SQL Server在运行时所做的第一件事就是寻找Master数据库并打开它。所以在创建了任何用户定义的对象后,都要备份它。
Model数据库为新数据库提供模版和原型。当用户建立一个新数据库时,SQL Server会把model数据库中的所有对象建立一份复制并转移到新数据库中,然后把新数据库的所有多余空间用空页填满。
tempdb数据库是一个特殊的数据库,它供所有访问SQL Server的用户使用。这个库用来保存所有的临时表、存储过程和其他SQL Server建立的临时对象。每次SQL Server重新启动,都会清空tempdb数据库并重建。因此永远不要在tempdb数据库中建立需要永久保存的表。
msdb数据库是SQL Server中的一个用户数据库的特例。所有的任务调度、报警操作都存储在msdb数据库中。该库的另一个功能是存储所有备份历史。
(2)恢复Master数据库。
如果Master数据库以某种方式被损坏(如由于媒体故障),而且损失很严重,则可能无法启动Microsoft SQL Server实例。有两种方法将Master数据库返回到可用状态。
1)从当前备份还原。可采用以下步骤从当前备份中还原Master数据库(Transact-SQL)。
①以单用户模式启动SQL Server。在单用户模式下以命令提示符启动SQL Server的默认实例,可从命令提示符输入:sqlservr.exe-c-m。在启动sqlservr.exe之前,必须在命令窗口中切换到要启动的Microsoft SQL Server实例所在的目录。其中参数“-c”表示缩短启动时间,SQL Server不作为Windows NT/2000的服务启动。参数“-m”表示以单用户模式启动SQL Server。
②执行RESTORE DATABASE语句以还原Master数据库备份。同时指定:要从其中还原Master数据库备份的备份设备。例如从磁带中还原Master数据库备份而不使用永久命名的备份设备,可以使用如下语句:
USE Master
GO
RESTORE DATABASE Master
FROM TAPE=‘\\.\TapeO‘
GO
如果是磁盘则将“TAPE=‘\\.\TapeO’”换成“disk=‘c:\(具体的备份文件名)‘”即可。
2)用重建主控实用工具完全重建。使用重建主控实用工具重建Master数据库时,将导致以前存储在Master数据库中的所有数据永久丢失。如果由于可以访问Master数据库(至少部分可用)而能够启动SQL Server实例,则可以从完整数据库备份中还原Master数据库。然而,如果由于Master数据库严重损坏而无法启动SQL Server实例,则不能立即还原Master数据库的备份,因为SQL Server实例需要处于运行状态才能还原任何数据库。首先应使用重建主控实用工具重建Master数据库,然后才可以用普通方法还原当前数据库备份。可以按以下步骤重建Master数据库。
①在Program Files\Microsoft SQL Server\80\Tools\Binn目录中,运行rebuildm.exe重建工具。
②弹出“重建Master”对话框,单击“浏览”按钮,在“浏览文件夹”对话框中,选择SQL Server 2000光盘上或用于安装SQL Server 2000的共享网络目录中的\Data文件夹,然后单击“确定”按钮。
③单击“设置”按钮。在“排序规则设置”对话框中,验证或更改用于Master数据库或其他数据库的设置。必须选择和初次安装时相同的字符集、排序规则和统一的编码校验。如果不选择与初次安装服务器相同的排序规则,将无法还原Master数据库。此外还必须保证配置的新的Master数据库和原来的Master数据库大小一致。
④单击“重建”按钮以启动进程。重建Master实用工具将重新安装Master数据库。
⑤当SQL Server完成重建Master数据库后,它启动MSSQLServer服务,打开企业管理器,连接到服务器。
⑥添加设备,该设备要与上次备份Master数据库的设备所在位置、名称、类型一致。
⑦从最近一次备份中还原Master数据库。当Master数据库还原后,必须重新启动SQL
⑧重新应用自最新一次备份以来所发生的任何改变。然后还原msdb数据库或者重建所有的任务和报警。因为重建Master数据库的处理破坏并重建了msdb数据库。
⑨还原其他系统数据库。
⑩使用sp_attach_db系统存储过程重新关联所有用户数据库。
11使用企业管理器重新给数据库用户分配服务器登录ID。
12重置数据库选项。
13重新输入所有SQL Server设置信息。
(3)还原model和msdb数据库。
model和msdb数据库只能从在Microsoft SQL Server 2000服务器上创建的备份还原。不支持从SQL Server 7.0版或更早的版本上创建的备份还原这些数据库。如果msdb包含系统使用的调度数据或其他数据,则重建Master数据库时必须还原msdb数据库,因为实用工具删除并重建了msdb数据库。这将导致丢失所有调度信息以及备份和还原历史记录。如果msdb数据库没有还原且无法访问,SQL Server代理程序则无法访问或启动任何以前的调度任务。
Meta Data Services将msdb用作默认知识库数据库。Meta Data Services和msdb数据库之间打开的连接将中断msdb还原。若要释放该连接,请重新启动企业管理器并还原msdb数据库。在完全还原msdb数据库之前,不要单击企业管理器中的Meta Data Services节点。
(4)还原distribution数据库。
在使用重建主控实用工具重建Master数据库时,不自动重建distribution数据库,因此重建Master数据库后不必还原distribution数据库。如果distribution数据库仍没有被改动过,则可通过将数据库附加到SQL Server自动重新创建distribution。另一种方法是还原distribution数据库备份。
但是,如果不是通过还原备份或附加数据库重新创建distribution数据库,SQL Server复制实用工具不会运行,这样会防止进行数据复制。如果许多发布服务器都使用distribution数据库复制数据,将影响许多系统不能还原用户正在访问的数据库。因此,还原msdb数据库时,应停止SQL Server代理程序。如果SQL Server代理程序正在运行,它可能会访问msdb数据库。同样,还原distribution数据库时,应停止SQL Server复制实用工具。如果SQL Server复制实用工具正在运行,它也可能会访问distribution数据库。必须停止的复制实用工具还包括:复制日志读取器代理程序实用上具、复制分发代理程序实用工具、复制快照代理程序实用工具及复制合并代理程序实用工具。
(5)恢复用户数据库。
1)在本地机上进行数据库恢复。
①启动“企业管理器”,展开其中的选项,选择“数据库”,单击右键,在对话框中选择“所有任务”选项中的“还原数据库”,出现“还原数据库”窗口。
②单击“选择设备”按钮,选择要恢复的数据库文件。选择完毕后,“备份数量”选项将会变亮,选择最近的一次备份。然后单击“确定”按钮,数据库恢复过程开始执行。
2)从网络备份恢复。由于网络上备份的SQL Server中具有和本机相同的数据库,当原来的数据库崩溃后,就可以直接启用另一个,只要修改一下计算机上ODBC数据源中所设置的SQL Server主机名称就行了。
3)使用存储过程恢复数据库。在SQL Server2000中微软重新设计了数据库文件的存储方式,取消了新建设备再建数据库这一繁琐的过程。在新的存储方式中,一个数据库包括两个文件,mdf数据库文件和ldf日志文件。所以我们在重装机器备份时可以把要备份的数据库的这两个文件复制出来,重新安装之后再恢复。在SQL Server中提供了这种恢复方式的存储过程。
①sp_attach_db[@dbname=]‘dbname’,[@filenamel=]‘filename_n’
给系统添加一个数据库,在dbname指定数据库名称,filename n指定数据库的文件和日志文件。
比如有一个test的库,停止SQL Server服务备份test_data.mdf,test_log.1df,启动SQL server,删除这个库,然后再把这两上文件复制到SQL Server DATA目录中,在Query Analyzer中执行如下语句:
EXEC sp_attach_db@dbname=N‘test’,
@filename 1=N‘d:mssq17\data\test_data.mdf’,
@filename2=N‘d:mssq17\data\test_log.1df’
就会把这个库加入到SQL Server Group中。
②sp_attach_single_file_db[@dbname=]‘dbname’,@physname=]‘physical_name’
这个命令和上面的功能一样,在physical_name中只要写上数据库的物理文件名就可以了,日志文件SQL server会重新建立。这个存储过程的运行要执行下面的存储过程:
sp_detach_db@dbname=‘dbname’
同样以上面的为例:
EXEC sp_detach_db@dbname=‘test’
EXEC sp_attach_single_file_db@dbname=‘test’,
@physname=‘d:mssq17\data\test_data.mdf’
要注意执行以上存储过程的用户要在sysadmin中。以上方法均在Windows 2000 Advanced Server,SQL Server2000上运行通过。