錯誤描述如下:
SQL> select dbms_metadata.get_ddl('TABLE','TEST') from dual;
ERROR:
ORA-25153: Temporary Tablespace is Empty
ORA-06512: at "SYS.DBMS_LOB", line 664
ORA-06512: at "SYS.DBMS_METADATA", line 3825
ORA-06512: at "SYS.DBMS_METADATA", line 5678
ORA-06512: at line 1
no rows selected
解決方法: --很簡單解決的
(1)故障定位
SQL> select name from v$tempfile; --發現臨時文件丟失
no rows selected
也會從警告日誌中可以看出確實臨時文件
SMON: enabling tx recovery
*********************************************************************
WARNING: The following temporary tablespaces contain no files.
This condition can occur when a backup controlfile has
been restored. It may be necessary to add files to these
tablespaces. That can be done using the SQL statement:
ALTER TABLESPACE <tablespace_name> ADD TEMPFILE
Alternatively, if these temporary tablespaces are no longer
needed, then they can be dropped.
Empty temporary tablespace: TEMP
*********************************************************************
(2)指定臨時文件
SQL> alter tablespace temp add tempfile '/u01/oracle/oradata/elvis/temp01.dbf';
Tablespace altered.
SQL> select * from v$tempfile;
FILE# CREATION_CHANGE# CREATION_ TS# RFILE# STATUS ENABLED
---------- ---------------- --------- ---------- ---------- ------- ----------
BYTES BLOCKS CREATE_BYTES BLOCK_SIZE
---------- ---------- ------------ ----------
NAME
--------------------------------------------------------------------------------
1 920166 17-OCT-12 3 1 ONLINE READ WRITE
71303168 8704 71303168 8192
/u01/oracle/oradata/elvis/temp01.dbf
SQL> set long 9999;
SQL> select dbms_metadata.get_ddl('TABLE','TEST') from dual;
DBMS_METADATA.GET_DDL('TABLE','TEST')
--------------------------------------------------------------------------------
CREATE TABLE "SYS"."TEST"
( "ID" NUMBER(*,0),
"SCN" NUMBER(*,0)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DE
FAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "TEST"
OK沒有問題了
總結:臨時文件丟失不會影響運行中的數據庫,但臨時文件還是必不可少的,因爲Oracle使用臨時文件來存儲大規模排序操作和散列操作的中間結果等等作用,如果臨時文件丟失,完全可以在創建一個,而且臨時文件丟失不會有數據丟失的情況。因爲永久數據對象不會存儲在臨時文件中,總之Oracle既然創造了臨時文件,就有它特有的意義。
elvis
2012.10.20
知識共享~共同進步
轉載請註明: