— 系列专栏文章 —
Linux基础系列/监控系列(Zabbix|Prometheus)
在 Oracle 数据库中,查看表空间的大小和使用情况是数据库管理的重要任务之一。以下是查询表空间大小的常用 SQL 语句及其解释。
以下 SQL 查询可以返回每个表空间的总大小、已使用空间和剩余空间(单位为 MB)。
SELECT
tablespace_name AS "表空间名称",
ROUND(SUM(bytes) /1024/1024, 2) AS "总大小(MB)",
ROUND((SUM(bytes) - NVL(SUM(free_space), 0)) /1024/1024, 2) AS "已使用(MB)",
ROUND(NVL(SUM(free_space), 0) /1024/1024, 2) AS "剩余(MB)",
ROUND((SUM(bytes) - NVL(SUM(free_space), 0)) /SUM(bytes) *100, 2) AS "使用率(%)"
FROM (
SELECT
tablespace_name,
SUM(bytes) AS bytes,
NULLAS free_space
FROM dba_data_files
GROUPBY tablespace_name
UNIONALL
SELECT
tablespace_name,
NULLAS bytes,
SUM(bytes) AS free_space
FROM dba_free_space
GROUPBY tablespace_name
)
GROUPBY tablespace_name
ORDERBY tablespace_name;
表空间名称 | 总大小(MB) | 已使用(MB) | 剩余(MB) | 使用率(%) |
---|---|---|---|---|
SYSTEM | 500.00 | 300.00 | 200.00 | 60.00 |
SYSAUX | 800.00 | 500.00 | 300.00 | 62.50 |
USERS | 200.00 | 100.00 | 100.00 | 50.00 |
如果您需要更详细的表空间信息(如数据文件路径和大小),可以使用以下查询。
SELECT
tablespace_name AS "表空间名称",
file_name AS "数据文件路径",
ROUND(bytes / 1024 / 1024, 2) AS "文件大小(MB)",
ROUND(MAXBYTES / 1024 / 1024, 2) AS "最大扩展大小(MB)",
AUTOEXTENSIBLE AS "是否自动扩展"
FROM dba_data_files
ORDER BY tablespace_name, file_name;
表空间名称 | 数据文件路径 | 文件大小(MB) | 最大扩展大小(MB) | 是否自动扩展 |
---|---|---|---|---|
SYSTEM | /u01/app/oracle/oradata/sys.dbf | 500.00 | 1000.00 | YES |
USERS | /u01/app/oracle/oradata/usr.dbf | 200.00 | 500.00 | YES |
临时表空间(Temporary Tablespace)用于排序、哈希等操作。以下是查询临时表空间大小的 SQL。
SELECT
tablespace_name AS "表空间名称",
ROUND(SUM(bytes) / 1024 / 1024, 2) AS "总大小(MB)"
FROM dba_temp_files
GROUP BY tablespace_name
ORDER BY tablespace_name;
表空间名称 | 总大小(MB) |
---|---|
TEMP | 1000.00 |
如果只需要查看表空间的使用率,可以使用以下简化查询。
SELECT
a.tablespace_name AS "表空间名称",
ROUND(a.total_size /1024/1024, 2) AS "总大小(MB)",
ROUND((a.total_size - b.free_size) /1024/1024, 2) AS "已使用(MB)",
ROUND(b.free_size /1024/1024, 2) AS "剩余(MB)",
ROUND((a.total_size - b.free_size) / a.total_size *100, 2) AS "使用率(%)"
FROM (
SELECT tablespace_name, SUM(bytes) AS total_size
FROM dba_data_files
GROUPBY tablespace_name
) a
LEFTJOIN (
SELECT tablespace_name, SUM(bytes) AS free_size
FROM dba_free_space
GROUPBY tablespace_name
) b
ON a.tablespace_name = b.tablespace_name
ORDERBY a.tablespace_name;
如果您需要检查表空间是否可以自动扩展,以及当前的扩展状态,可以使用以下查询。
SELECT
tablespace_name AS "表空间名称",
file_name AS "数据文件路径",
ROUND(bytes /1024/1024, 2) AS "当前大小(MB)",
ROUND(MAXBYTES /1024/1024, 2) AS "最大扩展大小(MB)",
AUTOEXTENSIBLE AS "是否自动扩展",
INCREMENT_BY * (SELECTvalueFROM v$parameterWHERE name ='db_block_size') /1024/1024AS "每次扩展大小(MB)"
FROM dba_data_files
ORDERBY tablespace_name, file_name;
表空间名称 | 数据文件路径 | 当前大小(MB) | 最大扩展大小(MB) | 是否自动扩展 | 每次扩展大小(MB) |
---|---|---|---|---|---|
SYSTEM | /u01/app/oracle/oradata/sys.dbf | 500.00 | 1000.00 | YES | 10.00 |
DBA_DATA_FILES
、DBA_FREE_SPACE
和 DBA_TEMP_FILES
视图的权限。USER_TABLESPACES
或 ALL_TABLESPACES
视图,但结果可能不完整。bytes
是以字节为单位的值,通常需要除以 1024 * 1024
转换为 MB。DBA_TEMP_FILES
中,而不是 DBA_DATA_FILES
。