使用ORACLE GATEWAY 与Greenplum HAWQ 1.0 互通

现场环境:Oracle 11g 64bit linux edition

Greenplum Pivotal HD HAWQ 1.0

操作系统 RHEL 6.3 x86_64

为了实现在Oracle中直接访问HAWQ中的数据,需要首先安装Oracle Gateway 11g x86_64 linux edition

 

需要安装的软件:Oracle Gateway 11g x86_64 linux edition

DATADIRECT_CONNECT64_ODBC_7.0.1for Greenplum (必须是7版本的,6的不行,rhel6带的unixodbc也不行)

 

( 后记,Oracle 11g database server 中貌似也带了hs的功能,直接使用database server 当gateway应也可,不用再单独安装gateway)

安装路径: Oracle Gateway:/home/oracle/product/11.2.0/tg_1

Datadirect ODBC :/home/oracle/ddodbc

Oracle database :/home/oracle/app/oracle/product/11.2.0/dbhome_1

 

配置:

修改/home/oracle/product/11.2.0/tg_1/hs/admin/initdg4odbc.ora

# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
#
# HS init parameters
#
HS_FDS_CONNECT_INFO = Greenplum
#HS_FDS_TRACE_LEVEL = 0
HS_FDS_TRACE_LEVEL= ODBC
HS_FDS_TRACE_FILE_NAME = /home/oracle/odbc_trace.log
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
HS_FDS_SUPPORT_STATISTICS = FALSE
#HS_LANGUAGE=AMERICAN_AMERICA.WE8ISO8859P1
HS_LANGUAGE = AMERICAN_AMERICA.UTF8
HS_FDS_TIMESTAMP_MAPPING = “TIMESTAMP(6)”
HS_FDS_FETCH_ROWS=1
#HS_FDS_SQLLEN_INTERPRETATION=32
HS_KEEP_REMOTE_COLUMN_SIZE=LOCAL
HS_NLS_NCHAR = UCS2
#
# ODBC specific environment variables
#
set ODBCINI=/etc/odbc.ini
set ODBCINST=/etc/odbcinst.ini

修改/home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

备注,此处直接使用database的listener。未使用gateway的listener ,在文件后追加:

SID_LIST_LISTENER =
        (SID_LIST =
                (SID_DESC =
                        (SID_NAME = dg4odbc)
                        (ORACLE_HOME =/home/oracle/product/11.2.0/tg_1 )
                        (ENV=”LD_LIBRARY_PATH=/usr/local/lib:/home/oracle/product/11.2.0/tg_1/lib:/home/oracle/ddodbc/lib”)
                        (PROGRAM = dg4odbc)
                )
        )
)
修改/home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
增加:
dg4odbc  =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
    (CONNECT_DATA=(SID=dg4odbc))
    (HS=OK)
  )
修改/etc/odbc.ini
[oracle@server3 admin]$ cat /etc/odbc.ini
[ODBC Data Sources]
Greenplum=Greenplum
[ODBC Data Sources]
Greenplum Wire Protocol=DataDirect 7.0 Greenplum Wire Protocol
[ODBC]
IANAAppCodePage=4
InstallDir=/home/oracle/ddodbc
Trace=0
TraceFile=odbctrace.out
TraceDll=/home/oracle/ddodbc/lib/ddtrc26.so
[Greenplum]
Driver=/home/oracle/ddodbc/lib/ddgplm26.so
Description=DataDirect 7.0 Greenplum Wire Protocol
AlternateServers=
ApplicationUsingThreads=1
ConnectionReset=0
ConnectionRetryCount=0
ConnectionRetryDelay=3
Database=haier
DefaultLongDataBuffLen=2048
EnableDescribeParam=0
EnableKeysetCursors=0
EncryptionMethod=0
ExtendedColumnMetadata=0
FailoverGranularity=0
FailoverMode=0
FailoverPreconnect=0
FetchTSWTZasTimestamp=0
FetchTWFSasTime=0
HostName=server3
InitializationString=
KeyPassword=
KeysetCursorOptions=0
KeyStore=
KeyStorePassword=
LoadBalanceTimeout=0
LoadBalancing=0
LoginTimeout=15
LogonID=
MaxPoolSize=100
MinPoolSize=0
Password=
Pooling=0
PortNumber=54321
QueryTimeout=0
ReportCodepageConversionErrors=0
TransactionErrorBehavior=1
XMLDescribeType=-10
Charset=utf8
[ODBC]
TraceFile=/tmp/sql.log
Trace=1

 

 

修改/etc/odbcinst.ini

[ODBC Drivers]
DataDirect 7.0 Greenplum Wire Protocol=Installed
[ODBC Translators]
OEM to ANSI=Installed
[Administrator]
HelpRootDirectory=/home/oracle/ddodbc/adminhelp
[ODBC]
#This section must contain values for DSN-less connections
#if no odbc.ini file exists. If an odbc.ini file exists,
#the values from that [ODBC] section are used.
[DataDirect 7.0 Greenplum Wire Protocol]
Driver=/home/oracle/ddodbc/lib/ddgplm26.so
Setup=/home/oracle/ddodbc/lib/ddgplm26.so
APILevel=0
ConnectFunctions=YYY
DriverODBCVer=3.52
FileUsage=0
HelpRootDirectory=/home/oracle/ddodbc/help
SQLLevel=0

 

重启listener

lsnrctl status 中应有一下内容:

Listening Endpoints Summary…
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=server3)(PORT=1521)))
Services Summary…
Service “dg4odbc” has 1 instance(s).
  Instance “dg4odbc”, status UNKNOWN, has 1 handler(s) for this service…
而后在数据库中创建dblink,注意用户名和密码需要使用双引号

create database link DBLINK
connect to “gpadmin” identified by “gpadmin”
using ‘dg4odbc’;

执行sql语句即可返回成功(注意HAWQ中的表名和字段名需要使用双引号,用小写表示):

select count(*) from “poc1″@dblink;

 

心情不在

上完编译课终于想到该改变一下了。这学期真的好没状态,我还能实现自己的目标?
  我想我还是不适合读书,就象他们说的那样我在学校里太久了.太适应这里的环境.这学期虽然不会比以前更不用功,但是拉下东西太多.数学始终是我的恶梦,编译和unix也拉下不少,眼看就五一了,还有软考呢.全都没准备…
是我惰性太强,太笨,记性不好才会有今天的局面?不,我想都是借口.年底就找工作了.我不想一事无成.
啥也不说.看成效

数据库设计课程.

     Day Day Up!小懒虫也开始锻炼了噢,呵..虽然很偷懒,虽然很怕累,但谁说不会有效果?
我也要向健康一族迈进啦,最近老觉得自己长胖了,肚子好多肉噢,前两天多做了几个仰卧起坐
,累得我肚子疼得不行,起床都要侧身起来,闷,不过哑铃还是有点用噢.手比以前有力气多呢.
恩..坚持住噢..
    今天总算把数据库设计的作业做的差不多了,总体框架也完成了,基本功能已经可用,
java太累了.早知道用PB做了,用JBuilder 做还算好,这次做比上次有经验,尽量面向对象,代码
重用做的也比较好,又积累了一些经验,呵.又开始吹自己?

oracle 9i sql*plus worksheet乱码问题

今天使用worksheet做个查询,输出内容令我大跌眼睛,中文都不能正常显示,而且乱码就乱码嘛。
竟然还显示一个脏字,
查询sql*plus语言设置select userenv(‘language’) from dual;
AMERICAN_AMERICA.ZHS16GBK
没有问题。
上网查询。。。原来
对于Oracle Enterprise Manager中的所有工具,有一个配置文件名为dbappscfg.properties,修改该文件即可解决上述问题。这个文件的位置在$ ORACLE_HOME\sysman\config目录下,用任何的文本编辑器打开该文件,在这个文件里面,找到这样一项,# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 去掉注释符#,同时将其修改为SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。对于Windows操作系统,还需要修改一项,在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在D盘的 Winnt下,则将其修改为 SQLPLUS_SYSTEMROOT=d:\\WINNT。对于后面一项的修改只对Windows操作系统进行,对UNIX操作系统则不需要。如果在 Windows操作系统中不修改该项,在Oracle Enterprise Manager中,连接系统时,会提示如下的错误:ORA-12560 TNS:protocol adapter error 或者 ORA-12545 Connect failed because target host or object does not exist
   修改完成后,保存文件,退出编辑。重新连接SQL PLUS Worksheet,字符集乱码问题得到解决,显示正确的简体中文字符集。