Como usar a query FreeSpace da classe SYS.Database para checar o espaço disponível no disco onde a base de dados está
Rubrica InterSystems FAQ
Você pode verificar o espaço em disco a qualquer momento usando a classe utilitária do sistema: SYS.Database e a consulta: FreeSpace.
Aqui está como testar no terminal IRIS (vá para o namespace %SYS e então execute):
zn"%SYS"set stmt=##class(%SQL.Statement).%New()
set st=stmt.%PrepareClassQuery("SYS.Database","FreeSpace")
set rset=stmt.%Execute()
do rset.%Display()O exemplo de resultado de saída é o seguinte:
*No exemplo de execução do comando, todos os bancos de dados estão localizados no mesmo disco, então o espaço livre em disco (DiskFreeSpace) retorna o mesmo valor.
Dumping result #1
DatabaseName Directory MaxSize Size ExpansionSize AvailableFreeDiskFreeSpace Status SizeInt AvailableNum DiskFreeSpaceNum ReadOnly
IRISSYS c:\intersystems\irishealth3\mgr\ 無制限 159MB システムデフォル ト 18MB 11.32 245.81GB マウント/RW 159 18 2517050
ENSLIB c:\intersystems\irishealth3\mgr\enslib\ 無制限 226MB システムデフォル ト 19MB 8.4 245.81GB マウント/R 226 19 2517051
<一部省略>
IRISTEMP c:\intersystems\irishealth3\mgr\iristemp\ 無制限 51MBシス テムデフォルト 49MB 96.07 245.81GB マウント/RW 51 49251705 0
USER c:\intersystems\irishealth3\mgr\user\ 無制限 31MB システムデフォル ト 8.5MB 27.41 245.81GB マウント/RW 31 8.5 2517050Se você quiser especificar o diretório do banco de dados ao qual se referir, execute o seguinte:
// Use a função $LISTBUILD() para o obter o caminho completo do diretório da base de dados que deseja visualizar.set dbdir=$LISTBUILD("c:\intersystems\irishealth3\mgr","c:\intersystems\irishealth3\mgr\user")
set rset=stmt.%Execute(dbdir)
do rset.%Display()Para obter apenas o nome do banco de dados (DatabaseName),o tamanho atual (Size) em MB, o espaço disponível (Available) em MB, o espaço livre (Free), e e o espaço livre em disco (DiskFreeSpace) em um diretório de banco de dados especificado, siga os passos abaixo (crie uma rotina/classe no VSCode ou Studio enquanto conectado ao namespace %SYS e escreva o código).
Class ZMyClass.Utils
{
ClassMethod GetDiskFreeSpace()
{
set dbdir=$LISTBUILD("c:\intersystems\irishealth3\mgr","c:\intersystems\irishealth3\mgr\user")
set stmt=##class(%SQL.Statement).%New()
set st=stmt.%PrepareClassQuery("SYS.Database","FreeSpace")
set rset=stmt.%Execute(dbdir)
while(rset.%Next()) {
write rset.%Get("DatabaseName")," - ",
rset.%Get("Size")," - ",rset.%Get("Available")," - ",
rset.%Get("Free"),"% - ",rset.%Get("DiskFreeSpace"),!
}
}
}
NOTA: Se você colocar rotinas ou classes definidas pelo usuário no namespace %SYS, criá-las com nomes que comecem com Z garante que o código-fonte definido pelo usuário permaneça disponível após uma instalação de atualização.
Um exemplo de execução é o seguinte.
USER>zn"%SYS"%SYS>do##class(ZMyClass.Utils).GetDiskFreeSpace()
IRISSYS - 159MB - 18MB - 11.32% - 245.81GB
USER - 31MB - 8.5MB - 27.41% - 245.81GB
%SYS>