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>