繁体   English   中英

将SQL Server Express数据库复制到另一台计算机

[英]Copy SQL Server Express Database to Another Computer

我明天正在升级客户端Access应用程序的后端,需要准备好针对此客户端的特定问题的计划。 老板需要能够定期(通常是每月)将数据文件从SQL Server的办公室带走,并对数据进行统计分析。

我已经研究了将整个SQL Server数据库从服务器复制到本地SQL Express的最简单方法 ,并且那里的解决方案在这种情况下不起作用,因为:

  1. 不能使用一次性解决方案(数据库发布向导),因为这需要是可编写脚本的。

  2. 不能使用依赖于联网的两台计算机的任何方法,因为这不是一个选项 - 数据必须通过USB拇指驱动器传输(因此,没有复制)。

  3. 不能使用任何依赖于从服务器控制台或工作站运行SQL Server管理工具进行备份的方法。

  4. 无法直接连接到SQL Server数据库进行分析,因为数据必须可移植到其他位置。

我认为我需要的是调用创建备份文件的脚本,然后将结果复制到USB驱动器的某种方法。 然后我需要第二个脚本从USB驱动器复制备份文件并将其还原到另一个SQL Server。

传输的数据是只读的(或者,所做的任何更改都不需要返回主服务器),并且不会在第二个位置更新数据。 它目前用一个普通的旧批处理文件编写脚本来复制后端MDB文件,我需要一些对用户来说简单的东西。

它不能依赖于Powershell(SQL Server Management Studio),因为我不希望它必须安装在用户运行脚本的计算机上(有六个工作站,脚本需要可以运行,我不想在所有这些上安装一些东西)。

我将设置备份代理以每晚创建备份,因此我可以复制该文件,而无需在复制之前启动备份。 因此,我可能只需要在目标计算机上编写恢复脚本。

思想,建议,指针?

你绝对应该能够创造类似的东西。

一部分是作为.sql脚本的T-SQL CREATE BACKUP脚本,并使用sqlcmd命令行工具从标准Windows批处理( *.bat )或命令( *.cmd )文件执行该脚本。

那将是这样的:

backup.sql

BACKUP DATABASE YourDatabase
TO DISK = 'Z:\Backup\YourDatabase.bak'
WITH FORMAT;

第二部分是带有T-SQL RESTORE脚本的.sql文件,基本上从磁盘上的给定位置读取数据并将其恢复到那里的SQL Server实例。

restore.sql

RESTORE DATABASE YourDatabase
   FROM AdventureWorks2008R2Backups 
   WITH 
     MOVE 'YourDatabase_Data' TO 'C:\MSSQL\Data\YourDatabase.mdf',
     MOVE 'YourDatabase_Log' TO 'C:\MSSQL\Data\YourDatabase_Log.ldf';
GO

当然,您需要根据自己的实际要求调整这些名称和路径 - 但这应该只是为您提供如何开始这项工作的提示。

要使用sqlcmd执行其中一个.sql脚本,您需要以下内容:

sqlcmd -S (name of server) -U (login) -P (password) -I (name of script file)

例如

sqlcmd -S (local) -U someuser -P top$secret -I backup.sql

资源:

我有同样的问题,在生产(服务器)和测试开发(本地在另一个位置)之间传输数据库,并将完成的数据库传输到托管服务器。

事实证明,我可以自己运输.MDF。

  1. 确保目标db没有附加该数据库,首先在SSMS中将其删除。
  2. 单独移动.MDF(不带日志文件)。
  3. 在目标位置默认c:\\ program files ... sql .. \\ DATA确保移动或删除MDF和LDF的所有先前实例 - 如果它看到.ldf那里就会混淆。
  4. 在SSMS中,选择附加。 按添加,选择.mdf。
  5. 此时,在右下方的框中,将显示MDF和LDF已连接且缺少LDF。 单击LDF并按REMOVE按钮。
  6. 现在将附加MDF并添加新的/空的LDF。

我一直这样做; 完美运行 - 省去了运输大型.ldf的麻烦。 (我经常使用dropbox.com而不是拇指驱动器,并首先用PKZIP / SecureZip加密文件。)

我不确定如果你在服务器启动的情况下复制MDF会发生什么,虽然我没有在复制之前停止它。 我不确定如何使这个脚本化 - 附加可以编写脚本,但我不确定在继续之前删除.LDF。

您可以编写服务器脚本以生成数据库的快照副本,然后传输该MDF,因为它知道它没有被更新。

另一个想法 - 写一个程序将所有记录插入到SQL-Server紧凑版文件中并传输它? 我没试过,但是读了一下。

只是一个想法,但如果他现在带着一个MDB文件的副本,其中包含所有数据,那么为什么不继续这样做。 您可以通过查询每个表来访问所有内容。

如果您使用链接的表格“tblFoo_LINKED”和名为“tblFoo”的本地表设置“报告”MDB,那么您可以运行一些VBA代码,这些代码将循环遍历所有表并执行类似的操作

INSERT INTO tblFoo SELECT * FROM tblFoo_LINKED

SQL服务器备份恢复仍然是我想要的选择,但只是提供可能适合您需求的不同内容

为什么不继续复制整个数据库文件? 这看起来像一个足够小的操作,可以暂时停止:您可以缩小数据库,分离并直接复制文件。 在目标系统上,您可以在连接字符串中按文件名附加SQLExpress DB

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM