Artigo
· Set. 9 3min de leitura

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     2517050

Se 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>
Discussão (0)1
Entre ou crie uma conta para continuar