如何查询IntersystemsCaché以获取数据库和许可证属性?

时间:2013-09-14 22:26:17

标签: sql unix intersystems-cache objectscript

问题

您好,

我正在尝试确定是否可以查询IntersystemsCaché以获取数据库属性和许可证属性。对于数据库,我最感兴趣的是当前大小最大大小块大小以及目录相关的属性与数据库。对于许可证,我总授权当前可用最低可用当前活跃用户和< b>最大活跃用户数。

背景

我知道使用系统管理门户可以获得有关数据库和许可证的详细信息,但我正在尝试自动执行一些依赖于这些详细信息的操作。

我知道%FREECNT实用程序可用于显示数据库的空间统计信息,但我能够使用此实用程序获取所需信息的唯一方法是使用AWK编写脚本或SED(系统在Unix服务器上),我想避免这种情况,因为我不像我想要的那样精通Unix脚本。

我知道^DATABASE例程和$SYSTEM.License.ShowCounts()函数可用,但我也必须使用AWKSED来消除我返回的文本不需要。在所有情况下,直接SQL将返回一组我可以迭代的数据,这将消除例程/函数包含的无关文本。

其他信息

我写了类似下面的查询,我希望有相同的数据库和许可表可以让我获得相同的访问权限:

Select * From %SYS.ProcessQuery Where Namespace = 'HL7'

我无法访问CachéStudio,因此我不得不在服务器上使用命令行。我知道我可以使用SQL.Shell输入SQL语句,从文档中看起来我可以从命令行创建例程,但是我没有找到任何文档可以让我输入例程的多行语句命令行。如果那是不可能的,那么我可能无法在我的解决方案中使用例程。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

在您的Caché例程中,您可以使用Query Summary获取某些许可证信息,或在%SYSTEM.License类中获得其他查询。 对于数据库,您可以使用来自%SYS名称空间

SYS.Database中的查询

答案 1 :(得分:1)

我能够得到一些接近的东西。

从命令行输入以下内容:

%SYS>SET rs = ##Class(%Library.ResultSet).%New()
%SYS>SET rs.ClassName = "SYS.Database"
%SYS>SET rs.QueryName = "FreeSpace"
%SYS>SET sc = rs.Prepare(rs.QueryName)
%SYS>SET sc = rs.Execute($LISTBUILD("/my/database/directory"), 0)
%SYS>WHILE rs.Next(){WRITE rs.Data("DatabaseName")," "_rs.Data("Size")," "_rs.Data("MaxSize"),!}

它不像我希望的那么干净,因为我必须在一条线上写整个循环,但这总比没有好。至少该陈述包含了多行。