
1、查看临时表
空间 (dba_temp_files视图)(v_$tempfile视图)select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_filesselect status,enabled, name, bytes/1024/1024 file_size from v_$tempfile--sys用户查看2、缩小临时表空间
大小alter database tempfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TELEMT\TEMP01.DBF' resize 100M3、扩展临时表空间:方法一、增大临时文件大小:SQL>alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ resize 100m方法二、将临时数据文件设为自动扩展:SQL>alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ autoextend on next 5m maxsize unlimited方法三、向临时表空间中添加数据文件:SQL>alter tablespace temp add tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ size 100m4、创建临时表空间:SQL>create temporary tablespace temp1 tempfile ‘/u01/app/oracle/oradata/orcl/temp11.dbf’ size 10M5、更改系统的默认临时表空间:--查询默认临时表空间select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE'--修改默认临时表空间alter database default temporary tablespace temp1所有用户的默认临时表空间都将切换为新的临时表空间:select username,temporary_tablespace,default_ from dba_users--更改某一用户的临时表空间:alter user scott temporary tablespace temp6、删除临时表空间删除临时表空间的一个数据文件:SQL>alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ drop删除临时表空间(彻底删除):SQL>drop tablespace temp1 including contents and datafiles cascade constraints7、查看临时表空间的使用情况(GV_$TEMP_SPACE_HEADER视图必须在sys用户下才能查询)GV_$TEMP_SPACE_HEADER视图记录了临时表空间的使用大小与未使用的大小dba_temp_files视图的bytes字段记录的是临时表空间的总大小SELECT temp_used.tablespace_name,total - used as "Free",total as "Total",round(nvl(total - used, 0) * 100 / total, 3) "Free percent"FROM (SELECT tablespace_name, SUM(bytes_used) / 1024 / 1024 usedFROM GV_$TEMP_SPACE_HEADER
GROUP BY tablespace_name) temp_used,(SELECT tablespace_name, SUM(bytes) / 1024 / 1024 totalFROM dba_temp_filesGROUP BY tablespace_name) temp_totalWHERE temp_used.tablespace_name = temp_total.tablespace_nameORDER BY B.TABLESPACE, B.SEGFILE#, B.SEGBLK#, B.BLOCKS1. 查看所有表空间大小
SQL>select tablespace_name,sum(bytes)/1024/1024 from dba_data_files
2 group by tablespace_name
2. 已经使用的表空间大小
SQL>select tablespace_name,sum(bytes)/1024/1024 from dba_free_space
2 group by tablespace_name
3. 所以使用空间可以这样计算
select a.tablespace_name,total,free,total-free used from
( select tablespace_name,sum(bytes)/1024/1024 total from dba_data_files
group by tablespace_name) a,
( select tablespace_name,sum(bytes)/1024/1024 free from dba_free_space
group by tablespace_name) b
where a.tablespace_name=b.tablespace_name
4. 下面这条语句查看所有segment的大小。
Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name
5. 还有在命令行情况下如何将结果放到一个文件里。
SQL>spool out.txt
SQL>select * from v$database
SQL>spool off
以MySQL 8.0 来说,通过查看 8.0 的官方文档得知,8.0 的临时表空间分为会话临时表空间和全局临时表空间,会话临时表空间存储用户创建的临时表和当 InnoDB 配置为磁盘内部临时表的存储引擎时由优化器创建的内部临时表,当会话断开连接时,其临时表空间将被截断并释放回池中;也就是说,在 8.0 中有一个专门的会话临时表空间,当会话被杀掉后,可以回收磁盘空间;而原来的 ibtmp1 是现在的全局临时表空间,存放的是对用户创建的临时表进行更改的回滚段,在 5.7 中 ibtmp1 存放的是用户创建的临时表和磁盘内部临时表;
也就是在 8.0 和 5.7 中 ibtmp1 的用途发生了变化,5.7 版本临时表的数据存放在 ibtmp1 中,在 8.0 版本中临时表的数据存放在会话临时表空间,如果临时表发生更改,更改的 undo 数据存放在 ibtmp1 中;
实验验证:将之前的查询结果保存成临时表,对应会话是 45 号,通过查看对应字典表,可知 45 号会话使用了 temp_8.ibt 这个表空间,通过把查询保存成临时表,可以用到会话临时表空间,如下图:
下一步杀掉 45 号会话,发现 temp_8.ibt 空间释放了,变为了初始大小,状态为非活动的,证明在 mysql8.0 中可以通过杀掉会话来释放临时表空间。
总结:在 mysql5.7 时,杀掉会话,临时表会释放,但是仅仅是在 ibtmp 文件里标记一下,空间是不会释放回 *** 作系统的。如果要释放空间,需要重启数据库;在 mysql8.0 中可以通过杀掉会话来释放临时表空间。
评论列表(0条)