怎么查看当前oracle库下的表空间temp大小或者默认大小

要查看 Oracle 数据库中 临时表空间(TEMP Tablespace)的大小或默认设置,可以使用以下几种方法。这些方法适用于 Oracle 11g、12c、19c、21c 等主流版本。


✅ 一、查看当前数据库的默认临时表空间

sql 复制代码
SELECT property_name, property_value
FROM database_properties
WHERE property_name = 'DEFAULT_TEMP_TABLESPACE';

输出示例:

复制代码
PROPERTY_NAME                | PROPERTY_VALUE
----------------------------|-----------------
DEFAULT_TEMP_TABLESPACE     | TEMP

这表示新建用户若未指定临时表空间,将默认使用 TEMP


✅ 二、查看临时表空间的总大小、已用、空闲情况

临时表空间在 Oracle 中是通过 临时文件(tempfiles) 管理的,不是普通数据文件。因此不能用 dba_data_files,而要用 dba_temp_files

1. 查看所有临时表空间及其文件大小

sql 复制代码
SELECT 
    tf.tablespace_name,
    tf.file_name,
    tf.bytes / 1024 / 1024 AS size_mb,
    tf.maxbytes / 1024 / 1024 AS max_size_mb,
    tf.autoextensible
FROM dba_temp_files tf
ORDER BY tf.tablespace_name;
  • bytes:当前分配的大小(MB)
  • maxbytes:最大可扩展到的大小(如果启用了自动扩展)
  • autoextensible:是否自动扩展(YES/NO)

2. 查看每个临时表空间的总容量

sql 复制代码
SELECT 
    tablespace_name,
    SUM(bytes) / 1024 / 1024 AS total_mb,
    SUM(maxbytes) / 1024 / 1024 AS max_total_mb
FROM dba_temp_files
GROUP BY tablespace_name;

✅ 三、查看临时表空间的实际使用情况(当前已用)

临时表空间的"已用空间"是动态的,可通过以下视图查看:

sql 复制代码
SELECT 
    s.tablespace,
    s.segfile#,
    s.segblk#,
    s.blocks * t.block_size / 1024 / 1024 AS used_mb,
    s.extents
FROM v$sort_segment s
JOIN dba_tablespaces t ON t.tablespace_name = s.tablespace;

或者更常用的是查看当前所有会话占用的临时空间

sql 复制代码
SELECT 
    s.sid,
    s.serial#,
    s.username,
    su.tablespace,
    su.segtype,
    su.blocks * (SELECT block_size FROM dba_tablespaces WHERE tablespace_name = su.tablespace) / 1024 / 1024 AS used_mb
FROM v$sort_usage su
JOIN v$session s ON su.session_addr = s.saddr
ORDER BY used_mb DESC;

这能告诉你谁在用 temp、用了多少


✅ 四、查看临时表空间是否为大文件表空间(Bigfile)

sql 复制代码
SELECT tablespace_name, bigfile
FROM dba_tablespaces
WHERE contents = 'TEMPORARY';
  • BIGFILE = 'YES':表示该临时表空间只能有一个 tempfile,但可超大(如 32TB)
  • BIGFILE = 'NO':传统 smallfile 表空间,可有多个 tempfile

✅ 五、补充:如何知道某个用户使用哪个临时表空间?

sql 复制代码
SELECT username, temporary_tablespace
FROM dba_users
WHERE username = 'SCOTT';  -- 替换为你的用户名

🔚 总结常用命令

目的 SQL
查默认临时表空间 SELECT property_value FROM database_properties WHERE property_name = 'DEFAULT_TEMP_TABLESPACE';
查 tempfile 大小 SELECT file_name, bytes/1024/1024 FROM dba_temp_files;
查当前 temp 使用 SELECT * FROM v$sort_usage;
查用户临时表空间 SELECT temporary_tablespace FROM dba_users WHERE username = 'XXX';

⚠️ 注意:查询 dba_* 视图需要 DBA 权限或 SELECT_CATALOG_ROLE。普通用户可用 all_*user_* 视图,但对 temp 信息有限。

如果你没有 DBA 权限,可以尝试用 v$tempfile(需有访问动态性能视图权限):

sql 复制代码
SELECT name, bytes/1024/1024 AS size_mb FROM v$tempfile;

希望这能帮你全面掌握 Oracle 临时表空间的查看方法!如需扩容或监控建议,也可继续提问。

相关推荐
@我漫长的孤独流浪9 分钟前
SQL触发器实战:银行系统数据完整性控制
数据库·oracle
半夜修仙22 分钟前
Redis中Set数据类型的常见命令
java·数据库·redis·笔记·学习
oradh29 分钟前
Oracle逻辑存储结构概述
数据库·oracle·逻辑存储结构·oracle逻辑存储结构概述
廿一夏33 分钟前
MySql视图触发器函数存储过程
数据库·sql·oracle
hikktn35 分钟前
Oracle 行锁 ORA-00054 高效重试机制实战:MERGE 批量更新 + FOR UPDATE NOWAIT 完整方案
数据库·oracle
￰meteor36 分钟前
【数据库导学】
数据库
zxrhhm37 分钟前
Oracle检查点Checkpoint深度解析
数据库·oracle
rising start38 分钟前
三、深入理解MySQL索引底层
数据库·mysql
weixin_426150701 小时前
AI辅助Oracle容量规划:告别拍脑袋扩容
运维·数据库·人工智能·oracle
l1t1 小时前
DeepSeek总结的PostgreSQL 表访问方法
数据库·postgresql