Tablespace_回收Temp表空间

前几天重新建立大数据量表索引的时候temp表空间扩展了好大,一般的temp不会用太多,因此回收temp表空间

SQL>Alter tablespace TEMP coalesce;

ORA-03217:invalid option for alter of TEMPORARY TABLESPACE 


Cause: invalid option for alter of temporary tablespace was specified

Action: Specify one of the valid options: ADD TEMPFILE, TEMPFILE ONLINE, TEMPFILE OFFLINE


出错原因:Oracle9i 以上本地管理的temp表空间是不能使用 alter database , alter tablespace 来更改的。因为他们 在数据字典中没有参考信息。 也不需要备份tempfile 文件 。 

There is no need to backup the temporary locally manged tablespaces because: 
1. Locally managed tempfiles are always set to NOLOGGING mode. So thus will have no undo. 
2. Extents are managed by bitmap in each datafile to keep track of free or used status of blocks in that datafile.
3. The data dictionary does not manage the tablespace. 
4. Rollback information is not generated because there is no update on the data dictionary 
5. Media recovery does not recognize tempfiles.


1)用户缺省表空间查询:

SQL>select username,temporary_tablespace from dba_users;

USERNAME                       TEMPORARY_TABLESPACE
------------------------------ ------------------------------
ISGIS                                  TEMP
SCOTT                               TEMP


2)表空间包含的数据文件:

SQL>select name from v$tempfile;

NAME
-----------------------------------------------
/opt/ora10g/oradata/gis/temp01.dbf


3)创建新表空间:

SQL>create temporary tablespace TEMP2 TEMPFILE '/opt/oracle/database/oradata/gis/temp02.dbf ' SIZE 512M REUSE AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;
 
Tablespace created


4)看哪些用户在使用表间:

SQL>SELECT se.username,sid,serial#,sql_address,machine, program,tablespace,segtype,contents
  2  FROM v$session se,v$sort_usage su
  3  WHERE se.saddr=su.session_addr
  4  Order By machine ;

USERNAME      SID    SERIAL# SQL_ADDRESS MACHINE      PROGRAM       TABLESPACE       SEGTYPE   CONTENTS
------------------------------ ---------- ---------- ----------- ---------

5)修改系统默认表空间及确认:

SQL>alter database default temporary tablespace temp2;
Database altered

SQL>select username,temporary_tablespace from dba_users;
USERNAME                       TEMPORARY_TABLESPACE
------------------------------ ------------------------------
XMJL                                  TEMP2
MDDATA                           TEMP2

6)删除旧表空间:

SQL>drop tablespace temp including contents and datafiles;
 Tablespace dropped

其实到此步就应该释放了临时表空间占用的存储空间,为了保持一致,可以删掉这个过渡的表空间,建立和原来名称一致的临时表空间。

7)创建原来临时表空间

 
SQL> create temporary tablespace TEMP TEMPFILE '/opt/oracle/database/oradata/gis/temp01.dbf' SIZE 500M REUSE AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;
Tablespace created

8)修改系统默认表空间及确认:
SQL> alter database default temporary tablespace temp;
Database altered
 
SQL> select username,temporary_tablespace from dba_users;
USERNAME                       TEMPORARY_TABLESPACE
------------------------------ ------------------------------
XMJL                                 TEMP
MDDATA                           TEMP

9)删除中转的临时表空间TEMP2

SQL>drop tablespace temp2 including contents and datafiles;
Tablespace dropped

10)确认临时表空间属性

SQL>select file_name,tablespace_name,bytes/1024/1024 MB,autoextensible from dba_temp_files;
FILE_NAME                                                                        TABLESPACE_NAME                        MB AUTOEXTENSIBLE
-------------------------------------------------------------------------------- ------------------------------ ---------- --------------
/opt/oracle/database/oradata/gis/temp01.dbf                                      TEMP                                  500 YES


### 如何扩展数据库中的临时表空间大小 #### MySQL 5.7 和 MySQL 8.0 的差异 在 MySQL 5.7 版本中,当会话被终止时,虽然临时表会被释放并标记为不再使用,但实际上 `ibtmp` 文件所占用的空间并不会返回给操作系统[^1]。这意味着即使清理了临时表数据,磁盘上的文件大小也不会缩小。为了完全回收这些空间,唯一的方法是重启整个 MySQL 数据库服务。 而在 MySQL 8.0 中引入了一项改进功能,允许通过简单地结束相关联的用户会话即可有效减少由未使用的临时表造成的存储浪费情况发生概率,并且能够动态调整某些参数而无需重新启动服务器实例来实现更灵活管理策略需求下的资源分配优化目标达成效果更好一些。 #### 修改默认临时表空间名称 对于希望更改当前正在运行环境里的默认临时表空间定义而言,则可以执行如下 SQL 命令完成此操作过程: ```sql ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp1; ``` 这条语句的作用是指定一个新的名为 `temp1` 的临时表空间作为今后创建新连接对象时候优先考虑采用的那个区域位置所在之处[^2]。 #### 调整 innodb_temp_data_file_path 参数 (仅限于 MySQL 5.7) 如果正处在较旧版本即 MySQL 5.7 上面工作的话, 可以尝试编辑配置文件 my.cnf 来增加或者改变关于 InnoDB 存储引擎内部用于保存短期事务处理期间产生的中间结果集等内容所需额外容量限制方面的设定值: 打开我的 .cnf 配置文档找到 `[mysqld]` 下添加/修改下面这一行: ```ini innodb_temp_data_file_path=ibtmp1:12M:autoextend:max:5G ``` 这里表示初始大小设成 12MB 同时开启自动增长模式直到达到最大限额为止也就是总共不超过 5GB 大小范围之内[^3]。 > **注意**: 更改完成后记得保存退出再重启 mysqld 进程使改动生效! --- ### 总结 综上所述,在不同版本下有不同的方法去解决这个问题。如果是较低版次比如说是五点七系列的产品线当中遇到此类状况则可能需要借助外部手段诸如手工干预方式来进行必要的维护作业才能彻底解决问题;而对于更高阶一点的新一代产品来说就相对比较简单多了因为已经内置了很多实用的功能特性可以直接在线上调用命令快速搞定一切麻烦事啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值