如何使用SYS.Database类的FreeSpace查询来检查数据库所在磁盘上的可用空间
系统实用类:SYS.Database中的查询FreeSpace可以用来在任何时候检查磁盘上的自由空间。
下面是在IRIS终端中的尝试方法(进入%SYS命名空间,然后运行它)。
zn "%SYS"
set stmt=##class(%SQL.Statement).%New()
set st=stmt.%PrepareClassQuery("SYS.Database","FreeSpace")
set rset=stmt.%Execute()
// 一次性显示所有
do rset.%Display()
输出结果示例如下。
*在命令执行的例子中,所有的数据库都放在同一个磁盘上,所以所有的磁盘空闲空间(DiskFreeSpace)返回相同的值。
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
如果你想指定你要参考的数据库目录,请执行以下操作。
// 使用$LISTBUILD()函数准备好要引用的数据库目录的完整路径。
set dbdir=$LISTBUILD("c:\intersystems\irishealth3\mgr","c:\intersystems\irishealth3\mgr\user")
set rset=stmt.%Execute(dbdir)
do rset.%Display()
如果你只想获得指定数据库目录的数据库名称(DatabaseName)、当前大小(Size)MB、可用自由空间(Available)MB、自由大小(Free)%、自由磁盘空间大小(DiskFreeSpace)GB,你可以执行以下流程(在VSCode或Studio中连接到%SYS命名空间时创建例程/类并编写代码)。
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"),!
}
}
}
注意:如果你把用户定义的例程或类放在%SYS名称空间中,创建它们的名称以Z开头,这样用户定义的源代码就会在升级安装后保留下来。
下面是一个运行的例子。
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>
查看原帖 由 @Mihoko Iijima 撰写