当SQL Server数据库损坏且无法修复时,可以从最近的备份中还原它以恢复对象和数据。但是,当您需要执行对象级恢复而不是执行完整的数据库备份时,就会出现问题。

换句话说,可能需要从数据库备份而不是整个数据库中还原特定表或任何其他对象。但是,没有直接的方法可以执行对象级恢复。

本文讨论了一些方法来恢复SQL中的特定表或视图。此外,它还讨论了如何使用SQL修复软件来安全恢复选择性数据库对象。

在SQL中执行对象级恢复的方法

在这里,我们将讨论两种手动方法以及一种在SQL Server中恢复对象的自动解决方案。

手动方法方法1:将备份还原到其他数据库并导入数据

注意: 仅当您已对SQL Server数据库进行了完整备份时,此方法才有效。

在SQL Server中,您可以通过执行以下步骤来选择性地恢复单个数据库对象:

将备份还原到其他数据库。通过使用SQL Server导入和导出向导导入数据。

让我们详细地完成每个步骤:

步骤1:将备份还原到其他数据库

在此步骤中,我们将还原“ DBLogTest”的备份并将其另存为名为“ TestDB”的新数据库。

在SQL Server Management Studio(SSMS)中,连接到SQL Server的实例。在“对象资源管理器”下,将鼠标悬停在“数据库”上并右键单击它,然后单击“还原数据库”。

图1:还原SQL数据库

从“还原数据库”窗口中,选择设备选项下的数据库,然后单击浏览(...) 按钮。

图2:选择“从设备”选项

在“指定备份” 对话框中,单击“添加”按钮。

图3:单击添加以选择数据库备份文件

在“查找备份文件” 对话框中,单击要还原的数据库的备份文件。在我们的示例中,选择DBLogTest.bak文件。单击确定。

图4:选择备份文件

所选备份文件的位置将添加到“指定备份”框中的“备份位置:”下。单击确定。

所选的备份文件(.bak)详细信息将添加到“还原数据库”向导中。在向导中,在“目标”下的“数据库”文本框中键入新数据库“ TestDB”的名称。

图6:将数据库备份还原到新数据库

如果大家在学习中遇到困难,想找一个python学习交流环境,可以加入我们的python裙,关注小编,并私信“01”即可进裙,领取python学习资料,会节约很多时间,减少很多遇到的难题。

现在,单击“选择页面”下的“选项” ,然后选择“还原前进行日志备份”复选框,然后单击“确定”。

图7:进行尾日志备份

出现消息“数据库'TestDB'的还原成功完成”时,单击“确定” 。

图8:还原数据库完成的消息

执行这些步骤将使用其他名称将数据库还原到SQL Server。

步骤2:使用SQL Server导入和导出向导导入数据

在此步骤中,我们将使用“ SQL Server导入和导出向导”。该向导有助于在流行的数据格式(例如数据库(SQL Server和Access),Excel电子表格和文本文件)之间导入和导出特定对象。

若要使用SQL Server导入和导出向导导入数据,请按照下列步骤操作:

右键单击新数据库“ TestDB”,单击“任务”,然后单击“导入数据”。

图9:选择导入数据选项

点击下一步。

图10:SQL Server导入和导出向导

从“数据源”下拉列表中,选择有助于连接到数据源的数据提供程序,然后单击“下一步”。

图11:选择数据源

选择服务器名称和您需要从中导入数据的数据库(在我们的示例中为TestDB),然后单击Next。

图12:输入服务器和数据库详细信息

当提示您选择复制数据的目的地时,请从下拉列表中选择数据源。这将选择您要保存对象(表或视图)的目的地。

图13:选择将数据保存到的目标位置

单击“新建” 以创建一个要在其中放置所选数据库对象(表或视图)的数据库,然后选择“下一步”。

图14:指定目标的详细信息

在“指定表复制或查询”对话框中,选择以下任一选项,然后单击“ 下一步”。从一个或多个表或视图复制数据:此选项从现有表或视图复制所有数据。编写查询以指定要传输的数据:此选项要求您编写查询以从源数据库导入特定数据。

注意:使用复制数据库向导复制多个SQL数据库或对象(表和视图除外)。

图15:从表复制数据或编写查询

在此示例中,我们选择了'从一个或多个表或视图复制数据'选项。

列出了包含“ TestDB”数据库的所有表的窗口。选择要从源复制到目标的单个或多个表。另外,双击“目标”下添加的表,然后重命名。例如,我们将“ dbo.Details”表重命名为“ dbo.NewDetails”。

图16:选择要还原的表

在“保存并运行程序包”窗口中,选择以下任一选项:立即运行保存SSIS包

图17:“保存并运行包”窗口

要继续,请点击下一步按钮。 单击“完成”将数据从所选表导入到指定的目标。

图18:完成导入过程

所选表及其数据将被复制到目标位置。

图19:复制到目标的选定表数据

注意:此方法有一个缺点。使用此方法,您将需要还原完整的数据库备份,而不是直接选择要还原的对象。

方法2:还原事务日志(T-Log)备份和导入数据

另一种方法是执行特定对象的时间点恢复。为此,请将该RESTORE LOG命令与一个STOPAT子句一起使用,该子句有助于将T-Log备份还原到对象被删除或数据被删除的特定时间。

从FILE = 4,NORECOVERY,STOPAT ='2021年3月19日02:00 PM'的DBLogTest恢复日志TestDB;

警告!此命令会将所有打开的事务回滚到特定时间。

将事务日志备份还原到某个时间点后,一旦丢失数据,就可以将数据导入到新数据库中。

方法3:使用SQL恢复工具

通过使用用于MS SQL软件的Stellar Repair在SQL Server中执行对象级恢复,可以节省大量时间和精力。就是这样:

启动软件。单击“浏览”或“搜索”以选择要修复的损坏的SQL数据库MDF文件。

图20:选择损坏的SQL数据库文件

单击修复开始修复文件。

图21:修复SQL数据库文件

该软件会预览所有可恢复的数据库对象,包括表,视图,存储过程,触发器等。选择要恢复的对象,然后在“文件”菜单上单击“ 保存” 。

图22:预览可恢复的数据库对象

将打开“保存数据库” 窗口,其中包含用于以MDF,CSV,HTML和XLS文件格式保存所选对象的选项。此外,您可以选择将恢复的数据保存在新数据库或现有数据库中。

图23:文件保存选项

结论

当数据库表或其他SQL Server对象损坏或被意外删除时,可以通过执行对象级恢复而不是还原数据库来节省时间和精力。不幸的是,没有直接的方法可以在SQL Server中执行对象级恢复。但是,使用本文中讨论的手动方法可以帮助您恢复特定的表或其他对象。但是,这些方法有一定的局限性。更好的选择是使用3次聚会SQL恢复工具,可以帮助你在选择性还原特定的数据库对象,无需恢复完整或事务日志备份。

最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。