更改SAPABAP1 HANA Schema密码的步骤

This article will show you the steps to take when changing the SAPABAP1 HANA database schema password.

Step 1: Bring down the SAP application server(s).

Step 2: Launch the SAP HANA Studio and change the password of SAPABAP1.

Step 3: Login to the application server as sidadm. Execute below command to update the hdbuserstore. In our case, the application server is on Windows operating system.

hdbuserstore -u [SAPServiceSID] set default [DB_HOSTNAME]:[DB_PORT] [DB_USER] [DB_PASSWORD]

Note: If you are getting Error 91007: Impersonation not supported, use sudo on this platform. Use below command instead,

hdbuserstore set default [DB_HOST]:[DB_PORT] [DB_USER] [DB_PASSWORD]

Step 4: Once executed, confirm the database connection test by using the R3trans -d. In some cases of the error return code, please check on the user’s password or user deactivation status (too many invalid connect attempts).

Step 5: Bring up the application server.

SAP Note 2750829 – How to change SAPABAP1 schema password In HANA

SAP通过SDI Agent操作MySQL数据库的方式

MySQL是互联网领域是非常流行的,但在SAP生态圈却不太受待见,2019年的S4 HANA还是没有原生支持通过DBCO直连MySQL。如下图所示,DBCO中没有MySQL的选项,在不清楚SAP Kernel的情况下也不太容易增强DBCO。

公司里除了SAP以外的系统,大部分数据库都是MySQL、MSSQL系的,如果无法直连HANA和这些数据库,就需要开发很多接口、花费很多时间做异常处理。思来想去,可以通过HANA + SDI Agent的方式实现SAP系统直接查询外部数据库的功能。

基本思路是在HANA数据库中新建一个DATABASE或者SCHEMA,然后配置SDI Agen连接HANA和MySQL,这个新建的SCHEMA作为中转库,SAP内部使用ABAP以Native SQL的方式操作这个中转库,等同于间接操作MySQL。关于ABAP Native SQL操作外部数据库可以参考这篇文章:《ABAP使用类的方式查询外部数据库》

那么需要做的就是在HANA服务器上对要做为中转库的DATABASE上启用DP服务,然后在HANA服务器上安装SDI Agent或者新建一台电脑安装SDI Agent,最后在HANA对应的DB中的SCHEMA中新建外部数据库表的VIRTUAL TABLE,ABAP通过DBCO创建连接到HANA操作VT,实现对外部数据库的操作。目前操作仅限于REDA,WRITE BACK暂不支持,还得通过程序接口。

启用HANA的DP服务,需要登录到HANA正式环境的SYSTEMDB执行SQL,如下为示例在hostname为sapdata10的数据库服务器上启用S4P租户的DP服务:

注意,要下载合适的MySQL jdbc连接驱动放到dp agent安装目录的camel/lib下,驱动有对应关系,版本不对使用不正常(HANA配置MySQL连接的时候会报403 jdbc错误),具体百度一下关键词“mysql jdbc驱动 和mysql版本“:
https://downloads.mysql.com/archives/c-j/

HANA通过SDI连接外部数据库用到的适配器是CAMEL,因此需要在SDI配置面板中注册这个适配器,通常如果实现把mysql jdbc的文件放到了camel/lib下再启动SDI Agent的话,CAMEL会自动注册:

然后就是在HANA的Provisioning中配置Remote Source,需要配置的参数参考如下:

Source Name 给这个数据连接取一个名字,方便识别即可
Adapter Name 选择 CamelJdbcAdapter
JDBC Driver Class com.mysql.jdbc.Driver
JDBC URL jdbc:mysql://<mysqlip>:3306/<mysqldb>?sessionVariables=sql_mode=ANSI_QUOTES
User 输入MySQL的用户(输完记得回车)
Password 输入MySQL用户的密码(输完记得回车)

最后,将Remote Source中的实体表添加为HANA的虚表,SAP配置DBCO操作虚表即可。

之前总结过几次SDI相关的经验,可参考下面的文章:
安装SAP HANA SDI Agent注意事项
SAP HANA SDI的部署及简单使用
SAP BI数据抽取技术进化历史

ABAP CDS join字段type conflict的次优解决办法

在ABAP CDS的join条件中,如果两张表比较的字段类型相同但长度不同,会报type conflict,无法激活,而且join条件中无法使用子查询、left、right等函数对on的值进行处理。

例如,你想join系统发票行项目表vbrp和采购订单行项目表ekpo,就会发现编辑器报vbrp-vgpos和ekpo-ebeln类型冲突,分析可发现这两个字段都是NUMC类型,但长度不一样。

遇到这种情况,可以考虑把on条件type conflict的字段写到where条件里,虽然实现上没有那么完美,但也能解决问题。DEMO如下: