linux 系统上Oracle数据库 通过gateway用ODBC 访问 HANA
1 背景
通常在许多 IT 项目(涉及 Oracle 作为主要 RDBMS)中,我们面临从不同系统获取数据的问题。现在,该问题可以通过实施任何 ETL 解决方案来解决,该解决方案具有所需的连接器/驱动程序以连接到不同的异构数据库系统并提取所需的数据。通常情况下,不仅一个可操作的 RDBMS 应该连接另一个 RDBMS 并从另一个 RDBMS 获取数据,而且许多情况下要求是从 OLAP 系统(例如 SAP HANA)获取数据。然而,这需要服务/咨询团队付出相当大的努力来实施 ETL 解决方案,而且在本质上很少能提高 CAPEX 的成本效益。为了缓解这个问题,可以实施另一种技术解决方案,该解决方案利用 Oracle 从 11G 开始提供的现有功能之一。它被称为数据库网关。此数据库网关使用 ODBC 连接(驱动程序)连接到任何第三方数据库。虽然 Oracle 知识涵盖了基本解决方案文档 561033.1(它讨论了从 Oracle 到 MS SQL Server 的连接,因此这是一个 OLTP 到 OLTP),实现整体解决方案需要大量的实践知识。对于所有无法访问 Oracle 知识库的人员以及那些已经阅读了知识文档但遇到项目团队面临的现实生活问题的人员,该独立知识文档将作为补充。这是整理本文档中的附加信息的基本目的。这也是记录 OLAP 和 OLTP 之间连接的一种尝试,避免任何传统的 ETL 设置。
2 目标受众
目标受众是打算在其项目中实施上述用例或相同可能性用例的系统设计人员/开发人员。
3 使用的工具和技术
Oracle Database 12c R1 64 位、Oraclelinux7 64 位、Oracle Gateway12c 64 位、HANA ODBC 驱动程序 2、UNIX ODBC 驱动程序2.3。
4 软件准备
1、数据库环境 Oracle数据库12c sap hana数据库
2、工具软件
- Oracle gateway 安装包 下载地址https://edelivery.oracle.com/osdc/faces/SoftwareDelivery 搜索 Oracle Oracle Database 12c Database Gateway进行下载。需要Oracle账号才能下载
- Unixodbc 软件 可以用源码安装unixODBC
- sap hana odbc 客户端需要去官方网站下载需要sap服务账号
5 基本安装配置信息
Oracle Database Gateway for ODBC 在单独的 CD 上提供。它可以安装到现有的 112c数据库 Oracle_Home 中 或者单独安装到其他的机器上本事例是单独安装的,和数据库部在一个服务器上。安装步骤比较简单,
1、下载软件
2、cd 到解压路径 解压文件,在gateway目录下运行
export DISPLAY=:0.0
./runInstaller
后面就是图像安装了,选择安装组件时选择odbc就可以其他的部用选。
HANA客户端安装软件,包括HANA ODBC HDBODBC驱动 使用的版本为2.0.80,驱动文件名为libodbcHDB.so, 安装客户端前需要先安装Unixodbc
Unixodbc安装
(1)使用yum 工具安装,比如:
yum install unixODBC
(2) 从unixODBC网站下载源代码,并编译:
./configure
make
make install
请注意:默认情况下,用yun安装的配置文件位于/etc/
:
[root@localhost lib]# odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8hana
hana客户端安装
直接运行解压目录的hdbsetup文件
./hdbsetup
没有错误表示安装完成
验证hanaodbc连接
编辑/ect/odbc.ini
添加
[SAP]
Driver=/usr/sap/hdbclient/libodbcHDB.so
ServerNode=hostname:30015
解决方案是您创建一个,/etc/odbc.ini
或者从源代码编译时,sysconfdir
在配置过程中指定选项:
./configure --sysconfdir=/etc
该odbc.ini
文件是这样的:
[HDB]
Driver = /usr/sap/hdbclient/libodbcHDB.so
servernode = localhost:30015
该00
在30015
为实例数SAP HANA
。
使用isql
连接SAP HANA
数据库时,如果不提供用户名和密码,报错信息有点混乱:
# isql HDB -v
[08S01][unixODBC][SAP AG][LIBODBCHDB SO][HDBODBC] Communication link failure;-10709 Connection failed (RTE:[-1] Kerberos error. Major: "unspecified [851968]", minor: "No Kerberos credentials available [2529639053/-1765328243]")
[ISQL]ERROR: Could not SQLConnect
但是指定用户名和密码后,连接就OK了:
# isql SAP system xxxxxx -v
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
安装Oracle网关后,必须配置以下项目:
- ODBC 系统 DSN
- listener(在安装网关软件的ORACLE_HOME中)
- tnsnames(在安装Oracle数据库软件的ORACLE_HOME中)
- hs子系统的init<SID>.ora(安装网关软件的ORACLE_HOME中)
- 甲骨文数据库
打开 ODBC 管理器(确保使用 64 位 ODBC 管理器并在使用 64 位 DG4ODBC 时配置 64 位 ODBC 驱动程序)并配置一个系统 DSN,选择您的 ODBC 驱动程序并遵循其屏幕对话框。要连接到 HANA,在创建系统 DSN 时必须选择 HANA odbc 驱动程序 HDBODBC。假设已安装 HANA 客户端和 HANA ODBC 驱动程序。
1) GATEWAY – LISTENER:侦听器需要一个新的 SID ,如下所示。listener.ora 文件位于 $ORACLE_GATEWAY_HOME/Network/Admin 目录中。请确保 sid 名称与系统 DSN 名称匹配。
请更正 ORACLE_HOME 条目,使其与您安装网关的位置相匹配。
带有侦听端口 1521 的侦听器的 listener.ora 文件可能如下所示。由于现在所有的连接都是通过 oracle 网关完成的,请确保在 listener.ora 文件中配置相关的 SID,以防您想将数据库连接到其他客户端,例如 Sqldeveloper、Toad 等。
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=dg4odbc)
(ORACLE_HOME=/data/oracle/gateway)
(PROGRAM=dg4odbc)
)
LISTENER =
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=<gateway host>)(PORT=1522))
)
更改 listener.ora 文件后必须停止和启动侦听器。使用 LSNRCTL 停止和启动。确保从命令提示符导出正确的 ORACLE_SID 以确保正确的环境。
SET ORACLE_SID=<SID>
2) ORACLE DB – TNSNAMES: ORACLE DATABASE 使用的 tnsnames.ora 需要 DG4ODBC 别名的条目:
connect_descriptor=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=host_name)
(PORT=port_number)
)
(CONNECT_DATA=
(SID=gateway_sid))
(HS=OK))
这个关键字清楚地标识了是否通过 Oracle Heterogeneous 服务建立连接点(这应该是我们案例的强制性条款)。
添加 tnsnames 别名并重新启动侦听器后,连接检查将使用 tnsping <alias>。
<命令> tnsping dg4odbc
这应该会返回一条成功消息。
3) 网关 – INIT.ORA:
关于如何命名 SID 有一些限制(在网络管理员指南中有详细描述)。
在这个地方只有一个简短的说明:不要在 SID 中使用点并保持简短!
SID 也与gateway的初始化文件相关。该文件的名称是 init<SID>.ora。在这个例子中,它被称为 initdg4odbc.ora。该文件位于gateway安装目录的 %<ORACLE_HOME>%/hs/admin。
它至少应包含连接详细信息:
############################################### ############################
# 这是一个示例代理初始化文件,其中包含 HS 参数
# 需要 ODBC 代理,并确保跨不同数据库的不同数据类型之间的兼容性。
#
# HS 初始化参数
# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
#
# HS init parameters
#MapToWVarchar=False
HS_FDS_CONNECT_INFO=SAP
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
#HS_FDS_SQLLEN_INTERPRETATION = 32
HS_FDS_TRACE_LEVEL = Debug
HS_NLS_NCHAR=UCS2
#HS_LANGUAGE=AL32UTF8
HS_LANGUAGE=AMERICAN_AMERICA.WE8ISO8859P1
#
# ODBC specific environment variables
#odbc驱动初始化文件,在odbc安装时有设置
set ODBCINI=/etc/odbc.ini
#
# Environment variables required for the non-Oracle system
#具体参数设置参考Configuring Oracle Database Gateway for ODBC
4) ORACLE DBlink – 创建:
语法是:
CREATE PUBLIC DATABASE LINK dblink CONNECT TO "user" IDENTIFIED BY "password" USING 'tns_name_entry';
或者在没有创建本地tns服务名时使用
CREATE PUBLIC DATABASE LINK dblink CONNECT TO "user" IDENTIFIED BY "password" USING
'(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=ip)
(PORT=1521)
)
(CONNECT_DATA=
(SID=dg4odbc))
(HS=on)
)';
如果一切配置正确,选择 SQL Server 表应该会成功:
SQL> select * from dummy@db_link;
如果遇到以下oracle错误(ORA-28513和/或ORA-02063),请采取以下措施:
将 HS_LONG_PIECE_TRANSFER_SIZE=1024 参数设置为网关的 init 文件。
(此文件位于 %ORACLE_GATEWAY_HOME%/hs/admin 目录中)
此方法有缺陷,就是不能查询sap表的扩展属性字段。会报
ORA-28562: 异构服务数据截断错误
[SAP AG][LIBODBCHDB SO] Data truncated {01004}[SAP AG][LIBODBCHDB SO] Data truncated {01004}[SAP AG][LIBODBCHDB SO] Data truncated {01004}[SAP AG][LIBODBCHDB SO] Data truncated {01004}[SAP AG][LIBODBCHDB SO] Data truncated {01004}
ORA-02063: 紧接着 2 lines (起自 HANA_TEST)
文章来自于网络,如果侵犯了您的权益,请联系站长删除!