From 4c035cd0203199f340028d56985107a6ac8dfaf7 Mon Sep 17 00:00:00 2001 From: zephyr Date: Thu, 31 Aug 2023 13:33:48 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9datax=E6=BA=90=E7=A0=81?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E5=85=B6=E5=85=B7=E6=9C=89=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=9A=84=E6=96=AD=E7=82=B9=E7=BB=AD=E4=BC=A0=E8=83=BD=E5=8A=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datax/common/util/ConfigurationUtil.java | 38 +++++++++++ .../alibaba/datax/core/job/JobContainer.java | 11 ++- .../collector/AbstractCollector.java | 7 +- .../StandaloneTGContainerCommunicator.java | 4 +- .../core/taskgroup/TaskGroupContainer.java | 68 +++++++++++++------ dmt/src/main/java/com/gbase8c/dmt/Dmt.java | 8 ++- .../com/gbase8c/dmt/config/dmtConfig.json | 2 +- .../java/com/gbase8c/dmt/db/meta/Meta.java | 1 - .../dmt/db/metadata/AbstractMetadata.java | 4 -- .../com/gbase8c/dmt/db/metadata/Metadata.java | 1 - .../gbase8c/dmt/db/opengauss/MetaImpl.java | 8 --- .../com/gbase8c/dmt/db/oracle/MetaImpl.java | 8 --- 12 files changed, 108 insertions(+), 52 deletions(-) create mode 100644 common/src/main/java/com/alibaba/datax/common/util/ConfigurationUtil.java diff --git a/common/src/main/java/com/alibaba/datax/common/util/ConfigurationUtil.java b/common/src/main/java/com/alibaba/datax/common/util/ConfigurationUtil.java new file mode 100644 index 0000000..cbb8e07 --- /dev/null +++ b/common/src/main/java/com/alibaba/datax/common/util/ConfigurationUtil.java @@ -0,0 +1,38 @@ +package com.alibaba.datax.common.util; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +public class ConfigurationUtil { + + public static void persistence(Configuration configuration) throws IOException { + String resume = System.getProperty("datax.resume"); + if ("true".equalsIgnoreCase(resume)) { + configuration.set("core.container.model", "taskGroup"); + String json = configuration.toJSON(); + FileUtils.writeStringToFile(file(configuration), json, StandardCharsets.UTF_8, false); + } + } + + public static void remove(Configuration configuration) throws IOException { + String resume = System.getProperty("datax.resume"); + if ("true".equalsIgnoreCase(resume)) { + File file = file(configuration); + if (file.exists()) { + FileUtils.forceDelete(file); + } + } + } + + private static File file(Configuration configuration) { + String workdir = configuration.getString("job.workdir"); + String id = configuration.getString("job._id"); + String name = configuration.getString("job.name"); + return new File(StringUtils.joinWith(File.separator, workdir, id, "configuration", name + ".json")); + } + +} diff --git a/core/src/main/java/com/alibaba/datax/core/job/JobContainer.java b/core/src/main/java/com/alibaba/datax/core/job/JobContainer.java index 9116005..ee5d887 100644 --- a/core/src/main/java/com/alibaba/datax/core/job/JobContainer.java +++ b/core/src/main/java/com/alibaba/datax/core/job/JobContainer.java @@ -118,6 +118,7 @@ public class JobContainer extends AbstractContainer { LOG.info("jobContainer starts to do prepare ..."); this.prepare(); LOG.info("jobContainer starts to do split ..."); + // todo 如果是断点续传,直接读取分块信息和分块数 this.totalStage = this.split(); LOG.info("jobContainer starts to do schedule ..."); this.schedule(); @@ -418,7 +419,7 @@ public class JobContainer extends AbstractContainer { readerTaskConfigs, writerTaskConfigs, transformerList); LOG.debug("contentConfig configuration: "+ JSON.toJSONString(contentConfig)); - + // todo 如果是断点续传,参考这句设置 this.configuration.set(CoreConstant.DATAX_JOB_CONTENT, contentConfig); return contentConfig.size(); @@ -750,6 +751,10 @@ public class JobContainer extends AbstractContainer { FrameworkErrorCode.PLUGIN_SPLIT_ERROR, "reader切分的task数目不能小于等于0"); } + List connection = configuration.getList("job.content[0].reader.parameter.connection"); + for (Configuration configuration : readerSlicesConfigs) { + configuration.set("connection", connection); + } LOG.info("DataX Reader.Job [{}] splits to [{}] tasks.", this.readerPluginName, readerSlicesConfigs.size()); classLoaderSwapper.restoreCurrentThreadClassLoader(); @@ -767,6 +772,10 @@ public class JobContainer extends AbstractContainer { FrameworkErrorCode.PLUGIN_SPLIT_ERROR, "writer切分的task不能小于等于0"); } + List connection = configuration.getList("job.content[0].writer.parameter.connection"); + for (Configuration configuration : writerSlicesConfigs) { + configuration.set("connection", connection); + } LOG.info("DataX Writer.Job [{}] splits to [{}] tasks.", this.writerPluginName, writerSlicesConfigs.size()); classLoaderSwapper.restoreCurrentThreadClassLoader(); diff --git a/core/src/main/java/com/alibaba/datax/core/statistics/container/collector/AbstractCollector.java b/core/src/main/java/com/alibaba/datax/core/statistics/container/collector/AbstractCollector.java index ed471bf..fc84a3b 100644 --- a/core/src/main/java/com/alibaba/datax/core/statistics/container/collector/AbstractCollector.java +++ b/core/src/main/java/com/alibaba/datax/core/statistics/container/collector/AbstractCollector.java @@ -45,7 +45,12 @@ public abstract class AbstractCollector { public void registerTaskCommunication(List taskConfigurationList) { for (Configuration taskConfig : taskConfigurationList) { int taskId = taskConfig.getInt(CoreConstant.TASK_ID); - this.taskCommunicationMap.put(taskId, new Communication()); + String state = taskConfig.getString("state"); + Communication communication = new Communication(); + if (State.SUCCEEDED.name().equals(state)) { + communication.setState(State.SUCCEEDED); + } + this.taskCommunicationMap.put(taskId, communication); } } diff --git a/core/src/main/java/com/alibaba/datax/core/statistics/container/communicator/taskgroup/StandaloneTGContainerCommunicator.java b/core/src/main/java/com/alibaba/datax/core/statistics/container/communicator/taskgroup/StandaloneTGContainerCommunicator.java index cd79f1d..e3f05cf 100644 --- a/core/src/main/java/com/alibaba/datax/core/statistics/container/communicator/taskgroup/StandaloneTGContainerCommunicator.java +++ b/core/src/main/java/com/alibaba/datax/core/statistics/container/communicator/taskgroup/StandaloneTGContainerCommunicator.java @@ -25,8 +25,8 @@ public class StandaloneTGContainerCommunicator extends AbstractTGContainerCommun public void report(Communication communication) { super.getReporter().reportTGCommunication(super.taskGroupId, communication); // todo -// LOG.info(CommunicationTool.Stringify.getSnapshot(communication)); -// reportVmInfo(); + LOG.info(CommunicationTool.Stringify.getSnapshot(communication)); + reportVmInfo(); } } diff --git a/core/src/main/java/com/alibaba/datax/core/taskgroup/TaskGroupContainer.java b/core/src/main/java/com/alibaba/datax/core/taskgroup/TaskGroupContainer.java index 9f43364..d163e99 100644 --- a/core/src/main/java/com/alibaba/datax/core/taskgroup/TaskGroupContainer.java +++ b/core/src/main/java/com/alibaba/datax/core/taskgroup/TaskGroupContainer.java @@ -9,6 +9,7 @@ import com.alibaba.datax.common.statistics.PerfRecord; import com.alibaba.datax.common.statistics.PerfTrace; import com.alibaba.datax.common.statistics.VMInfo; import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.common.util.ConfigurationUtil; import com.alibaba.datax.core.AbstractContainer; import com.alibaba.datax.core.statistics.communication.Communication; import com.alibaba.datax.core.statistics.communication.CommunicationTool; @@ -65,8 +66,6 @@ public class TaskGroupContainer extends AbstractContainer { public TaskGroupContainer(Configuration configuration, Map taskGroupCommunicationMap) { super(configuration); - // todo - this.taskGroupCommunicationMap = taskGroupCommunicationMap; initCommunicator(configuration); @@ -99,6 +98,8 @@ public class TaskGroupContainer extends AbstractContainer { @Override public void start() { try { + // todo 在这里存文件 + ConfigurationUtil.persistence(configuration); /** * 状态check时间间隔,较短,可以把任务及时分发到对应channel中 */ @@ -140,11 +141,11 @@ public class TaskGroupContainer extends AbstractContainer { "taskGroupId=[%d] start [%d] channels for [%d] tasks.", this.taskGroupId, channelNumber, taskCountInThisTaskGroup)); - // todo + // todo State.SUCCEEDED状态直接写入communicator this.containerCommunicator.registerCommunication(taskConfigs); Map taskConfigMap = buildTaskConfigMap(taskConfigs); //taskId与task配置 - // todo + // todo 非State.SUCCEEDED状态的taskConfig加入到taskQueue List taskQueue = buildRemainTasks(taskConfigs); //待运行task列表 Map taskFailedExecutorMap = new HashMap(); //taskId与上次失败实例 List runTasks = new ArrayList(channelNumber); //正在运行task @@ -157,19 +158,24 @@ public class TaskGroupContainer extends AbstractContainer { //1.判断task状态 boolean failedOrKilled = false; Map communicationMap = containerCommunicator.getCommunicationMap(); - for(Map.Entry entry : communicationMap.entrySet()){ + for (Map.Entry entry : communicationMap.entrySet()){ Integer taskId = entry.getKey(); Communication taskCommunication = entry.getValue(); - if(!taskCommunication.isFinished()){ + if (!taskCommunication.isFinished()){ continue; } - TaskExecutor taskExecutor = removeTask(runTasks, taskId); - //上面从runTasks里移除了,因此对应在monitor里移除 + TaskExecutor taskExecutor = removeTask(runTasks, taskId); + // 上面从runTasks里移除了,因此对应在monitor里移除 taskMonitor.removeTask(taskId); - //失败,看task是否支持failover,重试次数未超过最大限制 - if(taskCommunication.getState() == State.FAILED){ + String path = "job.content[" + taskId + "].state"; + // 失败,看task是否支持failover,重试次数未超过最大限制 + if (taskCommunication.getState() == State.FAILED){ + // todo 记录状态为State.FAILED + configuration.set(path, State.FAILED); + ConfigurationUtil.persistence(configuration); + taskFailedExecutorMap.put(taskId, taskExecutor); if(taskExecutor.supportFailOver() && taskExecutor.getAttemptCount() < taskMaxRetryTimes){ taskExecutor.shutdown(); //关闭老的executor @@ -180,10 +186,17 @@ public class TaskGroupContainer extends AbstractContainer { failedOrKilled = true; break; } - }else if(taskCommunication.getState() == State.KILLED){ + } else if(taskCommunication.getState() == State.KILLED){ failedOrKilled = true; break; - }else if(taskCommunication.getState() == State.SUCCEEDED){ + } else if(taskCommunication.getState() == State.SUCCEEDED){ + // todo 记录状态为State.SUCCEEDED + Configuration taskConfig = taskConfigMap.get(taskId); + if (taskConfig != null) { + configuration.set(path, State.SUCCEEDED); + ConfigurationUtil.persistence(configuration); + } + Long taskStartTime = taskStartTimeMap.get(taskId); if(taskStartTime != null){ Long usedTime = System.currentTimeMillis() - taskStartTime; @@ -206,30 +219,30 @@ public class TaskGroupContainer extends AbstractContainer { FrameworkErrorCode.PLUGIN_RUNTIME_ERROR, lastTaskGroupContainerCommunication.getThrowable()); } - //3.有任务未执行,且正在运行的任务数小于最大通道限制 + //3.有任务未执行,且正在运行的任务数小于最大通道限制(任务并发数) Iterator iterator = taskQueue.iterator(); - while(iterator.hasNext() && runTasks.size() < channelNumber){ + while (iterator.hasNext() && runTasks.size() < channelNumber) { Configuration taskConfig = iterator.next(); Integer taskId = taskConfig.getInt(CoreConstant.TASK_ID); int attemptCount = 1; TaskExecutor lastExecutor = taskFailedExecutorMap.get(taskId); - if(lastExecutor!=null){ + if (lastExecutor!=null) { attemptCount = lastExecutor.getAttemptCount() + 1; long now = System.currentTimeMillis(); long failedTime = lastExecutor.getTimeStamp(); - if(now - failedTime < taskRetryIntervalInMsec){ //未到等待时间,继续留在队列 + if (now - failedTime < taskRetryIntervalInMsec) { //未到等待时间,继续留在队列 continue; } - if(!lastExecutor.isShutdown()){ //上次失败的task仍未结束 - if(now - failedTime > taskMaxWaitInMsec){ + if (!lastExecutor.isShutdown()) { //上次失败的task仍未结束 + if (now - failedTime > taskMaxWaitInMsec) { markCommunicationFailed(taskId); reportTaskGroupCommunication(lastTaskGroupContainerCommunication, taskCountInThisTaskGroup); throw DataXException.asDataXException(CommonErrorCode.WAIT_TIME_EXCEED, "task failover等待超时"); - }else{ + } else { lastExecutor.shutdown(); //再次尝试关闭 continue; } - }else{ + } else { LOG.info("taskGroup[{}] taskId[{}] attemptCount[{}] has already shutdown", this.taskGroupId, taskId, lastExecutor.getAttemptCount()); } @@ -237,7 +250,12 @@ public class TaskGroupContainer extends AbstractContainer { Configuration taskConfigForRun = taskMaxRetryTimes > 1 ? taskConfig.clone() : taskConfig; TaskExecutor taskExecutor = new TaskExecutor(taskConfigForRun, attemptCount); taskStartTimeMap.put(taskId, System.currentTimeMillis()); - taskExecutor.doStart(); + // todo 启动任务, 将分块状态置为State.RUNNING + String path = "job.content[" + taskId + "].state"; + configuration.set(path, State.RUNNING); + ConfigurationUtil.persistence(configuration); + + taskExecutor.doStart(); iterator.remove(); runTasks.add(taskExecutor); @@ -257,6 +275,8 @@ public class TaskGroupContainer extends AbstractContainer { lastTaskGroupContainerCommunication, taskCountInThisTaskGroup); LOG.info("taskGroup[{}] completed it's tasks.", this.taskGroupId); + // todo remove + ConfigurationUtil.remove(configuration); break; } @@ -288,6 +308,7 @@ public class TaskGroupContainer extends AbstractContainer { if (nowTaskGroupContainerCommunication.getThrowable() == null) { nowTaskGroupContainerCommunication.setThrowable(e); } + nowTaskGroupContainerCommunication.setState(State.FAILED); this.containerCommunicator.report(nowTaskGroupContainerCommunication); @@ -319,7 +340,10 @@ public class TaskGroupContainer extends AbstractContainer { private List buildRemainTasks(List configurations){ List remainTasks = new LinkedList(); for(Configuration taskConfig : configurations){ - remainTasks.add(taskConfig); + String state = taskConfig.getString("state"); + if (!State.SUCCEEDED.name().equals(state)) { + remainTasks.add(taskConfig); + } } return remainTasks; } diff --git a/dmt/src/main/java/com/gbase8c/dmt/Dmt.java b/dmt/src/main/java/com/gbase8c/dmt/Dmt.java index be6c878..edad1b6 100644 --- a/dmt/src/main/java/com/gbase8c/dmt/Dmt.java +++ b/dmt/src/main/java/com/gbase8c/dmt/Dmt.java @@ -17,8 +17,9 @@ public class Dmt { public static void main(String[] args) throws ParseException { // just for test -// args = new String[] {"-workdir", "d:/workdir", "-taskid", "3702a428f84f44cabb6883a2f9dcd517"}; -// System.setProperty("datax.home", "d:/48_datax-all/target/datax/datax"); +// args = new String[] {"-workdir", "d:/workdir", "-taskid", "1"}; +// System.setProperty("datax.home", "D:/ora-migration-tool/target/oracle-migration-tool/oracle-migration-tool"); +// System.setProperty("datax.resume", "true"); Options options = new Options(); options.addOption("workdir", true, "work dir."); @@ -35,7 +36,8 @@ public class Dmt { taskService.start(); // 此方法可行, 现在难点是构造configuration -// Configuration configuration = ConfigParser.parse("d:/workdir/test.json"); +// Configuration configuration = ConfigParser.parse("D:/workdir/1/configuration/TEST.T_TABLE.json"); +// Configuration configuration = ConfigParser.parse("D:/workdir/ori.json"); // configuration.set("core.container.model", "taskGroup"); // Engine engine = new Engine(); // engine.start(configuration); diff --git a/dmt/src/main/java/com/gbase8c/dmt/config/dmtConfig.json b/dmt/src/main/java/com/gbase8c/dmt/config/dmtConfig.json index aedc63a..e3db609 100644 --- a/dmt/src/main/java/com/gbase8c/dmt/config/dmtConfig.json +++ b/dmt/src/main/java/com/gbase8c/dmt/config/dmtConfig.json @@ -1,5 +1,5 @@ { - "workDir": "D:/workdir/3702a428f84f44cabb6883a2f9dcd517", + "workDir": "D:/workdir/1", "taskPoolCoreSize": 4, "taskPoolMaxSize": 8, "order": ["SCHEMA", "SEQUENCE", "TABLESPACE", "TABLE", "DATA", "PK", "INDEX", "UNIQUE", "FK", "CHECK", "VIEW", "FUNCTION", "TRIGGER", "SYNONYM"] diff --git a/dmt/src/main/java/com/gbase8c/dmt/db/meta/Meta.java b/dmt/src/main/java/com/gbase8c/dmt/db/meta/Meta.java index 559403f..d165137 100644 --- a/dmt/src/main/java/com/gbase8c/dmt/db/meta/Meta.java +++ b/dmt/src/main/java/com/gbase8c/dmt/db/meta/Meta.java @@ -14,7 +14,6 @@ public interface Meta { List keywords(); String characterSet(String database); - int charBytes(); T query(String sql, ResultSetHandler rsh, Object... params); int execute(String sql, Object... params); diff --git a/dmt/src/main/java/com/gbase8c/dmt/db/metadata/AbstractMetadata.java b/dmt/src/main/java/com/gbase8c/dmt/db/metadata/AbstractMetadata.java index 4fd3c67..6d52ac7 100644 --- a/dmt/src/main/java/com/gbase8c/dmt/db/metadata/AbstractMetadata.java +++ b/dmt/src/main/java/com/gbase8c/dmt/db/metadata/AbstractMetadata.java @@ -453,10 +453,6 @@ public class AbstractMetadata implements Metadata { return meta.characterSet(database); } - @Override - public int charBytes() { - return meta.charBytes(); - } @Override public Snapshot snapshot() { return meta.snapshot(); diff --git a/dmt/src/main/java/com/gbase8c/dmt/db/metadata/Metadata.java b/dmt/src/main/java/com/gbase8c/dmt/db/metadata/Metadata.java index bce11c7..95c5ced 100644 --- a/dmt/src/main/java/com/gbase8c/dmt/db/metadata/Metadata.java +++ b/dmt/src/main/java/com/gbase8c/dmt/db/metadata/Metadata.java @@ -101,7 +101,6 @@ public interface Metadata { ColumnType toColumnType(ColumnType srcColumnType); String characterSet(String database); - int charBytes(); Snapshot snapshot(); diff --git a/dmt/src/main/java/com/gbase8c/dmt/db/opengauss/MetaImpl.java b/dmt/src/main/java/com/gbase8c/dmt/db/opengauss/MetaImpl.java index 7d91d58..4dd9438 100644 --- a/dmt/src/main/java/com/gbase8c/dmt/db/opengauss/MetaImpl.java +++ b/dmt/src/main/java/com/gbase8c/dmt/db/opengauss/MetaImpl.java @@ -266,14 +266,6 @@ public class MetaImpl extends AbstractMeta { return characterSet; } - @Override - public int charBytes() { -// String sql = "select lengthb('中')"; -// int charBytes = query(sql, new ScalarHandler()); -// return charBytes; - return 1; - } - @Override public Snapshot snapshot() { throw new RuntimeException("unsupport now!"); diff --git a/dmt/src/main/java/com/gbase8c/dmt/db/oracle/MetaImpl.java b/dmt/src/main/java/com/gbase8c/dmt/db/oracle/MetaImpl.java index 904678e..c19ba9a 100644 --- a/dmt/src/main/java/com/gbase8c/dmt/db/oracle/MetaImpl.java +++ b/dmt/src/main/java/com/gbase8c/dmt/db/oracle/MetaImpl.java @@ -147,14 +147,6 @@ public class MetaImpl extends AbstractMeta { return characterSet; } - @Override - public int charBytes() { -// String sql = "select lengthb('中') from dual"; -// BigDecimal bd = query(sql, new ScalarHandler()); -// return bd.intValue(); - return 1; - } - @Override public Snapshot snapshot() { String sql = "select CURRENT_SCN scn from V$DATABASE"; -- Gitee From 4db608765d6377c293efed59b871115d5e340e8f Mon Sep 17 00:00:00 2001 From: zephyr Date: Thu, 31 Aug 2023 15:21:21 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=B0=86oracle-migration-tool=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E4=BF=AE=E6=94=B9=E4=B8=BAora-migration-tool?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- common/pom.xml | 2 +- core/pom.xml | 2 +- dmt/pom.xml | 2 +- dmt/src/main/java/com/gbase8c/dmt/Dmt.java | 25 ++------------------ dmt/src/test/java/com/gbase8c/dmt/Test.java | 20 ++++++++++++++++ opengausswriter/pom.xml | 2 +- oraclereader/pom.xml | 2 +- package.xml | 10 ++++---- plugin-rdbms-util/pom.xml | 2 +- pom.xml | 6 ++--- quickstart/workdir.zip | Bin 28966 -> 39019 bytes transformer/pom.xml | 2 +- userGuid.md | 10 ++++---- 14 files changed, 43 insertions(+), 44 deletions(-) create mode 100644 dmt/src/test/java/com/gbase8c/dmt/Test.java diff --git a/README.md b/README.md index cc0aff1..6622f15 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# oracle-migration-tool +# ora-migration-tool 本插件是在datax的基础上增加了数据库对象迁移和scn读取,来支持oracle->oprengauss的在线和离线迁移。 相关datax的知识原理在这里就不在描述, 具体使用方式见userGuid。 diff --git a/common/pom.xml b/common/pom.xml index 442cd1d..709fdf4 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.alibaba.datax - oracle-migration-tool + ora-migration-tool 0.0.1-SNAPSHOT diff --git a/core/pom.xml b/core/pom.xml index 97797d9..3147184 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.alibaba.datax - oracle-migration-tool + ora-migration-tool 0.0.1-SNAPSHOT diff --git a/dmt/pom.xml b/dmt/pom.xml index ecf7592..0978255 100644 --- a/dmt/pom.xml +++ b/dmt/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.alibaba.datax - oracle-migration-tool + ora-migration-tool 0.0.1-SNAPSHOT diff --git a/dmt/src/main/java/com/gbase8c/dmt/Dmt.java b/dmt/src/main/java/com/gbase8c/dmt/Dmt.java index edad1b6..104b576 100644 --- a/dmt/src/main/java/com/gbase8c/dmt/Dmt.java +++ b/dmt/src/main/java/com/gbase8c/dmt/Dmt.java @@ -1,31 +1,17 @@ package com.gbase8c.dmt; -import com.alibaba.datax.common.util.Configuration; -import com.alibaba.datax.core.Engine; -import com.alibaba.datax.core.util.ConfigParser; -import com.gbase8c.dmt.common.util.JsonMapper; import com.gbase8c.dmt.config.DmtConfig; import com.gbase8c.dmt.service.TaskService; -import org.apache.commons.cli.BasicParser; -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.Options; -import org.apache.commons.cli.ParseException; - -import java.io.File; +import org.apache.commons.cli.*; public class Dmt { public static void main(String[] args) throws ParseException { - // just for test -// args = new String[] {"-workdir", "d:/workdir", "-taskid", "1"}; -// System.setProperty("datax.home", "D:/ora-migration-tool/target/oracle-migration-tool/oracle-migration-tool"); -// System.setProperty("datax.resume", "true"); - Options options = new Options(); options.addOption("workdir", true, "work dir."); options.addOption("taskid", true, "task id."); - BasicParser parser = new BasicParser(); + DefaultParser parser = new DefaultParser(); CommandLine cl = parser.parse(options, args); String workdir = cl.getOptionValue("workdir"); @@ -34,12 +20,5 @@ public class Dmt { DmtConfig dmtConfig = DmtConfig.read(workdir, taskId); TaskService taskService = new TaskService(dmtConfig); taskService.start(); - - // 此方法可行, 现在难点是构造configuration -// Configuration configuration = ConfigParser.parse("D:/workdir/1/configuration/TEST.T_TABLE.json"); -// Configuration configuration = ConfigParser.parse("D:/workdir/ori.json"); -// configuration.set("core.container.model", "taskGroup"); -// Engine engine = new Engine(); -// engine.start(configuration); } } diff --git a/dmt/src/test/java/com/gbase8c/dmt/Test.java b/dmt/src/test/java/com/gbase8c/dmt/Test.java new file mode 100644 index 0000000..5219469 --- /dev/null +++ b/dmt/src/test/java/com/gbase8c/dmt/Test.java @@ -0,0 +1,20 @@ +package com.gbase8c.dmt; + +import com.alibaba.datax.common.util.Configuration; +import com.alibaba.datax.core.Engine; +import com.alibaba.datax.core.util.ConfigParser; + +public class Test { + + public static void main(String[] args) {; + System.setProperty("datax.home", "D:/ora-migration-tool/target/ora-migration-tool/ora-migration-tool"); + System.setProperty("datax.resume", "true"); + +// Configuration configuration = ConfigParser.parse("D:/workdir/1/configuration/TEST.T_TABLE.json"); + Configuration configuration = ConfigParser.parse("D:/workdir/ori.json"); + configuration.set("core.container.model", "taskGroup"); + Engine engine = new Engine(); + engine.start(configuration); + } + +} diff --git a/opengausswriter/pom.xml b/opengausswriter/pom.xml index b653f08..5d3beb4 100644 --- a/opengausswriter/pom.xml +++ b/opengausswriter/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.alibaba.datax - oracle-migration-tool + ora-migration-tool 0.0.1-SNAPSHOT opengausswriter diff --git a/oraclereader/pom.xml b/oraclereader/pom.xml index 8f4fba9..b3f8f52 100644 --- a/oraclereader/pom.xml +++ b/oraclereader/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> com.alibaba.datax - oracle-migration-tool + ora-migration-tool 0.0.1-SNAPSHOT 4.0.0 diff --git a/package.xml b/package.xml index 0d6158a..2524c7f 100644 --- a/package.xml +++ b/package.xml @@ -14,7 +14,7 @@ **/*.* - oracle-migration-tool + ora-migration-tool @@ -22,14 +22,14 @@ **/*.* - oracle-migration-tool + ora-migration-tool core/target/datax/ **/*.* - oracle-migration-tool + ora-migration-tool @@ -38,7 +38,7 @@ **/*.* - oracle-migration-tool + ora-migration-tool @@ -47,7 +47,7 @@ **/*.* - oracle-migration-tool + ora-migration-tool diff --git a/plugin-rdbms-util/pom.xml b/plugin-rdbms-util/pom.xml index 3978232..dc81d4e 100644 --- a/plugin-rdbms-util/pom.xml +++ b/plugin-rdbms-util/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.alibaba.datax - oracle-migration-tool + ora-migration-tool 0.0.1-SNAPSHOT plugin-rdbms-util diff --git a/pom.xml b/pom.xml index 686a943..42e9433 100644 --- a/pom.xml +++ b/pom.xml @@ -3,10 +3,10 @@ 4.0.0 com.alibaba.datax - oracle-migration-tool + ora-migration-tool 0.0.1-SNAPSHOT - oracle-migration-tool + ora-migration-tool pom @@ -180,7 +180,7 @@ maven-assembly-plugin - oracle-migration-tool + ora-migration-tool package.xml diff --git a/quickstart/workdir.zip b/quickstart/workdir.zip index 3ee5548fa63e55b9f283be8492269820a368c4ea..75ae1c58e49515a2549dcd04a52ff8ad941c2674 100644 GIT binary patch delta 10903 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 S8z`HI0O1P`1_q4`5Dx%&v~ckN diff --git a/transformer/pom.xml b/transformer/pom.xml index 8669b06..5a0aae9 100644 --- a/transformer/pom.xml +++ b/transformer/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> com.alibaba.datax - oracle-migration-tool + ora-migration-tool 0.0.1-SNAPSHOT 4.0.0 diff --git a/userGuid.md b/userGuid.md index 4e31eb7..0c4aae5 100644 --- a/userGuid.md +++ b/userGuid.md @@ -17,7 +17,7 @@ (2)、通过maven打包: ``` shell - $ cd {oracle-migration-tool_source_code_home} + $ cd {ora-migration-tool_source_code_home} $ mvn -U clean package assembly:assembly -Dmaven.test.skip=true ``` @@ -35,8 +35,8 @@ 打包成功后的DataX包位于 {DataX_source_code_home}/target/datax/datax/ ,结构如下: ``` shell - $ cd {oracle-migration-tool_source_code_home} - $ ls ./target/oracle-migration-tool/oracle-migration-tool/ + $ cd {ora-migration-tool_source_code_home} + $ ls ./target/ora-migration-tool/ora-migration-tool/ bin conf job lib log log_perf plugin script tmp ``` @@ -47,7 +47,7 @@ * 第二步:准备迁移相关文件。将quickstart/wrokdir.zip解压到指定目录 ``` shell - cp {oracle-migration-tool_source_code_home}/quickstart/workdir.zip /home + cp {ora-migration-tool_source_code_home}/quickstart/workdir.zip /home cd /home unzip workdir.zip ``` @@ -70,7 +70,7 @@ * 第四步:启动迁移 ``` shell - java -server -Xms1g -Xmx1g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${oracle-migration-tool.home}/log -Dloglevel=info -Dfile.encoding=UTF-8 -Dlogback.statusListenerClass=ch.qos.logback.core.status.NopStatusListener -Djava.security.egd=file:///dev/urandom -Ddatax.home=${oracle-migration-tool.home} -Dlogback.configurationFile=${oracle-migration-tool.home}/conf/logback.xml -classpath ${oracle-migration-tool.home}\lib\* com.gbase8c.dmt.Dmt -taskid ${tasked} -workdir ${workdir} + java -server -Xms1g -Xmx1g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${ora-migration-tool.home}/log -Dloglevel=info -Dfile.encoding=UTF-8 -Dlogback.statusListenerClass=ch.qos.logback.core.status.NopStatusListener -Djava.security.egd=file:///dev/urandom -Ddatax.home=${ora-migration-tool.home} -Ddatax.resume=true -Dlogback.configurationFile=${ora-migration-tool.home}/conf/logback.xml -classpath ${ora-migration-tool.home}\lib\* com.gbase8c.dmt.Dmt -taskid ${tasked} -workdir ${workdir} ``` * 配置文件说明 -- Gitee