从备份中创建/恢复SQL Server Express数据库

24

我的电脑上没有SQL Server Management Studio。

我有一个数据库备份(SQL Server 2008 R2)。我的电脑上安装了Visual Studio 2010 Ultimate自带的SQL Server Express。

我该如何将这个备份还原到数据库并将其附加到SQL Server Express?
是否有不使用SQL Management Studio Express的解决方案?

4个回答

29
即使使用SQL Server Management Studio Express,您也无法恢复此备份。 安装在Visual Studio 2010中的Express版本是SQL Server的2008版 - 您的备份来自SQL Server 2008 R2版本 - 这些备份无法恢复到2008版。
您需要下载SQL Server 2008 R2 Express版本,并且在下载时获取带有管理工具的版本!安装此版本,然后您将能够恢复数据库备份。
如果您真的非常想恢复数据库而不使用Mgmt Studio,则可以在T-SQL中使用RESTORE语句,并使用sqlcmd命令行工具运行它。
RESTORE DATABASE YourDatabaseName
FROM DISK = N'(path to your BAK file)'
WITH FILE = 1,  
MOVE N'(your DB name)' TO N'(your SQL path)database.MDF',  
MOVE N'(your DB name)_LOG' TO N'(your SQL path)database_LOG.LDF',  
NOUNLOAD,  
REPLACE,  
STATS = 10
GO

当然,还有一个BACKUP命令,您可以类似地使用它 - MSDN Books Online会详细介绍语法!


Visual Studio 2010 ultimate之后有发布R2吗? - Shahin
1
@shaahin:是的 - 它是在 VS 2010 打包之后发布的。 - marc_s
1
实际上,您可以将代码复制并粘贴到VS 2010查询窗口中,并执行它。不需要使用管理工具,也不需要输入命令行。人们需要考虑的一件事是,在备份之前最好删除全文目录(对于生产数据库,您可以创建原始数据库的克隆并在克隆中删除目录),因为似乎(我不太确定)SQL express不支持全文索引。 - Earth Engine

17

虽然有点晚了,但希望对其他正在查看此内容的人有所帮助...

如果问题是在没有管理工具的情况下进行还原,则可以像marc_s已经指出的那样轻松地使用sqlcmd来解决。

但是,如果真正的问题是在SQL 2008上恢复2008 R2备份而不使用SSMS,则唯一的解决方案是使用第三方工具,该工具可以读取备份并生成用于创建模式和插入数据的脚本。

思路是在SQL 2008上创建空数据库,并使用第三方工具将其与使用2008 R2生成的备份进行比较。

我以前的工作中使用过ApexSQL DiffApexSQL Data Diff,取得了不错的成果,但也有来自Red Gate(SQL Compare)和Idera(Comparison toolset)的好工具。如果你在网上搜索,可能会找到更多....

免责声明:我与上述任何公司都没有关联......


12
为什么不获取SQL Managment Studio Express?它是免费的,可以让你管理本地的SQL Express实例。 http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796
BACKUP DATABASE [AdventureWorks] TO  
    DISK = N'\\nas\Backup\L40\SQL2005\AdventureWorks_backup_200702120215.bak' 
    WITH NOFORMAT, NOINIT,  NAME = N'AdventureWorks-Full Database Backup', 
    SKIP, NOREWIND, NOUNLOAD,  STATS = 10

RESTORE DATABASE [AdventureWorksNew] 
    FROM  DISK = N'\\nas\Backup\L40\SQL2005\AdventureWorks_backup_200702120215.bak' 
    WITH  FILE = 1,  
    MOVE N'AdventureWorks_Data' TO N'C:\Data\MSSQL.1\MSSQL\Data\AdventureWorksNew_Data.mdf',  
    MOVE N'AdventureWorks_Log' TO N'C:\Data\MSSQL.1\MSSQL\Data\AdventureWorksNew_Log.ldf',  
    NOUNLOAD,  STATS = 10

这是一个不错的方法,但是否有不需要使用SQL Management Studio Express的解决方案? - Shahin

7

以下链接提供与marc_s类似的解决方案,而且更加深入。我能够成功地使用下面链接中提供的解决方案从备份文件创建新的数据库。

http://codeonaboat.wordpress.com/2012/02/16/sql-server-2008-creating-a-database-from-a-bak-file/

以下解决方案来自上述链接:
1. 在SSMS中,打开数据库服务器的master数据库中的查询窗口。您将在那里运行以下查询。 2. 查看已备份到.bak文件中的数据库的“LogicalName”是什么。 RESTORE FILELISTONLY FROM DISK = 'c:\DatabaseBackups\dev2012021601.bak' 这将给出数据库的逻辑名称及其关联的日志文件。假设名称为“dbname”和“dbname_log”。 3. 现在运行以下还原命令。确保不存在与您要创建的名称相同的数据库(在下面的代码示例中,dbForSocialMigration不存在)。
RESTORE DATABASE dbForSocialMigration
FROM DISK = 'c:\DatabaseBackups\dev20120307.bak'
WITH
MOVE 'dbname' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\dbForSocialMigration.mdf',
MOVE 'dbname_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\dbForSocialMigration_log.mdf'
"

C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA 是SQL Express通常存储其数据文件的目录。您可以通过从中选择数据库,右键单击并打开属性对话框,然后从左侧选择“文件”选项来查找数据库服务器使用的目录。

那应该可以解决问题,在那一点上,您应该能够访问由.bak文件填充的名为“dbForSocialMigration”的数据库中的所有表和数据。

"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接