云中的HANA数据库:部署HDI容器会删除运行时创建的所有表

2020-08-14 20:08发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


最近,我们将开发转移到了云端。

我们的MTA应用程序在云中使用HANA DB服务,并在运行时创建DB表(使用CREATE TABLE语句)。 我们还使用HDI容器来定义数据库工件并将其部署到云中。

我们会遇到以下情况:

每次我们部署HDI时,它都会在运行时删除该应用程序创建的所有表。 HDI中定义的所有表均保持不变。

在使用云之前,我们使用本地HANA XSA安装,并且没有这种影响:每次部署后,所有表(在HDI中定义或在运行时创建)都保持不变。

是错误还是功能?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


最近,我们将开发转移到了云端。

我们的MTA应用程序在云中使用HANA DB服务,并在运行时创建DB表(使用CREATE TABLE语句)。 我们还使用HDI容器来定义数据库工件并将其部署到云中。

我们会遇到以下情况:

每次我们部署HDI时,它都会在运行时删除该应用程序创建的所有表。 HDI中定义的所有表均保持不变。

在使用云之前,我们使用本地HANA XSA安装,并且没有这种影响:每次部署后,所有表(在HDI中定义或在运行时创建)都保持不变。

是错误还是功能?

付费偷看设置
发送
4条回答
闻人可可
1楼 · 2020-08-14 21:01.采纳回答

借助SAP支持,我们找到了解决方法。 但是首先,这是根本原因的解释:

  1. 设计HDI容器的部署过程,以便每次在HDB模块中部署容器工件时,部署任务都会为该容器创建一个新的技术用户,并删除最后一个技术用户(为先前的部署创建)
  2. 通常,您使用该技术用户与HANA DB工件进行通信,并且当您执行某些DDL语句(例如CREATE TABLE)时,创建的对象的所有者将是容器的技术用户
  3. 下一个部署过程将删除现有技术用户以及该用户拥有的所有对象。

因此,要克服动态创建表的问题,我们在创建后立即使用ALTER TABLE ... OWNER TO = <用户名>更改所有权。 我们使用一个特殊用户,该用户拥有在部署阶段创建的所有容器对象: #OO

显然,应该有一个表,其中包含对象的所有权信息,因为看起来用DDL更改所有权选项仅适用于表。

另一种解决方法是使用存储过程创建对象,只是不要忘记添加

SQL安全定义器

到过程定义。 在这种情况下,将通过容器对象所有者创建通过该过程创建的对象。

哎,真难
2楼-- · 2020-08-14 21:02

感谢谢尔盖分享答案。

SAP小菜
3楼-- · 2020-08-14 20:52

谢尔盖嗨

您找到解决方案了吗? 我们也面临着同样的问题,但无法为此找到任何解决方案。

非常感谢,

何必丶何苦呢
4楼-- · 2020-08-14 21:02

嗨吉加尔,

是的,我们找到了一种解决方法,请参见答案。 因此,对于表,您可以使用ALTER TABLE DDL语句更改所有权;对于其他类型的对象,应使用存储过程创建对象,并且不要忘记在该过程中添加SQL SECURITY DEFINER选项。

一周热门 更多>