1:
同步工具:
ora2pg ,开源的, 需要安装各种包, 我就没用这个。
我用的 springboot + liquibase +navicat + UltraEdit
springboot + liquibase: 脚本执行, 可以做初始化脚本,管理项目sql版本管理
navicat : 数据 从 oracle迁移到 pg
UltraEdit: 大文件编辑超快
方式二:
如果不用做初始化脚本的, 直接用 navicat的数据传输, 结构和数据都可以同步,一次搞定
2: 步骤: 结构和数据分开
1: navicat 将oracle 数据库用户下的所有表导出结构
3: springboot + liquibase
项目结构:
pom.xml
,以下部分手敲,单次错误了的就需要修改;
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3.RELEASE</version>
</parent>
<!-- liquibase管理升级脚本(org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration 自动装配)-->
<dependencies>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.2</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>oracle6</artifactId>
<version>11.2.0.4</version>
</dependency>
</dependencies>
<build>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!--mvn liquibase:generateChangeLog (从数据库生成sql table或者data)-->
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>4.3.5</version>
<configuration>
<propertyFileWillOverride>true</propertyFileWillOverride>
<!--生成文件的路径-->
<outputChangeLogFile>src/main/resources/db/changelogs/table_init.oracle.sql</outputChangeLogFile>
<!--要连接库配置信息 -->
<driver>oracle.jdbc.OracleDriver</driver>
<url>jdbc:oracle:thin"xxx:1521/xxx</url>
<username>xxx</username>
<password>xxx</password>
<!--只生成数据-->
<!-- <diffTypes> data </diffTypes> -->
</configuration>
</plugin>
</build>
说明:
maven插件配置:liquibase-maven-plugin
:从已有项目数据库表生成,通过liquibase的maven插件
mvn命令: mvn liquibase:generateChangeLog
或者:
4:新建目录:
resource新建: db > changelogs
目录层级和名称自定义,无强制要求
changeLog-master.xml 内容:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
<!--<include file="classpath:db/changelogs/changelog_init.xml"/> --><!-- *.sql 导入所有 -->
<include file="db/changelogs/*.sql" relativeToChangeLogFile=false"/>
<!-- xxx.sql 导入某个指定的sql -->
<include file="db/changelogs/xxx.sql" relativeToChangeLogFile=false"/>
</databaseChangeLog>
table_init.sql 内容:
就是表结构的sql,
文件最上面加上:
-- liquibase formatted sql
-- changeset 姓名: 序列号惟一
init.text 内容;
appcalition.yml 文件内容:
配置数据库连接及 文件路径
pg 需要先创建好数据库和用户名:
最好是一个数据库一个用户名
运行:
执行完成就可以看到表及对象这些都创建好了
5: 数据迁移:
小数据量可以直接用 liquibase 做成sql脚本执行或者 datax 同步
1: navicat 先建好 oracle 和 pg 的数据连接测试连接成功。
2: 数据传输
2.1:
2.2: 选择哪些表同步 , 然后点击开始就ok了,
执行结果出现 successful 就代表成功, unsuccessful 就需要查看原因, 信息日志中会显示成功还是失败。