Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member
0 Kudos

引言

OracleSAP HANA实时复制系列():初始SRS介绍了从OracleSAP HANA实时复制系统的体系架构,并阐述了数据实时复制过程。在OracleSAP HANA实时复制系列()Replication Server的安装与配置OracleSAP HANA实时复制系列():Replication Agent的安装与配置中结合截图分别详细介绍了Replication ServerReplication Agent的安装与配置过程。本文结合图片详细介绍如何实现一个Oracle表到SAP HANA表的实时复制操作。

1安装SAP HANA ODBC

SAP Service Marketplace(SMP)上下载SAP HANAODBC库,或者也可以到已安装SAP HANA客户端的机器上搜索该ODBC库。不同操作系统使用的ODBC库名如下表所示。

Platform

Library Name

Windows (32-bit)

LIBODBCHDB32.dll

Windows (64-bit)

LIBODBCHDB.DLL

UNIX (64-bit)

libodbcHDB.so

因本文的Replication Server安装在Suse 11P2操作系统中,所以选择的库名为 libodbcHDB.so。将该文件复制到Rep_Server_install_dir\REP-15_5\connector\lib目录下,其中Rep_Server_install_dirReplication Server的安装目录。

更多关于SAP HANA ODBC库的下载、安装过程请参见Installing ODBC Libraries for ExpressConnect for SAP HANA database

2 Replication Server端创建到SAP HANA的连接

  1) 在Replication Server端的interfaces文件中添加SAP HANA连接信息


          <dataservername>

          master tcp ether <hostname> <port>

          query tcp ether <hostname> <port>

说明:

    • <dataservername>SAP HANA的服务器标识;
    • <hostname>SAP HANA所在的服务器的主机名或IP地址;
    • <port>SAP HANA的端口名称,每个SAP HANA有一个instance number<port>3instance number15组成,例如某个SAP HANA数据库的instance number 05,则<port>30515

 

  例如在本文中,SAP HANA安装在IP地址为<IPC>的服务器上,且SAP HANAinstance number05,则SAP HANA的连接信息为:


     HANA_SERVER

     master tcp ether <IPC> 30515

     query tcp ether <IPC> 30515

     修改interfaces文件后需重启Replication Server服务器才能使其生效。


  2) 创建SAP HANA维护用户

    a) 以系统用户登录SAP HANA并创建维护用户,创建用户命令如下



CREATE USER <muser> PASSWORD <mpwd>

          其中<muser>为维护用户的用户名,<mpwd>为其密码。

         

     b) 为维护用户赋予相应的权限


GRANT CREATE ANY, DELETE, DROP, EXECUTE,
INDEX, SELECT, UPDATE ON SCHEMA <myschema> TO <muser>

          其中<myschema>SAP HANAschema名称。

     c) 使用isql工具并以sa账户登录Replication Server来创建到SAP HANA的连接,创建连接命令如下



create connection to <dataservername>.<databasename>
using profile rs_oracle_to_hanadb;ech
set username <muser>
set password <mpwd>
go

     说明:

    • <dataservername>SAP HANA的服务器标识,在本文中设置该值为 HANA_SERVER
    • <databasename>是一个占位符,你必须输入一个字符,但不会被用到;
    • <muser>SAP HANA的维护用户名;
    • <mpwd> SAP HANA的维护用户密码。

3 创建Oracle表到SAP HANA表的复制作业

  1) 创建Oracle

     a) 以RA_USER用户登录到Oracle数据库,并创建一个表,例如表名取为ORA_TBL



CREATE TABLE ORA_TBL(idno NUMBER PRIMARY KEY,name VARCHAR2(20));

    

     b) 设置该表的权限为public


grant all on ORA_TBL to public;


     c) 在该表中随意插入几条数据



insert into ORA_TBL values (1, 'Burt Gringlesby');
insert into ORA_TBL values (2, 'Douglas Wong');
insert into ORA_TBL values (3, 'Tom Servo');
commit;


  2) 使用isqlsa用户登录到Replication Agent

     a) 为ORA_TBL表创建标记(mark)


pdb_setreptable ORA_TBL, mark
go

    b) 并为ORA_TBL表创建复制定义(replication definition)


rs_create_repdef ORA_TBL
go

               创建复制定义命令会生成如下的结果

         

Table/Procedure Name     RepDef Name    Status

------------------------ -------------- --------

<OracleTableOwner>.PTAB1 "<repdefname>" Created

(1 row affected)

  3) 创建 SAP HANA

     a) 登录SAP HANA,登录用户(例如<HANATableOwner>)只要具有创建表的权限即可,创建一个表,可以为列表或行表,例如表名取为HANA_TBL,该表须与Oracle相应的表具有一致的表结构,包括列名和列的数据类型。



CREATE COLUMN TABLE <HANATableOwner>.HANA_TBL(IDNO INT PRIMARY KEY, NAME VARCHAR(20));


     b) 设置该表的权限为public,以使得HANA<muser>用户可以操作该表



grant all privileges on <HANATableOwner>.HANA_TBL to public;

  4) 使用isqlsa用户登录到Replication Server

     a) 更改复制定义(alter replication definition)


alter replication definition <repdefname>
with replicate table named <HANATableOwner>.HANA_TBL
go


     b) 创建订阅(subscription),并物化(materialize) HANA_TBL表,即将Oracle数据库的ORA_TBL表的数据全部导入到HANA_TBL表中



create subscription <sub_name>
for <repdefname>
with replicate at <dataservername>.<databasename>
without holdlock
direct_load
user <puser> password <ppwd>
go

说明:

    • <sub_name>:订阅的名字,用户可以随意指定一个合法的字符串;
    • <dataservername>.<databasename>:为创建SAP HANA连接时指定的服务器名和数据库名;
    • <puser>:Replication Agent的系统用户名,本文中取值为sa
    • <ppwd>:<puser>用户的密码,本文中取值为111111

        执行完该命令后,查看SAP HANA HANA_TBL表,发现OracleORA_TBL表里的数据已经复制到该表中。而且今后ORA_TBL表的事务都会实时复制             到HANA_TBL表中。


     c) 查看订阅(subscription)状态



check subscription <sub_name>
for <repdefname>
with replicate at <dataservername>.<databasename>
go

更多Replication Server相关的操作命令请参见SRS Reference Manual

4结束语

本文主要介绍了如何实现从Oracle表到SAP HANA表的复制作业,至此已完成SRS的概念、安装、配置以及表复制任务的介绍。

在写本系列文章的过程中,得到了Yun JinLeo HuWhisly Wei等同事的很多帮助,文中多次借鉴了Whisly所分享的一篇内部文章的内容,在此表示衷心的感谢。

参考资料

SRS Reference Manual

想获取更多SAP HANA学习资料或有任何疑问,请关注新浪微博@HANAGeek!我们欢迎你的加入!

转载本文章请注明作者和出处<文章url>,请勿用于任何商业用途。