数据库是企业信息的核心地带,一旦出现事故,其影响是巨大的。尤其是在网络高度发达的今天,只要企业的数据库出现问题,网上马上就会出现一些“爆料”——不管是玩笑还是恶意,总之,数据库的安全不容小视。虽然维护数据库的安全是DBA或者安全管理人员的职责,但普通技术人员也应该了解相关内容,毕竟多掌握一门技能,就多一份成功的希望和保证。
本节将就在SQL Server中如何还原数据库进行详细的介绍,并针对恢复和还原数据库时经常出现的问题给出解决方案。
SQL Server 2005与SQL Server 2000有很大的不同,在界面和功能上,SQL Server 2005都有很大的改进。SQL Server 2005新增了以下9项重要功能。
(1)Notification Services增强功能
Notification Services是一种新平台,是用于生成、发送并接收通知的高伸缩性应用程序,可以把即时的、个性化的消息发送给使用各种各样设备上的数以千计乃至百万计的订阅方。
(2)Reporting Services增强功能
Reporting Services是一种基于服务器的新型报表平台,它支持报表创作、分发、管理和最终用户访问。
(3)新增的Service Broker
Service Broker是一种新技术,用于生成安全、可靠和可伸缩的数据库密集型应用程序。Service Broker提供应用程序,用以传递请求和响应的消息队列。
(4)数据库引擎增强功能
数据库引擎引入了新的可编程性增强功能(例如,与Microsoft .NET Framework的集成,以及Transact-SQL的增强功能)、新的XML功能和新的数据类型,还包括对数据库的可伸缩性和可用性的改进。
(5)数据访问接口方面的增强功能
SQL Server 2005提供了Microsoft数据访问(MDAC)和.NET Frameworks SQL客户端程序方面的改进,为数据库应用程序开发人员提供了更好的易用性、更强的控制和更高的工作效率。
(6)Analysis Services的增强功能(SSAS)
Analysis Services引入了新的管理工具、集成开发环境及与.NET Framework的集成。许多新功能扩展了Analysis Services的数据挖掘和分析功能。
(7)Integration Services的增强功能
Integration Services引入了新的可扩展体系结构和新的设计器。这种设计器将作业流从数据流中分离出来,并提供了一套丰富的控制流语义。Integration Services还对包的管理和部署进行了改进,同时提供了多项新的打包任务和转换。
(8)复制增强
复制在可管理性、可用性、可编程性、移动性、可伸缩性和性能方面提供了改进。
(9)工具和实用工具增强功能
SQL Server 2005引入了管理和开发工具的集成套件,改进了对大规模SQL Server系统的易用性、可管理性和操作的支持。
SQL Server 2005与SQL Server 2000在使用细节上有很多不同,SQL Server 2000用户切换到SQL Server 2005后会感到其变化之大。的确,在使用上有多细节的变化,笔者仅列举几个。
图3-85 SQL Server 2005增加的一些服务
有兴趣的读者朋友可以有针对性地去体验上面新增的9大功能和一些细节上的改变。在数据库操作中,非常重要的一个操作就是备份与还原。对于SQL Server 2000中的还原数据库,很多读者都是使用过,方法也非常简单,选择文件后进行强制还原,问题即可解决。然而,在SQL Server 2005中却不能这样操作。下面就介绍如何还原一个备份的SQL Server 2005数据库。
备份数据库的理由很多,有的是为了防止出现意外,有的是开发需要,有的是入侵后将数据库还原打包,所有的备份的目的都是为了在需要的时候还原。恢复SQL Server 2005数据库的前提是在本机搭建了SQL Server 2005数据库平台,即安装了能够使用的SQL Server 2005数据库,且已经将备份文件放置在本地计算机中。下面讲解具体的恢复过程。
01 连接数据库引擎
第一次打开SQL Server Management Studio时,会自动弹出“连接到服务器”对话框,如图3-86所示,保持“服务器类型”、“服务器名称”及“身份验证”下拉列表的默认设置即可。
图3-86 连接服务器
如果已经打开SQL Server Management Studio,则可以依次单击菜单栏上的“文件”→“连接对象资源管理器”选项,打开“连接到服务器”对话框,然后单击“连接”按钮。连接成功后,将打开“SQL Server Management Studio ”控制台窗口,如图3-87所示。
图3-87 SQL Server Management Studio 控制台
02 还原数据库操作
在SQL Server Management Studio控制台窗口选中数据库或者系统数据库,然后单击右键,在弹出的快捷菜单中选择“还原数据库”选项,打开“还原数据库”窗口,如图3-88所示。在该窗口中,需要设定目标数据库。可以手工输入目标数据库的名称,也可以单击“目标数据库”下拉列表,从已存在的数据库中选择目标数据库。另外,需要指定用于还原的备份集和位置,主要有两个,一个是源数据库,另一个是源设备。如果是数据库在线还原,就选择“源数据库”选项;如果是从物理文件还原,则选择“源设备”选项。
图3-88 还原数据库设定
03 添加备份文件的位置
单击选中“源设备”单选按钮,然后单击文本框右边的“...”按钮,在弹出的“指定备份”对话框中添加备份的位置,如图3-89所示。
图3-89 指定备份位置
04 定位备份文件
在“指定备份”对话框中单击“添加”按钮,会弹出“定位备份文件”对话框。默认情况下,SQL Server 2005会直接定位到其安装目录下的“MSSQL.1/MSSQL/Backup”目录,如图3-90所示,默认显示“*.bak”和“*.trn”两种备份文件。
在本例中选择“所有文件”,就会显示该目录下的所有备份文件,如图3-91所示。然后,选择一个需要备份的文件即可,在本例中选择“uniport”数据库。
图3-90 定位备份文件
图3-91 选择要还原的备份数据库文件
技巧
可以将所有备份文件都复制到“C:\Program Files\Microsoft SQL Server\MSSQL.1\ MSSQL\Backup”目录下,这样选择起来比较方便。
单击“确定”按钮完成文件的选择,回到“指定备份”对话框,如图3-92所示,单击“确定”按钮完成备份文件的选择。
图3-92 完成备份文件的选择
05 完成“还原的目标”和“还原的源”的设定
如图3-93所示,在“还原数据库”窗口的列表中选择需要还原的文件,在“还原的目标”设置区输入“uniport”,表示还原后的数据库名称是“uniport”。单击“确定”按钮还原数据库,如图3-94所示。
图3-93 完成“还原的目标”和“还原的源”的设定
图3-94 还原数据库
06 对还原错误的处理
进行还原数据库操作时,我们可能会遇到即使按照上面的步骤也无法还原数据库的情况。如图3-95所示,该错误提示表示目录不存在,即在 E盘未建立相应的文件夹。
图3-95 还原数据库出现错误
解决方法很简单。按照“E:\Program Files\Microsoft SQL Server\MSSQL\Data”路径,分别在E盘根目录下建立“Program Files”文件夹,然后在“Program Files”文件夹下建立“Microsoft SQL Server”文件夹,在“Microsoft SQL Server”文件夹下建立“MSSQL”文件夹,在“MSSQL”文件夹下建立“Data”文件夹,如图3-96所示,然后按照前面的步骤重新选择,即可完成数据库的还原。在SQL Server 2005中,如果还原时出现如图3-95所示的错误,只要直接建立相应的文件夹便可解决,这对于体积较大的数据库(超过1GB)还原来说无疑是福音。
图3-96 建立相应的文件夹
笔者曾经探讨过如何在SQL Server 2000中恢复一些较难恢复的数据库,即只有一个备份的数据库,没有任何其他信息。当时笔者给出的解决方案是通过UE直接打开数据库文件,从中寻找数据库的详细路径,当数据库文件过大时,使用UE打开,计算机会宕机。这个问题在SQL Server 2005中得到了完美的解决,数据库会自动提示问题出现的位置。
当我们要查看一个大体积数据库的内容时,首先要恢复数据库。按照常规模式进行恢复,却弹出错误提示框。采用几种方法,包括从互联网上寻找他人的数据库还原故障解决方案,逐个进行测试,均未解决。笔者根据错误提示,大胆设想,终于成功恢复了数据,下面就将整个过程与读者分享。
1.常规数据库恢复方法
01 在SQL Server 2008企业管理器中新建名为“ChinaData”的数据库。
02 选择备份文件ChinaData.bak并进行恢复。恢复过程中出现错误提示框,如图3-97所示,没有错误号码,表示数据库恢复失败。对该数据库再次进行还原,并选择“强制还原”选项(即覆盖现有数据库),结果还是显示错误。
图3-97 数据库恢复错误提示
2.通过查询语句进行数据库恢复
通过百度搜索,获取3154错误的解决方法,其恢复过程会提示“备份集中的数据库备份与现有的数据库不同”,如图3-98所示。其解决方法如下。
图3-98 3154错误
01 获取数据库文件的data和log文件名
如果知道备份数据库的名称,可以跳过本步;如果不知道备份数据库的名称,可以先执行下面的语句。
RESTORE FILELISTONLY From disk = 'F:\路径\css_cms1' --备份数据库文件路径名
执行该查询后,可以列出该文件的data和log文件名。
02 在知道数据库名称的情况下进行恢复
如果知道备份数据库的名称,就可以创建一个与之同名的数据库,然后使用以下语句进行还原。例如,该数据库的data文件是XXX_Data,log文件是XXX_log,那么就创建XXX数据库,然后执行如下SQL语句。
use master restore database CSS_CMS from disk = 'F:\xx路径\file'--备份的数据库文件路径名 with replace, MOVE N'XXX_Data' TO N'F:\要保存的路径\Data\XXX.mdf', MOVE N'XXX_log' TO N'F:\要保存的路径\Data\XXX.ldf'
一般情况下,通过以上方法就可以恢复,但在本例中,经过测试,该方法行不通。
3.再次分析失败原因,对数据库进行恢复
一般情况下,数据库无法恢复通常是以下3种情况。
(1)登录用户没有权限
还原数据库时会显示错误信息:“无法在服务器上访问指定的路径或文件。请确保您具有必需的安全权限且该路径或文件存在。如果您确定所用服务账户可以访问特定的文件,请在‘定位’对话框的‘文件名’控件中键入该文件的完整路径。”其解决方法是使用一个有权限的用户登录,例如sa用户。还有一种情况就是在服务管理器中查看SQL Server服务的用户权限,有些是system权限,有些是当前登录用户授权。通过修改服务的权限,可以解决某些情况下登录用户没有权限的问题。
(2)还原路径不存在
对这种错误,需要手动修改路径,只要路径确实存在,就可以解决。
(3)还原路径文件有重名
这种错误出现的原因是还原的文件恰好在默认位置有同名文件,无法覆盖。
笔者对以上3个可能出现的问题进行了测试和修正,还是没有解决问题,于是只好查看SQL Server 2008的日志文件,如图3-99 所示,但仍然没有找到解决的办法。
图3-99 查看日志文件
再次对数据库进行还原,发现原始文件名在“将数据库文件还原为”列表中全部为同一个名称,怀疑是文件名称不一致,如图3-100所示。
图3-100 原始文件名与还原名称一致性问题
依次按照原始文件名,在还原中将chinadata. mdf和chinadata.ndf进行对应。例如,原始文件名为“ChinaData_9”,则应在还原中修改为“chinadata_9.mdf”和“chinadata_9.ndf”进行对应。然后,单击“还原”按钮,问题解决了!该问题属于原始文件名与还原名称的一致性问题。通过解决该问题,我们掌握了解决SQL Server 2008数据库还原错误的方法。