當我對我的 Oracle db 運行查詢時出現此錯誤,我相信這表明我需要擴展我的 dbf 檔案大小:
ORA-01652: unable to extend temp segment by 128 in tablespace TEMP
01652. 00000 - "unable to extend temp segment by %s in tablespace %s"
*Cause: Failed to allocate an extent of the required number of blocks for
a temporary segment in the tablespace indicated.
*Action: Use ALTER TABLESPACE ADD DATAFILE statement to add one or more
files to the tablespace indicated.
基于此,我找到了這個SO 答案,它建議運行以下命令:
select value from v$parameter where name = 'db_block_size';
這將回傳一個值8192。如果上述回傳“低最大大小”,則相同的 SO 答案建議運行自動擴展。所以我決定嘗試這種方法。我首先獲取我的 dbf 檔案的位置:
select name from v$datafile;
回傳這 6 行:
/opt/oracle/product/11.2.0/xe/dbs/system.dbf
/opt/oracle/product/11.2.0/xe/dbs/sysaux.dbf
/opt/oracle/product/11.2.0/xe/dbs/undotbs1.dbf
/opt/oracle/product/11.2.0/xe/dbs/users.dbf
/opt/oracle/deploy/oradata/my_db_01.dbf
/opt/oracle/deploy/oradata/my_db_02.dbf
所以我嘗試運行一個自動擴展my_db_01.dbf:
alter database datafile /opt/oracle/deploy/oradata/my_db_01.dbf autoextend on maxsize unlimited;
但這給了我:
ERROR at line 1:
ORA-02236: invalid file name
為什么當我直接從 v$datafile 查詢中提取檔案名時檔案名無效?
uj5u.com熱心網友回復:
你得到的錯誤是你在TEMP. 如果您正在運行一個查詢,這就是 Oracle 用于排序等操作的空間。雖然您確實有可能確實想要擴展TEMP表空間的大小,但更常見的問題是您正在運行的特定查詢存在導致它使用過多TEMP空間的錯誤。例如,如果您遺漏了一個連接條件并且您正在創建一個笛卡爾積,那么TEMP在問題上投入空間不太可能解決它——您需要修復查詢。
如果您確定查詢撰寫正確,并且您認為它需要TEMP消耗的任何空間是合理的,則需要查看v$tempfile或dba_temp_files查看與臨時表空間關聯的檔案。
select file_name,
tablespace_name,
bytes/1024/1024 current_size_gb,
maxbytes/1024/1024 max_size_gb,
autoextensible
from dba_temp_files;
如果TEMP檔案尚未設定為自動擴展,您可以將它們設定為自動擴展(注意file_name必須用單引號括起來)
alter database tempfile '<<path>>' autoextend on;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/314319.html
標籤:甲骨文
