dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Runbooks Library/oracle/#36
Runbook #36
oracle
CapacitySEV1 · CRITICAL OUTAGE15-30 dakika / 15-30 minsSYSDBA / DBA / SELECT_CATALOG_ROLE

Oracle Tablespace Full (ORA-01653 / ORA-01654): Freeing and Adding Space

When segment extension fails, computes real usage (including autoextend), finds top consumers and safely adds or resizes datafiles.

Related Metrics:M38
Related Scripts:S63S68S73
#tablespace#ora-01653#autoextend#datafile

Operational Safety & Risk Notice

This runbook contains operational intervention steps; several are write-impacting (KILL, terminate, DROP, RESIZE). Verify in a staging environment first, and apply sequentially in production with verification.

🟢 Salt Okunur (Read-Only)·🟡 Geri Alınabilir (Reversible)·🔴 Yüksek Etkili / Geri Alınamaz (High Impact)

1. Symptom & Signals

- `ORA-01653: unable to extend table OWNER.TABLO by 128 in tablespace TS_ADI` (tablo), `ORA-01654` (indeks), `ORA-01652` (temp).

- İlgili şemadaki INSERT/UPDATE/DDL işlemleri başarısız. M38 > %95.

2. Business & Technical Impact

Yeni alan gerektiren yazmalar hata verir; uygulamanın ilgili modülü çalışmaz. Okumalar etkilenmez.

3. Diagnosis & Root-Cause Analysis

🟢 Read-Only1. Tablespace'in **gerçek** durumu (autoextend sınırı dahil, S63):
sql
SELECT tablespace_name, ROUND(used_space*8192/1048576) AS used_mb,
       ROUND(tablespace_size*8192/1048576) AS max_mb, ROUND(used_percent,1) AS used_pct
FROM dba_tablespace_usage_metrics ORDER BY used_percent DESC;
🟢 Read-Only2. Datafile'lar autoextend'de mi, tavan ne?
sql
SELECT file_name, ROUND(bytes/1048576) AS size_mb, autoextensible,
       ROUND(maxbytes/1048576) AS max_mb, ROUND(increment_by*8192/1048576) AS next_mb
FROM dba_data_files WHERE tablespace_name = 'TS_ADI';
🟢 Read-Only3. **Alanı kim tüketiyor?** (S68):
sql
SELECT * FROM (
  SELECT owner, segment_name, segment_type, ROUND(bytes/1048576) AS mb
  FROM dba_segments WHERE tablespace_name = 'TS_ADI' ORDER BY bytes DESC
) WHERE ROWNUM <= 15;
🟢 Read-Only4. Ani büyümeyse ne değişti? Yeni bir toplu yükleme, bir indeks oluşturma veya bir log tablosunun şişmesi olabilir.
🟢 Read-Only5. Asıl disk/ASM grubu dolu mu? Datafile büyütmeden önce kontrol edin: `df -h` veya `SELECT name, total_mb, free_mb FROM v$asm_diskgroup;`.

4. Remediation & Action Plan

🟡 Reversible1. **Datafile boyutunu artırın** (ortam uygunsa, ASM/disk alanı varsa):
sql
ALTER DATABASE DATAFILE '/u02/oradata/ORCL/ts_adi01.dbf' RESIZE 20G;
🟡 Reversible2. **Autoextend açın / tavan yükseltin:**
sql
ALTER DATABASE DATAFILE '/u02/oradata/ORCL/ts_adi01.dbf'
  AUTOEXTEND ON NEXT 512M MAXSIZE 32G;
🟡 Reversible3. **Yeni datafile ekleyin** (tek datafile 32 GB sınırına dayandıysa, 8K bloklu smallfile tablespace):
sql
ALTER TABLESPACE TS_ADI ADD DATAFILE '/u02/oradata/ORCL/ts_adi02.dbf'
  SIZE 10G AUTOEXTEND ON NEXT 512M MAXSIZE 32G;
-- ASM ile: ALTER TABLESPACE TS_ADI ADD DATAFILE '+DATA' SIZE 10G AUTOEXTEND ON NEXT 512M MAXSIZE 32G;
🔴 HIGH RISK / IRREVERSIBLE4. **Alan geri kazanımı** (acil değilse, planlı yapın): eski/gereksiz veriyi arşivleyin veya `TRUNCATE` edin. `DELETE` alanı geri vermez; yüksek su işaretini (HWM) düşürmek için:
sql
ALTER TABLE owner.tablo ENABLE ROW MOVEMENT;
ALTER TABLE owner.tablo SHRINK SPACE CASCADE;

`SHRINK` yoğun yazma altında kilitlenmelere yol açabilir; düşük trafikte yapın. `TRUNCATE` ve `DROP` geri alınamaz.

5. **Kalıcı çözüm:** Büyüme trendiyle (haftalık/aylık) kapasite tahmini yapın, M38 için %85 uyarı alarmı kurun, büyük tablolara bölümleme ve arşiv/purge politikası ekleyin.

5. Verification & Health Checks

- Başarısız olan işlem yeniden çalıştırıldığında ORA-01653 vermiyor.

- M38 %85'in altında; datafile'larda yeterli büyüme payı var.

- Disk/ASM grubunda boş alan güvenli seviyede.

6. Rollback & Contingency Plan

- `RESIZE` ile büyütme geri alınabilir (küçültme yalnızca kullanılmamış alan kadar mümkündür).

- `AUTOEXTEND` ayarlarını önceki değerlere çevirin. Eklenen datafile genellikle kaldırılamaz (tablespace boşaltılıp yeniden oluşturulmadıkça), ekleme kararını buna göre verin.

- `TRUNCATE` / `DROP` geri alınamaz; önce yedeği doğrulayın.

More ORACLE Runbooks