主页 > 知识库 > 数据库 > Oracle >

Oracle通过DBLINK访问GreenPlum

来源:中国IT实验室 作者:佚名 发表于:2013-05-15 14:50  点击:
Oracle通过DBLINK访问GreenPlum 为多个数据库之间的整合和迁移做POC,尝试使用Oracle Gateway和Heterogeneous Service来中转访问,测试过好多次,最终发现只有在32位的Oracle当中才能成功配置。 配置环境如下: Windows 2003 32bit 或 Windows 2008 64bit Or
 Oracle通过DBLINK访问GreenPlum  为多个数据库之间的整合和迁移做POC,尝试使用Oracle Gateway和Heterogeneous Service来中转访问,测试过好多次,最终发现只有在32位的Oracle当中才能成功配置。
  配置环境如下:
  Windows 2003 32bit 或 Windows 2008 64bit
  Oracle10G 32bit 或 Oracle11G 32bit
  Source and Target:Oracle 或 MySQL 或 PostgreSQL 或 GreenPlum ......
  我的配置方式是使用一台独立终端来作为类似跳转的机器,实际的source db和target db均在其他的主机上,这样至少3台涉及到的主机。
  Linux也是可以的,但是现在没实际用到,唯一需要注意的unixODBC版本的问题,因此这里主要描述在Windows2008 DC Server当中访问GreenPlum的配置过程。
  0. 安装Oracle Database
  注意是含了一个实例,略。
  1. 安装psqlodbc驱动
  略。
  2. 配置ODBC for GreenPlum
  注意选择ANSI,使用UNICODE会对char等字符类型的字段无法查询和显示,略。
  3. 配置hs sid
  hs\admin\initgp.ora:
  HS_FDS_CONNECT_INFO = gp
  HS_FDS_TRACE_LEVEL = debug
  4. 配置hs listener
  listener.ora:
  (SID_DESC =
  (PROGRAM = dg4odbc)# hsodbc for 10g
  (ORACLE_HOME = C:\oracle\product\11.2.0\dbhome_1)
  (SID_NAME = gp)
  #(ENVS= "LD_LIBRARY_PATH = /usr/lib:/u01/app/oracle/product/10.2.0/db_1/lib") # for linux
  )
  5. 配置tns
  tnsnames.ora:
  gp =
  (DESCRIPTION=
  (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
  (CONNECT_DATA=(SID=gp))
  (HS=OK)
  )
  6. 遇到的问题:
  6.0. ORA-01017: 用户名/口令无效; 登录被拒绝
  SQL> CREATE PUBLIC DATABASE LINK postgresql CONNECT TO dba IDENTIFIED BY "isdba"
  USING 'gp';
  数据库链接已创建。
  SQL> select * from "a1"@postgresql;
  select * from "a1"@postgresql
  *
  第 1 行出现错误:
  ORA-01017: 用户名/口令无效; 登录被拒绝
  FATAL: no pg_hba.conf entry for host "10.46.182.233", user "DBA", database
  "loglapdb", SSL off {28000,NativeErr = 210}
  ORA-02063: 紧接着 2 lines (起自 POSTGRESQL)
  这个错误看起来好像非常简单,就是密码错误,问题是已经确认密码无误且可以使用psql登陆,死活不理解什么原因,去查看网关日志如下:
  Exiting hgoinit, rc=0 at 2013/05/10-13:31:36
  Entered hgolgon at 2013/05/10-13:31:36
  reco:0, name:DBA, tflag:0
  Entered hgosuec at 2013/05/10-13:31:36
  Exiting hgosuec, rc=0 at 2013/05/10-13:31:36
  HOSGIP for "HS_FDS_RECOVERY_ACCOUNT" returned "RECOVER"
  HOSGIP for "HS_FDS_TRANSACTION_LOG" returned "HS_TRANSACTION_LOG"
  HOSGIP for "HS_FDS_TIMESTAMP_MAPPING" returned "DATE"
  HOSGIP for "HS_FDS_DATE_MAPPING" returned "DATE"
  HOSGIP for "HS_FDS_CHARACTER_SEMANTICS" returned "FALSE"
  HOSGIP for "HS_FDS_MAP_NCHAR" returned "TRUE"
  HOSGIP for "HS_FDS_RESULTSET_SUPPORT" returned "FALSE"
  HOSGIP for "HS_FDS_RSET_RETURN_ROWCOUNT" returned "FALSE"
  HOSGIP for "HS_FDS_PROC_IS_FUNC" returned "FALSE"
  HOSGIP for "HS_FDS_REPORT_REAL_AS_DOUBLE" returned "FALSE"
  using DBA as default value for "HS_FDS_DEFAULT_OWNER"
  HOSGIP for "HS_SQL_HANDLE_STMT_REUSE" returned "FALSE"
  Entered hgocont at 2013/05/10-13:31:36
  HS_FDS_CONNECT_INFO = "gp"
  RC=-1 from HOSGIP for "HS_FDS_CONNECT_STRING"
  Entered hgogenconstr at 2013/05/10-13:31:36
  dsn:gp, name:DBA
  optn:
  Entered hgocip at 2013/05/10-13:31:36
  dsn:gp
  Exiting hgocip, rc=0 at 2013/05/10-13:31:36
  Exiting hgogenconstr, rc=0 at 2013/05/10-13:31:36
  Entered hgopoer at 2013/05/10-13:31:36
  后来看到网友也出现了类似的问题,原来是用户名也要用双引号括起来,我们从这里也可以看到传输的用户名是大写的"DBA":
  reco:0, name:DBA, tflag:0
  但实际上在greenplum当中的确实小写的"dba",包括在定义dblink中的密码也要用双引号,当然还有sourcename。
  SQL> drop public database link postgresql;
  数据库链接已删除。
  SQL> CREATE PUBLIC DATABASE LINK postgresql CONNECT TO "dba" IDENTIFIED BY "isdb
  a" USING 'gp';
  数据库链接已创建。
  SQL> select * from "a1"@postgresql;
  未选定行
  6.1. 查询指定字段
  SQL> Select Name From "t1"@postgresql;
  Select Name From "t1"@postgresql
  *
  第 1 行出现错误:
  ORA-00904: "NAME": 标识符无效
  也必须用双引号:
  SQL> Select Name From "t1"@postgresql;
  Select Name From "t1"@postgresql
  *
  第 1 行出现错误:
  ORA-00904: "NAME": 标识符无效
  另外需要注意的在greenplum中都是小写的表名和字段名称。
  6.2. ORA-00600: Internal errorcode, arguments:[HO define: Long fetch], [], [], [], [], [], [], []
  查询的时候报错,确认是个hs dg4odbc bug,不过这个bug只是在使用PLD的时候出现,使用SQL*PLUS没有触发,目前我使用的版本是11.2.0.1.0,具体见Bug 4391058,看描述说在11.2已经修复了,怎么我还会遇到呢?有人反馈说使用具体字段列举替代”*“,可是我这边还是无效。
  -EOF-

    有帮助
    (0)
    0%
    没帮助
    (0)
    0%