DB2LUW同一数据库内将RANS模式所有表迁移至TESTMIG1模式
同一DB2LUW数据库内跨模式迁移所有表的解决方案
你遇到的db2move copy报错是正常现象——该选项仅支持跨数据库(或跨服务器)的对象迁移,同库内的模式间复制不在其支持范围内。以下是几种可行的替代方案:
方案1:db2move导出+导入(带模式映射)
这是最直接的迁移方式,可批量处理所有表及关联对象:
- 导出源模式
RANS下的所有对象:
执行后当前目录会生成db2move <你的数据库名> export -sn RANSEXPORT.out及各类数据/元数据文件(如.ixf、.msg)。 - 导入时指定目标模式
TESTMIG1:
参数db2move <你的数据库名> import -tn "RANS.*" -sn TESTMIG1-tn锁定源模式的表,-sn指定目标模式,会自动完成表结构、数据及索引/约束的映射迁移。若存在外键依赖导致导入失败,可添加-co force参数强制导入(需提前确认数据一致性)。
方案2:使用ADMIN_COPY_SCHEMA存储过程
这是DB2LUW官方提供的同库模式复制工具,支持迁移表、视图、索引、触发器等全量对象:
- 调用存储过程执行复制:
参数说明:CALL SYSPROC.ADMIN_COPY_SCHEMA( 'RANS', 'TESTMIG1', '', 'COPY', '', ?, ?, ? );- 第1个:源模式名
- 第2个:目标模式名
- 第4个:动作类型,
COPY表示复制对象及数据 - 最后3个为输出参数,用于返回执行状态码、消息等
- 验证执行结果:
可查询系统表SYSTOOLS.ADMIN_COPY_SCHEMA_HIST查看详细执行日志,确认是否成功。
方案3:DDL生成+数据导入(精细化控制)
适合需要自定义表结构或分批迁移的场景:
- 导出源模式DDL:
db2look -d <你的数据库名> -e -z RANS -o rans_schema.sql - 编辑DDL文件:将所有
RANS.替换为TESTMIG1.,调整模式创建语句(若目标模式未提前创建)。 - 执行DDL创建目标结构:
db2 -tvf rans_schema.sql - 导入数据(大数据量推荐用
load替代import):db2move <你的数据库名> load -tn "TESTMIG1.*"
注意事项
- 迁移前务必备份源表或数据库,避免数据丢失;
- 若存在外键约束,需按父表→子表的顺序迁移,或临时禁用外键后再启用;
- 大表迁移优先使用
load命令,效率远高于import,但需注意数据库归档模式配置(可添加-l NONRECOVERABLE参数简化日志处理)。
内容的提问来源于stack exchange,提问作者Rupft
相关产品推荐
相关产品推荐

