Temp Tablespace’ ine Ait Datafile’ leri Nasıl Drop Edebiliriz

Daha önce temp tablespace’ ni nasıl drop – create edebilirizden bahsetmiştim. (http://www.kamilturkyilmaz.com/2010/10/23/temp-tablespace%E2%80%99-ini-drop-etmek/) Ancak temp tablespace ‘ini drop – create etmeden sadece temp tbs’ ine bağlı olan datafile’ lerden birini drop edip sonrasında tekrar create edebilirmiyiz bundan bahsetmek istiyorum. Neden bu tarz bir işleme ihtiyaç duyabiliriz, diskin birinde anormal bir doluluk olması durumunda hızlı aksiyon alabilmek ve database’ in durmasını engellemek için ilk aksiyon olarak bu diskde yer alan temp tbs’ ine ait datafile’ in drop edilmesi yoluna gidilebilir. Temp’ in çok küçük olması uygulama seviyesinde kimi transactionların hata almasına yol açabilir tabi bu riskide göz önüne almak ve önleminizi alıyor olmanız gerekecektir.

Temp tablespace’ i altındaki datafile’ i drop create etmekde oracle 10gR2 öncesinde ve sonrasında syntax’ ında ufak bir farklılık bulunmaktaktadır. Bizim şu anda bu testleti yapacağımız test ortamımızın 11.2.0.3. Bu farklılıkdan bahsediyor olacaz.

İlk olarak Oracle 10gR2 sonrasındaki duruma bakalım.

Temp tablespace’ inde hangi datafile’ ler ona bakalım;

select file_name, tablespace_name, status from dba_temp_files ;

FILE_NAME TABLESPACE_NAME STATUS
/u02/oradata/oratest/dbf/temp01.dbf TEMP ONLINE
/u02/oradata/oratest/dbf/temp02.dbf TEMP ONLINE

Şimdi temp02.dbf’ i drop etmeyi deneyelim;

SQL>alter database tempfile ‘/u02/oradata/oratest/dbf/temp02.dbf’ drop including datafiles
Database altered.

Şimdi sildiğimiz datafile’ i tekrar ekleyip testimize devam edelim ;

SQL>ALTER TABLESPACE TEMP ADD TEMPFILE ‘/u02/oradata/oratest/dbf/temp02.dbf’ SIZE 1024M
Tablespace altered.

Oracle 10gR2 ve sonrasında bu işlem yapılmak istenirse yukarıdaki gibi yapılabilir, 9i olan sistemler için syntax aşağıdaki gibi, (not; bu syntax 10gR2 ve sonrasında da sorunsuz olarak çalışıyor, bunuda kullanmak isterseniz kullanabilirsiniz)

SQL> alter tablespace temp drop tempfile ‘/u02/oradata/oratest/dbf/temp02.dbf’
Tablespace altered.

Temp tbs’ i kullanılırken drop etmeye çalışırsanız ilk drop komutunu çalıştırdığınız da drop olmadığını sadece statusunun OFFLINE olduğunu görürsünüz. İkinci drop denemeniz de datafile’ in drop olduğunu görürsünüz. Test edelim ;

Ikinci bir session açarak yaklaşık 5 gb ‘ lık bir tabloyu temp tbs’ ini kullanması için sonuna order by ekleyerek select ediyorum ;

select * from t
order by 1,2,3,4 desc ;

Şu anki temp tbs’ lerine ait dbf’ lerin durumu ;

select tablespace_name tbs_name, file_name dbf_name, trunc(bytes/1024/1024) Size_MB, status
from dba_temp_files ;

TBS_NAME DBF_NAME SIZE_MB STATUS
TEMP /u02/oradata/oratest/dbf/temp01.dbf 10 ONLINE
TEMP /u02/oradata/oratest/dbf/temp02.dbf 10024 ONLINE

Şu anki temp kullanımına baktığımız da ;

SELECT S.sid || ‘,’ || S.serial# sid_serial, S.username, S.osuser, P.spid, S.module,
S.program, SUM (T.blocks) * TBS.block_size / 1024 / 1024 mb_used, T.tablespace,
COUNT(*) sort_ops
FROM v$sort_usage T, v$session S, dba_tablespaces TBS, v$process P
WHERE T.session_addr = S.saddr
AND S.paddr = P.addr
AND T.tablespace = TBS.tablespace_name
GROUP BY S.sid, S.serial#, S.username, S.osuser, P.spid, S.module,
S.program, TBS.block_size, T.tablespace
ORDER BY sid_serial;

SID_SERIAL USERNAME PROGRAM MB_USED TABLESPACE
241,34945 KAMIL Toad.exe 378 TEMP

Şu anda temp tbs’ in altındaki tüm dbf’ lerin kullanıldığından eminiz şimdi drop etmeyi deneyelim ;

SQL> alter tablespace temp drop tempfile ‘/u02/oradata/oratest/dbf/temp02.dbf’
Tablespace altered.

Drop ettiğini söylüyor, kontrol edelim;

select tablespace_name tbs_name, file_name dbf_name, trunc(bytes/1024/1024) Size_MB, status
from dba_temp_files

TBS_NAME DBF_NAME SIZE_MB STATUS
TEMP /u02/oradata/oratest/dbf/temp01.dbf 10 ONLINE
TEMP /u02/oradata/oratest/dbf/temp02.dbf OFFLINE

Datafile hala duruyor ama kullanılabilir durumda değil çünkü statüsü OFFLINE, tekrar aynı drop komutunu çalıştıralım ;

SQL> alter tablespace temp drop tempfile ‘/u02/oradata/oratest/dbf/temp02.dbf’
Tablespace altered.

Temp tbs’ ine ait Datafile’ leri tekrar kontrol edelim ;

TBS_NAME DBF_NAME SIZE_MB STATUS
TEMP /u02/oradata/oratest/dbf/temp01.dbf 10 ONLINE

Artık ikinci dbf görünmüyor, drop olmuş oldu. Diğer sessionda başlatmış olduğum select ‘ imde tahmin edeceğiniz üzere işlem için artık yeterli temp alanı bulamayacağı için hata almış oldu ;

SQL> select * from t
order by 1,2,3,4 desc
select * from t
order by 1,2,3,4 desc
*
Error at line 1
ORA-01652: unable to extend temp segment by 128 in tablespace TEMP

Be Sociable, Share!

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


+ 1 = dört