Artículo
· 10 oct, 2024 Lectura de 3 min

Cómo utilizar la consulta FreeSpace de la clase SYS.Database para comprobar el espacio libre en el disco donde se encuentra la base de datos

Rúbrica de preguntas frecuentes de InterSystems

Podéis comprobar el espacio libre en disco en cualquier momento usando la clase de utilidad del sistema: SYS.Database y la consulta: FreeSpace.

Aquí tenéis cómo probarlo en el terminal de IRIS (id al espacio de nombres %SYS y luego ejecutadlo):

zn "%SYS"
set stmt=##class(%SQL.Statement).%New()
set st=stmt.%PrepareClassQuery("SYS.Database","FreeSpace")
set rset=stmt.%Execute()
do rset.%Display()

El resultado de salida es el siguiente:

*En el ejemplo de ejecución del comando, todas las bases de datos están ubicadas en el mismo disco, por lo que el espacio libre en disco (DiskFreeSpace) devuelve el mismo valor.

Dumping result #1
DatabaseName         Directory         MaxSize Size   ExpansionSize   AvailableFreeDiskFreeSpace      Status  SizeInt AvailableNum    DiskFreeSpaceNum        ReadOnly
IRISSYS c:\intersystems\irishealth3\mgr\        sin límites  159MB   sistema por defecto           ト      18MB    11.32   245.81GB        Montaje/RW      159     18      2517050
ENSLIB  c:\intersystems\irishealth3\mgr\enslib\ sin límites  226MB   sistema por defecto           ト      19MB    8.4     245.81GB        Montaje/R      226     19      2517051
      <parcialmente omitido>
IRISTEMP        c:\intersystems\irishealth3\mgr\iristemp\       sin límites  51 MB Sys.     sistema por defecto  49MB    96.07   245.81GB        Montaje/RW     51      49251705           0
USER    c:\intersystems\irishealth3\mgr\user\   sin límites  31MB    sistema por defecto           ト      8.5MB   27.41   245.81GB        Montaje/RW     31      8.5     2517050

Si queréis especificar el directorio de la base de datos al que queréis hacer referencia, ejecutad lo siguiente:

//Use the $LISTBUILD() function to obtain the full path of the database directory you want to view.
set dbdir=$LISTBUILD("c:\intersystems\irishealth3\mgr","c:\intersystems\irishealth3\mgr\user")
set rset=stmt.%Execute(dbdir)
do rset.%Display()

Si queréis obtener solo el Nombre de la Base de Datos (DatabaseName), el Tamaño Actual (Size) en MB, el Espacio Disponible (Available) en MB, el Espacio Libre (Free) y el Espacio Libre en Disco (DiskFreeSpace) en un directorio de base de datos especificado, seguid los pasos a continuación (cread una rutina/clase en VSCode o Studio mientras estáis conectados al espacio de nombres %SYS y escribid el 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: Si colocáis rutinas o clases definidas por el usuario en el espacio de nombres %SYS, crearlas con nombres que comiencen con Z asegura que el código fuente definido por el usuario permanezca disponible después de una actualización de instalación.

Un ejemplo de ejecución es el siguiente.

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>
Comentarios (0)0
Inicie sesión o regístrese para continuar