TableSpace Yönetimi
Oracle verileri mantıksal olarak tablespace lerde fiziksel olarak datafile larda tutar. Resim işletim sistemi tarafındaki dosyaları ve mantıksal yapıyı özetlemektedir. (Konu boyunca çok fazla tablespace kelimesi geçeceğinden TS olarak kısaltacağım.)
Tablespace yapısı, veritabanının kontrol edilebilirliği ve bakım işlemleri açısından database adminlerin işlerini kolaylaştırmaktadır . Örneğin her departman için ayrı tablespace ve kullanıcı oluşturarak verileri arası ayrım sağlanabilir. (muhasebe_tbs,satis_tbs, hareket_tbs gibi). veri güncelleme departmandan departmana farklılık gözeteceğinden yedekleme bakım gibi işlerin zamanları farklı tarilere ayarlanabilir. Birinde olabilecek hata diğerlerini etlemeyecektir. Kullanıcılara hak verirken daha esnek ve kolay olacaktır. vs.TS kelimesinden anlaşılması gereken sabit/kalıcı, şema (schema) objelerinin tutulduğu tablespace dir.
Data dictionary özel bir tablespace olan system tablespace inde tutulur. Bir de 10 G ile birlikete gelen zorunlu yardımcı (mandatory auxilary) system table space vardır . Eğer eğer 10 G öncesi versiyondan migration yapılıyorsa bu auxilary ts in upgrade işleminden önce oluşturulması lazım.
Temporary TS : Kullanıcı oturumu boyunca data tutar (sıralama, sort işlemleri vb). data file yerine temp file larda data tutar.
Undo TS : Okunan veri tutarlılığını sağlamak için kullanılır. Undo datalarını tutar ilerleyen bölümlerde anlatılacak.
TableSpace Türleri
1- Sytem tablespace : Database ile birlikte oluşturulur. Her VT için gereklidir. Data dictionary ve program parcalarını tutar.
2- Non-Sytem tablespace : DBA ler ve kullanıcılar tarafından oluşturulan tablespacelerdir.
TS’ ler oluşturulurken extend lerin yönetimi için iki tür seçilebilir.
1-Dictionary Management TableSpaces (DM TS) : Extend size yönetimi data dictionary tarafından yapılır. Tavsiye edilen bir TS değildir.
2- Localy Management TableSpaces (LM TS) : Extend size yönetimi lokal olarak yapılır. (BitMap tarafından). Default da bir TS oluşturulduğunda yönetim şekli verlmeze TS, LM olarak oluşturulur.
1 2 3 4 5 |
create tablespace test datafile '/u01/DataFiles/test_tbs01' size 50MB Extent management LOCAL Uniform SIZE 128K ; |
128K ‘lık UNIFORM SIZE ile oluşturulan bu LM TS ‘de
Database block size 2K ise
Her extent 64 database block size a tekabul eder.
Her 128K lık extent bir bit e tekabul eder. Bitlerin dolumu boşmu oldukları bitmap tarafından kontrol edilir.
Manuel segment space management de boş alanları (free space) yönetmek için freelistHatırlatma:
otomatik segment space management de bitmap kullanılır. Otomatik segment space management daha verimlidir ve default ayardır. Boş alanları birleştirmeye (colascing) ihtiyaç yoktur.
1 2 3 4 5 6 7 8 9 |
create tablespace test datafile '/u01/DataFiles/test_tbs01' size 50M Extent management LOCAL SEGMEN SPACE MANAGEMENT AUTO; |
LM TS extent size ı büyüklüğünü yönetmek için iki seçenek vardır.
Oracle’ın otomatik olarak yönetir. (AUTOALLOCATE option)64KB den başlayıp girilen verilerin büyüklüklerine göre Oracle otomatik olarak 64MB ye kadar değerler verebilir.
Veya biz belirleriz (UNIFORM option) SIZE parametresi ile miktar verilerek (KB,MB)
eğer girilmezse, Oracle default değer olan 1MB atayacaktır.
Uniform size verilerek oluşturulan TS in sonradan UNIFORM size ı değiştirilemez.
TS deki tüm segmenlerin ortalama aynı boyutta olacağına ve aynı iktarlarda artış göstereceğini tahmin ediyorsanız uniform extent size kullanılabilir.
Extent boyutları performans açısından önemlidir örneğin : sorgulama ağırlıklı kullanılan segmentlerin extent size ını küçük tutarsanız performansını olumsuz yönde etekileyecektir. Extent size ı siz ayarlayacaksanız Oracle, TS in amacına göre aşağıdaki değerleri tavsiye etmektedir.
64 KB small segments
1 MB medium segments
63 MB large segments
Oracle, eğer büyüme oranları bilinmiyorsa ve TS içindeki tüm segmenler aynı boyda olmadıkça AUTOALLOCATE (Default da autoalocate gelir) i seçilmesini tavsiye eder.
Şema ile özetlemeye çalışalım.
Segment space management için LOCAL UNIFORM seçilirse her extent için min 5 database bloğunun bulunması gerekir.Segment space management TS oluşturulmas sırasında belirtilir ve bu TS’de oluşturulan tüm segmentler için geçerli olur sonradan değiştirilemez.
Segment space management LOCAL AUTOALLOCATE seilirse ve database block size 16K ve üstü ise Oracle, extentleri min boyut olarak 64K civarında ve min 5 database bloğu oluşturur.
1 2 3 4 5 |
create tablespace satis datafile '/u01/app/oracle/oradata/orcl/satis_tbs.dbf' SIZE 50M ; |
1 |
create tablespace hareket |
1 2 3 4 5 6 7 |
datafile '/u01/app/oracle/oradata/orcl/hareket_tbs.dbf' SIZE 50M extent management local segment space management auto; |
Hareket ve satis TS’lerini farklı parametrelerle oluşturduk ama her ikisinin de extent management leri lokaldir (default ayar olduğundan).
1 |
select * from dba_tablespaces; |
komutu ile kontrol edebiliriz
TABLESPACE_NAME | SATIS | MUHASEBE | HAREKET |
BLOCK_SIZE | 8192 | 8192 | 8192 |
INITIAL_EXTENT | 65536 | 65536 | 65536 |
NEXT_EXTENT | |||
MIN_EXTENTS | 1 | 1 | 1 |
MAX_EXTENTS | 2147483645 | 2147483645 | 2147483645 |
PCT_INCREASE | |||
MIN_EXTLEN | 65536 | 65536 | 65536 |
STATUS | ONLINE | ONLINE | ONLINE |
CONTENTS | PERMANENT | PERMANENT | PERMANENT |
LOGGING | LOGGING | LOGGING | LOGGING |
FORCE_LOGGING | NO | NO | NO |
EXTENT_MANAGEMENT | LOCAL | LOCAL | LOCAL |
ALLOCATION_TYPE | SYSTEM | SYSTEM | SYSTEM |
PLUGGED_IN | NO | NO | NO |
SEGMENT_SPACE_MANAGEMENT | AUTO | AUTO | AUTO |
DEF_TAB_COMPRESSION | DISABLED | DISABLED | DISABLED |
RETENTION | NOT APPLY | NOT APPLY | NOT APPLY |
BIGFILE | NO | NO | NO |
1 2 3 4 5 6 7 |
create tablespace hasta_giris datafile '/u01/app/oracle/oradata/orcl/hasta_giris01_tbs.dbf' SIZE 50M extent management local uniform ; |
Burada uniform parametresini kullanıyoruz ama boyut belirtmediğimiz için default değer olan 1MB yi atayacaktır.
TABLESPACE_NAME | SATIS | HAREKET | HASTA_GIRIS |
BLOCK_SIZE | 8192 | 8192 | 8192 |
INITIAL_EXTENT | 65536 | 65536 | 1048576 |
NEXT_EXTENT | 1048576 | ||
MIN_EXTENTS | 1 | 1 | 1 |
MAX_EXTENTS | 2147483645 | 2147483645 | 2147483645 |
PCT_INCREASE | 0 | ||
MIN_EXTLEN | 65536 | 65536 | 1048576 |
STATUS | ONLINE | ONLINE | ONLINE |
CONTENTS | PERMANENT | PERMANENT | PERMANENT |
LOGGING | LOGGING | LOGGING | LOGGING |
FORCE_LOGGING | NO | NO | NO |
EXTENT_MANAGEMENT | LOCAL | LOCAL | LOCAL |
ALLOCATION_TYPE | SYSTEM | SYSTEM | UNIFORM |
PLUGGED_IN | NO | NO | NO |
SEGMENT_SPACE_MANAGEMENT | AUTO | AUTO | AUTO |
DEF_TAB_COMPRESSION | DISABLED | DISABLED | DISABLED |
RETENTION | NOT APPLY | NOT APPLY | NOT APPLY |
BIGFILE | NO | NO | NO |
BigFile TableSpace
10G ile gelen bir TS çeşitidir. Tek bir datafile a sahip olabilir çok büyük boyutları destekler, block size 8K ise 32 TB block size 32K ise 128 TB’ a kadar datafile oluşturulabilir.
Fazla sayıda datafile a gereksinim duyulmaz bunun diğer bir faydası da CREATE DATABASE ve CREATE CONTROLFILE işlemleri sırasında başlangıç dosyasında (spfile/pfile) DB_FILES ve MAXDATAFILES parametrelerinde datafile bilgileri için kullanılacak SGA alanından fazla oranda kullanılmamasını sağlar. Bu cümle pek güzel olmadı kısaca SGA ‘da datafile bilgileri ile ilgili alan kullanımı azalır desek daha iyi olacak.
Bigfile TS’ ler ASM veya genişleyebilen disk mimarileri kullanılması amaçlanımıştır (RAID)
Büyük boyutlu dosyaları desteklemeyen işletim sistemlerinde önerilmez.
Disk bölüştürme (striping) özelliği olmayan yapılarda kullanılması önerilmez.
BigFile TS ler sadece locally managed TS lerde Automatic Segment Space Management lerde desteklenir 3 istisnai durum vardır.
- Undo TS
- Temporary TS
- System TS
Table_Space | SSM |
SYSTEM | MANUAL |
UNDOTBS1 | MANUAL |
SYSAUX | AUTO |
TEMP | MANUAL |
USERS | AUTO |
UNDOTBS2 | MANUAL |
EXAMPLE | AUTO |
SATIS | AUTO |
MUHASEBE | AUTO |
TEMP02 | MANUAL |
HAREKET | AUTO |
HASTA_GIRIS | AUTO |
Bigfile TS oluşturma
1 2 3 4 5 |
create bigfile tablespace musteri datafile '/u01/app/oracle/oradata/orcl/musteri_bf_tbs.dbf' size 100G |
Eğer default TS seçeneği bigfile olarak ayarlanmış ise BIGFILE parametresini girmenize gerek yok. Ama smalfile TS oluşturacaksanız bu sefer de SMALLFILE parametresini kullanmanız gerekir.
1 |
alter tablespace musteri resize 200G; |
Boyutunu değiştirebiliriz
1 |
alter tablespace musteri autoextend on next 10G; |
Otomatik büyümesini sağlayabiliriz
1 2 3 4 5 |
DBA_TABLESPACES USER_TABLESPACES V$TABLESPACE |
view larında bigdile kolonu bulunmaktadır, bunlarla bigfile TS olup olmadıklarını öğrenilebilir.
Temprary TableSpace
Bilgileri oturum (session) süresince tutar yani geçicidir,sıralama (sort)işlemlerinde kullanılır indexleme ve kullanıcı sorgulamalarında. Her kullanıcıya bir temp TS atanır, ya oluşturulurken ya da sonradan değiştirilebilir (CREATE USER, ALTER USER).Kullanıcı oluşturma syntax ında belirtilmezse default temp TS atanır. Önerilen veritabanı oluşturulurken default temp TS in oluşturularak kullanıcılara atanmasının sağlanmasıdır. Kullanıclar bir temp TS’ i ortak kullanabilir içerdiği bilgiler paylaşımlıdır. Temp TS’de kalıcı objeler oluşturulamaz bunun tek istisnası temprary table lardır bu tablonun satırları temprary TS de tutulur.
Eğer VT oluşturulurken defaul temp TS oluşturulmamışsa sorun değil sonradan oluşturup kullanıcılara atanabilir.
Oracle, verileri PGA’ya 64KB’lık yığınlar halinde yazar bu yüzden extent size uniform yapıp 64K katları şeklinde vermek performansı artıracatır. veri ambarlarında tavsiye edilen extent size 1 MB’dir.
Performansı artırmak için birden fazla temp TS oluşturup kullanıcılara paylaştırılabilinir.
- V$SORT_SEGMENT
- V$TEMPSEG_USAGE
- V$TEMPFILE
- V$DATAFILE
- DBA_TEMP_FILES
- DBA_DATA_FILES
view larından kullanım bilgileri sorgulanabilir.
1 2 3 4 5 |
create temporary tablespace developertemp tempfile '/u01/app/oracle/oradata/orcl/developertemp01.dbf' size 50M ; |
1 |
select * from dba_tablespaces ; |
sorgusu ile kontrol ettiğimizde temporary TS’in default değerlerini de görürüz.
TABLESPACE_NAME | DEVELOPERTEMP |
BLOCK_SIZE | 8,192 |
INITIAL_EXTENT | 1,048,576 |
NEXT_EXTENT | 1,048,576 |
MIN_EXTENTS | 1 |
MAX_EXTENTS | |
PCT_INCREASE | 0 |
MIN_EXTLEN | 1,048,576 |
STATUS | ONLINE |
CONTENTS | TEMPORARY |
LOGGING | NOLOGGING |
FORCE_LOGGING | NO |
EXTENT_MANAGEMENT | LOCAL |
ALLOCATION_TYPE | UNIFORM |
PLUGGED_IN | NO |
SEGMENT_SPACE_MANAGEMENT | MANUAL |
DEF_TAB_COMPRESSION | DISABLED |
RETENTION | NOT APPLY |
BIGFILE | NO |
Görüldüğü üzere tüm locally managed ve uniform size 1M olarak oluşturulur. Uniform size ı değiştirmek için;
1 2 3 4 5 6 7 |
create temporary tablespace temptsismi tempfile '/datafile yolu/datafileismi' size boyutu ; extent management local uniform size xx; |
1 |
create bigfile temporary tablespace |
syntax ı ile büyük boyutlu temp TS oluşturulabilir.
ALTER TABLESPACE syntax ı ile kalıcı (permanent) TS’leri temporary TS’lere çeviremez. Sadece datafile eklemek ve tempfile ı offline/online a almak için kullanılır.
1 2 3 4 5 |
alter tablespace developertemp add tempfile '/u01/app/oracle/oradata/orcl/developertemp02.dbf' size 50m; |
1 2 3 |
alter tablespace developertemp tempfile offline; alter tablespace developertemp tempfile online; |
aşağıdaki sytaxlar da aynı işi görür.
1 2 3 |
alter database tempfile '/u01/app/oracle/oradata/orcl/developertemp02.dbf' offline; alter database tempfile '/u01/app/oracle/oradata/orcl/developertemp02.dbf' online; |
Burda dikkat edilmesi gereken, offline çekilen temporary TS değil , temporary TS’in datafile ı dır. v$tempfile statuleri görülebilir.
1 |
alter tablespace developertemp tempfile offline; |
Boyutu değiştirmek için:
1 |
alter database tempfile '/u01/app/oracle/oradata/orcl/developertemp02.dbf' resize 100M; |
iptak etmek ve datafile da silmek için:
1 |
alter database tempfile '/u01/app/oracle/oradata/orcl/developertemp02.dbf' drop including datafiles; |
İsim ve lokasyon değiştirme
- TS offline a alınır.
- İşletim sisteminden taşınır ve/veya ismi değiştirilir.
- alter database rename file sytaxı ile control file güncellenir.
Temporary TableSpace Group
10G ile gelen bir özelliktir, kullanıcıların aynı anda farklı sessionlarda çoklu temporary TS kullanmasını sağlar.
- Enaz bir adet TS den oluşur. Maximum sayı belirtilmemiştir.
- Grup üyelerinin hepsi silinirse otomatik olarak grup da silinir.
- Üye temporary TS’ler grup ile aynı isim alanına sahiptirler.
- Üye temporary TS’lerin ismi ile grub ismi aynı olamaz.
- Kullanıcılara temporary TS’in yerine grub ismi atanabilir.
Faydaları:
- Aynı anda birden fazla temporary TS kullanarak tıkanmaları engeller.
- Database bazında default temporary TS tanımlarken birden fazla temporary TS tanımlamaya olanak sağlar.
- Paralel operasyonlarda çoklu temporary TS kullanmak verimliliği artırır.
- Kullanıcı aynı anda çoklu temporary TS kullanabilir.
Oluşturalım
1 |
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tempxx; |
komutu ile defalt temp değiştirilebilir.
Temporary TS’i datafile ile birlikte silme
1 |
DROP TABLESPACE TEMP02 INCLUDING CONTENTS AND DATAFILES; |
aşağıdaki syntax datafile iptal eder sistemden de siler.
1 |
alter database tempfile '/u01/app/oracle/oradata/orcl/temp01_01.dbf' drop including datafiles; |
alertloga düşen hata
(Hatırlatma : “tail -f /u01/app/oracle/admin/orcl/bdump/alert_orcl.log” )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Wed Feb 10 20:40:24 2010 alter database tempfile '/u01/app/oracle/oradata/orcl/temp01_01.dbf' drop including datafiles Wed Feb 10 20:40:25 2010 Deleted file /u01/app/oracle/oradata/orcl/temp01_01.dbf Completed: alter database tempfile '/u01/app/oracle/oradata/orcl/temp01_01.dbf' drop including datafiles Wed Feb 10 20:43:47 2010 alter database tempfile '/u01/app/oracle/oradata/orcl/temp01_01.dbf' drop including datafiles Wed Feb 10 20:43:47 2010 ORA-1516 signalled during: alter database tempfile '/u01/app/oracle/oradata/orcl/temp01_01.dbf' drop including datafiles ... |
sorgulama yapıldığında
1 |
select * from dba_tablespace_groups; |
hatası alınır.
1 |
ORA-01516: nonexistent log file, datafile, or tempfile "/u01/app/oracle/oradata/orcl/temp01_01.dbf" |
Önce default temporary gruptan çıkarılır.
1 |
alter tablespace temp01 tablespace group ''; |
sonra
1 |
DROP TABLESPACE TEMP01 INCLUDING CONTENTS and datafiles; |
temp01 tarihi karışır.
artık “select * from dba_tablespace_groups;” çalıştırıldığında hata almayız.
1 2 3 4 5 |
create temporary tablespace temp01 tempfile '/u01/app/oracle/oradata/orcl/temp01_01.dbf' size 50M tablespace group tempgrup01; |
Syntaxı girildiğinde temp01 temporary TS i oluşturur, temporary grup tempgrup01 oluşturur ve temp01 i tempgrup01′ e dahil eder.
Önce temporary TS oluşturulup sonrasında gruba katılabilir.
Temporary tablespace in bir gruba atanması
1 |
alter tablespace temp02 tablespace group tempgrup01 ; |
Database e default temporary TS grup atanması
1 |
alter database default temporary tablespace tempgrup01; |
Kullanıcıya default temporary grup atanması
1 2 3 4 5 |
create user kullanici_ismi identified by kullanicinin_şifresi default tablespace tablspace_ismi temporary tablespace tempgrup01; |
Daha önce oluşturulmuş bir kullanıcının temporary TS in değiştirilmesi
1 |
alter user kullanici_ismi temporary tablespace tempgrup01; |
Temporary TS Bilgilerini Görüntüleme
1 2 3 4 5 |
select group_name "temp_grup", tablespace_name "ts_name" from dba_tablespace_groups; |
1 2 3 4 5 6 7 |
temp_grup ts_name ----------- -------- TEMPGRUP01 TEMP TEMPGRUP01 TEMP01 |
Kullanıcılara Atanmış Temporary TS leri görmek için
1 |
select username, temporary_tablespace from dba_users; |
1 2 3 4 5 6 7 8 9 |
USERNAME TEMPORARY_TABLESPACE -------- -------------------- HR TEMPGRUP01 SCOTT TEMPGRUP01 TSMSYS TEMPGRUP01 |
tempgrup01 i database e default temporary TS olarak atadığımız için tüm kullanıcılar için tempgrup01 olarak değişmiştir.
NonStandard Block Size Oluşturma
Başlangıç dosyasında (spfile) belirtilen DB_BLOCK_SIZE dan farklı boyutlarda TS oluşturulabilir. Bu özellik farklı block size lara sahip database ler arasında TS leri taşımaya imkan sağlar.
Bunun için başlangıç parametresinde en bir tane DN_nK_CACHE_SIZE değerinin verilmiş olması gerekir.
1 2 3 4 5 6 7 8 9 10 11 |
create tablespace finans datafile '/u01/app/oracle/oradata/orcl/temp01_01.dbf' size 50M extent management local uniform size 128K BLOCKSIZE 8K; |
Nologging
TS nologging parametresi ile oluşturuldu ise bu TS deki işlemler için redo üretilmez bu da media recovery (rman flashback) yapılamamasına neden olur. Yanlışlık bir tabloyu sildiniz en son aldığınız exporttan dönebilirsiniz. Avantajı ise redo üretilmediği için daha performanslıdır.
Temporary segmentler ve temporary TS ler log üretmezler yani nologging moddadır. logging/nologging ifadesi TS level kullanılır, schema levelde bu değiştirilerek logging/nologging yapılabilir örneğin CREATE TABLE
CREATE TABLE XXX AS SELECT syntax ile oluşturulacak table lar için redo üretilmememesi performans açısından mantıklı olacaktır.
1 2 3 |
create table deneme as select * from hr.employees nologging; |
Nologging moddaki bir database de sorunlar yaşanmasından dolayı oluşturulacak TS’i FORCE LOGGING modda oluşturarak redo üretmesini sağlayabilir, force logging önceki ve gelecek parametrelerin üzerine yazar yani her halikarda redo üretir. FORCE LOGGING moddaki bir TS, FORCE LOGGING modda olmayan başka bir database e taşınırsa artık FORCE LOGGING özelliğini kaybeder.
1 2 3 4 5 6 7 8 9 |
create tablespace test1 datafile '/u01/app/oracle/oradata/orcl/test101.dbf' size 50m extent management local nologging/nologging/force logging; |
Online/Offline
alter tablespace veya manage tablespace haklarına sahip kullanıcılar database open modda iken TS’ leri offline/online a alabilirler. Offline a alınan TS’e kullanıcılar erişemezler, database in diğer TS’ler erişilebilir durumdadır.
- offline backup alınmak istendiğinde (online backup alınabilir)
- Uygulama yüklemesi/güncellemesi yaparken
- TS ismini değiştirirken veya taşırken (relocate)
- datafile de sorun olduğunda
Aşağıdaki TS ler offline a alınamaz.
- System
- Undo
- temporary
1 |
alter tablespace satis offline/online; |
3 parametre ile offline alınabilir. Defaultu normaldir.
- normal : media recovery gerektirmez.
- temporary : Normal ile offline alınamazsa kullanılır. media recovery gerektirebilir.
- immediate :Normal ile ve temporary ile alınamazsa kullanılır. Media recovery gerektirir , eğer archive modda değilseniz bu parametreyi kullanamazsınız.
ReadOnly
Readonly modda data girişi yapılamaz, sorgulama yapılabilir, yeni obje oluşturulamaz ama drop edilebilir. Büyük TS’leri yedeklemek için önce read only moda alınıp yedeklenir. Diğer database lere taşınabilir, CD-ROM vb cihazlarda saklanabilir.
- TS uygulanması gereken undo içeriğinin olmaması gerekir.
- active undo ve system TS read only yapılamaz.
- Yedekleme bitiminde datafile ların headerı güncellendiğinden online backup aşamasında olmaması gerekir.
1 |
alter tablespace satis read only; |
1 |
alter tablespace satis read write ; |
1 2 3 4 5 6 7 8 9 10 11 |
CREATE TABLE TEST_TABLE1 ( ID NUMBER, ISIM VARCHAR2(20 BYTE) ) TABLESPACE SATIS; |
satis TS indeki tabloya çeşitki insertler yapıldı commit demeden
alter tablespace satis read only; çalıştırıldı ole kaldı beklemede
1 2 3 4 5 6 7 |
select sql_text, SADDR from v$sqlarea, v$session where v$sqlarea.address = v$session.sql_address and sql_text like 'alter tablespace%'; |
1 2 3 4 5 6 7 8 9 10 11 |
SQL_TEXT -------------------------------------------------------------------------------- SADDR -------- alter tablespace satis read only 2EAF591C |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SQL> select ses_addr, start_scnb 2 from v$transaction 3 order by start_scnb; SES_ADDR START_SCNB -------- ---------- 2EAF6BD0 1965814 2EAF591C 1967631 |
alter tablespace satis offline temporary ; takıldı kaldı
alter tablespace satis offline immediate; takıldı kaldı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@ora ~]# tail -f /u01/app/oracle/admin/orcl/bdump/alert_orcl.log Fri Feb 12 15:38:32 2010 alter tablespace satis read only Fri Feb 12 15:51:41 2010 alter tablespace satis read only Fri Feb 12 15:51:50 2010 ORA-3135 signalled during: alter tablespace satis read only... Fri Feb 12 15:54:05 2010 alter tablespace satis offline temporary Fri Feb 12 15:55:32 2010 alter tablespace satis offline immediate |
Hangi transactionların readonly moda geçtiğini bulabilmek için aşağıdaki sorgulamalar çalıştırılır.
1 2 3 4 5 6 7 8 9 |
select s.username, s.sid, s.serial#, t.start_time, n.name from v$session s, v$transaction t, v$rollstat r, v$rollname n where s.saddr=t.ses_addr and r.usn=n.usn and to_date(t.start_time,'MM/DD/YY HH24:MI:Ss')<(sysdate-(1/24)); |
USERNAME | SID | SERIAL# | START_TIME | NAME |
SYS | 141 | 1949 | 02/12/10 14:59:23 | SYSTEM |
SYS | 140 | 251 | 02/12/10 15:38:30 | SYSTEM |
SYS | 141 | 1949 | 02/12/10 14:59:23 | _SYSSMU11$ |
SYS | 140 | 251 | 02/12/10 15:38:30 | _SYSSMU11$ |
SYS | 141 | 1949 | 02/12/10 14:59:23 | _SYSSMU12$ |
SYS | 140 | 251 | 02/12/10 15:38:30 | _SYSSMU12$ |
SYS | 141 | 1949 | 02/12/10 14:59:23 | _SYSSMU13$ |
SYS | 140 | 251 | 02/12/10 15:38:30 | _SYSSMU13$ |
SYS | 141 | 1949 | 02/12/10 14:59:23 | _SYSSMU14$ |
1 |
alter sytem kill session 'SID_NO,SERIAL'; |
1 |
alter system kill session '141,1949'; |
çalıştırıdığında tüm bekleyen “alter tablespace satis offline …” komutlarının
“alter tablespace altered” olduğu görülür.
1 |
alter tablespace satis online ; TS'i online a aldık. |
Not: Büyük boyutlu TS lerin readonly modda kullanıdılğı Database lerde read_only_open_delayed parametresinin true yapılması önerilir. Bu şekilde database açılırken readly TS lerin datafile larını kontrol etmez, sadece bu TS’leri ilk okuma yapılmak istendiğinde erişim sağlanır.
- Kayıp ya da bozulmuş read only TS lerin datafile ları database açılırken kontrol edilmez, ilk erişim okuma yapılmak istendiğinde olur.
- “Alter system check datafiles” “Alter tablespace … online” “Alter database datafile … online”, “alter database noarchivelog” read only datafile ları kontol etmez.
- v$recover_file, v$backup, v$datafile_header, v$datafile ve v$recover_log read-only TS lere erişmezler.
Not: “recover database”, “alter database open resetlogs” başlangıç dosyasında ne yazarsa yazsın read-only datafile lara erişmeye devam eder. Önlemek için datafile lar offline a alınmalı. backup control file kullanılıyorsa read-only datafile lar sorun çıkarabilir, bunun göz önünde bulundurulması gerekir.
Datafile Ekleme
1 2 3 |
alter tablespace satis add datafile '/u01/app/oracle/oradata/orcl/satis02.dbf' SIZE 10M; |
veya
1 2 3 4 5 6 7 8 9 10 11 |
alter tablespace satis add datafile '/u01/app/oracle/oradata/orcl/satis02_tbs.dbf' size 10M autoextend ON next 10M maxsize 50M; |
İsim Değiştirme
Kalıcı (permanent, yani kullanıcıların verilerini tuttuğu TS’ler) ve temporary TS’lerin isimlerini değiştirebiliriz.
1 |
alter tablespace satis rename to satis_2009; |
Oracle, satis TS’in geçtiği data dictionary control file ve datafile headerları değiştirir, ama tablespace ID yi değiştirmez. Biz TS leri isim ile tanımlarız ama Oracle arka planda bu ID ler ile tanır. Tablespace lerin ismini değiştirebilmemiz için ;
- Database’in uyumluluğu 10 ve üzeri olması gerekir (başlangıç parametresindeki compatible = 10.0 ve üstü)
- system ve sysaux TS lerinin ismi değiştirilemez. (hata msj ı alınır)
- TS ya da datafile ı offline ise ismi değiştirilemez. (hata msj ı alınır)
- TS read only ise rename işlemi gerçekleşir lakin alertlog dosyasına çeşitli hatalar düşer. Tekrar read write yaparken yeni ismi kullanılır.
123456789Tablespace 'SATIS' is renamed to 'SATIS_2009'.Tablespace name change is not propagated to file headersbecause the tablespace i s read only.Starting control autobackupWed Feb 17 16:29:33 2010Errors in file /u01/app/oracle/admin/orcl/udump/orcl_ora_23691.trc:Wed Feb 17 16:29:33 2010Errors in file /u01/app/oracle/admin/orcl/udump/orcl_ora_23691.trc:Wed Feb 17 16:29:33 2010Errors in file /u01/app/oracle/admin/orcl/udump/orcl_ora_23691.trc: - Undo TS in ismi değiştirildiğinde parameter file dan da değiştirmek gerekir.
Silme ( drop )
Kullanılmayan TS leri Drop TS hakkı olan kullanıcılar, TS in içindeki objelerle bilrlikte silebilirler. Silinen TS tekrar geri getirilemez, içindeki tüm objelerin kullanılmayacağından emin olmak gerekir. Kesinlikle silinmeden önce ve silindikten sonra full yedek almak tavsiye edilir.
1 |
drop tablespace satis_2009 including contents; |
syntax ı ile TS silinir ama datafile ı işletim sistemi dosyası olarak kalmaya devam eder bunu da işletim sistemi komutları ile silebilirsiniz.
1 |
drop tablespace satis_2009 including contents and datafiles; |
bu sytax ise datafile lar ile siler.
aktif segment içeren TS silinemez örneğin kullanılan bir table veya rollback için undo data içeren TS’ler.
Bir TS’i silmeden önce offline a almak tavsiye edilir.
Sysaux Tablespace
System TS’e yardımcı olması için 10G ile gelen bir özeliktir. Workspace manager, logical standby, Oracle streams , Automatic workload repostory gibi dataları tutar. Tam listeyi v$sysaux_occupants view ından görebilirsiniz.
sysaux erişilemezse yani bir nedenden dolayı bozulursa database ana işlevlerine devam eder lakin sysaux TS’ ini kullanan özellikler ya erişilemez ya da limitli erişilebilir. Sysaux daki compenentleri PL/SQL ile başka bir TS’e taşıyabilir dışardaki compenentleri de sysux a alabiliriz. Özellikle çok yer kaplayan (AWR) bileşenleri başka TS’lere almak mantıklı olacaktır.
DataFile Yönetimi
Oracle datafile a iki adet numara atar absolute file number ve relative file number.
Absolute : Tektir yani bir datafile a verilen numara başka bir datafile a verilemez. SQL sytaxlarında kullanılabilir, uzun uzun datafile in ismini vermek yerine sadece numarasını vererek işlem yapabiliriz. v$datafile ve v$tempfile viewlarında ” file# ” kolonu, dba_data_files ve dba_temp_files viewlarından file_id kolonundan bu bilgilere erişebiliriz.
Relative : Bu da tektir. Ufak ve orta boyutlu database lerde absolute ve relative aynıdır, büyük databaselerde farklılaşmaktadır.
Oracle’ı kurmadan önce kaç adet TS’e kaç adet datafile ‘a ihtiyaç duyulacağı hesaplanıp ona göre işletim sistemi ve konfigurasyonu yapılmalıdır çünkü işletim sistem tarafındaki kısıtlamalar database inizdeki ayarları da değiştirmenizi gerektirebilir.
Başlangıç dosyasındaki (spfile) ” db_files ” parametresi oluşturulabilecek maximum datafile sayısını bildirir. default u 200 dür maximum işletim sisteminin desteklediği kadardır. Bu değer değiştirildiğinde kapatılıp açılması lazım.
1 |
show parameter db_files; ile görebilirsiniz. |
Datafile ekleme
1 2 3 4 5 6 7 8 9 |
alter tablespace satis_2009 add datafile '/u01/app/oracle/oradata/orcl/satis03_tbs.dbf' autoextend on next 1M Maxsize 100M |
Satis_2009 TS’ine 1’er MB’lık boyutlarda otomatik olarak artabilecek maximum boyutu 100 MB olabilecek bir datafile ekliyoruz.
1 2 3 |
alter database datafile '/u01/app/oracle/oradata/orcl/satis03_tbs.dbf' autoextend off; |
Otomatik artmayı iptal ettik.
Boyut değiştirme
1 2 3 |
alter database datafile '/u01/app/oracle/oradata/orcl/satis03_tbs.dbf' resize 150M; |
Disk boyutuna ve işletim sistemine bağlı olarak istenildiği kadar büyütülebilir, aynı zamanda küçültüledebilir de ancak kullanılan alandan daha küçük boyut verilemez verilirse de hata verir.
Datafile ların erişilebilirliğini değiştirme
Datafile ları ve tempfile ları ayrı ayrı offline/online alınabilir, offline oldukları sürece erişilemez olacaklardır.
- Offline yedek alınmak istendiğinde
- İsim/lokasyon değişikliği yapılmak istendiğinde, önce offline a almak gerekir.
- Oracle yazma problemi ile karşılaştığında datafile ı offline a alır sorun giderildiğinde dba tarafından online a alınması gerekir.
- Datafile bozulduğunda ya da bir şekilde sistemden kaybolduğunda instance ı başlatabilmek için bu datafile e offline almak gerekir.
Read-Only modda ki TS ‘in datafile ını offline ya da online a alabiliriz , online aldığımızda TS’in read-only modu devam eder datafile a yazamayız yazabilmemiz için tekrar read-write moda almamız lazım.
1 |
alter tablespace satis_2009 offline/online; |
Bu şekilde satis_2009 ‘ un tüm datafile larını offline/online a alırız.
ArchiveLog modda online/offline
1 |
alter database datafile '/u01/app/oracle/oradata/orcl/satis03_tbs.dbf' online; |
1 |
alter database datafile '/u01/app/oracle/oradata/orcl/satis03_tbs.dbf' offline; |
Bu şekilde TS’ içindeki tüm datafile ları offline/online a almadan istenilen datafilelarda değişiklik yapılmak isteniyorsa archivelog modda olmak lazım aksi halde datafile kaybedilir deneyip görelim.
NoArchiveLog modda online/offline
DataBase i tekrar noarchivelog moda alıyorum.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Database mount moda alınır shutdown immediate; startup mount alter database noarchivelog; komutu verilir. alter database open ; db açılır archive log list ; ile archive log un disab olduğu görülür. shutdown immediate ile kapatılır startup ile açılıp tekrar archive log modda olup olmadığı test edilip Database in noarchive log listte kaldığı görülür. |
Archive modda olmayan instance da “offline for drop” parametresi ile kullanılır. database e offline aldıktan sonra drop işleminin yapılacağı bilgisi verilir.
1 |
alter database datafile 'u01/app/oracle/oradata/orcl/satis03_tbs.dbf' offline for drop; |
diğer türlü
1 2 3 4 5 |
SQL> ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/orcl/satis01_tbs.dbf' OFFLINE; ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/orcl/satis01_tbs.dbf' OFFLINE * |
1 2 3 |
ERROR at line 1: ORA-01145: offline immediate disallowed unless media recovery enabled |
recovery modda olmadığımız için izin vermiyor.
İsim ve Lokasyon Değiştirme
Bu tür işlemlerden önce full yedek almış olmanız çok önemlidir.
1 |
alter tablespace satis_2009 offline; |
işletim sisteminden dosyanın ismi değiştirilir.
1 |
$mv /u01/app/oracle/oradata/orcl/satis01_tbs.dbfu01/app/oracle/oradata/orcl/satis_200901_tbs.dbf |
Linux işletim sisteminde mv (move) komutu isim değiştirmek yaygın olarak kullanılır.
1 2 3 4 5 6 7 8 9 |
alter tablespace satis_2009 rename datafile '/u01/app/oracle/oradata/orcl/satis01_tbs.dbf' to '/u01/app/oracle/oradata/orcl/satis_200901_tbs.dbf' |
aynı anda birden fazla datafile ın ismi değiştirilebilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
alter tablespace satis_2009 rename datafile '/u01/app/oracle/oradata/orcl/satis01_tbs.dbf' '/u01/app/oracle/oradata/orcl/satis02_tbs.dbf' to '/u01/app/oracle/oradata/orcl/satis_200901_tbs.dbf' '/u01/app/oracle/oradata/orcl/satis_200902_tbs.dbf'' |
Diskte yer kalmadı ya da performans sorunundan dolayı bir TS’in tüm datafile larını yeni disk takıp oraya taşımak istiyorsunuz. (linux bölümünde yeni diskin sisteme tanıtılması ve mount edilmesi anlatıldı) Yeni diski /u01/app/oracle/oradata/orcl/ dizininde satists adında bir klasör açıp buraya mount ettiğimizi farz ediyorum.
1 |
alter tablespace satis_2009 offline; |
işletim sisteminde datafile ı yeni lokasyonuna taşıyoruz. (herhangi bir işletim sisteminden kaynaklanabilecek arızalar için kopyalıyorum taşıma sağlıklı bir şekilde tamamlandıktan sonra eskisini sileceğim.
1 |
cp /u01/app/oracle/oradata/orcl/satis_200901_tbs.dbf /u01/app/oracle/oradata/orcl/satists |
1 2 3 4 5 6 7 8 9 |
ALTER TABLESPACE satis_2009 RENAME DATAFILE '/u01/app/oracle/oradata/orcl/satis_200901_tbs.dbf' TO '/u01/app/oracle/oradata/orcl/satists/satis_200901_tbs.dbf' |
aynı şekilde birden fazla datafile ı taşıyabiliriz.
1 |
alter database satis_2009 online; |
tekrar erişilebilir hale getiriyoruz.
Kullanılmamış yani herhangi bir extent bulunmayan datafile ı silebiliriz (Database open modda olmak zorundadır).
1 |
ALTER TABLESPACE satis_2009 DROP DATAFILE '/u01/app/oracle/oradata/orcl/satists/satis_200902_tbs.dbf'; |
satis_200902_tbs.dbf bu datafile ile ilgili data dictionary deki kontrol dosyalarındaki tüm bilgiler silinir ve işletim sistemindeki datafile silinir.
1 |
ALTER TABLESPACE developertemp DROP TEMPFILE '/u01/app/oracle/oradata/orcl/developertemp02.dbf'; |
aynı şekilde temp datafile silinebilir.
1 |
ALTER DATABASE TEMPFILE '/u01/app/oracle/oradata/orcl/developertemp02.dbf' DROP INCLUDING DATAFILES; |
bu da aynı işi görür. yalnız bunun şöyle bir farkı var. Eğe developertemp02.dbf temporary bir TS’in son datafile olsa idi ;
alter tablespace ... syntax ı bu son datafile diyip işlemi gerçekleştirmezdi. Ama alter database .. anında datafile siler, datafile kapatılıp açıldığında herhangi bir sorun olmaz açılıp kapatılabilir sadece datafile sız bir temporary TS’niz olur ve aşağıdaki uyarıyı alert dosyasına düşer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
WARNING: The following temporary tablespaces contain no files. This condition can occur when a backup controlfile has been restored. It may be necessary to add files to these tablespaces. That can be done using the SQL statement: ALTER TABLESPACE <tablespace_name> ADD TEMPFILE Alternatively, if these temporary tablespaces are no longer needed, then they can be dropped. Empty temporary tablespace: DEVELOPERTEMP |
OS ID ‘nin...
13 Mart 2019