- 方式一:采用SELECT * INTO FROM 复制表数据以及结构到新表,再清空原表并重置序列
代码如下:
点击查看代码
private void pnsDataCopy() {
log.info("{}===>表开始复制",PNS_TABLE);
long l = System.currentTimeMillis();
TransactionStatus transactionStatus = null;
try {
//开启事务
transactionStatus = DsJdbcTxUtils.beginTransaction(pnsTxManager);
//复制表结构以及数据到新表中
jdbcTemplatePns.execute(String.format("SELECT * INTO %s FROM %s", getTableName(PNS_TABLE), PNS_TABLE));
//清空旧表
jdbcTemplatePns.execute(String.format("TRUNCATE TABLE %s", PNS_TABLE));
//并把人大金仓中的OPC_TABLE表序列重新设置从1开始
jdbcTemplatePns.execute(String.format("ALTER SEQUENCE %s RESTART WITH 1", PNS_TABLE_SEQ));
//提交事务
DsJdbcTxUtils.commitTransaction(pnsTxManager,transactionStatus);
log.info("{}===>表复制完成",PNS_TABLE);
log.info("耗时=:{}",System.currentTimeMillis()-l);
} catch (DataAccessException e) {
log.error("{},表数据复制和删除操作执行失败===>{}", PNS_TABLE, e.getMessage());
DsJdbcTxUtils.rollbackTransaction(pnsTxManager,transactionStatus);
}
}
2.方式二: 采用修改表名称,再新建跟表结构一致的原表
点击查看代码
private void opcDataCopy() {
//获取备份表名
log.info("{}===>表开始复制",OPC_TABLE);
long l = System.currentTimeMillis();
TransactionStatus transactionStatus = null;
String tableName = getTableName(OPC_TABLE);
try {
//开启事务
transactionStatus = DsJdbcTxUtils.beginTransaction(opcTxManager);
//重命名表
jdbcTemplateOpc.execute(String.format("ALTER TABLE %s RENAME TO %s", OPC_TABLE, tableName));
//创建一个新表跟OPC_TABLE表结构一样
jdbcTemplateOpc.execute(String.format("CREATE TABLE %s AS SELECT * FROM %s WHERE 1=0", OPC_TABLE, tableName));
//把人大金仓中的OPC_TABLE_SEQ序列重新设置从1开始
jdbcTemplateOpc.execute(String.format("ALTER SEQUENCE %s RESTART WITH 1", OPC_TABLE_SEQ));
//给OPC_TABLE表设置序列OPC_TABLE_SEQ
jdbcTemplateOpc.execute(String.format("ALTER TABLE %s ALTER COLUMN ID SET DEFAULT NEXTVAL('%s')", tableName, OPC_TABLE_SEQ));
//提交事务
DsJdbcTxUtils.commitTransaction(opcTxManager,transactionStatus);
log.info("{}===>表复制完成",OPC_TABLE);
log.info("耗时={}",System.currentTimeMillis()-l);
} catch (DataAccessException e) {
log.error("{},表数据复制和删除操作执行失败====>{}", OPC_TABLE , e.getMessage());
DsJdbcTxUtils.rollbackTransaction(opcTxManager,transactionStatus);
}
}