Oracle ORA-01653: "unable to extend table" — Tablespace Neden Büyümüyor?
ORA-01653 / 01654 / 01652 ayrımı, tablespace doluluk sorgusu, datafile autoextend ve MAXSIZE ile güvenli büyütme.
Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.
▸Belirti
ORA-01653: unable to extend table APP.SIPARIS by 1024 in tablespace APP_DATAÜç kardeş hata vardır ve kesinlikle karıştırılmamalıdır:
| Hata | Hedef Nesne | Büyütülecek Dosya Türü |
|---|---|---|
ORA-01653 | Tablo segmenti | Datafile (dba_data_files) |
ORA-01654 | İndeks segmenti | Datafile (dba_data_files) |
ORA-01652 | Geçici segment (sıralama, hash join) | Tempfile (dba_temp_files) |
Aynı "yer yok" hissini verirler ama farklı dosya kümelerini büyütmek gerekir. Yanlış olanı büyütmek sorunu çözmez.
▸Adım adım çözüm
1. Doluluk tablosunu çıkarın.
SELECT df.tablespace_name,
ROUND(df.tot_mb) AS toplam_mb,
ROUND(df.tot_mb - NVL(fs.free_mb, 0)) AS kullanilan_mb,
ROUND(100 * (df.tot_mb - NVL(fs.free_mb, 0)) / df.tot_mb, 1) AS dolu_yuzde
FROM (SELECT tablespace_name, SUM(bytes) / 1048576 AS tot_mb
FROM dba_data_files GROUP BY tablespace_name) df
LEFT JOIN (SELECT tablespace_name, SUM(bytes) / 1048576 AS free_mb
FROM dba_free_space GROUP BY tablespace_name) fs
ON df.tablespace_name = fs.tablespace_name
ORDER BY dolu_yuzde DESC;2. Datafile'ın büyüyebilir olup olmadığını kontrol edin.
SELECT tablespace_name, file_name,
ROUND(bytes / 1048576) AS mb,
autoextensible,
ROUND(maxbytes / 1048576) AS max_mb,
increment_by
FROM dba_data_files
WHERE tablespace_name = 'APP_DATA';Üç olası durum vardır:
- •
autoextensible = NO→ Dosya sabit boyutludur, otomatik büyümez. - •
autoextensible = YESamamaxbytes'a ulaşmış → Hedef sınıra gelinmiştir. - •
autoextensible = YES, sınır yok ama hata devam ediyor → Dosya sistemi (OS disk) doludur (3. adım).
3. Dosya sistemini doğrulayın. Oracle içinden bakmak yetmez; işletim sistemi diskine bakın:
df -h /u01/app/oracle/oradataTablespace %40 dolu görünürken işletim sistemi %100 olabilir.
4. Tablespace'i güvenle büyütün (en az riskli olanı seçin).
-- a) Mevcut dosyada autoextend aç (yeniden başlatma gerekmez)
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/app_data01.dbf'
AUTOEXTEND ON NEXT 256M MAXSIZE 32767M;
-- b) Yeni datafile ekle (mevcut dosya 32 GB sınırına dayandıysa)
ALTER TABLESPACE APP_DATA
ADD DATAFILE '/u01/app/oracle/oradata/ORCL/app_data02.dbf'
SIZE 4G AUTOEXTEND ON NEXT 256M MAXSIZE 32767M;
-- c) Yeniden boyutlandır (yalnızca autoextend kapalıysa ve diskte yer varsa)
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/app_data01.dbf' RESIZE 8G;MAXSIZE UNLIMITED kesinlikle kullanmayın. Sınırsız autoextend, bir gün dosya sistemini tamamen doldurur ve sadece bu tablespace'i değil alert log ve tüm instance'ı kilitler. Her datafile için somut bir MAXSIZE belirleyin.5. Hangi nesnenin büyüdüğünü kontrol edin.
SELECT owner, segment_name, segment_type,
ROUND(bytes / 1048576) AS mb,
tablespace_name
FROM dba_segments
WHERE tablespace_name = 'APP_DATA'
ORDER BY bytes DESC
FETCH FIRST 10 ROWS ONLY;▸Bunu bir daha yaşamamak için
Tablespace doluluk oranını ve her datafile'ın MAXSIZE'a uzaklığını günlük olarak izleyin (alarm eşiği %85). Bir tablespace'i tek bir dev dosya yerine birden fazla datafile'a bölmek taşıma ve bakım esnekliği sağlar.
- •İlgili Hata: SQL Server Msg 9002 Transaction Log Full
- •İlgili Hata: MySQL No space left on device
Diğer Veritabanı Hata Teşhisleri
Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.
PostgreSQL too many clients already Hatası: 6 Adımda Çözüm
FATAL: sorry, too many clients already hatasının üç nedeni, nedeni ayırt eden tek sorgu ve max_connections ile PgBouncer üzerinden kalıcı çözümü.
PostgreSQL password authentication failed Hatası: Neden ve Çözüm
psql password authentication failed hatasının dört nedeni: yanlış şifre, md5/SCRAM uyuşmazlığı, pg_hba.conf sırası ve yanlış cluster. Adım adım teşhis.
MySQL ERROR 1045 Access denied: root Şifresi Sıfırlama Rehberi
MySQL 1045 hatasının dört nedeni, "using password: YES/NO" ayrımının anlamı ve kilitli kalınca --init-file ile güvenli şifre sıfırlama.