快速熟悉MSSQL附加数据库命令

1. MSSQL数据库备份介绍

在日常工作中多少遇到过某个重要数据库出现了严重的故障,有的甚至一夜之间就报废了,备份是最好的解决办法之一。如何使用备份文件来恢复数据库呢?我们需要使用到MSSQL的附加数据库命令(sp_attach_db命令)。

2. MSSQL数据库附加新增备份文件

附加数据库,也就是将一个数据库附加到另一个Microsoft SQL Server实例的操作系统文件中。在附加数据库之前,您需要在另一个Microsoft SQL Server实例中为该数据库创建一个空的数据文件和事务日志文件。使用sp_attach_db命令进行附加,操作非常简单。

2.1 新建空白数据库

在新的Microsoft SQL Server中新建一个空白的数据库,假设新建的数据库名称为newDatabase。可以通过以下步骤进行新建。

CREATE DATABASE newDatabase

GO

使用以上代码即可创建一个新的名为newDatabase的空白数据库。

2.2 使用备份文件附加数据库

使用附加命令sp_attach_db,将备份文件还原到我们新建的新库空间中。

USE [master]

GO

EXEC sp_attach_db @dbname = N'newDatabase',

@filename1 = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\backupDatabaseName.bak'

GO

在这里我们需要知道,@dbname参数是附加到服务器上的数据库的名称,@filename1参数是备份文件所在的完整路径。

3. MSSQL数据库附加操作注意事项

3.1 备份文件名称不能与数据库名称重复

执行以上命令时,需要保证newDatabase这个名称在服务器中不存在,如果存在,会报错如下:

Msg 1824, Level 16, State 1, Line 4

无法使用指定名称附加一个数据库,因为在 SQL Server

存在另一个具有相同名称的数据库。请提供不同的名称

3.2 备份文件名字大小写要一致

在路径和备份文件名称大小写上,需要严格保持一致,否则也会报错。

Database 'newDatabase' cannot be opened due to inaccessible files or insufficient memory or disk space.

See the SQL Server errorlog for details.

3.3 目标库和备份文件版本要一致

目标库和备份文件版本必须一致,否则附加时会失败。可以通过以下命令查看数据库的版本信息。

SELECT @@version

可以查看当前数据库版本信息,比如版本为2021,则备份文件也必须是2021版本。

4. MSSQL数据库附加常见错误解决

4.1 非法字符

在MSSQL数据库附加过程中,因为操作人员疏忽或是病毒感染等原因,执行过程中出现非法字符的情况,此时我们可以将附加过程展开到日志中进行查看错误信息。

USE master

GO

EXEC sp_attach_db 'test','C:\backup\test.bak'

GO

EXEC xp_readerrorlog 0,1,'error'

GO

执行以上命令可以在日志中查找到相应的错误信息,更快更有效的解决问题。

4.2 数据库已打开

在附加数据库时,可能会遇到错误提示“数据库已打开”,解决方法是将当前数据库先关闭,再进行附加。

4.3 数据库恢复模型错误

在附加一个被压缩过的备份文件时,可能会遇到“无法通过恢复模式附加数据库”的错误,此时需要将数据库恢复模式改为“已恢复”状态。

需要先查询当前系统的恢复模式:

SELECT name, recovery_model_desc

FROM sys.databases

WHERE name = 'dbname'

再将其设置为已恢复状态:

ALTER DATABASE dbname SET RECOVERY FULL|SIMPLE|BULK_LOGGED;

在此过程中,不仅解决了“无法通过恢复模式附加数据库”的错误,还可以将数据库恢复为正常使用状态。

5. MSSQL附加数据库命令总结

通过上述内容的学习,我们了解了MSSQL数据库备份以及附加的概念和操作方法,并对附加操作可能遇到的问题做出了详细的解释。在进行附加数据库的过程中,需要注意备份文件名称不能与数据库名称重复,备份文件名字大小写要一致,目标库和备份文件版本要一致等注意事项,以免附加数据库失败。对于遇到的一些错误,本文也给出了解决方案,希望可以为您提供帮助。

数据库标签