sql - Oracle 查询结果与企业管理器值不匹配

标签 sql database oracle tablespace oracle-enterprise-manager

我正在尝试获取 Oracle 数据库中所有表空间的大小。 我尝试了两种获取信息的方法。

选项 1 给了我很好的值,但当表空间没有数据库文件时它不会返回任何值。具体来说,它不会为“TEMP”和“TESTTODELETE”表空间返回任何值。

enter image description here

我注意到这 2 个表空间与其他表空间之间的唯一区别是这 2 个表空间没有 .dbf 文件。

enter image description here

选项 2 为我提供了某些表空间的正确值,但其他时间则完全不正确。选项 2 确实为“TEMP”表空间返回了一些东西,但它没有为“TESTTODELETE”表空间返回任何东西。

enter image description here

这两个选项都不返回表空间“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/

相关文章:

mysql - MySQL 问题,无法添加外键约束

sql - SQL中如何查询任意子关系的 "parent"?

database - 何时分隔数据库列含义(通用列)

php - 为什么图像板脚本不使用数据库?

linux - 如何将变量从 bash 传递到 sqlplus

mysql - 如何创建一个表,当内容更改时自动更新另一个表?

java - 使用 JDBC,如何将多个 ID 替换为 "DELETE FROM T WHERE id IN (?)"

database - Django 线程和测试

oracle - Oracle中游标的生命周期

json - 选择 - Oracle JSON 对象 - 加入