迁移表从一个库到另外一个库

本文介绍使用 DB2 进行数据库表导出与导入的过程及遇到的问题。包括 export 和 import 工具导致的数据列不匹配问题,尝试直接删除多余列但未成功。最后采用 copy 命令完成数据迁移,虽然成功导入数据和表结构,但丢失了外键关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这个库中选中一张表,然后用export输出到一个文件中。employeeExport
在另外一个库选中一个表,然后用import导入,出现错误,可能是列不对应,然后尝试删除列,但最后一个列怎么都删除不掉,可能是db2 table至少要有一个列。
有一个方案,应该在一个库建立和employee一样的表结构,应该可以import.但没有尝试。

第三种方案,用copy 可以导入成功,导入表和数据都能成功,但会丢失外键.

/** * 源数据连接池配置 * */ ConnPoolConfig config = new ConnPoolConfig(); config.setMaxPoolSize(30); config.setInitialPoolSize(20); config.setUrl("jdbc:sqlserver://192.168.0.222;databaseName=ciems"); config.setDriverClass("com.microsoft.sqlserver.jdbc.SQLServerDriver"); config.setUsername("sa"); config.setPassword("Password2017"); /** * 源 * "queryDB" DBManager的自定义名称 * config 连接池配置 */ DBManager queryDb = new DBManager("queryDB",config); /** * 目标数据连接池配置 * */ ConnPoolConfig tarconfig = new ConnPoolConfig(); tarconfig.setMaxPoolSize(30); tarconfig.setInitialPoolSize(20); tarconfig.setDriverClass("com.mysql.jdbc.Driver"); tarconfig.setUrl("jdbc:mysql://localhost:3306/datatransfer?useUnicode=true&characterEncoding=UTF8&useSSL=true"); tarconfig.setPassword("accp"); tarconfig.setUsername("root"); /** * 目标 */ DBManager insertDb = new DBManager("insertDB",config); /** *做数据导入处理时的接口 * */ InsertHandler handler = new DBInsertHandlerImpl("t_big_data",null,insertDb); /** * 迁移任务的配置,配置关键信息项 */ ApplicationConfig apConfig = new ApplicationConfig("t_big_data"); apConfig.setQueryThreadNum(8); //指定查询线程数量,不指定默认为8 apConfig.setDataNum(5000); //设置每次从源中抽取的数量 不指定默认为5000 /** * 源的匹配条件 * 如果希望源中符合条件的才迁移,请配置此项,禁止加where,请按照以下格式 */ apConfig.setConditionSql("0=0"); /** * 入方式 * ** * 增量入 ZLRK, (暂未实现) * 追加入 ZJRK, (目标有源结构的基础上,增加源的所有数据到目标中) * 刷新入 SXRK, (删除目标的源结构,自动创建并导入数据) * 更新入 GXRK (暂未实现) * ** */ apConfig.setInsertType(InsertType.SXRK); /** * 日志线程,开启时可更直观的从标准输出流里观察到运行状态,不指定默认关闭 */ apConfig.setOpenLogThread(true); /** * 生命周期接口,线程不完全 * 分别有以下几个生命周期方法 * createTableDone() 目标被创建结构时调用一次 * queryDone(boolean result, int start, int end, long time,Throwable e) * 有数据从源中查询到数据时被调用,直到任务完成 * result 查询结果 * start 查询起始行 * end 查询结束行 * time 共耗时 单位:ms * e 查询失败时抛出的异常 * insertDone(boolean result, int num, int errorNum, long time,Throwable e) * 有数据导入到目的时被调用,直到任务完成 * result 导入结果 * num 导入总数量 * errorNum异常数量 * e 导入失败时抛出的异常 * taskDone(int all, int doneNum, int errorNum, long time,List errorRows, List e) * 任务完成时被调用 * all 任务总数据量 * doneNum 已完成的数据量 * errorNum异常的数据量 * time 总耗时 * errorRows异常的行记录 * e 所有的异常 */ TaskRunLog runLog = new TaskRunLogImpl(); /*** * 任务迁移核心类 * 以下是构造方式之一 * ApplicationConfig apConfig:任务关键配置 * DBManager queryDb: 源 * InsertHandler handler:导入处理器 */ DataThransferApplication app = new DataThransferApplication(apConfig,queryDb,handler,runLog); /** * 初始化任务 */ app.init(); /** * 任务开始 */ app.start();
### 如何从一个GitLab仓迁移代码到另一个GitLab仓 #### 创建目标仓 在新的GitLab实例中创建一个新的空项目`myNewOrigin`,该操作可以通过GitLab的Web界面完成。确保记录下新仓的HTTPS或SSH URL[^3]。 #### 备份源仓数据 为了防止任何潜在的数据丢失,在执行实际迁移之前应当对原始仓进行全面备份。这不仅限于版本控制下的文件,还应考虑Wiki页面、议题(Issues)以及管道配置等内容。对于整体环境的转移,可以利用GitLab自带工具来进行整个实例级别的导出[^1]。 #### 配置本地克隆环境 使用命令行客户端连接至原仓,并将其完整拉取下来: ```bash git clone --mirror https://oldserver.com/myOrigin.git cd myOrigin.git ``` 上述指令会下载所有的分支、标签和其他引用对象而不仅仅是默认分支的内容[^2]。 #### 更新远程URL指向 修改已有的远端链接使之对应向新建的目标提交更改: ```bash git remote set-url origin https://newserver.com/myNewOrigin.git ``` 通过这条语句实现了无需再次clone即可直接推送到目的位置的效果。 #### 推送所有内容至上游仓 现在可以把镜像副本里的全部历史记录同步给接收方: ```bash git push --all git push --tags ``` 这两条命令分别负责传输各个特性线程及其关联的时间戳标记等元信息。 #### 后续处理工作 成功上传完毕之后,应该及时通知相关人员有关路径变更的消息;另外还需审查一遍权限设定是否恰当,比如访问级别、保护分支策略等方面是否有遗漏之处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值