您好,
我正在尝试确定是否可以查询IntersystemsCaché以获取数据库属性和许可证属性。对于数据库,我最感兴趣的是当前大小,最大大小,块大小以及目录相关的属性与数据库。对于许可证,我总授权,当前可用,最低可用,当前活跃用户和< b>最大活跃用户数。
我知道使用系统管理门户可以获得有关数据库和许可证的详细信息,但我正在尝试自动执行一些依赖于这些详细信息的操作。
我知道%FREECNT实用程序可用于显示数据库的空间统计信息,但我能够使用此实用程序获取所需信息的唯一方法是使用AWK
编写脚本或SED
(系统在Unix服务器上),我想避免这种情况,因为我不像我想要的那样精通Unix脚本。
我知道^DATABASE
例程和$SYSTEM.License.ShowCounts()
函数可用,但我也必须使用AWK
和SED
来消除我返回的文本不需要。在所有情况下,直接SQL将返回一组我可以迭代的数据,这将消除例程/函数包含的无关文本。
我写了类似下面的查询,我希望有相同的数据库和许可表可以让我获得相同的访问权限:
Select * From %SYS.ProcessQuery Where Namespace = 'HL7'
我无法访问CachéStudio,因此我不得不在服务器上使用命令行。我知道我可以使用SQL.Shell输入SQL语句,从文档中看起来我可以从命令行创建例程,但是我没有找到任何文档可以让我输入例程的多行语句命令行。如果那是不可能的,那么我可能无法在我的解决方案中使用例程。
感谢您的帮助。
答案 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"),!}
它不像我希望的那么干净,因为我必须在一条线上写整个循环,但这总比没有好。至少该陈述包含了多行。