当前位置: 首页 > Oracle, oracle 10g, oracle 11g > 正文

ORA-10922 Temporary tablespace group is empty错误

今天开发人员在运行一个大SQL的时候,遇到了ORA-10922错误。

ERROR at line 41:
ORA-10922: Temporary tablespace group is empty

这个错误是由于该SQL需要大量的排序,而内存中的排序区满足不了排序的需求,需要使用临时表空间,而临时表空间组不存在导致的,这套数据库是从2节点的RAC生产库通过RMAN恢复而成的测试环境,源数据库使用临时表空间组,同事在恢复这套环境时,删除掉了临时表空间组,重新建了新的临时表空间。

SQL> select FILE_NAME,TABLESPACE_NAME from dba_temp_files;

FILE_NAME                                TABLESPACE_NAME
---------------------------------------- ------------------------------
/u01/app/oracle/oradata/ivldb/temp01.dbf TEMP_IVLDB

此时,临时表空间组已经删除。

SQL>  select * from dba_tablespace_groups;

no rows selected

起初以为同事没有将这个新创建的临时表空间设置为数据库的默认临时表空间导致的。

SQL> alter database default temporary tablespace TEMP_IVLDB;
alter database default temporary tablespace TEMP_IVLDB
*
ERROR at line 1:
ORA-12907: tablespace TEMP_IVLDB is already the default temporary tablespace

可是在将这个临时表空间设置为数据库的默认表空间时,提示已经设置成数据库级的默认临时表空间了。那么导致这个问题的原因就是用户级的临时表空间没有修改导致的。

SQL> select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users where username='CHGSHS';

USERNAME                       DEFAULT_TABLESPACE                 TEMPORARY_TABLESPACE
------------------------------ ------------------------------     ------------------------------
CHGSHS                         TS_BSC                             IVALUE_TEMP

经查询,这个用户还的默认临时表空间还是之前被删掉的临时表空间组,将这个用户的默认临时表空间设置为新创建的临时表空间,问题解决。

SQL> alter user CHGSHS temporary tablespace TEMP_IVLDB;

User altered.

查看是否还有其他用户使用原先的被删掉的临时表空间组。

查看是否还有其他用户使用原先的被删掉的临时表空间组。
SQL>  select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users where TEMPORARY_TABLESPACE='IVALUE_TEMP';

USERNAME                       DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
------------------------------ ------------------------------ ------------------------------
ZT                             TS_BSC                         IVALUE_TEMP
MIGSP                          MIGSP                          IVALUE_TEMP
VOUCHER                        TS_BSC                         IVALUE_TEMP
CHGSHSIF                       TS_FUL_IF                      IVALUE_TEMP

将以上用户的默认临时表空间修改为新创建的临时表空间,以免这些用户也遇到这个问题。

SQL> alter user CHGSHSIF temporary tablespace TEMP_IVLDB;

User altered.

SQL> alter user VOUCHER  temporary tablespace TEMP_IVLDB;

User altered.

SQL> alter user MIGSP temporary tablespace TEMP_IVLDB;

User altered.

SQL> alter user ZT temporary tablespace TEMP_IVLDB;

User altered.

SQL> select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users where TEMPORARY_TABLESPACE='IVALUE_TEMP';

no rows selected

至此,问题解决。

本文固定链接: http://www.dbdream.com.cn/2016/02/ora-10922-temporary-tablespace-group-is-empty%e9%94%99%e8%af%af/ | 信春哥,系统稳,闭眼上线不回滚!

该日志由 dbdream 于2016年02月29日发表在 Oracle, oracle 10g, oracle 11g 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: ORA-10922 Temporary tablespace group is empty错误 | 信春哥,系统稳,闭眼上线不回滚!

ORA-10922 Temporary tablespace group is empty错误:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter