文章
Michael Lei · 四月 10 阅读大约需 3 分钟

如何使用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>

 

0
0 13
讨论 (0)1
登录或注册以继续