背景:
Oracle 授权费用高, 故转PostgreSQL , 找了一下解决方案, 连AI 都推荐用 ora2pg, 但是看起来环境搭建略显复杂, 并且只是一次性的工作, 比较适合使用 docker
步骤:
-
拉取镜像: georgmoser/ora2pg
-
准备编排文件 /data/ora2pg/docker-compose.yml
version: "3.9"
services:
ora2pg:
image: georgmoser/ora2pg:latest
container_name: ora2pg
restart: "no"
environment:
CONFIG_LOCATION: "/config/ora2pg.conf"
OUTPUT_LOCATION: "/data"
ORA_HOST: "dbi:Oracle:host=xxxxx;service_name=ORCLPDB1;port=1521"
ORA_USER: "user"
ORA_PWD: "pwd"
volumes:
- '/data/ora2pg/config:/config' # 挂载配置文件目录
- '/data/ora2pg/data:/data' # 挂载输出目录
command: >
ora2pg -c /config/ora2pg.conf -
准备配置文件 /data/ora2pg/config/ora2pg.conf
Oracle
ORACLE_DSN dbi:Oracle:host=172.16.xxx.xxx;service_name=ORCLPDB1;port=1521
ORACLE_USER USER
ORACLE_PWD PWDPostgres
PG_DSN dbi:Pg:dbname=IWMS;host=172.16.xxx.xxx;port=5432
PG_USER user
PG_PWD password
PG_VERSION 16Schema
SCHEMA db1
OUTPUT_DIR /data
导出控制
EXPORT_SCHEMA 1
EXPORT_DATA 1
DATA_EXPORT_MODE COPY -
docker compose up 启动完成后会自动退出, 如果想单独使用容器中的环境, 可以用这个命令启动后直接打开一个终端
docker compose run --rm ora2pg bash
然后在容器中执行命令, 例如:
ora2pg -c /config/ora2pg.conf > /data/db1.sql

更多 ora2pg 使用方法见: https://ora2pg.darold.net/documentation.html#Oracle-schema-to-export