EDB这个工具还是挺好用的。
先贴官网的技术文档
https://www.enterprisedb.com/docs/en/52.0/MTK_Guide_v52.0/toc.html
看不懂英文可以用Chrome当前页面右键“翻译成中文”
里面有很详细介绍,但是我还是解读一下吧。
1.首先安装JAVA环境。 EDB工具需要java环境 装过的直接跳到步骤2
oracle官网下载:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
我本地机器是用Ubuntu 的 64位 Linux 所以我下载这个
CentOS 可以下载rpm版本的 直接用命令 rpm -ivh rpm文件就好了,比较方便。
Ubuntu用rpm命令太麻烦了。
下载后放到服务器,可以用rz命令上传文件到服务器,也可以用xftp直接拖,随意目录都可以
然后用tar命令解压
tar -zxvf jdk-8u211-linux-x64.tar.gz -C /usr/
-C 是指定解压目录
然后配置JAVA_HOME
使用vi编辑器 进入 /etc/profile
vi /etc/profile
在最后加上
#Java Env
JAVA_HOME=/user/jdk1.8.0_211
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH
vi编辑器使用
先 用方向键将光标移动到最后一行
再按下 i 进入编辑模式
敲完再按下Esc 退出编辑模式,回到命令模式
按下 : 冒号 输入wq 回车 (保存并退出)
然后再输入命令 设置javahome生效
source /etc/profile
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/jdk1.8.0_211/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/jdk1.8.0_211/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/jdk1.8.0_211/bin/javaws" 1
sudo update-alternatives --set java /usr/jdk1.8.0_211/bin/java
sudo update-alternatives --set javac /usr/jdk1.8.0_211/bin/javac
sudo update-alternatives --set javaws /usr/jdk1.8.0_211/bin/javaws
后面的路径是刚刚用tar解压的-C后面跟的解压到的目录,jdk的bin目录
最后用
java -version
来验证一下
至此,java环境安装完。
参考:https://www.yiibai.com/java/how-to-install-java-on-ubuntu.html
2.安装EDB
!!先在官网用邮箱注册个账号,等下安装要用。https://www.enterprisedb.com/user/register
EDB官网也有安装教程,不过用的是rpm,我的Ubuntu比较麻烦。
参考了:https://www.cnblogs.com/aegis1019/p/9021799.html
在这里http://sbp.enterprisedb.com/getfile.jsp?fileid=10872 下载了 edb-migrationtoolkit-51.0.1-1-linux-x64.run
链接:https://pan.baidu.com/s/1n2mJgF8hSO42CQJMhvJCIA
提取码:hbs1
上传到linux机器,
执行命令
chmod 777 edb-migrationtoolkit-51.0.1-1-linux-x64.run
./edb-migrationtoolkit-51.0.1-1-linux-x64.run
然后一直回车就好了
最後要你填注册刚刚的邮件账号,,可能是有使用期限??
安装目录我选了默认
安装完然后去修改配置文件
vi /opt/edb/mtk/etc/toolkit.properties
SRC开头的是源库 就是oracle或者mysql
TARGET开头的就是目的库 就是pg库
Oracle 12C的要注意(12C多了个PDB库),EDB这个工具不支持同步C##开头的用户(11g没有这种分别),如果数据在这个用户上,要先让DBA开一个PDB库的用户,先同步到PDB库,然后再配置源库信息为PDB库
配置好就可以去执行同步的命令了
我这里只说一下在线模式,EDB还有离线模式,我感觉太麻烦了。下面提供参考链接
命令参数可以在这里学习:https://www.enterprisedb.com/docs/en/52.0/MTK_Guide_v52.0/EDB_Postgres_Migration_Guide.1.24.html#
最后接的这个参数 SRCSCHEMANAME 对应的是 schema 在 oracle 中schema对应的就是用户名,因为oracle 一个用户只有一个schema
我这里写 -allTables 就是
SRCSCHEMANAME用户名下的所有表
还可以接 -allViews 所有视图
或者 -tables tablename1,tablename2
还有 -dataOnly 只同步数据(已经有表结构了)
执行命令
EDB会在pg库先建立一个跟源库同名的schema
然后把执行 psql的命令
SET search_path TO xxx, 原来默认的schema
这也是为什么不用用C##的用户,如果执行 SET search_path TO C##XXX 这样pg库会报错 ,
但是 SET search_path TO ‘C##XXX’ 就没事,可是EDB的参数加不上引号
然后执行INSTER 语句
最后等就是了。
最后额外补充一下其他知识
linux安装 psql PostgreSQL客户端
Ubuntu
sudo apt-get install postgresql postgresql-client
CentOS
yum
install
postgresql-client
安装了客户端就可以用psql命令了
客户端连接服务端
psql -d dbname -h postgreSQL_host_ip -p port -U username
更改默认的search_path (原来新建库的时候默认是public)
ALTER database mypgdb SET search_path TO myschema;
这就可以让迁移过来的数据直接使用,不用每次就修改search_path
EDB 离线迁移数据方法 (其实主要看官网文档比较好)
https://cloud.tencent.com/developer/news/356815
https://www.cnblogs.com/aegis1019/p/9021799.html
EDB在线迁移参考:
https://cloud.tencent.com/developer/news/356080
psql 命令学习
http://www.postgres.cn/docs/10/app-psql.html
http://www.postgres.cn/docs/10/reference-client.html