Как запросить Intersystems Caché для получения свойств базы данных и лицензии?

Вопрос

Привет,

Я пытаюсь определить, могу ли я запросить Intersystems Caché для получения свойств базы данных и свойств лицензии. Для базы данных меня больше всего интересуют такие свойства, как текущий размер, максимальный размер, размер блока и каталог, связанный с базой данных. Для лицензий я полностью авторизован, в настоящее время доступно, минимально доступно, текущие активные пользователи и максимально активные пользователи.

Фон

Я знаю, что подробности о базе данных и лицензиях доступны на портале управления системой, но я пытаюсь автоматизировать некоторые действия, которые зависят от этих деталей.

Я знаю, что утилита%FREECNT доступна для отображения статистики пространства для базы данных, но единственный способ, которым я смогу использовать эту утилиту для получения необходимой мне информации, - это написать скрипт, используя AWK или же SED (система находится на сервере Unix), и я бы хотел этого избежать, поскольку я не настолько разбираюсь в сценариях Unix, как хотелось бы.

Я знаю ^DATABASE рутина и $SYSTEM.License.ShowCounts() функция доступна, но мне придется использовать AWK а также SED для этого тоже, чтобы устранить возвращенный текст, который мне не нужен. Во всех случаях прямой SQL вернет набор данных, который я могу перебрать, что исключит посторонний текст, включенный в подпрограммы / функции.

Дополнительная информация

Я написал запросы, аналогичные приведенным ниже, и я надеюсь, что есть эквивалентные таблицы для базы данных и лицензии, которые позволят мне такой же доступ:

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

У меня нет доступа к Caché Studio, поэтому я вынужден использовать командную строку на сервере. Я знаю, что могу использовать SQL.Shell для ввода операторов SQL, и из документации похоже, что я могу создавать подпрограммы из командной строки, но я не нашел никакой документации, которая позволила бы мне вводить многострочные операторы для подпрограмм из командная строка. Если это невозможно, то я, вероятно, не могу использовать подпрограммы в своем решении.

Спасибо за помощь.

2 ответа

В своей подпрограмме Caché вы можете использовать Query Summary для получения некоторой информации о лицензии или других запросов в классе%SYSTEM.License
Для баз данных вы можете использовать запросы из SYS.Database из пространства имен% SYS

Я был в состоянии получить что-то близко.

Из командной строки я ввел следующее:

%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"),!}

Это не так чисто, как я бы надеялся, потому что я должен написать весь цикл в одну строку, но это лучше, чем ничего. По крайней мере, оператор переносится через строки.

Другие вопросы по тегам