SAP HANA Smart Data Access 远程连接HANA\ORACLE 转载有修改

时间:2021-04-22 16:50:32

 SAP HANA Smart Data Access 组件是为了实现在HANA Studio中添加远程数据源。在HANA Studio中添加数据源之前,必须先在SAP HANA服务器端完成ODBC驱动管理器和ODBC驱动的安装与配置,并保证连接畅通。不同数据源驱动的安装配置过程基本一致,只是细节略有不同。本文以HANA 和Oracle数据库为例讲解如何安装和配置SDA数据源驱动。

  

安装unixODBC驱动管理器

    SDA使用ODBC与远程数据源连接,所以需要在SAP HANA服务器端安装ODBC驱动管理器unixODBC. unixODBC软件包可从http://www.unixodbc.org/下载。SQL Server数据源需要unixODBC 2.3.0版本(更高版本不适用)Oracle及其他数据源则要求2.3.1或以上版本。

1.下载相应版本的unixODBC软件包,文件名为unixODBC-x.x.x.tar.gzx表示版本号;

2.以root用户登录SAP HANA服务器,解压下载的unixODBC软件包,进入解压目录,依次执行:

   ./configure

   make

   make install

3.一切顺利的话,unixODBC就已经安装好了,可以用isql –version查看版本信息;若有错误,请根据错误信息排除,比如unixODBC依赖的某些组件尚未安装。

安装数据源ODBC驱动

    目前,SAP HANA SDA支持的数据源有:SAP HANASAP Sybase ASETeradata databaseOracleMS SQL ServerHadoop等。数据库产品都提供了各自的ODBC驱动,如Oracle,可到其官网http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html下载对应版本的Instant Client。至于Hadoop数据源,SDA可通过hiveHadoop进行数据交互(关于SDA连接Hadoop数据源后续文章将做详细介绍)SAP官方推荐使用Simba提供的HiveODBC驱动与hive连接,Simba HiveODBC可至Simba官网下载:http://www.simba.com/connectors/apache-hadoop-hive-odbc.

  下载数据源驱动后按照数据源的安装文档安装数据源驱动。此处以Oracle为例,安装OracleODBC驱动需要下载两个安装包:instantclient-basic-linux.x64-xx.x.x.x.x.zipinstantclient-odbc-linux.x64-xx.x.x.x.x.zip x表示版本号。用unzip命令解压这两个文件到同一目录,默认是instantclient_xx_x。进入目录查看文件libsqora.so.xx.x,该文件是OracleODBC 驱动文件。到这里,OracleODBC数据源驱动就安装好了。


   SDA连接HANA远程数据源需要在服务器端单独安装HANA Client,将HANA客户端安装介质上传到服务器,设置好文件权限执行命令:./hdbinst -a client 

hanaprd:/peter/HDB_CLIENT_LINUX_X86_64 # ./hdbinst -a client
SAP HANA Database Client installation kit detected.


SAP HANA Lifecycle Management - Client Installation 1.00.110.00.1447753075
**************************************************************************

Enter Installation Path [/usr/sap/hdbclient]: 
Checking installation...
Preparing package 'Python Runtime'...
Preparing package 'Product Manifest'...
Preparing package 'SQLDBC'...
Preparing package 'REPOTOOLS'...
Preparing package 'Python DB API'...
Preparing package 'ODBC'...
Preparing package 'JDBC'...
Preparing package 'HALM Client'...
Preparing package 'Client Installer'...
Installing SAP HANA Database Client to /usr/sap/hdbclient...
Installing package 'Python Runtime'...
Installing package 'Product Manifest'...
Installing package 'SQLDBC'...
Installing package 'REPOTOOLS'...
Installing package 'Python DB API'...
Installing package 'ODBC'...
Installing package 'JDBC'...
Installing package 'HALM Client'...
Installing package 'Client Installer'...
Installation done
Log file written to '/var/tmp/hdb_client_2016-10-18_13.58.50_20043/hdbinst_client.log' on host 'hanaprd'.
hanaprd:/peter/HDB_CLIENT_LINUX_X86_64 # 


配置ODBC数据源

 安装好ODBC数据源后需要创建ODBC配置文件,并设置一些环境变量。
A. 连接HANA远程数据源,要在sidadm  home目录重建.odbc.ini文件,加入以下连接信息
   [HANA_SAP]
   Driver=/usr/sap/hdbclient/libodbcHDB.so
   ServerNode=10.150.17.53:30115    #(如果实例时00,端口用30015)


  保存后,用命令:isql -v HANA_SAP username password 验证通信是否成功。
  
 hanaprd:~> isql -v HANA_SAP   username password
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> exit


B. 以Oracle为例:

1. 以SAP HANA管理员用户(sidadm)登陆服务器,sidSAP HANA的示例ID

2. 进入sidadm的家目录,创建ODBC配置文件,文件名为.odbc.ini

3. 用vim编辑.odbc.ini文件,内容格式如下:

    [ORCL_DSN]

    Driver=/path/to/driver/libsqora.so.xx.x

   ServerName=ORCL

    其中,ORCL_DSNODBC数据源的名称,ODBC Manager通过该名称找到数据源的连接信息;Driver关键字用于指定ODBC驱动文件;ServerNameOracle tnsnames.ora文件中定义的Oracle服务器名称。对于其他类型的数据源,此处关键字各有不同,如SAP HANAServerNode指定数据库的IP和端口,MSSQL ServerServerDatabase指定数据库连接信息。

4. 对于Oracle数据源,在sidadm的家目录下创建tnsnames.ora,并用vim编辑,内容格式如下:

ORCL=

( DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = <host_ip>)(PORT = 1521))

   (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =orcl))

)

5. 在SAP HANA的环境变量设置脚本hdbenv.sh($DIR_INSTANCE指定的目录下)中设置以下环境变量:

   export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<driver_dir>

   export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

   export ODBCINI=$HOME/.odbc.ini

   export TNS_ADMIN=~/   (For Oracle only)

  这里需要特别注意的是LD_LIBRARY_PATH变量,数据源驱动所依赖的库文件(包括数据源驱动软件包中的库文件和unixODBC的库文件)是到这个变量指定的目录下依次查找的。如果数据源驱动依赖的库文件(或间接依赖的库文件)所在目录不包括在LD_LIBRARY_PATH变量中,那么ODBC Manager就会报错说找不到库文件。

6. sidadm登陆,并执行source $DIR_INSTANCE/hdbenv.sh,然后用isql –v <DSN> 连接数据源,如果成功连接,则说明SAP HANA服务器端到远程数据源的ODBC连接配置完成;若出错,则根据错误信息排错,下一小节将介绍一些错误信息及其解决方法。

7. 重启HANA.

Troubleshooting

1. TNS_ADMIN设置错误

报错

[08004][unixODBC][Oracle][ODBC][Ora]ORA-12154: TNS:could not resolve the connect identifier specified

分析:错误是Oracle报出的无法解析连接信息,这很容易让人误以为是Oracle端配置的问题。但实际上这是SAP HANA服务器端TNS_ADMIN环境变量未设置或设置错误导致的,TNS_ADMIN指定了tnsnames.ora所在的路径如果TNS_ADMIN错误,那么在.odbc.ini文件中定义的ServerName将无法得到解析,故而报错;

解决方法:hdbenv.sh中设置TNS_ADMINsidadm的家目录,然后重启SAP HANA

2.  LD_LIBRARY_PATH设置错误

报错

[01000][unixODBC][Driver Manager]Can’t open lib ‘/path/to/driver/libsqora.so.12.1’ : file not found

[ISQL]ERROR: Could not SQLConnect

分析: 这个错误是ODBC驱动管理器报出的,说指定的驱动文件找不到,但是这个文件明明存在。用ldd命令查看驱动文件的依赖组件,得到以下内容:

SAP HANA Smart Data Access 远程连接HANA\ORACLE 转载有修改

可以看到,驱动文件所依赖的libclntsh.so.12.1无法找到,该文件是和驱动文件在同一目录下,但是由于环境变量LD_LIBRARY_PATH没有包含驱动文件所在的目录,所以ODBC驱动管理器无法找到该依赖文件,unixODBC也就无法加载驱动文件,最终报错说无法找到驱动文件。

解决方法:hdbenv.sh中设置环境变量LD_LIBRARY_PATH,使其包含驱动文件所在目录。

创建数据源

      在确认用isql能够成功登陆远程数据库之后就可以用smart data access.如果HANA账户权限不足,请用SYSTEM账户操作。点击"New Remote Source"创建远程数据源。


SAP HANA Smart Data Access 远程连接HANA\ORACLE 转载有修改

在Adapter Name中选择远程连接数据源的类型,这里我们选HANA.配置好server \port参数,填好账户、口令,点击右上角绿色执行按钮完成创建

SAP HANA Smart Data Access 远程连接HANA\ORACLE 转载有修改


此处经常遇到比较诡异的报错保存不了,请检查HANA studio版本和服务器版本是否一致。曾经在1.00.80遇到过这样的问题。使用与服务器相同版本的hana studio操作保存成功。

远程数据源创建成功后就可以向创建表一样,创建虚拟表。右键点击 "Tables" ,在弹出菜单中选择"New Virtual Table"


SAP HANA Smart Data Access 远程连接HANA\ORACLE 转载有修改


在Table Name 栏输入虚拟表的名称(建议表名远程数据源),选择存储的Schema,点击Browse 按钮浏览远程数据源的数据表,完成创建。


SAP HANA Smart Data Access 远程连接HANA\ORACLE 转载有修改