— 系列专栏文章 —
Linux基础系列/监控系列(Zabbix|Prometheus)
容器化系列/数据库系列
安全系列/持续集成系列
Nginx系列/压力测试系列
AI-大模型-人工智能
在 Oracle 数据库中,查看表空间的大小和使用情况是数据库管理的重要任务之一。以下是查询表空间大小的常用 SQL 语句及其解释。
1. 查询表空间的总大小、已使用空间和剩余空间以下 SQL 查询可以返回每个表空间的总大小、已使用空间和剩余空间(单位为 MB)。
SQL 查询:代码语言:javascript代码运行次数:0运行复制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
2. 查询表空间的详细信息如果您需要更详细的表空间信息(如数据文件路径和大小),可以使用以下查询。
SQL 查询:代码语言:javascript代码运行次数:0运行复制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
3. 查询临时表空间的大小临时表空间(Temporary Tablespace)用于排序、哈希等操作。以下是查询临时表空间大小的 SQL。
SQL 查询:代码语言:javascript代码运行次数:0运行复制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
4. 查询表空间的使用率如果只需要查看表空间的使用率,可以使用以下简化查询。
SQL 查询:代码语言:javascript代码运行次数:0运行复制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;5. 查询表空间的扩展信息如果您需要检查表空间是否可以自动扩展,以及当前的扩展状态,可以使用以下查询。
SQL 查询:代码语言:javascript代码运行次数:0运行复制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
6. 注意事项1. 权限要求:• 执行上述查询需要具有访问 DBA_DATA_FILES、DBA_FREE_SPACE 和 DBA_TEMP_FILES 视图的权限。• 如果没有这些权限,可以尝试使用 USER_TABLESPACES 或 ALL_TABLESPACES 视图,但结果可能不完整。2. 单位转换:• bytes 是以字节为单位的值,通常需要除以 1024 * 1024 转换为 MB。3. 临时表空间:• 临时表空间的信息存储在 DBA_TEMP_FILES 中,而不是 DBA_DATA_FILES。