如何查看oracle临时表空间当前使用了多少空间的大小

如何查看临时表空间的大小和剩余空间

  1、查看临时表空间 (dba_temp_files视图)(v_$tempfile视图)select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;select 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 100M;3、扩展临时表空间:
  方法一、增大临时文件大小:
  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 100m;4、创建临时表空间:
  SQL> create temporary tablespace temp1 tempfile ‘/u01/app/oracle/oradata/orcl/temp11.dbf’ size 10M;5、更改系统的默认临时表空间:
  --查询默认临时表空间
  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 temp;6、删除临时表空间
  删除临时表空间的一个数据文件:
  SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ drop;删除临时表空间(彻底删除):
  SQL> drop tablespace temp1 including contents and datafiles cascade constraints;7、查看临时表空间的使用情况(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_files
  GROUP BY tablespace_name) temp_total
  WHERE temp_used.tablespace_name = temp_total.tablespace_nameORDER BY B.TABLESPACE, B.SEGFILE#, B.SEGBLK#, B.BLOCKS;

1. 查看所有表空间大小

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

1、查看临时表空间 (dba_temp_files视图)(v_$tempfile视图)
select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;
select 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 100M;

3、扩展临时表空间:
方法一、增大临时文件大小:
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 100m;

4、创建临时表空间:
SQL> create temporary tablespace temp1 tempfile ‘/u01/app/oracle/oradata/orcl/temp11.dbf’ size 10M;

5、更改系统的默认临时表空间:
--查询默认临时表空间
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 temp;

6、删除临时表空间
删除临时表空间的一个数据文件:
SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ drop;
删除临时表空间(彻底删除):
SQL> drop tablespace temp1 including contents and datafiles cascade constraints;

7、查看临时表空间的使用情况(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 used
FROM GV_$TEMP_SPACE_HEADER
GROUP BY tablespace_name) temp_used,
(SELECT tablespace_name, SUM(bytes) / 1024 / 1024 total
FROM dba_temp_files
GROUP BY tablespace_name) temp_total
WHERE temp_used.tablespace_name = temp_total.tablespace_name
ORDER BY B.TABLESPACE, B.SEGFILE#, B.SEGBLK#, B.BLOCKS;
希望能帮到您!

查看临时表空间 (dba_temp_files视图)(v_$tempfile视图)
select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;
select status,enabled, name, bytes/1024/1024 file_size from v_$tempfile;--sys用户查看

查看“oracle”临时表空间当前使用了多少空间,可按照以下程序。

SELECT d.tablespace_name "Name", d.status "Status",
TO_CHAR (NVL (a.BYTES / 1024 / 1024, 0), '99,999,990.90') "Size (M)",
TO_CHAR (NVL (a.BYTES - NVL (f.BYTES, 0), 0) / 1024 / 1024,
'99999999.99'
) USE,
TO_CHAR (NVL ((a.BYTES - NVL (f.BYTES, 0)) / a.BYTES * 100, 0),
'990.00'
) "Used %"
FROM SYS.dba_tablespaces d,
(SELECT   tablespace_name, SUM (BYTES) BYTES
FROM dba_data_files
GROUP BY tablespace_name) a,
(SELECT   tablespace_name, SUM (BYTES) BYTES
FROM dba_free_space
GROUP BY tablespace_name) f
WHERE d.tablespace_name = a.tablespace_name(+)
AND d.tablespace_name = f.tablespace_name(+)
AND NOT (d.extent_management LIKE 'LOCAL' AND d.CONTENTS LIKE 'TEMPORARY')
UNION ALL
SELECT d.tablespace_name "Name", d.status "Status",
TO_CHAR (NVL (a.BYTES / 1024 / 1024, 0), '99,999,990.90') "Size (M)",
TO_CHAR (NVL (t.BYTES, 0) / 1024 / 1024, '99999999.99') USE,
TO_CHAR (NVL (t.BYTES / a.BYTES * 100, 0), '990.00') "Used %"
FROM SYS.dba_tablespaces d,
(SELECT   tablespace_name, SUM (BYTES) BYTES
FROM dba_temp_files
GROUP BY tablespace_name) a,
(SELECT   tablespace_name, SUM (bytes_cached) BYTES
FROM v$temp_extent_pool
GROUP BY tablespace_name) t
WHERE d.tablespace_name = a.tablespace_name(+)
AND d.tablespace_name = t.tablespace_name(+)
AND d.extent_management LIKE 'LOCAL'
AND d.CONTENTS LIKE 'TEMPORARY';




先来说说临时表的概念。 临时表顾名思义,就是临时的,用完销毁掉的表。 数据既可以保存在临时的文件系统上,也可以保存在固定的磁盘文件系统上。 临时表有下面几种:


1全局临时表

这种临时表从数据库实例启动后开始生效,在数据库实例销毁后失效。在MySQL里面这种临时表对应的是内存表,即memory引擎。


2会话级别临时表

这种临时表在用户登录系统成功后生效,在用户退出时失效。在MySQL里的临时表指的就是以 create temporary table 这样的关键词创建的表。


3事务级别临时表

这种临时表在事务开始时生效,事务提交或者回滚后失效。 在MySQL里面没有这种临时表,必须利用会话级别的临时表间接实现。


4检索级别临时表

这种临时表在SQL语句执行之间产生,执行完毕后失效。 在MySQL里面这种临时表不是很固定,跟随MySQL默认存储引擎来变化。比如默认存储引擎是MyISAM,临时表的引擎就是MyISAM,并且文件生成形式以及数据运作形式和MyISAM一样,只是数据保存在内存里;如果默认引擎是INNODB,那么临时表的引擎就是INNODB,此时它的所有信息都保存在共享表空间ibdata里面。


MySQL 5.7对于InnoDB存储引擎的临时表空间做了优化。在MySQL 5.7之前,INNODB引擎的临时表都保存在ibdata里面,而ibdata的贪婪式磁盘占用导致临时表的创建与删除对其他正常表产生非常大的性能影响。在MySQL5.7中,对于临时表做了下面两个重要方面的优化:


  • MySQL5.7 把临时表的数据以及回滚信息(仅限于未压缩表)从共享表空间里面剥离出来,形成自己单独的表空间,参数为innodb_temp_data_file_path。

  • 在MySQL5.7 中把临时表的相关检索信息保存在系统信息表中:information_schema.innodb_temp_table_info. 而MySQL 5.7之前的版本想要查看临时表的系统信息是没有太好的办法。

  • 需要注意的一点就是,虽然INNODB临时表有自己的表空间,但是目前还不能自己定义临时表空间文件的保存路径,只能是继承innodb_data_home_dir。此时如果想要拿其他的磁盘,比如内存盘来充当临时表空间的保存地址,只能用老办法,做软链。举个小例子:

    我现在用的OS是 Ubuntu12.X,想用tmpfs文件系统充当临时表空间,

    root@ytt-master-VirtualBox:/usr/local/mysql/data# ln -s/run/shm/ /usr/local/mysql/data/tmp_space2

    root@ytt-master-VirtualBox:/usr/local/mysql/data#ls -l | grep 'shm'

    lrwxrwxrwx1 root root 9 Nov 13 10:28tmp_space2 -> /run/shm/

    然后把

    innodb_temp_data_file_path=tmp_space2/ibtmp2:200M:autoextend

    添加到my.cnf里的[mysqld]下面一行

    重启MySQL服务后,

    mysql>select @@innodb_temp_data_file_path\G

    ***************************1. row ***************************

    @@innodb_temp_data_file_path:tmp_space2/ibtmp2:200M:autoextend

    1 rowin set (0.00 sec)

    先写一个批量创建临时表的存储过程:

    DELIMITER$$

    USE`t_girl`$$

    DROPPROCEDURE IF EXISTS `sp_create_temporary_table`$$

    CREATEDEFINER=`root`@`localhost` PROCEDURE `sp_create_temporary_table`(

    IN f_cnt INT UNSIGNED )

    BEGIN

    DECLARE i INT UNSIGNED DEFAULT 1;

    WHILE i <= f_cnt

    DO

    SET @stmt = CONCAT('create temporarytable tmp',i,' ( id int, tmp_desc varchar(60));');

    PREPARE s1 FROM @stmt;

    EXECUTE s1;

    SET i = i + 1;

    END WHILE;

    DROP PREPARE s1;

    END$$

    DELIMITER;

    现在来创建10张临时表:

    mysql>call sp_create_temporary_table(10);

    QueryOK, 0 rows affected (0.07 sec)

    如果在以前,我们只知道创建了10张临时表,但是只能凭记忆或者手工记录下来临时表的名字等信息。

    现在可以直接从数据字典里面检索相关数据。

    mysql> select * frominformation_schema.innodb_temp_table_info;

    +----------+--------------+--------+-------+----------------------+---------------+

    |TABLE_ID | NAME | N_COLS | SPACE| PER_TABLE_TABLESPACE | IS_COMPRESSED |

    +----------+--------------+--------+-------+----------------------+---------------+

    | 56 | #sql1705_2_9 | 5 | 36 | FALSE | FALSE |

    | 55 | #sql1705_2_8 | 5 | 36 | FALSE |FALSE |

    | 54 | #sql1705_2_7 | 5 | 36 | FALSE | FALSE |

    | 53 | #sql1705_2_6 | 5 | 36 | FALSE | FALSE |

    | 52 | #sql1705_2_5 | 5 | 36 | FALSE |FALSE |

    | 51 | #sql1705_2_4 | 5 | 36 | FALSE | FALSE |

    | 50 | #sql1705_2_3 | 5 | 36 | FALSE | FALSE |

    | 49 | #sql1705_2_2 | 5 | 36 | FALSE |FALSE |

    | 48 | #sql1705_2_1 | 5 | 36 | FALSE | FALSE |

    | 47 | #sql1705_2_0 | 5 | 36 | FALSE | FALSE |

    +----------+--------------+--------+-------+----------------------+---------------+

    10rows in set (0.00 sec)

    功能性我就写到这里,大家性能方面如果有兴趣可以找时间去测试。



  • 13966242918: 如何在Oracle中查看各个表,表空间占用空间的大小
    王奚:Oracle版本:Oracle 10g 一、查看表占用空间大小语句:select t.segment_name, t.segment_type, sum(t.bytes \/ 1024 \/ 1024) "占用空间(M)"from dba_segments twhere t.segment_type='TABLE'group by OWNER, t.segment_name, t.segment_type;查询结果:二、查看表空间占用空间大小语句:select ...
  • 13966242918: 如何查询Oracle表空间和数据文件信息
    王奚:1、查看Oracle数据库中数据文件信息的工具方法:使用上面介绍过的方法登录oracle enterprise manager console工具,选择‘存储’ 数据文件,会看到如下的界面,该界面显示了数据文件名称,表空间名称,以兆为单位的数据文件大小,已使用的数据文件大小及数据文件利用率。
  • 13966242918: 怎么察看Oracle 数据库表空间的使用情况
    王奚:查看的方法和详细的操作步骤如下:1、首先,因为oracle在Linux系统下运行,所以必须连接到Linux系统,如下图所示,然后进入下一步。2、其次,完成上述步骤后,连接成功,进入Oracle控制台。 输入命令“sqlplus \/ as sysdba”,如下图所示,然后进入下一步。3、接着,完成上述步骤后,在sql命令行上,...
  • 13966242918: oracle 表空间的默认位置在哪?
    王奚:oracle默认表空间根据每个用户不同而不同。 如以下,创建一个用户: 1 2 3 create user shopping identified by shopping default tablespace shopping temporary tablespace shopping_temp; 其中shopping就是默认表空间。 shopping_temp即为默认临时表空间。 本回答由电脑网络分类达人 孟男男推荐 举报| 答案纠错 | 评论...
  • 13966242918: 如何查看oracle表空间数据文件位置
    王奚:--查看表空间数据文件 select * from DBA_DATA_FILES; --查看临时表空间数据文件 select * from DBA_TEMP_FILES; --查看表空间 select * from DBA_TABLESPACES;
  • 13966242918: oracle 数据库怎么查看temp表空间使用情况
    王奚:oracle 数据库里查看表空间使用状况;oracle表空间的事情状况要经常查看,一般空闲比例过低的时候就应该考虑增大表看空间了。查看方法如下sql:方法一:select dbf.tablespace_name,dbf.totalspace "总量(m)",dbf.totalblocks as 总块数,dfs.freespace "剩余总量(m)",dfs.freeblocks "剩余块数",(dfs....
  • 13966242918: oracle 9i中,如何查看一个库中有多少表空间和一个表空间中有多少张表...
    王奚:用sys账号或者拥有DBA权限的账号登录系统,通过表DBA_TABLESPACES查询表空间的信息,通过表DBA_ALL_TABLES查询表的信息,要知道一个空间下有那些表,通过TABLESPACE_NAME字段进行限制。或者也可以像楼一说的通过PL\/SQL Developer的图形界面来查看。
  • 13966242918: 如何查看oracle数据库中的表空间
    王奚:只查询名字的话用如下语句:selecttablespace_namefromdba_tablespaces;表空间含义:表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表,所以称作表空间。Oracle数据库中至少存在一个表空间,即SYSTEM的表空间。
  • 13966242918: “oracle”怎么查看表的空间里有哪些表?
    王奚:5、有些查询表空间的语句需要执行用户需要高的权限,如何查看当前用户的角色呢?使用命令select * from user_role_privs即可。6、在查询到表空间的信息之后,我们有时需要删除没用的表空间,使用命令drop tablespace xxx including contents and datafiles;即可。甲骨文股份有限公司(Oracle)是全球大型数据...
  • 13966242918: 怎么管理oracle的表空间和数据文件
    王奚:在oracle 里将表空间分为系统表空间和非系统表空间。(1) 系统表空间包括系统表,数据字典,以及系统回滚段等信息。查看系统回滚段:SQL> select * from dba_rollback_segs;(2) 非系统表空间用来分离段(分开临时数据和永久性数据,索引和表放在不同的表空间等等)可以给系统的性能带来 好处,同时可以...

  • 相关链接

  • oracle表空间满了如何扩充
  • oracle表空间大小查询语句
  • 查询临时表空间大小
  • oracle查看自己的表空间
  • 经验分享为自博友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
    有问题请发邮件给我们
    © 经验分享网