1

我不会形容自己害怕改变——而是害怕新技术?确实是的!从操作系统到数据库服务器的技术似乎越“进步”,就会变得漏洞百出、效率低下和落后

MSDE 2000(他们在当今世界可能称之为“SQL 2000 Express”)

BACKUP [MyDatabase] TO FILE 'c:\backups\mybackup.backup'

SQL 2008 快递

等等!它是一个“用户实例”——要备份它,我们需要将它附加到服务器实例
等等!要附加它,我们需要 SQL Management Studio Express (78MB 下载)
等等!当我们登录到我们的 .\SQLEXPRESS 服务器实例并尝试附加我们的数据库时,它会给我们一个错误,看起来就像我们自制开发项目中的一个错误:

标题:Microsoft SQL Server 管理工作室

无法显示请求的对话框。

- - - - - - - - - - - - - - - 附加信息:

参数名称:nColIndex 实际值为-1。(Microsoft.SqlServer.GridControl)

有人可以解释如何在 T-SQL 代码中备份 SQL Server 2008 Express 数据库的用户实例吗?

(对不起,如果这在 ummmm,微软这就像火焰一样 - 我实际上是他们的忠实粉丝。对这样的事情真的很生气!请不要投票给我......)

4

2 回答 2

1

嗯,如果是用户实例,那么最简单的备份策略就是拷贝文件。(虽然它没有连接到 SQL Server)。

如果您需要更全面的备份策略(例如事务备份),那么您确实应该考虑更全面的数据库(例如,附加到完整 SQL Server 实例的“普通”数据库)

于 2010-11-16T15:41:41.053 回答
1

尝试实现用户实例备份时需要注意的一些关键提示

a.) 连接

您的连接字符串应如下所示:

Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MyDatabase.mdf;Integrated Security=True;User Instance=True;Database=MyDatabaseAlias

您的连接字符串必须为连接提供别名Database=MyDatabaseAlias- 此别名不能在同一台机器上同时复制,否则您的连接可能会失败。

b.) 备份

如上所述,用于备份数据库的 Transact SQL 在 SQL MSDE/2000/2005/2008/R2 上是相同的 - 一旦您的数据库附加并别名

BACKUP DATABASE MyDatabaseAlias TO DISK = 'c:\backups\mydatabase_20101117.backup'

真正令人惊奇的是由于您的连接字符串没有别名Database=MyDatabaseAlias部分,您可能会遇到 Bull$h!t 错误。

例如,无法打开物理文件 'c:\Code\MyProject\App_Data\MyDatabase.mdf' 操作系统错误 32:“32(该进程无法访问该文件,因为它正被另一个进程使用。)”。BACKUP DATABASE 是异常终止。

c.)恢复

USE [master]; RESTORE DATABASE MyDatabaseAlias FROM DISK = 'c:\backups\mydatabase_20101117.backup'  WITH REPLACE

不要忘记USE [master];此语句开头的所有必要内容(请注意,对于那些从 a 或类似命令执行命令的人,所有这些都在一行上DataContext)如果这样做,它将无法覆盖现有数据库,因为您仍然会连接到它。

再一次,由于无效的连接字符串,您可能会在此处收到的各种完全误导性错误是无穷无尽的。

于 2010-11-17T06:26:21.867 回答