如何将数据从一个数据库中的多个表复制到驻留在不同服务器上的另一个数据库?
这可以通过 Teradata 中的 BTEQ 脚本实现吗?
如果有,请提供样本。
如果没有,除了使用平面文件之外,还有其他选择吗?
使用 BTEQ 这是不可能的,因为您已经提到两个数据库都驻留在不同的服务器中。
有两种解决方案。
Arcmain - 您需要首先使用 Arcmain Backup,它会创建包含表中数据的文件。然后你需要使用 Arcmain restore 从文件中恢复数据
TPT - Teradata 并行传输器。这是一个非常先进的工具。这不会创建像 Arcmain 这样的任何文件。它直接在两个 teradata 服务器之间移动数据。(维基百科)
如果我理解您的问题,您想将一组表从一个数据库移动到另一个数据库。
您可以在 BTEQ 脚本中使用以下语法来复制表和数据:
CREATE TABLE <NewDB>.<NewTable> AS <OldDB>.<OldTable> WITH DATA AND STATS;
或者只是表结构:
CREATE TABLE <NewDB>.<NewTable> AS <OldDB>.<OldTable> WITH NO DATA AND NO STATS;
如果你真的很精明,你可以创建一个 BTEQ 脚本,在 SELECT 语句中动态构建上述语句,导出结果,然后在单个 BTEQ 脚本中运行新导出的文件。
您可以使用许多其他选项CREATE TABLE <...> AS <...>;
。您最好查看 Teradata 手册以了解更多详细信息。
如果您想将数据从一台服务器移动到另一台服务器,那么我们可以使用平面文件执行此操作。首先,我们通过任何实用程序(例如 bteq 或 fastexport)从源表中获取数据到平面文件。然后我们可以借助 mload、fastload 或 bteq 脚本将这些数据加载到目标表中。
还有更多选项可让您从一张桌子复制到另一张桌子。
可能最简单的方法是编写一个小型程序,该程序使用其中一个通信层(ODBC、.NET 数据提供程序、JDBC、cli 等)并使用它来获取 select 语句和 insert 语句。这将需要一些工作,但与尝试学习如何编写 TPT 脚本相比,开销会更少。您不需要任何“DBA”权限来编写自己的。
Teradata 还销售隐藏某些工具复杂性的其他应用程序。Teradata Data Mover 句柄在 arcmain 和 tpt 等工具之间提供了一个抽象层。访问此工具很可能仅限于 DBA 类型。