我正在尝试获取 Oracle 数据库中所有表空间的大小。 我尝试了两种获取信息的方法。
选项 1 给了我很好的值,但当表空间没有数据库文件时它不会返回任何值。具体来说,它不会为“TEMP”和“TESTTODELETE”表空间返回任何值。
我注意到这 2 个表空间与其他表空间之间的唯一区别是这 2 个表空间没有 .dbf 文件。
选项 2 为我提供了某些表空间的正确值,但其他时间则完全不正确。选项 2 确实为“TEMP”表空间返回了一些东西,但它没有为“TESTTODELETE”表空间返回任何东西。
这两个选项都不返回表空间“TESTTODELETE”的任何信息。
获取所有表空间的表空间总大小(以 MB 为单位)以反射(reflect)在企业管理器中显示的内容的最佳方法是什么?
最佳答案
dba_data_files
仅包含具有数据文件的表空间。如果您需要包含不受数据文件支持的表空间(例如临时表空间),则需要包含 dba_temp_files
在您的查询中。它们具有几乎完全相同的列布局,因此将它们 UNION
在一起应该很容易。
对于 dba_tablespace_usage_metrics
,它报告的容量是表空间的最大 大小。如果表空间启用了自动扩展,它将包括在计算中。此外,我不建议依赖 v$parameters
来确定 block 大小。相反,加入 dba_tablespaces
,因为每个表空间都可以有自己的 block 大小。
关于sql - Oracle 查询结果与企业管理器值不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35854907/