dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Home/Hata Kütüphanesi/Oracle/oracle-ora-01653-tablespace
Oracle
Oracle 19c - 23ai
6 dk okuma
ORA-01653: unable to extend table in tablespace

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.

Standart:Kıdemli Veritabanı Mimarı & SRE (dataiotech Labs)
Test Edilen Sürümler: Oracle Database 19c / 21c / 23ai
İlk 60 Saniye Teşhis Protokolü:

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

plaintext
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:

HataHedef NesneBüyütülecek Dosya Türü
ORA-01653Tablo segmentiDatafile (dba_data_files)
ORA-01654İndeks segmentiDatafile (dba_data_files)
ORA-01652Geç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.

sql
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.

sql
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 = YES ama maxbytes'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:

bash
df -h /u01/app/oracle/oradata

Tablespace %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).

sql
-- 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;
[!WARNING] 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.

sql
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.

Diğer Veritabanı Hata Teşhisleri

Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.

Tüm Hatalar (20)