Blog

Tablespace’lerde Boş alanları yönetmek.

Tablespace’inizde ne kadar boş alan kaldığını ve ya ne kadar alan kapladığını görmek için aşağıdaki sql işinize yarayacaktır.

SELECT /* + RULE */  df.tablespace_name "Tablespace",
df.bytes / (1024 * 1024) "Size (MB)",
SUM(fs.bytes) / (1024 * 1024) "Free (MB)",
Nvl(Round(SUM(fs.bytes) * 100 / df.bytes),1) "% Free",
Round((df.bytes - SUM(fs.bytes)) * 100 / df.bytes) "% Used"
FROM dba_free_space fs,
(SELECT tablespace_name,SUM(bytes) bytes
FROM dba_data_files
GROUP BY tablespace_name) df
WHERE fs.tablespace_name (+)  = df.tablespace_name
GROUP BY df.tablespace_name,df.bytes
UNION ALL
SELECT /* + RULE */ df.tablespace_name tspace,
fs.bytes / (1024 * 1024),
SUM(df.bytes_free) / (1024 * 1024),
Nvl(Round((SUM(fs.bytes) - df.bytes_used) * 100 / fs.bytes), 1),
Round((SUM(fs.bytes) - df.bytes_free) * 100 / fs.bytes)
FROM dba_temp_files fs,
(SELECT tablespace_name,bytes_free,bytes_used
FROM v$temp_space_header
GROUP BY tablespace_name,bytes_free,bytes_used) df
WHERE fs.tablespace_name (+)  = df.tablespace_name
GROUP BY df.tablespace_name,fs.bytes,df.bytes_free,df.bytes_used
ORDER BY 4 DESC;

Benim durumumda System tablosunda yeterli yer kalmamıştı. Kullanıcılar bağlandığında select yapabiliyor fakat update yapamıyorlardı. Aslında bu duruma neden olan şey temelde birkaç tablonun kazara System tablespace’inde yaratılmış olması. Normalde Users tablespace’inde yaratılmalıydı. O tabloları taşımak ayrı bir konu…

Şimdi System tablespace inin boyutunu büyültelim. Normalde 15gb idi. 20gb olarak değiştirelim. Soz konusu serverda Server online iken 75 saniye sürdü.

alter database datafile ‘O:\ORCL\ORCL\system01.dbf’ resize 20G;