ORA-01652: unable to extend temp segment by N in tablespace TEMP
Bir sıralama, hash join ya da benzer bir işlem için geçici tablespace yetmedi. Asıl neden çoğu zaman küçük tablespace değil, kötü bir yürütme planıdır. TEMP’i kullanan ifadeyi bulun, düzeltin; yer eklemeyi sonra düşünün.
ORA-01652 ne demek?
Belleğe sığmayan işlemler geçici tablespace’e taşar: büyük sıralamalar, hash join’ler, indeks oluşturma, global geçici tablolar. Yer biterse ifade ORA-01652 ile düşer. Eksik bir join koşulunun yol açtığı kartezyen birleşim, dakikalar içinde yüzlerce gigabayt tüketebilir.
ORA-01652 neden olur?
- Kötü planlı ya da join koşulu eksik bir sorgu.
- Çok büyük bir sıralama,
DISTINCT,GROUP BYya da hash join. - İndeks oluşturma ya da büyük
CREATE TABLE AS SELECTişlemleri. - TEMP’i aynı anda kullanan çok sayıda oturum ya da gerçekten küçük bir TEMP.
ORA-01652 nasıl çözülür?
- TEMP’i şu an kimin kullandığını bulun:
V$TEMPSEG_USAGEileV$SESSION’ı birleştirin. - En ağır ifadenin planını inceleyin; eksik join koşullarına ve kartezyen çarpımlara bakın.
- Yer gerçekten gerekiyorsa tempfile ekleyin:
ALTER TABLESPACE temp ADD TEMPFILE …. - Mesajın TEMP’i gösterdiğini kontrol edin. Kalıcı bir tablespace’i gösteriyorsa işlem orada kalıcı bir segment oluşturuyordur.
ORA-01652 örneği
TEMP’i şu an kim kullanıyor?
SELECT s.sid, s.username, u.sql_id, u.tablespace,
ROUND(u.blocks * t.block_size / 1024 / 1024) AS mb
FROM v$tempseg_usage u
JOIN v$session s ON s.saddr = u.session_addr
JOIN dba_tablespaces t ON t.tablespace_name = u.tablespace
ORDER BY mb DESC;
Geçici alanı yalnızca gerçekten gerekiyorsa ekleyin:
ALTER TABLESPACE temp ADD TEMPFILE SIZE 10G AUTOEXTEND ON NEXT 1G MAXSIZE 30G;
SQLlightspeed’de
Bir ifade hata verdiğinde SQLlightspeed’in hata paneli, hata kodunu sade bir Türkçe açıklama ve ne yapmanız gerektiğine dair bir öneriyle; Oracle’ın kendi mesajı ve Oracle dokümantasyonuna bağlantıyla birlikte gösterir — bu hata ve sık görülen onlarca başka hata için.
İlgili hatalar
ORA-01653ORA-01555ORA-04031 Tüm Oracle hataları →
Oracle dokümantasyonu: ORA-01652. Oracle, Oracle Corporation’ın tescilli ticari markasıdır. SQLlightspeed’in Oracle ile bir bağlantısı yoktur.