oracle中文官网账号GreenplumqueryOracleviaDLINK

在系统日常生产过程中,如何从Oracle数据库同步一些配置表到GP库个问题。

先来说说之前使用的方式:

0. 使用第3方工具从Oracle导出纯文本格式,存放在本地;

1. 使用GP外部表加载入库

这种方式优点是对于需要同步大数据量的表的时候性能非常高;缺点是稍显麻烦,最主要的是非实时的,存在着任务调度周期和导出导入时间周期。

对此我的解决办法是简化整个过程并实时查询:

0. 使用GP WEB外部表技术直接查询Oracle数据表

由于是配置表,数据量一般都非常小,几k到几w条的记录采用这种方式几乎是瞬间的消耗。

首先是Oracle的源表:

[oracle@gtlions181 ~]$ sqlplus gtlions/gtlions

SQL*Plus: Release 10.2.0.5.0 – Production on Thu May 8 15:41:06 2014

Copyright (c) 1982, 2010, Oracle. All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from test;

ID NAME
———- —–
1 a
2 b

然后在GP中直接查询Oracle的表:
[gpadmin@gtlions181 ~]$ psql gtlions
psql (8.2.15)
Type "help" for help.
gtlions=# drop external table if exists sqlplus_test;
DROP EXTERNAL TABLE
gtlions=# create external web table sqlplus_test(id int,name varchar(5)) execute 'sqlplus -S gtlions/gtlions@gt10g <<EOF
gtlions'# set echo OFF;
gtlions'# set heading OFF;
gtlions'# set feedback off;
gtlions'# set linesize 32767;
gtlions'# set pagesize 0;
gtliooracle账号ns'# select id||'',''||name from test ;
gtlions'# exit;
gtlions'# EOF' on master format 'csv' (header);
NOTICE: HEADER means that each one of the data files has a header row.
CREATE EXTERNAL TABLE
gtlions=# select * from sqlplus_test;
id | name
—-+——
1 | a
2 | b
(2 rows)

so easy,Bingo!
-EOF

此条目发表在oracle metalink账号分类目录,贴了标签。将固定链接加入收藏夹。