我有一个巨大的表,假设有 500,000 行。我想将其(架构和数据)从一台服务器复制到另一台服务器。这不是更新插入或任何类型的更新;这是一次性的直接复制和粘贴。对此的惯用方法是什么?
我试过了:
- 将备份从一台服务器恢复到另一台服务器。这是不切实际的,因为众所周知,SQL Server 无法从备份中恢复表。它只能恢复数据库。而且我的数据库很大!
- 使用 SSMS 将表数据编写为 INSERT 语句序列。这是不切实际的,因为插入必须逐行完成,令人痛苦。我怀疑这也会对事务日志造成可怕的影响,但还没有人因此攻击我(我现在正在运行这样的脚本,这将需要几个小时)。
SELECT INTO
将表克隆到该数据库中。我用的很多都是原生的
SQL Server Import and Export Wizard
。选择数据源:Microsoft OLE DB Provider for SQL Server。
服务器名称:源服务器。
选择目标:Microsoft OLE DB Provider for SQL Server。
服务器名称:目标服务器。
指定表复制或查询:从一个或多个表或视图复制数据。
请注意,这会将表复制为堆(其中有列和数据,但没有索引),您将需要在目标表上手动编写脚本并创建索引、约束等(如果它们不多,这并不难) 。
一种选择是使用https://docs.dbatools.io/ powershell 模块中的copy-dbadbtabledata。
如果目标中尚不存在该表 (-AutoCreateTable),或者该表存在且其中包含数据 (-truncate),您还可以添加参数。
另一种选择是使用BCP。
另一种选择是像SQL Examiner Suite这样的工具。它不是免费的,但随着时间的推移,它对我来说是一个非常有用的工具:
它对于突出显示差异并自动同步更改非常有帮助。它可以通过命令行进行调度和运行,还可以生成同步脚本以供以后使用。
请注意,除了作为满意的用户之外,我与该软件没有任何关系。
上述内容对于一次性类型的同步很有帮助,但如果您需要连续的自动数据和架构同步,我可以提到 SQL Server 中的其他本机功能。
SQLServer Integration Services(SSIS) 也是我用来将数据移入和移出服务器的有效方法。它具有以下附加优势: 速度调度 从源/目标数据库独立部署 利用可读副本(如果可用) 错误处理 监控仪表板 为复杂的数据流/管道做好准备
问候