Ora2Pg 配置与使用

原文地址:http://ora2pg.darold.net/documentation.html

Ora2Pg 的配置非常简单,最简单的情况下,只需要设置要导出 Oracle 数据库和导出类型,分分钟即可完成。

本文档还包含以下内容:

  • 选择导出指定表和/或字段。
  • 导出时重命名表和/或字段。
  • 选择导出指定的数据,可以为每个表添加一个 WHERE 过滤条件。
  • 在数据加载过程中,延迟数据库约束验证。
  • 对导出数据进行压缩,节省磁盘占用。
  • 更多其他选项。

数据库迁移的所有控制选项使用一个名为 ora2pg.conf 的文件进行配置。该文件中的每个配置项占用一行,由一个大写的配置名称加上空格以及一个值组成。以 # 开始的行表示注释。

配置选项没有顺序之分,选项的值在读取配置文件时进行设置。

对于只能设置一个值的配置选项,允许在配置文件中多次出现,但是只有最后一个配置值会生效。对于可以指定多个值的配置选项, 如果出现了多个配置,相应的值都会生效。如果使用 IMPORT 指令加载其他配置文件,文件中的内容将会添加到 IMPORT 指令所在的位置,所以最好在配置文件的最后导入其他文件。

通过命令行选项指定的值将会覆盖配置文件中的相应值。

使用 Ora2Pg

默认情况下,Ora2Pg 将会查找配置文件 /etc/ora2pg/ora2pg.conf;如果存在该文件,只需要执行以下命令:

/usr/local/bin/ora2pg

对于 Windows™ 系统,可以运行 perl 程序 bin 目录下的 ora2pg.bat 文件。Windows™ 用户可以在 C:\ora2pg 目录中找到一个配置模板文件。

如果想要使用其他的配置文件,只需要在命令行中指定即可:

/usr/local/bin/ora2pg -c /etc/ora2pg/new_ora2pg.conf

以下是使用 ora2pg 时允许指定的所有命令行参数:

Usage: ora2pg [-dhpqv --estimate_cost --dump_as_html] [--option value]

-a | --allow str  : 指定允许导出的对象列表,使用逗号分隔。也可以与 SHOW_COLUMN 选项一起使用。
-b | --basedir dir: 设置默认的导出目录,用于存储导出结果。
-c | --conf file  : 设置非默认的配置文件,默认配置文件为 /etc/ora2pg/ora2pg.conf。
-d | --debug      : 使用调试模式,输出更多详细信息。
-D | --data_type STR : 通过命令行设置数据类型转换。
-e | --exclude str: 指定导出时排除的对象列表,使用逗号分隔。也可以与 SHOW_COLUMN 选项一起使用。
-h | --help       : 显示帮助信息。
-g | --grant_object type : 导出指定类型的对象上的授权信息,取值参见 GRANT_OBJECT 配置项。
-i | --input file : 指定要导入的 Oracle PL/SQL 代码文件,导入文件时不需要连接到 Oracle 数据库。
-j | --jobs num   : 设置用于发送数据到 PostgreSQL 的并发进程数量。
-J | --copies num : 设置用于从 Oracle 导出数据的并发连接数量。
-l | --log file   : 设置日志文件,默认为 stdout。
-L | --limit num  : 导出数据时,每次写入磁盘之前在内存中缓冲的记录数量,默认值为 10000。
-m | --mysql      : 导出 MySQL 数据库。
-n | --namespace schema : 设置需要导出的 Oracle 模式。
-N | --pg_schema schema : 设置 PostgreSQL 中的搜索路径 search_path。
-o | --out file   : 设置导出的 SQL 文件的存储路径。默认值为当前目录下的 output.sql 文件。
-p | --plsql      : 启用 PLSQL 代码到 PLPGSQL 代码的转换。
-P | --parallel num: 同时导出多个表,设置并发数量。
-q | --quiet      : 不显示进度条。
-s | --source DSN : 设置 Oracle DBI 数据源。
-t | --type export: 设置导出类型。该参数将会覆盖配置文件中的导出类型(TYPE)。
-T | --temp_dir DIR: 为多个同时运行的 ora2pg 脚本指定不同的临时存储目录。
-u | --user name  : 设置连接 Oracle 数据库连接的用户名。也可以使用 ORA2PG_USER 环境变量。
-v | --version    : 显示 Ora2Pg 版本信息并退出。
-w | --password pwd : 设置连接 Oracle 数据库的用户密码。也可以使用 ORA2PG_PASSWD 环境变量。
--forceowner      : 导入数据时,强制 ora2pg 将导入 PostgreSQL 的表和序列的拥有者设置为连接 Oracle 数据库时的用户。如果设置为指定的用户名,所有导入的对象属于该用户。默认情况下,对象的拥有者为连接 Pg 数据库的用户。
--nls_lang code: 设置 Oracle 客户端的 NLS_LANG 编码。
--client_encoding code: 设置 PostgreSQL 客户端编码。
--view_as_table str: 将视图导出为表,多个视图使用逗号分隔。
--estimate_cost   : 在 SHOW_REPORT 结果中输出迁移成本评估信息。
--cost_unit_value minutes: 成本评估单位,使用分钟数表示。默认值为 5 分钟,表示一个 PostgreSQL 专家迁移所需的时间。如果是第一次迁移,可以设置为 10 分钟。
   --dump_as_html     : 生成 HTML 格式的迁移报告,只能与 SHOW_REPORT 选项一起使用。默认的报告是一个简单的文本文件。
   --dump_as_csv      : 与上个参数相同,但是生成 CSV 格式的报告。
   --dump_as_sheet    : 生成迁移评估时,为每个数据库生成一行 CSV 记录。
   --init_project NAME: 创建一个ora2pg 项目目录结构。项目的顶级目录位于根目录之下。
   --project_base DIR : 定义ora2pg 项目的根目录,默认为当前目录。
   --print_header     : 与 --dump_as_sheet 一起使用,输出 CSV 标题信息。
   --human_days_limit num : 设置迁移评估级别从 B 升到 C 所需的人工日数量。默认值为 5 人工日。
   --audit_user LIST  : 设置查询 DBA_AUDIT_TRAIL 表时需要过滤的用户名,多个用户使用逗号分隔。该参数只能用于 SHOW_REPORT 和 QUERY 导出类型。
   --pg_dsn DSN       : 设置在线导入时的 PostgreSQL 数据源。
   --pg_user name     : 设置连接 PostgreSQL 的用户名。
   --pg_pwd password  : 设置连接 PostgreSQL 的用户密码。
   --count_rows       : 在 TEST 方式下执行真实的数据行数统计。
   --no_header        : 在导出文件中不添加 Ora2Pg 头部信息。
   --oracle_speed     : 用于测试 Oracle 发送数据的速度。不会真的处理或者写入数据。
   --ora2pg_speed     : 用于测试 Ora2Pg 发送转换后的数据的速度。不会写入任何数据。

参考 http://ora2pg.darold.net/ 上的完整文档或者使用’man ora2pg’ 查看帮助文档。

如果执行成功,ora2pg 返回 0;如果出现错误,返回 1 。如果某个子进程被中断,并且用户收到了警告信息:“WARNING: an error occurs during data export. Please check what’s happen.”,ora2pg 将会返回 2 。大多数情况下是内存溢出(OOM)的问题,可以先尝试减小 DATA_LIMIT 参数的值。

对于开发者而言,可以在 ora2pg Perl 脚本中添加自定义的选项;因为 ora2pg.conf 文件中的所有配置选项都会以小写形式传递给新建的 Ora2Pg 对象实例。参考 ora2pg 代码以添加自定义的选项。

注意,更新 Oracle 数据库的统计信息可能会提高数据迁移的性能:

BEGIN
  DBMS_STATS.GATHER_SCHEMA_STATS
  DBMS_STATS.GATHER_DATABASE_STATS 
  DBMS_STATS.GATHER_DICTIONARY_STATS
END;

生成迁移模板

使用选项 --project_base 和 --init_project 可以创建一个导出 Oracle 数据库的项目模板,包含各种目录结构,一个配置文件,以及一个用于导出所有对象的脚本。以下是一个使用示例:

ora2pg --project_base /app/migration/ --init_project test_project
Creating project test_project.
/app/migration/test_project/
        schema/
                dblinks/
                directories/
                functions/
                grants/
                mviews/
                packages/
                partitions/
                procedures/
                sequences/
                synonyms/
                tables/
                tablespaces/
                triggers/
                types/
                views/
        sources/
                functions/
                mviews/
                packages/
                partitions/
                procedures/
                triggers/
                types/
                views/
        data/
        config/
        reports/
 
Generating generic configuration file
Creating script export_schema.sh to automate all exports.
Creating script import_all.sh to automate all imports.

示例生成了一个通用的配置文件,只需要在其中指定 Oracle 数据库连接信息;同时还生成了一个脚本文件 export_schema.sh。目录 sources/ 用于存储 Oracle 源代码,schema/ 用于存储导入 PostgreSQL 的代码。目录 reports/ 用于存储迁移成本评估生成的 html 报告。

如果想要使得自定义的默认配置文件,使用 -c 选项指定该文件的路径。Rename it with .dist suffix if you want ora2pg to apply the generic configuration values otherwise,the configuration file will be copied untouched.

配置好 Oracle 数据库连接之后,可以执行 export_schema.sh 脚本从导出各种对象类型,将输出的 DDL 文件写入 schema/ 下的子目录中。在导出完成之后,脚本将会给出用于导出数据的命令;可以在完成并验证模式对象导入之后导出相应的数据。

可以通过手动导入生成的 DDL 文件,也可以使用另一个脚本 import_all.sh 执行交互式导入。

Oracle 数据库连接配置

以下 5 个配置选项可以用于设置 Oracle 数据库连接。

ORACLE_HOME
用于设置环境变量 ORACLE_HOME, DBD::Oracle 模块使用该变量查找 Oracle 共享库。

ORACLE_DSN
设置标准 DBI DSN 格式的数据源名称。例如:

dbi:Oracle:host=oradb_host.myhost.com;sid=DB_SID;port=1521

或者:

dbi:Oracle:DB_SID

对于第二种方式,需要在 $ORACLE_HOME/network/admin/tnsnames.ora 文件或者环境变量 TNS_ADMIN 指定目录下的 tnsnames.ora 文件中定义 SID。

对于 MySQL,DSN 的定义如下:

dbi:mysql:host=192.168.1.10;database=sakila;port=3306

其中的 ‘sid’ 换成了 ‘database’。

ORACLE_USERORACLE_PWD
这两个选项用于指定连接 Oracle 数据库的用户名和密码。需要注意的是,如果可以的话最好使用 Oracle 超级管理员身份进行连接,避免数据库扫描时的访问权限问题,确保不会漏掉任何内容。

USER_GRANTS
如果使用普通用户连接 Oracle 数据库,并且该用户没有访问 DBA_… 表的权限,将该参数设置为 1。脚本将会使用 ALL_… 表。

警告:如果使用 GRANT 导出类型,必须将该选项设置为 0,否决脚本无法导出。

TRANSACTION
该选项用于修改数据导出事务的默认隔离级别。现在默认的设置是序列化事务隔离级别,用于保证导出数据的一致性。以下是一些支持的设置:

readonly: 'SET TRANSACTION READ ONLY',readwrite: 'SET TRANSACTION READ WRITE',serializable: 'SET TRANSACTION ISOLATION LEVEL SERIALIZABLE'
committed: 'SET TRANSACTION ISOLATION LEVEL READ COMMITTED',

6.2 版本之前的默认隔离级别为 READ ONLY,但是这种设置在某些情况下会破坏数据一致性,因此现在的默认设置为SERIALIZABLE。

INPUT_FILE
该参数不是用于设置 Oracle 数据库连接,它指定了一个输入文件,并且禁用了 Oracle 数据库连接。将该参数设置为一个包含了 Oracle PL/SQL 代码(例如函数、过程或者包)的文件,可以阻止 Ora2Pg 连接 Oracle 数据库,而是从该文件 and just apply his conversion tool to the content of the file. 该选项可以用于大部分的导出类型:TABLE、TRIGGER、PROCEDURE、VIEW、FUNCTION 或者 PACKAGE等。

ORA_INITIAL_COMMAND
该选项用于建立 Oracle 数据库连接后,执行一个初始化命令。例如在读取对象信息之前关闭访问限制策略,或者设置某些会话参数。该选项支持多次设置。

Oracle 数据加密传输

如果 Oracle 客户端配置了加密连接,DBD:Oracle 也会使用该加密方式进行连接和数据传输。例如,将以下内容添加到 Oracle 客户端配置文件(sqlnet.or 或 .sqlnet):

# Configure encryption of connections to Oracle
SQLNET.ENCRYPTION_CLIENT = required
SQLNET.ENCRYPTION_TYPES_CLIENT = (AES256,RC4_256)
SQLNET.CRYPTO_SEED = 'should be 10-70 random characters'

如果设置了上述加密传输,任何使用 Oracle 客户端连接到数据库的工具都会使用这种加密方式。

例如,Perl 的 DBI 模块通过DBD-Oracle 连接 Oracle 数据库,后者使用 Oracle 客户端连接数据库。如果 Oracle 客户端配置了加密连接,Perl 同样使用加密的方式连接 Oracle 数据库。

连接测试

设置好 Oracle 数据库的 DSN 之后,可以执行以下命令测试数据库的连接:

ora2pg -t SHOW_VERSION -c config/ora2pg.conf

以上命令将会显示 Oracle 数据库的版本。

故障解决

如果 output.sql 文件中只导出了关于 Pg 事务的头部和尾部信息,可能的原因有两个。ora2pg 脚本输出了一个 ORA-XXX 错误,意味着 DSN 或者用户名/密码错误,检查相关设置后再次运行脚本。脚本没有任何出错信息,但是输出文件为空:用户缺少访问数据库对象的权限。尝试使用超级用户连接 Oracle,或者检查 USER_GRANTS 选项,以及后文中的 SCHEMA 选项。

LOGFILE
默认情况下,所有的消息都会发送到标准输出。如果为该选项指定一个文件路径,所有的输出信息将会追加到该文件中。

未完,待续。。。

人生本来短暂,你又何必匆匆!点个赞再走吧!

原文地址:https://tonydong.blog.csdn.net

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读773次,点赞6次,收藏9次。【代码】c# json字符串转Oracle的insert into的小程序。
文章浏览阅读8.7k次,点赞2次,收藏17次。此现象一般定位到远端的监听服务来找问题,在远端查看监听服务状态(具体看下面的解决方案会详细呈现),服务是否开启,另外查看监听端点概要是否存在host未指向到计算名的,如无直接进入监听配置文件listener.ora内添加指向即可。2、查看监听服务状态 lsnrctl status,右边为远端端点状态,未添加host指向到计算名;1、本地及远端安装好Oracle并配置好连接,Oracle服务和监听已启动;1、远程Oracle数据库:Oracle11g R2。或者进入下述服务手动重启。,再进行远程连接即可。_ora-12541:tns:无监听程序
文章浏览阅读2.8k次。mysql脚本转化为oracle脚本_mysql建表语句转oracle
文章浏览阅读2.2k次。cx_Oracle报错:cx_Oracle DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library_cx_oracle.databaseerror: dpi-1047: cannot locate a 64-bit oracle client libr
文章浏览阅读1.1k次,点赞38次,收藏35次。本文深入探讨了Oracle数据库的核心要素,包括体系结构、存储结构以及各类参数。通过解析Oracle数据库的体系结构,读者可以深入了解其内部组成和工作原理。存储结构部分介绍了数据在Oracle中的存储方式,从表空间到数据文件的层层逻辑。最后,我们深入探讨了Oracle数据库中各类参数的作用和配置方法,帮助读者更好地理解和优化数据库性能。本文旨在帮助读者全面理解Oracle数据库的运作机制,为其在实践中的应用提供基础和指导。
文章浏览阅读1.5k次。默认自动收集统计信息的时间为晚上10点(周一到周五,4个小时),早上6点(周六,周日,20个小时)由于平时默认每天只收集4小时,时间有点短了,改成每天可收集8小时。oracle 18c中默认是打开的。查看当前自动收集统计信息的时间。_oracle自动收集统计信息
文章浏览阅读929次,点赞18次,收藏20次。只有assm(Automatic Shared Memory Management)模式可以使用大页,需要关闭amm(Memory Manager Process)HugePages_Free: 306 (空闲306页,已使用306-306=0页)防止oracle使用的内存交换,所以设置的大小与oracle配置的sga、pga相关。HugePages_Rsvd: 0 (操作系统承诺给oracle预留的页数)HugePages_Total: 306 (总共306页)_oracle11g 大页
文章浏览阅读801次。例如:10046:0,1,4,8,12。默认redo日志有三个,大小为50M,循环覆盖使用。redo log再覆盖之前,会被归档,形成归档日志。答:不同事件,不同级别。trace的不同级别?_oracle 日志
文章浏览阅读4.2k次,点赞84次,收藏77次。主要讲解MySQL中SQL的DDL语句,其中包括对数据库和表的一系列操作。_sql ddl 新增字段 mysql
文章浏览阅读1.1k次。ON DEMAND:仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性;ON COMMIT:一旦基表有了COMMIT,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。Method =>'C',物化视图有三种刷新方式:COMPLETE、FAST和FORCE。物化视图会占用空间,一半可用于大量数据查询时,减缓主表的查询压力使用。例如创建一个物化视图,让对接单位查询。_oracle物化视图定时刷新
文章浏览阅读713次,点赞21次,收藏18次。1.背景介绍在当今的大数据时代,数据量越来越大,传统的关系型数据库已经无法满足业务需求。因此,NoSQL数据库技术迅速崛起,成为企业和开发者的首选。Oracle NoSQL Database是Oracle公司推出的一款分布式NoSQL数据库产品,具有高性能、高可用性和易于扩展等特点。在本文中,我们将深入了解Oracle NoSQL Database的集成与开发者工具,帮助您更好地掌握这款产品的...
文章浏览阅读2.5k次,点赞2次,收藏4次。今天遇见一个问题需要将字段中包含中文字符串的筛选出来。_oracle查询包含中文字符
文章浏览阅读802次。arcmap 在oracle删除表重新创建提示表名存在解决放啊
文章浏览阅读4.3k次,点赞2次,收藏4次。Oracle连接数据库提示 ORA-12638:身份证明检索失败_ora-12638
文章浏览阅读3.4k次,点赞6次,收藏25次。etc/profile是一个全局配置文件,所有用户登录都会使用该文件构建用户环境。与windows配置环境变量是一个道理。选择Linux系统,找到适合自己系统的安装包,我的是CentOS 8 x64。接下来需要登陆Oracle账户才能下载,无账户的可以自己注册一个。Linux中export 命令用于设置或显示环境变量。模式,利用上下键到文档最后,添加以下代码。出现如图所示版本号字样,则说明安装成功。点击下载,勾选1,点击2。记住完整路径用于后面配置。找到Java并点击进去。往下翻,找到Java8。_linux安装jdk1.8
文章浏览阅读2.4w次,点赞26次,收藏109次。JDK 是的简称,也就是 Java 开发工具包。JDK 是整个 Java 的核心,其中JDK包含了 Java 运行环境(Java Runtime Envirnment,简称 JRE),Java 工具(比如 javac、java、javap 等等),以及 Java 基础类库(比如 rt.jar)。最主流的 JDK 是Oracle公司发布的 JDK,除了 Oracle JDK(商业化,更稳定)之外,还有很多公司和组织开发了属于自己的 JDK,比较有名的有IBM JDK(更适合 IBM) 和OpenJDK。_jdk安装教程
文章浏览阅读7.5w次。出现 “java.sql.SQLNonTransientConnectionException:Could not create connection to database server” 的错误通常是由于无法连接到数据库服务器引起的。_java.sql.sqlnontransientconnectionexception: could not create connection to
文章浏览阅读849次,点赞7次,收藏10次。在ClickHouse中创建用户、数据库并进行权限分配是一个重要的管理任务,它涉及到安全性和访问控制。下面是一个基本的指南来帮助你完成这些操作:1. 创建数据库首先,需要创建一个数据库。使用以下命令:CREATE DATABASE IF NOT EXISTS your_database_name;将 your_database_name 替换为你想要的数据库名。2. 创建用户接下来,创建一个新用户。使用以下命令:CREATE USER your_username IDENTIFIED WIT_在clickhouse中如何创建用户 赋权
文章浏览阅读1.2k次,点赞53次,收藏39次。本文是一篇关于Oracle数据库安装和使用的博文摘要。作者以轻松幽默的笔调介绍了自己在实验中掌握的Oracle数据库基本操作,包括使用组件查看命令、配置数据库监听器等。作者也分享了在实验中遇到的一些有趣问题,如SQL语句缺少分号导致的意外错误。此外,作者还强调了登录sys用户和启动实例加载数据库的注意事项,并鼓励读者面对挑战时保持乐观,不断提升自己的能力。整体风格风趣严谨,引人入胜。
文章浏览阅读820次,点赞17次,收藏16次。KingbaseES、xml、dbms_xmlgen、SETSKIPROWS、人大金仓、KingbaseES兼容Oracle包dbms_xmlgen的功能是通过SQL查询将关系表中数据转化为XML文档。转化方式一共有两种:(1)通过查询字符串直接转化。(2)通过上下文句柄转化。对于通过查询字符串直接转化的方式,无法跳过若干行进行查询,只能直接将表格中的所有数据转化为XML文档。