• 如何在oracle中缩小临时表空间?ORA-01652无法在表空间中扩展temp


    查询临时表空间有多大:

    SQL> SELECT tablespace_name, file_name, bytes
     FROM dba_temp_files WHERE tablespace_name like 'TEMP%';
    
    TABLESPACE_NAME   FILE_NAME                                 BYTES
    ----------------- -------------------------------- --------------
    TEMP              /the/full/path/to/temp01.dbf     13,917,200,000
    

    为什么临时表空间这么大。您可能已经知道答案了。可能是由于您对一个大型查询使用了错误的排序(我已经做了多次以上)。这可能是由于其他一些特殊情况所致。如果是这种情况,那么您要做的就是缩小临时表空间并继续生活。

    但是,如果您不知道该怎么办?在决定缩小之前,您可能需要对大型表空间的原因进行一些调查。如果定期发生这种情况,则您的数据库可能只需要那么多空间。

    动态性能视图

    V$TEMPSEG_USAGE
    

    在确定原因方面非常有用。

    也许您只是不关心原因,而只需要缩小它。这是您上班的第三天。如果数据和临时表空间为13GiB,则数据库中的数据仅为200MiB-只需收缩并继续。如果它再次增长,那么我们将调查原因。同时,该磁盘卷上的空间不足,我只需要退回空间。

    让我们来看看缩小它。这将取决于您正在运行的Oracle版本以及如何设置临时表空间。
    Oracle会尽力防止您犯任何可怕的错误,因此我们将尝试使用这些命令,如果这些命令不起作用,我们将采用新的方式进行缩减。

    首先,让我们尝试缩小数据文件。如果我们能够做到这一点,那么我们将重新获得空间,我们可以担心它为什么会在明天增长。

    SQL>
    SQL> alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M; 
    alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M
    *   
    ERROR at line 1:
    ORA-03297: file contains used data beyond requested RESIZE value
    

    根据错误消息,您可能希望以小于文件当前位置的其他大小尝试此操作。我在这方面取得的成功有限。只有当临时表空间位于文件的开头并且小于您指定的大小时,Oracle才会收缩文件。一些旧的Oracle文档(他们已对此进行了纠正)说,您可以发出命令,并且错误消息将告诉您可以缩小到什么大小。在我开始担任DBA时,这还不是真的。您只需要猜测并重新运行该命令很多次,看看它是否有效。

    好的。那没用。这个怎么样。

    SQL> alter tablespace YOUR_TEMP_TABLESPACE_NAME shrink space keep 256M;
    

    如果您使用的是11g(Maybee也使用的是10g)就可以了!如果可行,您可能需要返回上一个命令,然后再尝试一些。

    但是,如果失败了怎么办。如果临时表空间是安装数据库时设置的默认临时表,那么您可能需要做更多的工作。在这一点上,我通常会重新评估是否真的需要这个空间。毕竟,所有磁盘空间的价格仅为GiB $ X.XX。通常我不想在生产时间内进行这样的更改。这意味着要在凌晨2点工作!(并不是说我真的反对在凌晨2点工作-只是……我也喜欢睡觉。而且我的妻子喜欢在凌晨2点让我在家...不在凌晨4点漫游市区,想记得在哪里我三个小时前停了车,听说过“远程通勤”的事情。

    好...回到正题...如果要收缩的临时表空间是您的默认临时表空间,则必须首先创建一个新的临时表空间,将其设置为默认临时表空间,然后删除旧的默认临时表空间。表空间并重新创建它。后记删除创建的第二个临时表。

    SQL> CREATE TEMPORARY TABLESPACE temp2
      TEMPFILE '/the/full/path/to/temp2_01.dbf' SIZE 5M REUSE
      AUTOEXTEND ON NEXT 1M MAXSIZE unlimited
      EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
    
    Tablespace created.
    
    SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;
    
    Database altered.
    
    SQL> DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;
    
    Tablespace dropped.
    
    
    SQL> CREATE TEMPORARY TABLESPACE temp
    2  TEMPFILE '/the/full/path/to/temp01.dbf' SIZE 256M REUSE
    3  AUTOEXTEND ON NEXT 128M MAXSIZE unlimited
    4  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
    
    Tablespace created.
    
    SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;
    
    Database altered.
    
    SQL> DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES;
    
    Tablespace dropped.
    

    希望这些对你有所帮助!

    -------------------------------------------------------------------------
    ## 极客时间全网最便宜最优惠购买方式,优惠券返现 百度网盘 微信关注公众号“选门好课”
    扫描下方二维码关注我的公众号"选门好课",与我一起交流知识
  • 相关阅读:
    认识Python
    MongoDB
    K8S搭建过程随笔_证书CFSSL
    K8S搭建过程随笔_系统初始化
    zabbix4.2Proxy安装文档
    Zabbix4.2Server端部署
    单节点FastDFS与Nginx部署
    Windows Server 2016分层式存储,使用PowerShell修改底层介质类型
    kill命令和killall命令
    Nuget使用时遇到的问题,Solved
  • 原文地址:https://www.cnblogs.com/singworld/p/12175269.html
Copyright © 2020-2023  润新知