1

问题

你好,

我正在尝试确定是否可以查询 Intersystems Caché 以获取数据库属性和许可证属性。对于数据库,我最感兴趣的是当前大小最大大小块大小与数据库关联的目录等属性。对于许可证,我是总授权当前可用最小可用当前活动用户最大活动用户

背景

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

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

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

附加信息

我已经编写了类似于下面的查询,我希望数据库和许可证有等效的表,这将允许我进行相同的访问:

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

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

谢谢您的帮助。

4

2 回答 2

2

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

于 2013-09-15T14:23:34.063 回答
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"),!}

它不像我希望的那样干净,因为我必须将整个循环写在一行上,但这总比没有好。至少该语句跨行换行。

于 2013-09-15T17:08:55.130 回答