我有一组 12 个表,总共大约 400 万行,我每年需要移动四次。他们来自的数据库服务器不能直接与他们移动到的服务器通信。数据必须通过 SFTP 文件传输。
这 12 个表已存在于目标数据库中,但可以根据需要删除或截断。在传输过程中,目标数据库将处于“实时”使用状态。
在一个理想的世界中,我希望在源服务器上执行一些脚本,将所有数据放入一个平面文件中,并在目标服务器上执行另一个脚本,从平面文件中加载表。
到目前为止我看到的选项:
使用导入/导出数据向导导出为 CSV(虽然我不确定源数据中是否有逗号会导致问题)。我不喜欢随着时间的推移发生错误是多么容易,例如导入错误的表。
编写 powershell 来导出数据(再次是 CSV 文件,我喜欢二进制文件,我不必担心解析问题)。
将数据库备份并还原到服务器上,然后复制所需的表。这将需要复制约 100gb 的备份。这会很慢,但会起作用。
必须有一些工具来完成这种工作!
@JD -为什么是 SFTP?将数据带入此网络的唯一获准方法是 SFTP。关键的公共安全系统,因此它们相当挑剔。 还有其他表吗?是的,这只是众多表中的 12 个,整个数据库大约为 100GB。
有一个与 SQL Server 一起打包的命令行实用程序,称为BCP。它会做你需要的。
它支持多种文件格式。你想要的是“原生”。这是一种专有的二进制格式。它将避免逗号、换行等问题。
在目的地使用 BCP 导入临时表,每个源表一个。这些具有与源/目标表相同的架构。然后使用分区开关删除所有现有数据并用新传输的数据替换它。
所有这些都可以包含在一些简短的 PowerShell 脚本中,进行参数化,然后放入源代码控制中。