Linux上的ASE 16.0 SP03 PL02/EBF 27415中的optdiag似乎已损坏

2020-09-24 16:34发布

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

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


我刚刚在Widows 7托管的虚拟RHEL 7.4环境中安装了ASE 16.0 SP03 PL02/EBF 27415 Express版。我这样做是为了检查sp__optdiag的相应版本是否在 www.lumphanan.com/ase 可与SP03和SP02一起使用。 我没想到optdiag会给出错误,它对具有每种数据类型的表中的char(5)列进行了如下操作

内部错误:ct_fetch()中的数据长度不匹配。
CTLIB消息:-L4/O2/S6/N36/6/0:
ct_send():协议特定层:内部客户端库错误:存在 是tds状态机错误。 收到了非法的tds令牌序列。

sp__optdiag使用isql在同一个数据库上运行没有问题。

根据t1.txt创建数据库,并根据其他两个文本文件创建表。

直接在Windows 7上运行的SP02中的同一数据库可提供完整的optdiag输出,没有错误,并且与sp__optdiag输出匹配。

我不知道此版本的diadiag或ASE的安装方式是否有问题。

是否有人使用数据库中两个文件中创建的表来直接在Linux(或可能是任何操作系统)上运行SP03的测试副本,以供他们测试optdiag?

t1.txt (364乙)

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

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


我刚刚在Widows 7托管的虚拟RHEL 7.4环境中安装了ASE 16.0 SP03 PL02/EBF 27415 Express版。我这样做是为了检查sp__optdiag的相应版本是否在 www.lumphanan.com/ase 可与SP03和SP02一起使用。 我没想到optdiag会给出错误,它对具有每种数据类型的表中的char(5)列进行了如下操作

内部错误:ct_fetch()中的数据长度不匹配。
CTLIB消息:-L4/O2/S6/N36/6/0:
ct_send():协议特定层:内部客户端库错误:存在 是tds状态机错误。 收到了非法的tds令牌序列。

sp__optdiag使用isql在同一个数据库上运行没有问题。

根据t1.txt创建数据库,并根据其他两个文本文件创建表。

直接在Windows 7上运行的SP02中的同一数据库可提供完整的optdiag输出,没有错误,并且与sp__optdiag输出匹配。

我不知道此版本的diadiag或ASE的安装方式是否有问题。

是否有人使用数据库中两个文件中创建的表来直接在Linux(或可能是任何操作系统)上运行SP03的测试副本,以供他们测试optdiag?

t1.txt (364乙)
付费偷看设置
发送
8条回答
灬番茄
1楼 · 2020-09-24 17:09.采纳回答

雷蒙德,

我的意思是说前几天我确实很急躁。 它确实可以重现,但仅当LANG设置为en_US.UTF-8(即bash默认值)时将其设置为C或空白,并且您应该会发现它可以工作。 TDS痕迹并没有抛出任何明显的痕迹,只是大量的行返回为LONGCHAR而不是CHAR(预期为UTF8),然后就变成了Splat,它可能需要友好的工程师进行调试。

我怀疑(希望!)这可能是很深奥的,所以不值得担心太多。

干杯

Simon

吹牛啤
2楼-- · 2020-09-24 17:21

嗨西蒙,

我相信您和其他小伙子都很好。

感谢您指出这是一个LANG问题。 在虚拟化的Windows 10 Enterprise安装上使用64位Cygwin中的管道Korn Shell脚本处理BCP时,我遇到了LANG变量问题。 我必须取消设置它才能使ASE连接正常工作。

如果将来遇到任何问题,我会尽力记住在未设置LANG的情况下重试。

谢谢

Raymond

Alawn_Xu
3楼-- · 2020-09-24 17:14

嗨,安迪,

我使用的isql和optdiag版本都用于ASE 16.0 SP03,因为这是所有虚拟化环境都可以访问的版本。

由于我将ASE当作业余爱好者使用,因此我不具备在SAP支持下提出诉讼的能力。 可以提出一个内部支持案例吗?

在sp_showoptstats方面,SP03是它似乎可以"正常运行"的第一个版本。即使是在ASE 16.0 SP02 PL02之前,该过程也具有与Kevin最初的sp__optdiag ASE 15.0版本相同的错误。 Sherlock产生的时间早于我的ASE 15.5、15.7和16.0版本的sp__optdiag修复。 我看到sp_showoptstats对SP03进行了重大重写。 但是...尽管检查了@option请求文本输出,但它仍然仅以XML输出。 如果我想查看统计信息,就不必找到XML解析器来放入结果以理解它们。 而且最大的烦恼是,在尝试选择XML之前,它仍然无法检测文本字符串的长度并设置textsize-需要手动执行" set textsize 9999999",然后(通常)重新执行该过程。

sp_showoptstats不能替代optdiag,因为如果需要,可以使用optdiag手动处理统计信息。

欢呼

Raymond

Nir深蓝
4楼-- · 2020-09-24 17:19

FWIW,我能够重现您看到的错误,但也注意到您被引导到LANG env变量解决方案,该解决方案也为我进行了测试(未设置LANG, 一切都很好)。

复制统计信息是代码的绝佳应用,我再次赞赏并感谢您在这里所做的努力。

关于统计操作应用程序,我有/有其他想法,包括:

1。 统计"版本"。 即:能够(在单独的表中,或通过那些表中未使用的其他formatid,statid等在systabstats/sysstatistics中)存储不同的统计"版本",以适应"设置统计模拟"方案的情况,其中必须使用" optdiag统计信息模拟"非常麻烦(一次只能在目录中存储一组"模拟统计信息")。 除此之外,还可以在"模拟"状态和"活动"之间"切换"统计信息集,或将当前的"模拟集"移动到目录中的单独"副本"或"版本",然后导入另一个模拟集, 将其移动到单独的版本等。因此,可以执行以下操作:

sp__create_stats_version <表名>,<" active | simulate">, [[,],[colname]]

sp__switch_stats_version ,<" active | simulate">, [[,],[colname]] [仅打印]

2。 为一个或多个表生成所有原始的"更新统计信息"命令,这些命令可以单独执行或同时执行,以帮助优化统计信息维护的吞吐量。

ie:而不是" update index statistics mytable"-将其转换为"在幕后"操作的各个update stats命令。 即:如果mytable有索引:

index_name_1(col1,col2)

index_name_2(col2,col3,col4)

index_name_3(col4,col5)

proc的结果将为几种单独的(但等效的语句,可以与用户定义的度并行执行)打印出SQL语言:

更新统计信息mytable index_name_1

更新统计信息mytable index_name_2

更新统计信息mytable index_name_3

更新统计表mytable(col3)

更新统计表mytable(col5)

(简化示例,未考虑分区,全局,本地统计信息等)。

派大星 ヾ
5楼-- · 2020-09-24 17:30

Hello Raymond,

非常感谢您最近为sp__optdiag所做的所有工作! 真的很酷的东西。 我的目标始终是仅维护可以在所有15.x,16.x等版本上运行的proc版本,但是事实证明这是一个空想。

我收到了电子邮件,消息,甚至直接与几个人取得了联系,他们复制了sp__optdiag的副本,并进一步增强了它的功能,使其可以像您所做的那样做各种有用的事情(更不用说修复我留下的错误了: ()。让我希望它位于Github项目或其他此类协作存储库中。

我的确在Linux x86上下载了ASE 16.0 SP03 PL02。 如果您还没有任何人使用样本表来测试optdiag,我很乐意提供帮助。

风早神人
6楼-- · 2020-09-24 17:09

Ben,

我避免了sp_showoptstats,因为它的输出是如此不友好。 sp__optdiag会产生人类可读的输出,但是您仍然需要对其进行分析以发现任何问题。

干杯

Raymond

hongfeng1314
7楼-- · 2020-09-24 17:21

是否有XSL文件将sp_showoptstats XML输出转换为HTML? 和/或,是否有实用程序可以解析sp_showoptstats XML输出并标记问题表?

一周热门 更多>