Sayfalar

7 Ağustos 2011 Pazar

Fiziksel Yapısı

Sevgili Oracle dostları...
Makalelerim diğer bloglarda olduğu gibi karmakarışık olmayacak.
Sırayla Oracle veritabanı hakkında detaylı bilgi edinmeye çalışacağız.Oracle veritabanı bir Fiziksel birde Mantıksal olmak üzere ikiye ayrılır. Önce Fiziksel Yapısından bahsedelim.

a)Fiziksel Yapısı
Fiziksel yapıyı oluşturan bileşenler şu şekilde özetlenebilir:
-Data Files
-Control Files
-Redo Log Files
-Archive Log Files
-Parameter Files
-Alert and Trace Log Files
-Backup Files
Fiziksel bölüm, işletim sisteminden görünen kısımdır.

Data Files:
Veri dosyaları(Data Files) veri tabanındaki tüm verileri tutan dosyalardır.Her Oracle Veritabanı bir ya da daha fazla sayıda datafile içerebilir.Tablo, indeks gibi matıksal yapıların barındırdığı fiziksel bilgileri tutar.Belli başlı özellikleri:
  • Bir datafile sadece bir veritabanı ile ilişkilidir.
  • Bir ya da daha fazla datafile mantıksal yapılardan olan tablesace’leri oluştururlar. 
  • Gerektiğinde kendilerini otomatik olarak büyütme(extend) özellikleri vardır.
  • Bir veya daha fazla datafile, mantıksal ve ilişkisel veritopluluğu anlamına gelen tablespace leri oluşturur.
  • Bir oracle instance ı, veritabanından bir tablo veya indexle ilgili işlem yapmak istediğinde önce Oracle memory e bakar. Cache de bu bilgiyi bulamazsa veri fiziksel olarak datafile dan(diskten) okunur ve hafızaya çekilir.
  • Veriler üzerinde yapılan değişiklikler datafile lara fiziksel olarak hemen yansıtılmaz.
  • Her değişiklik, anında fiziksel olarak datafile lara yansıtılsaydı çok fazla I/O işlemi olur ve performans çok çok kötü olurdu.
  • Database Writer Process adı verilen oracle bileşeni, database buffer olarak bilinen memory alanlarında bulunan dirty dediğimiz üzerinde değişiklik yapılmış verileri fiziksel olarak diske(datafile dosyalarına) yazmaktan sorumludur. (Bu konunun üzerinde daha sonra durulacak)
  • •Datafile lara doğrudan müdaheleler yapılamaz. Bu dosyalar, Tablespace ler üzerinde yapılan değişikliklerle yönetilebilir. Yani sadece Tablespace perspektifinden bakılınca anlamlı hale gelir.
  • Uzantısı “.DBF” dir.
  • Veritabanınızdaki datafile ları görmek isterseniz; SELECT name FROM v$datafile; komutunu kullanabilirsiniz.
CREATE TABLESPACE DENEME_TABLESPACE DATAFILE
'/data2/recai_test/oradata/deneme_tablespace_01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 512K MAXSIZE UNLIMITED
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
Arkadaşlar yukarda gördüğünüz gibi DataFile içinde tutulur bilgiler.İlerki derslerimizde DataFile Kurtarma işlemlerini ele alacağız.

Control Files:
Her Oracle veritabanının bir “control file”’ ı vardır.Veritabanının fiziksel yapısı hakkındaki (database adı, datafile ve redo log file’ların adı ve yerlerinin bilgisi vb…) bilgileri tutar.

Bu dosyadaki bilgiler çok önemli olduğu için Oracle bu dosyayı çoğullama özelliğine sahiptir.Eş zamanlı olarak dosyaları güncel tutar.
Control file yapısının içerdiği bazı bilgiler şunlardır,
  • binary yapıda, .ctl uzantılı dosyadır.
  • Control file, veritabanı create edildiğinde otomatik olarak default değerlere göre oluşturulur.
  • Veritabanının adı,Veritabanının yaratıldığı tarih
  • Datafile ve redo log file ların isim ve lokasyonları
  • tablespace ler hakkında bilgiler
Control file olmadan veritabanı mount edilemez ancak unmount modunda instance ı başlatabiliriz ayrıca recovery yapmak da oldukça zorlaşır.

SQL > SELECT name FROM v$controlfile; komutuyla veritabanımızın kullandığı control file ların lokasyonlarını görebiliriz.

Redo Log Files :
Veriye yapılan tüm değişiklik işlemlerini tutmakla yükümlüdür.Datafile’lara (bir şekilde) değişen bilgi yazılamadığı durumlarda redo loglardan bu işlemler görülebilir ve yapılan işlemin kaybı önlenir.

Bu dosyalarında çoğullanma imkanı vardır.Farklı diskler üzerinde 2 ya da daha fazla kopyası tutulabilir.
Bu dosyanın amacı özetle sistem ya da donanım kaynaklı(harddisk göçmesi vs.) olası hatalarda datafile’lara kalıcı şekilde yazılamayan bilgileri kurtarmaktır.Örneğin bir elektrik kesintisinde henuz datafile’lara yazılmayan ve memory de bulunan bilgiler kaybedilir.Sistem tekrar ayağa kalktığında Oracle ilk önce redo log lara bakar.Kalıcı olarak datafile’a yazılamayan bilgi olduğunu görür ve yarım kalan işlemi sonlandırır.Bu sayede veritabanı elektrik kesintisi olmadan evvelki konuma gelinmiş olur.
  • Uzantısı .log dur.
Archive Log Files :
Oracle veritabanı ARCHIVELOG modunda ise redo log dosyaları bu dosyalara otomatik olarak arşivlenir.
Parameter Files (PFILEs): Veritabanı ve çalışan instance ile ilgili konfirigasyon parametrelerini içerir.”init.ora” bir parameter file’dır. init.ora server tarafta bulunur.Ancak client’tan (uzak erişim) ile veritabanın ulaşmak için gereklidir, static’tir.Gerektiğinde (text dosya olduğundan) elle de değişiklik yapılabilir.

9i sürümüyle birlikte “Server Parameter File(SPFILE)” kavramı geldi.SPFILE PFILEs’dan oluşturulabilir.Bu PFILE gibi bir text dosya değil binary bir dosyadır ve sadece “ALTER SYSTEM SET” komutu ile değişir.Lokal makinadan veritabanını başlatmak için bir kopyasını lokalde tutmaya gerek kalmamaktadır.

SPFILES kullanmak PFILE kullanmaktan daha avantajlıdır.Çünkü :

• RMAN ile backup’ı alınabilir.(RMAN, PFILE backup’ı alamaz) Arkadaşlar hemen RMAN hakkında kısa bilgi vereyim.RMAN Oracle’in sunduğu bir yedek alma aracıdır. RMAN’ı diğer yöntemlere göre farklı kılan; DBA üzerindeki iş yükünü hafifletmisidir.RMAN yedek almayla ilgili birçok işi otomatik yapabilme imkanı sunar. RMAN olmaksızın, yedek alma işleminde script’lerin yazılması, tablespace’lerin backup mode’a çekilmesi vb. birçok durumla uğraşmak zorunda kalınabilir. Hâlbuki Oracle’in sunduğu bu araçla yedek alınması için yapılan bütün hazırlık işlemleri otomatik gerçekleşir. Oracle’da yedek alma işlemini düz vites araba kullanmaya benzetirsek, RMAN otomatik vites bir araç gibi düşünülebilir. Vites geçişlerini kendisi ayarlar, sizin bütün yapmanız gerek pedala basmaktır.

• Server tarafında tutulduğundan ve değişiklik yapılıpta olur verilmeden evvel sistem tarafından kontrol edildiğinden insan kaynaklı hataların önüne geçilmiş olur.

• Uzaktan veritabanını başlatmak için lokal makina da bir dosya tutulmasına gerek kalmaz.

Oracle veritabanı PFILE’dan ya da SPFILE’dan başlatılmış olabilir.bunu anlamak için aşağıdaki sorgu kullanılabilir :

SELECT DECODE(value, NULL, ‘PFILE’, ‘SPFILE’) “Init File Type”
FROM sys.v_$parameter WHERE name = ’spfile’;

PFILE’dan SPFILE ya da SPFILE’dan PFILE oluşturmak mümkündür :
• CREATE PFILE FROM SPFILE;
• CREATE SPFILE FROM PFILE;
• CREATE SPFILE=’/oradata/spfileORCL.ora’ from PFILE=’/oradata/initORCL.ora’;

Online yedek alınabilmesi için oracle veritabanının ArchiveLog Mode’a alınmış olması gerekir aksi takdirde online yedekleme işlemleri gerçekleştirilemez. Bunun için öncelikle Oracle veritabanı Archive Log Mode’a nasıl alınır bunu görelim.

İlk önce veritabanımıza bağlanalım ve Archive Log durumunu öğrenelim.
$ sqlplus “/ as sysdba”.
SQL> select log_mode from v$database;
LOG_MODE
————
NOARCHIVELOG.

SQL> show parameter log_archive_start;.

NAME TYPE VALUE
—————————– ———– ———–
log_archive_start boolean FALSE.

Yukarıda da görüldüğü gibi veritabanımız ArchiveLog modunda çalışmıyor.Bu bilgilerin yanında bir de log_archive_max_processes parametresi bulunmaktadır. Bu parametre oracle’ın logları arşivlerken kullandığı process sayısıdır. Varsayılan değeri 2’dir. Böyle bırakılabilir ya da ihtiyaca göre 10’a kadar artırılabilir. Biz bu parametreyi 3 yapalım..

SQL> show parameter LOG_ARCHIVE_MAX_PROCESSES;.

NAME TYPE VALUE
————————- ——— ————
log_archive_max_processes integer 2.


SQL> ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3 SCOPE=BOTH;.
System altered..

Bundan Sonra veritabanımızı archivelog moda almadan archivelog dosyalarının nerede tutulacağı ve formatı ile ilgili düzenlemeleri yapmalıyız. Oracleda yedekleme ile ilgili tüm dosyaların tutulacağı ( RMAN backupları, archive logları, controlfile backupları, ve datafile kopyaları) yeri belirlemek için DB_RECOVERY_FILE_DEST parametresini kullanabiliriz..

SQL> SELECT * FROM V$RECOVERY_FILE_DEST;.

NAME
—————————————————————–
SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
———– ———- —————– —————
/home/oracle/oracle/flash_recovery_area
2147483648 0 0 0.

Recovery için belirlediğimiz klasörün kotasını 20G olarak ayarlayalım..
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 20G SCOPE=BOTH;.
System altered..

Recovery dosyalarının bulunacağı klasörü belirleyelim..
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = ‘/home/oracle/oracle/flash_recovery_area’ scope=both;.
System altered..

Şimdi Archivelog standardımızı belirleyelim. Burada %t thread numarasını, %s log sıra numarasını, %r ise resetlog ID sini göstermektedir..

SQL> show parameter LOG_ARCHIVE_FORMAT;.

NAME TYPE VALUE
———————- ——— —————-
log_archive_format string %t_%s_%r.dbf.


SQL> alter system set LOG_ARCHIVE_FORMAT =’arch_%t_%s_%r.arc’ scope=SPFILE;.
System altered..

Şimdi log_archive_start parametresini değiştirelim..
SQL> ALTER SYSTEM SET log_archive_start=TRUE SCOPE=SPFILE;.
System altered..

Bu parametreleri belirledikten sonra veritabanını archivelog moduna alalım. Fakat bundan önce tüm veritabanımızın bir cold backup’ını almalıyız her ihtimale karşı..


SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down..

Burada /home/oracle klasörünün tamamını problem çıktığında geri dönebilmek için başka bir lokasyona kopyalayalım..

SQL> STARTUP MOUNT;
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE instance started..
Total System Global Area 2483027968 bytes
Fixed Size 2074760 bytes
Variable Size 469763960 bytes
Database Buffers 1996488704 bytes
Redo Buffers 14700544 bytes
Database mounted..

SQL> ALTER DATABASE ARCHIVELOG;.
Database altered..

SQL> ALTER DATABASE OPEN;.
Database altered..

Artık veritabanımız archivelog modunda çalışıyor. Aşağıda archivelog ile ilgili işimize yarayacak komutlar listelenmiştir..

ArchiveLogu başlatmak için: alter system archive log start;
ArchiveLogu durdurmak için: alter system archive log stop;
Tüm Log dosyalarını archiveloga geçirmek için: alter system archive log all;
Aktif kullanılan log dosyasını archiveloga geçirmek için: alter system archive log current;
ArchiveLog kullanım bilgileri için:

SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;

Alert ve Trace Log Files :
Her bir server ya da arka planda çalışan işlemlerin kendileri ile ilişkili bir “trace” dosyası vardır.Örneğin herhangibir hata (internal error) durumunda ilgili trace dosyasına ilgili bilgiler yazılır.Bunun dışında instance ve uygulamaları iyileştirmek için de referans olarak kullanılırlar.
Alert dosyaları(log) ise özel trace dosyalarıdır.Veritabanın mesaj ve hatalarını kronolojik sırada tutarlar.

Backup Files :
Bir dosyayı kurtarmak (restore) demek onu backup dosyası ile değiştirmek demektir.Kullanıcı istediği anda ya da sistemde belirtilen anlarda bu dosyaları oluşturabilir.