将表(及其所有数据)从一台服务器复制到另一台服务器的惯用方法是什么?

J. *_*ini 7 sql-server etl bulkcopy t-sql bulk-insert

我有一个巨大的表,假设有 500,000 行。我想将其(架构和数据)从一台服务器复制到另一台服务器。这不是更新插入或任何类型的更新;这是一次性的直接复制和粘贴。对此的惯用方法是什么?

我试过了:

  • 将备份从一台服务器恢复到另一台服务器。这是不切实际的,因为众所周知,SQL Server 无法从备份中恢复表。它只能恢复数据库。而且我的数据库很大!
  • 使用 SSMS 将表数据编写为 INSERT 语句序列。这是不切实际的,因为插入必须逐行完成,令人痛苦。我怀疑这也会对事务日志造成可怕的影响,但还没有人因此攻击我(我现在正在运行这样的脚本,这将需要几个小时)。

小智 16

  • 在同一服务器上创建一个新数据库。
  • 用于SELECT INTO将表克隆到该数据库中。
  • 备份现在很小的数据库。
  • 现在您已经有了一个包含所需数据的备份,没有其他数据,因此它不能太大。如果是,那么您的问题是数据,而不是移动数据的方法。
  • 将备份复制到新服务器。
  • 将备份恢复为新服务器上的新临时数据库。
  • 将数据从新服务器上的临时数据库复制到新服务器上的永久数据库中。


Ale*_*sko 12

我用的很多都是原生的SQL Server Import and Export Wizard

在 SSMS 的对象资源管理器 -> 源 SQL Server -> 右键单击​​数据库 -> 任务 -> 导出数据

选择数据源:Microsoft OLE DB Provider for SQL Server。
服务器名称:源服务器。

选择目标:Microsoft OLE DB Provider for SQL Server。
服务器名称:目标服务器。

指定表复制或查询:从一个或多个表或视图复制数据。

请注意,这会将表复制为堆(其中有列和数据,但没有索引),您将需要在目标表上手动编写脚本并创建索引、约束等(如果它们不多,这并不难) 。


Bob*_*mes 8

一种选择是使用https://docs.dbatools.io/ powershell 模块中的copy-dbadbtabledata

copy-dbadbTableData -SqlInstance sourceserver -Database sourcedatabase -Table dbo.sometablename -Destination destinationserver -DestinationDatabase destinationdatabase -DestinationTable dbo.sometablename 
Run Code Online (Sandbox Code Playgroud)

如果目标中尚不存在该表 (-AutoCreateTable),或者该表存在且其中包含数据 (-truncate),您还可以添加参数。

另一种选择是使用BCP

bcp sourcedatabase.dbo.sometablename out D:\BCP\table.bcp -c -U<login_id> -Ssourceserver


bcp destinationdatabase.dbo.sometablename IN D:\BCP\table.bcp -c -T
Run Code Online (Sandbox Code Playgroud)