从Oracle 10g到Postgres db的数据迁移

时间:2013-02-12 16:30:54

标签: oracle postgresql database-migration

我想将数据从Oracle 10g数据库迁移到Postgres db。 Oracle SQL开发人员具有数据迁移选项,但它似乎仅用于将非oracle db迁移到oracle。 请让我知道其他选择。

4 个答案:

答案 0 :(得分:2)

有一个用Perl编写的专用工具:Ora2Pg

大多数数据库都提供了从其他数据库导入但不导出到其他数据库的工具。

答案 1 :(得分:2)

我以前尝试过使用ORA2PG,但是它太复杂了,所以我找到了自己的方法来从sql开发人员迁移到postgres。

这是一步一步,如果您有任何疑问,请告诉我。

如何将数据从ORACLE数据库迁移到POSTGRES数据库!

迁移前要下载的工具:SQL Developer,WINSCP

SQL Developer

  • 步骤1:使用SQL Developer登录到Oracle服务器
  • 第2步:右键单击架构名称>导出>将格式更改为CSV,将编码更改为UTF-8。 (确保未选中“导出DDL”)(确保文件名以.csv结尾)
  • 第3步:单击“下一步”>“下一步”>“完成”(请等待直到导出完成)

从SQL DEVELOPER中导出文件后,

  • 右键单击csv文件,单击“打开方式”,然后使用“记事本”将其打开。 单击文件>另存为>将编码更改为UTF-8并保存。

打开WINSCP

  • 第1步:登录到服务器之前,请点击“编辑”>“高级”>启用“ UTF-8编码文件名”。
  • 第2步:登录到服务器
  • 第3步:单击设置>内部编辑器>将默认编码更改为UTF-8>单击确定
  • 第4步:在服务器上的任意位置创建一个新目录,并将文件拖到该目录中WINSCP

现在该文件应使用UTF-8编码保存在您的服务器上。

打开腻子

在使用Putty登录到服务器之前,单击Translation并将假定为其中字符集的接收数据更改为UTF-8,然后单击DATA并将Terminal-type字符串更改为Putty然后登录到服务器。

使用Putty登录到服务器后,运行命令:

区域设置charmap

此命令将为您显示服务器的默认编码。

在以下时间运行该命令

 grep -Rw '/home/pgadmin/data1/1234.csv' -e 'fre' 
  • data1 =在服务器上创建的目录
  • 1234.csv = data1目录中的CSV文件

此命令将向您显示文档中的法语单词是否仍然丢失。 该命令中的“ /home/pgadmin/data1/1234.csv”是文件在服务器上的位置,“ 1234.csv”是CSV文件的名称。 如果运行该命令后一切正常,现在我们可以将其放在Postgres数据库中。

使用命令“ psql”进入postgres数据库后

  • 第1步:确保已创建自己的数据库,架构和表(如果您不知道如何操作,请向下滚动至文档末尾)。
  • 第2步:创建自己的数据库,架构和表后,我们可以运行copy命令。
\Copy joe.data01 FROM ‘home/pgadmin/data1/1234.csv’  DELIMITER ‘,’ CSV HEADER encoding ‘UTF-8’  ;

如果该文件在csv文件中已经具有列名,则在命令中添加“ HEADER”。 joe.data01 =创建的表的名称 home / pgadmin / data1 / 1234.csv =文件在服务器上的位置

要查看是否复制了架构,只需运行命令select * from joe.data01;

要查看法语单词是否未丢失,请运行命令select * from joe.data01 where isa = ‘fre’ ;

  • 如何在Postgres上创建数据库:CREATE DATABASE name_of_database ;
  • 如何在Postgres上创建架构:CREATE SCHEMA name_of_schema;
  • 如何在Postgres上创建表:create table joe.data01 (ccca CHAR(50) NOT NULL, isa CHAR(70) NOT NULL, co CHAR(150) NOT NULL) ;

答案 2 :(得分:1)

我们最终使用在https://github.com/MIT-LCP/oracle-to-postgres中概述的方法将一个相当大的数据库(约100个架构,包含> 1000个表)从Oracle迁移到Postgres。

您可以使用pip install oracle2postgres安装该软件包。更多信息请访问:https://pypi.org/project/oracle2postgres/

Jupyter笔记本展示了这种方法:https://github.com/MIT-LCP/oracle2postgres/blob/master/migration.ipynb

我们的一般方法是镜像源数据库;必要时转换数据类型;创建目标数据库;以块的形式复制数据。这是一个轻微的hacky解决方案,但它对我们很有用。

# import the package
import oracle2postgres

# create the logfile
oracle2postgres.create_logfile()

# get source database settings
source_config = oracle2postgres.get_source_config()

# get target database settings
target_config = oracle2postgres.get_target_config()

# get settings for migration
migration_config = oracle2postgres.get_migration_config()

# check the schema exist on the source database
source_engine = oracle2postgres.connect_to_source(source_config)
oracle2postgres.check_schema_exist(source_engine,source_config['schema_list'])

# check for null characters in strings in the source database
# if found, they can be removed as explained in the documentation
oracle2postgres.check_for_nulls(source_engine,source_config['schema_list'])

# create a new database on the target database
target_engine = oracle2postgres.connect_to_target(target_config)
oracle2postgres.create_database(target_config['database'],target_engine)

# create schema on the target database
target_engine = oracle2postgres.connect_to_target(target_config,target_config['database'])
oracle2postgres.create_target_schema(source_config['schema_list'],source_engine,target_engine)

# run the migration
oracle2postgres.migrate(source_config,target_config,migration_config)

如果您在重复使用代码时遇到问题,请随时提出问题,我们会尽力提供帮助。

答案 3 :(得分:0)

  • 展开表格部分,
  • 然后选择要导出的表格
  • 右键单击,选择导出,
  • 然后选择格式和导出(最好是插入语句或csv)