# 数据传输

> 在不同连接、数据库、Schema 或数据库引擎之间批量复制表数据，并跟踪每张表的结果。

Source: https://dbxio.com/cn/docs/data-transfer

Language: zh-CN

Relative links resolve against https://dbxio.com/cn/docs/data-transfer.



数据传输把一个数据源中的表或集合复制到另一个连接、数据库或 Schema。它适合环境迁移、测试数据准备和一次性数据整合，不是持续复制、CDC 或双向同步方案。

跨引擎传输会经过 DBX 的字段和类型转换层。目标数据库的权限、约束、触发器、默认值和类型语义仍会影响结果。重要迁移应先在测试环境演练并做行数与关键字段校验。

## 两个入口

### 数据传输向导

向导适合一次传输多张表。你可以分别选择源和目标连接、Catalog、数据库和 Schema，再配置建表、写入模式、目标表名大小写和批大小。

### 侧边栏复制与粘贴

在对象树中复制一张或多张表后，可以粘贴到目标位置：

* 同一上下文中可选择“结构和数据”“仅结构”或“仅数据”，并逐表修改目标名称
* 粘贴到另一个连接、数据库或 Schema 时，DBX 会自动打开数据传输向导并带入源表和目标位置
* 表数据复制会跳过生成列或计算列，并对 PostgreSQL identity、SQL Server identity 等路径应用相应写入处理

## 向导流程

### 选择源位置

选择源连接、Catalog（如适用）、数据库和 Schema。DBX 只列出可传输的基础表；MongoDB 路径列出集合。

### 选择目标位置

选择另一个连接、数据库或 Schema。源和目标不能是完全相同的位置。

### 选择表

可以全选、搜索或只选择部分表。一次请求中的表必须来自同一个源位置。

### 配置传输选项

确认是否创建目标表、写入模式、目标表名大小写和批大小。

### 后台执行并检查结果

对话框关闭后任务继续运行。进度中心显示当前表、表序号、行数、耗时、失败表和取消状态。

## 传输选项

| 选项      | 说明                                                                                                                                                                                   |
| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 创建目标表   | 目标表不存在时，根据源元数据和目标数据库能力生成表结构                                                                                                                                                          |
| 重建结构和数据 | 将现有目标表重命名为备份表（`__dbx_bak_` 前缀），从源结构重建，插入数据后删除备份。任一步骤失败则保留备份表以供手工恢复。生产数据库需二次确认。支持 MySQL、PostgreSQL、SQL Server、KingBase、GaussDB、OpenGauss、KWDB、GoldenDB、SQLite、DuckDB 和 Cloudflare D1。 |
| 追加      | 保留目标表已有数据并插入源数据                                                                                                                                                                      |
| 覆盖      | 在传输该表前清空目标表，再写入源数据                                                                                                                                                                   |
| Upsert  | 目标路径支持且能确定键时，按键更新或插入                                                                                                                                                                 |
| 表名大小写   | 保持原样、转小写或转大写；转换后的目标名必须互不冲突                                                                                                                                                           |
| 批大小     | 控制分页读取和分批写入，默认 1000，可在界面中调整                                                                                                                                                          |

如果关闭“创建目标表”，目标表必须已经存在且字段可兼容。即使开启建表，跨引擎 DDL 也可能因目标数据库不支持某些类型、默认值、约束或对象而需要人工调整。

**重建结构和数据**

会替换现有目标表及其索引、触发器、约束、注释和对象权限为源结构。原表会先被重命名为备份表，传输成功后删除。任一步骤失败则保留备份表，可手工恢复。

## PostgreSQL 结构和所有者

PostgreSQL 到 PostgreSQL 且启用创建表时，DBX 会在能力允许时处理序列、索引、外键以及部分 Schema 级对象和依赖。若源对象所有者在目标实例中不存在，开始前会提示选择：

* 跳过相关所有者信息
* 把缺失所有者重新分配为目标当前用户
* 取消并先在目标实例创建所需角色

这不等价于完整的 `pg_dump` / `pg_restore`。扩展、权限、策略、触发器或依赖复杂时，仍应使用 PostgreSQL 原生迁移工具验证。

## 失败处理

多表任务不会因为第一张表失败就立即丢弃整个队列。DBX 会记录该表的错误并继续尝试后续表，最后以成功或带失败的终态结束。

* 进度中保存每张失败表及错误摘要
* 失败数量较多时，界面只展示有限条目并报告被省略的数量
* 同一目标表已有传输任务运行时，新任务会被阻止，避免并发覆盖
* 取消会停止后续读取和写入，但已提交的数据不会自动撤销

因此“任务完成”不代表所有表都成功；应检查最终状态、失败列表、目标行数和关键字段。

## 数据库覆盖范围

DBX 按驱动能力清单过滤源和目标连接。当前实现同时包含 SQL 到 SQL、MongoDB 到 MongoDB，以及部分 MongoDB 与 SQL 之间的转换路径；并非所有已支持连接都提供数据传输。

不同组合的能力也不完全相同，例如：

* 某些引擎只能传输表数据，不能复用源 DDL
* Upsert 依赖目标数据库和可识别的键
* Catalog、Schema、identity、数组、JSON 和二进制值的处理因引擎而异
* 专用搜索、向量、消息队列和配置中心连接不使用此通用表传输入口

如果连接未出现在下拉列表中，表示当前驱动没有声明数据传输能力，而不是仅仅缺少 UI 入口。

## 传输前检查

* 目标连接是否开启只读保护；只读目标会被直接阻止
* 源和目标账号是否分别具有读取、建表和写入权限
* 目标表名大小写转换后是否冲突
* 主键、唯一约束、外键、触发器和非空字段是否会拒绝数据
* 从生产环境复制到低环境前是否需要脱敏
* 大表是否更适合数据库原生导出、导入或在线迁移工具

## 相关功能

### [表数据导入](/cn/docs/table-import)

从文件导入现有表，或按文件批量创建新表。

### [数据库导出](/cn/docs/database-export)

生成可审阅和离线传递的 SQL 文件。

### [生产环境安全](/cn/docs/production-safety)

了解只读保护、生产保护和权限边界。

