ORACLE ONLINE REDO LOG DOSYALARI



Benzer belgeler
Oracle 11gR2 Üzerine Dataguard Kurulumu Türkçe

Startup ve Shutdown Yöntemleri. ORACLE STARTUP ve SHUTDOWN YÖNTEMLERİ

ORACLE PARAMETRE DOSYALARI ( PFILE & SPFILE )

ORACLE DATAFILE RECOVER (KURTARMA) TESTLERĐ

ORACLE TNS (TRANSPARENT NETWORK SUBSTRATE) LISTENER YAPILANDIRMASI

ORACLE FLASHBACK DATABASE TEKNOLOJĐSĐ

1 ORACLE 11G DATABASE SERVER LE

Veritabanı Tasarımı. Veritabanı Hareketleri

2013 Yıl Sonu İşlemleri

Veritabanı Yönetim Sistemleri I HAFTA 1

SQL veri tabalarına erişmek ve onları kullanmak için geliştirilmiş bir lisandır.

Üst Düzey Programlama

Veritabanı Tasarımı. Sütun Değerlerini Güncelleme ve Satırları Silme

Veritabanı Tasarımı. Kullanıcı Erişimini Kontrol Etme

SP_RENAMEDB eski_isim, yeni_isim VEYA SP_RENAMEDB 'eski isim', 'yeni isim'

POSTGRESQL'de İleri Seviyede Veri Kurtarma ve Yedekleme

DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

Ortak Zamanlılık ve Veri Hareketi (Data Transaction)

ORACLE RMAN (RECOVERY MANAGER)

5 SQL- Yapısal Sorgulama Dili. Veritabanı 1

Bu işleçlerin dışında, aşağıda belirtilen karşılaştırma işleçlerinden de yararlanılır.

SQL Komutları (2) Uzm. Murat YAZICI

PostgreSQL'de Uygulamalı. (Streaming Replication. Standby)

Veritabanı Tasarımı. Tablo Değiştirme

Tavsiye Edilen Önhazırlık Veritabanı kavramınıöğrenmek. Hedefler Shrink yapılmasının amacının kavranması. Shrink yapılma yöntemlerinin öğrenilmesi.

UFS SNAPSHOT. Hazırlayan: Asiye Yigit Agustos

T.C GAZİ ÜNİVERSİTESİ BİLİŞİM ENSTİTÜSÜ YÖNETİM BİLİŞİM SİSTEMLERİ ANA BİLİM DALI MS SQL KOMUTLARI VE MS SQL KOMUTLARI İLE İLGİLİ UYGULAMALAR

SQL'e Giriş. SELECT Deyimi. SQL Komutları. Yardımcı Deyimler

VERİTABANI Veritabanı Yönetimi

«BM364» Veritabanı Uygulamaları

VERİ TABANI YÖNETİM SİSTEMLERİ I

SQL'e Giriş. SELECT Deyimi. SQL Komutları. 1. DDL (Data Definition Language - Veri Tanımlama Dili)

BACKUP BİLGİLERİ YUSUF.KAHVECİ. Yusuf KAHVECİ

VERİ TABANI YÖNETİM SİSTEMLERİ I

PostgreSQL - Yeni dönemdeki yeri

Exchange Server Kurtarma (PowerControls)

Bellek Yönetimiyle İlgili Notlar ORACLE BELLEK YÖNETĐMĐYLE ĐLGĐLĐ NOTLAR

SORGULAR. Öğr.Gör.Volkan Altıntaş

Sorun Giderme. Genel. Disk. Aygıt Sürücüleri 3

Veritabanı. Ders 2 VERİTABANI

SQL SERVER DATABASE FILE LARINI VE TEMPDB FILE LARINI TAŞIMA OPERASYONU

PCTFREE - PCTUSED ORACLE DEĞERLERĐ

Veritabanı Tasarımı. DML İşlemleri ve Görünümler

Tablolar Arası İlşikiler ve Alan Özellikleri. Şekil 1. Magaza veritabanının tabloları ve tablolar arasındaki ilişkiler

Aşağıdaki şemaya dikkat edin. Sorgulamalarımızı genellikle bu şemaya göre yapacağız.

Elbistan Meslek Yüksek Okulu GÜZ Yarıyılı Ara Öğr. Gör. Murat KEÇECĠOĞLU

SIMMAG Kullanım Kılavuzu. Adem Ayhan Karmış. Ana Ekran

Veritabanına Uygulanması

VERĐTABANI YÖNETĐM SĐSTEMLERĐ

MOBİL UYGULAMA GELİŞTİRME

BÖLÜM -7: TABLOLARI OLUŞTURMA VE YÖNETME

Microsoft SQL Server Sorgulama

Bilgisayar Uygulamaları. MySql

Script. Statik Sayfa. Dinamik Sayfa. Dinamik Web Sitelerinin Avantajları. İçerik Yönetim Sistemi. PHP Nedir? Avantajları.

VERİTABANI. SQL (Structured Query Language)

Hybrid Software Veritabanı ve Sistem 7x24 Destek &Danışmanlık Hizmetleri Veritabanı ve Sistem 7x24 Destek & Danışmanlık Hizmetleri

İNTERNET PROGRAMLAMA 2 A S P. N E T. Marmara Teknik Bilimler MYO / Hafta 5 Veri Tabanı İşlemleri

HESAP MAKİNASI YAPIMI

Veritabanı Tasarımı. Kartezyen Çarpım ve Join İşlemleri

SQL Deyimleri. Öğr.Gör.Volkan ALTINTAŞ Volkanaltintas.com

HP Yazılım Zirvesi - İstanbul 20 May Wyndham Grand Levent Erdem Alaşehir / Finansbank Güvenlik Olay Korelasyonunda Büyük Veri Kullanımı

BİLGİSAYAR PROGRAMLAMA Araş. Gör. Ahmet ARDAHANLI. Kafkas Üniversitesi Mühendislik Fakültesi

TRIGGER. Trigger lar, tablo üzerinde tanımlanabilen ve bu tablo üzerinde bir işlem gerçekleştiğinde tetiklenen programlama ögeleridir.

Bölüm 4: DDL Veri Tanımlama Dili

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü Veri Tabanı ve Yönetimi (BİL 301)

DESTEK DOKÜMANI. Ürün : GO/TIGER2/UNITY2 Bölüm : Sistem Đşletmeni

Ders Tanıtım Sunumu. Database Managegement II. Elbistan Meslek Yüksek Okulu Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU

TEMEL VERİTABANI YÖNETİCİLİĞİ & UNIX / LINUX EĞİTİMİ DERS PROGRAMI

Tavsiye Edilen Önhazırlık Veritabanı kavramını öğrenmek

PostgreSQL - Yeni dönemdeki yeri

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

VERİ TABANI ve YÖNETİMİ

Veri Tabanı Hafta Dersi

STORED PROCEDURE LER (Saklı Yordamlar)

Genel Kavramlar. Bilgisayar ortamında işlenebilecek durumda bulunan kayıtlar. Birbiri ile ilişkili veriler topluluğu ve veriler arası ilişkiler

İleri Seviyede PostgreSQL Yönetimi Devrim GÜNDÜZ. PostgreSQL Geliştiricisi PostgreSQL Markafoni

VERİ TABANI YÖNETİM SİSTEMLERİ II. 5. SQL PROGRAMLAMADA CURSOR (İMLEÇ) ve TRIGGERS (TETİKLEMELER)

MPLAB IDE v7.60 PROGRAMI KULLANIMI

Adli Analiz İşlemlerine Başlamak

PostgreSQL ve PL/pgSQL

Flashback Database ile Standby Üzerinden Veri Kurtarmak

Veritabanı Tasarımı. Tablo Oluşturma

Veritabanı Yönetim Sistemleri (Veritabanı Tasarımı) SQL (Structured Query Language)

İLERİ VERİTABANI SİSTEMLERİ SUAT ÜSTKAN

ÜNİTE NESNE TABANLI PROGRAMLAMA I. Uzm. Orhan ÇELİKER VERİTABANI SORGULARI İÇİNDEKİLER HEDEFLER

BÖLÜM- 8: DİĞER ŞEMA NESNELERİNİ OLUŞTURMA

NFS (Network File System) & NIS (Network Information System) H. Coşkun Gündüz cgunduz@cs.bilgi.edu.tr

Birden Çok Tabloda Sorgulama (Join)

Data Programming SQL Language. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

MOBIL UYGULAMA GELIŞTIRME

TROUG. RMAN (Recovery Manager) [Oracle 11g Veritabanları için Yüksek Erişilebilirliğe Giriş Serisi] Ergem PEKER

Veri Tabanı-I 5.Hafta

ORACLE 10G VERĐTABANINI KOMUT SATIRINDAN KURMAK (SILENT INSTALL)

Veritabanına Giriş. Oğuzhan Ceylan. 19 Eylül 2011

Tablolar Arası İlşikiler ve Alan Özellikleri Siparis.musteri_no musteri.musteri_no Siparis.urun_kodu musteri.urun_kodu

Yedek Nasıl Alınır? "Veri Tabanı Yedekleme ve Geri Alma" butonunu tıklayınca aşağıdaki gibi bir ekran açılacaktır.

Flash ile Etkileşimli Öğretim Materyali Hazırlama Semineri

Proticaret Exclusive Versiyon Yükseltme Dokümanı(v.3.0'dan v3.1.0'a)

Transkript:

ORACLE ONLINE REDO LOG DOSYALARI 1

Contents 1. ACID Kavramı ve Transactional Log Gerekliliği.. 3 2. Oracle, ve Veritabanı Dosyalarına Nasıl Yazar? 4 3. Check Point bilgisini güncel tutmak.. 5 4. Check Point bilgisini Alert Log a yazdırmak 6 5. Redo Log Dosyalarının Durumları. 6 6. Redo Log Grupları, Elemanları ve Elemanların Çoklanması.. 7 7. Redo Log lara Grup/Eleman Ekleme/Çıkartma 8 8. Redo Log Dosyalarının Đsimlerini Değiştirmek 11 2

1. ACID Kavramı ve Transactional Log Gerekliliği Tam güvenlik vaad eden her veritabanı ACID (Atomicity Consistency Isolation Durability) denilen standarta uymak zorundadır. Bu standartı kısaca açıklarsak; Atomicity : Ya hep ya hiç kuralıdır. Bir işlem ya tam olarak yapılıp, sonuçlanır; ya da hiç yapılmaz. Yarıda kalan işlemler geri alınır. Yapılan işlemler ise belirsizliğe yer bırakmayacak şekilde tamamlanmıştır. Consistency : Veritabanında tutarlılık esastır. Bir işlemden önce veritabanı tutarlıysa, işlem sonrası da tutarlı kalır. Eğer veritabanı tutarlılığını bozan bir işlem gerçekleşiyorsa, işlem geriye alınır. Isolation : Bir operasyon tarafından yapılan değişikliklerin, diğer işlemler tarafından nasıl görüntülenmesi gerektiğini belirler. Örnek olarak iki kullanıcı aynı katalog nesnesini güncelliyorsa, ortamda sadece kendileri varmış gibi (izole) çalışabilmeleri gerekir. Bir kullanıcı diğerinin değişikliklerini etkilememelidir, başkasının değişikliklerinden de etkilenmemelidir. Durability : Commit edilen işlemlerin veritabanına yazıldığının ve kaybolmayacağının garantisidir. Yukarıdaki özelliklerin sağlanması oldukça güçtür. Bunları yapabilmek için Write Ahead Logging (Transactional Log) ve Shadow Paging isimli yöntemler kullanılmaktadır. Shadow Paging, veritabanına gerçek girişin yapılmasından önce, kopyaya girişin yapılıp, ardından gerçek değişikliğe gidilmesi olarak düşünülebilir. Write Ahead Logging (WAL) ise yapılacak işlemlerin öncelikli olarak bir log dosyasına yazılması ardından, veritabanına ait dosyalara aktarılmasıdır. WAL kavramı, Oracle da online redo log olarak geçmektedir. Veri güvenliği için yapılan her işlem öncelikle online redo log diye isimlendirilen dosyaların içerisine yazılır. Daha sonra ara ara bu redo log lar Oracle a ait veritabanı dosyalarına yazılır. (Ekstra bir bilgi; Yahoo! gibi birçok büyük firmanın veritabanı olarak kullandığı PostgreSQL, redo log yerine WAL ismini aynen kullanmaktadır.) 3

Belirtmeye çok gerek yok ancak yine de değineyim, transactional log binary bir dosyadır, sadece Oracle tarafından okunabilir. Programların işleyişini gösteren, insanların okuyabileceği metin formatındaki log dosyalarıyla bir ilgisi yoktur. 2. Oracle, ve Veritabanı Dosyalarına Nasıl Yazar? Bir veritabanı iki veya daha fazla redo log dosyasından oluşur. En az iki olmasının nedeni, archivelog şeklinde çalışıyorsanız, redo log dosyalarından bir tanesi kullanılırken diğeri arşive çıkılabilsin diyedir. Böylece her zaman çalışabilir olmayı sağlar. (Gerçi aşırı yoğun bir sistemde sadece iki adet redo log kullanıyorsanız, "Thread 1 cannot allocate new log, sequence #" şeklinde sık sık hata alırsınız. Çünkü redo log ların arşive çıkması için yeterli zaman olmayacaktır.) Online redo log lar arasındaki geçiş, sirküler şekilde aşağıdaki gibi gerçekleşmektedir. LOGWR (Log Writer) LGWR (LogWriter) ın Dosyalarını Dönüşümlü Kullanımı Online Redo log File #1 Online Redo log File #2 Online Redo log File #3 Yukarıda verilen işlemler LogWriter tarafından sağlanmaktadır. LGWR, log buffer daki redo bilgilerini, redo log dosyalarına aktarmaktan sorumludur. Ayrıca checkpoint işlemleri de bu process, redo log dosyalarının statüsünü güncellemekten sorumludur. Herhangi bir zaman diliminde, Oracle redo log dosyalarından sadece bir tanesini kullanır. Kullandığı redo log dosyası dolduğunda, bir sonraki redo log dosyasına geçilir. Fakat bu geçiş yapılırken, sıradaki online redo log içeriğinin datafile lara yazılıp yazılmadığı ve bu dosyadan arşiv üretilip üretilmediği kontrol edilir. Her iki işlemde bitene kadar bu redo log dosyası kullanılmayacaktır. 4

LGWR, bir sonraki redo log dosyasına geçtiğinde, bir önceki redo log dosyasının durumunu controlfile içinde CURRENT ten ACTIVE e çevirir. (Bir sonraki bölümde, bu statüler açıklanmıştır.) Akabinde DBWR (Database Writer) işlemini durumdan haberdar ederek, bir önceki redo log dosyasında checkpoint işlemi yapmasını gerektiğini belirtir. DBWR tarafından checkpoint işlemi tamamlanıp, redo log daki değişiklikler veritabanı dosyalarına yazıldığında CKPT process i çağrılır. CKPT işlemi veritabanı dosyalarının header bilgilerini ve check point bilgisini (sadece) controlfile içerisinde günceller. (CKPT tarafından yapılan güncelleme bilgisi v$datafile_header tablosundaki checkpoint_change# ve checkpoint_time bilgileriyle ilgilidir.) Burada dikkat edilmesi gereken, CKPT in redo log bilgisine dair bir güncelleme yapmamasıdır. Đsminden de belli olacağı gibi sadece checkpoint işlemiyle ilgilenir. CKPT işlemi tamamlandığında, LGWR işlemi çağrılarak controlfile içerisinde redo log bilgisini ACTIVE den INACTIVE e çeker. (Bu güncelleme, v$log.status bilgisini sağlar.) Bu değişiklik düşük önceliklidir, çünkü bu konuyla tek ilgilenen process LGWR in kendisidir. Buradaki status bilgisine göre, LGWR redo log dosyasının tekrar kullanılıp kullanılmayacağına karar verir. (Eğer redo log dosyası ACTIVE durumdaysa, checkpoint işleminin sonuçlanması bekleniyor demektir.) Eğer yeterli sayıda redo log dosyası varsa, herhangi bir iş bloklanmaz. Ancak yoğun bir ortamda az sayıda redo log dosyası varsa, daha önce belirtildiği gibi "Thread 1 cannot allocate new log, sequence #" şeklinde sık sık hata alınacaktır. 3. Check Point bilgisini güncel tutmak LGWR in düşük öncelikle redo log dosyaklarının statüsünü güncellemesinden hoşnut değilseniz, aşağıdaki yöntemleri izleyebilirsiniz: i. SQL> ALTER SYSTEM CHECKPOINT; komutu vererek manuel olarak ii. tetikleyebilirsiniz. LOG_CHECKPOINT_TIMEOUT isimli parametreyi değiştirmeniz mümkündür. Bu parametreyi değiştirmek için aşağıdaki adımları izleyebilirsiniz. a. Önce mevcut duruma bakıyoruz: SQL> SHOW PARAMETER LOG_CHECKPOINT_TIMEOUT; log_checkpoint_timeout integer 27000 Buna göre her 27000 saniyede bir checkpoint işlemi gerçekleşecektir. b. Şimdi de her 30 dakikada bir check point işleminin gerçekleşeceğini garanti ediyoruz: 5

SQL> ALTER SYSTEM SET LOG_CHECKPOINT_TIMEOUT=1800 SCOPE=BOTH; SYSTEM ALTERED PFILE üzerinden değişiklik yaparak aynı sonuca ulaşabilirsiniz. Ancak yukarıdaki yöntemi kullanırsanız, veritabanının kapanmasına gerek yoktur; dinamik olarak kullanımıyla başlanır. Bu yöntemle check point işleminin gerçekleştiği gerçekleştirecektir. 4. Check Point bilgisini Alert Log a yazdırmak Eğer yapılan checkpoint işleminin alert dosyasına yazılmasını isterseniz, aşağıdaki adımları takip edebilirsiniz: a. Mevcut durumu kontrol; SQL> SHOW PARAMETER LOG_CHECKPOINTS_TO_ALERT; log_checkpoints_to_alert boolean FALSE b. Değişiklik yapma; SQL> ALTER SYSTEM SET LOG_CHECKPOINTS_TO_ALERT=TRUE SCOPE=BOTH; System switch log altered. Yukarıdaki örneği daha iyi görebilmek açısından ben bir dakikalık periyotlarla checkpoint yapacak şekilde ayarlama yaptım. Alert log dosyasına bakıldığında sonuç şu şekilde oldu: oracle@test1:/data1/oracle/admin/yatirim/bdump > tail -f alert* ALTER SYSTEM SET log_checkpoint_timeout=60 SCOPE=BOTH; Wed Sep 17 15:37:48 2008 Beginning global checkpoint up to RBA [0x4.1595.10], SCN: 32216940288 Completed checkpoint up to RBA [0x4.1595.10], SCN: 32216940288 Wed Sep 17 15:38:26 2008 Incremental checkpoint up to RBA [0x4.1596.0], current log tail at RBA [0x4.1596.0] Wed Sep 17 15:39:27 2008 Incremental checkpoint up to RBA [0x4.1596.0], current log tail at RBA [0x4.15a1.0] Wed Sep 17 15:40:42 2008 Incremental checkpoint up to RBA [0x4.15ad.0], current log tail at RBA [0x4.15ad.0] Belirtildiği gibi dakikada bir checkpoint işlemi gerçekleşti. Gerçi alert log dosyasında check point bilgisi görmek ne kadar gereklidir tartışılabilir. 5. Redo Log Dosyalarının Durumları LGWR in yazma işlemini yaptığı redo log dosyası 'current' olarak geçer. Redo log dosyalarının bulunabileceği bazı durumlar şu şekildedir: a. CURRENT : Redo log dosyasının kullanımda olduğunu gösterir. b. ACTIVE : Current redo log dosyası değişmiştir. Ancak daha önce kullanımda olan redo log dosyasının içeriği henüz veritabanına 6

aktarılmamıştır. Yazma işlemi devam etmektedir. LGWR tarafından active lik durumu bir süre sonra, INACTIVE e çekilir. Checkpoint komutuyla, yazma işleminin yapılmasını tetiklemek mümkündür. c. INACTIVE : Kullanımda olmayan redo log dosyalarını ifade eder. d. UNUSED : Đlgili redo log dosyasının henüz hiç kullanmadığını gösterir. Yeni eklenen redo log dosyalarını, unused olarak görürsünüz. e. INVALID : Dosyanın erişilemez (ya da bozuk) olduğunu işaret eder. f. STALE : Dosya tamamlanmamıştır. ABORT ile ya da beklenmeyen ani veritabanı kapanmalarından kaynaklanmaktadır. 6. Redo Log Grupları, Elemanları ve Elemanların Çoklanması Şu ana kadar redo log dosyalarının her birini ayrı olarak ele aldık. Hâlbuki aynı redo log dosyasını birden fazla lokasyonda tutabilirsiniz. Aynı elemanların oluşturduğu kümeye, redo log grubu denmektedir. Daha yalın bir dille şöyle özetleyebiliriz: Bir problem çıkma ihtimâline karşı redo log dosyalarını çoklamak (multiplexing) mümkündür. Birinci redo log dosyası demek yerine, birinci redo log grubu denerek, bu gruba birden fazla redo log dosyası eleman/üye (member) olarak atanır. Grup içindeki redo log dosyalarının hepsi aynıdır. Örnek verirsek; oracle@test1:/data1/oracle/oradata/test > ls -lh red* -rw-r----- 1 oracle oinstall 51M Sep 17 13:35 redo41.log -rw-r----- 1 oracle oinstall 51M Sep 17 13:35 redo42.log -rw-r----- 1 oracle oinstall 51M Sep 17 14:05 redo51.log -rw-r----- 1 oracle oinstall 51M Sep 17 14:05 redo52.log -rw-r----- 1 oracle oinstall 51M Sep 17 14:32 redo61.log -rw-r----- 1 oracle oinstall 51M Sep 17 14:32 redo62.log Şimdi bu dosyaların md5 değerlerine bakalım; oracle@test1:/data1/oracle/oradata/test > md5sum redo* c949c72573d884d04f52ec275bbaf9d0 redo41.log c949c72573d884d04f52ec275bbaf9d0 redo42.log d5f688d77b712103ebfe31744833bedf redo51.log d5f688d77b712103ebfe31744833bedf redo52.log 3d91c30ba46d0c1d7daaa6ccc0362399 redo61.log 3fbbf539a69204b0d0ad9950e0caf901 redo62.log Bu örneğimizde her bir redo log dosyası iki elemandan oluşan bir grubun elemanlarıydı. Farkedeceğiniz gibi son satır hariç, redo log dosyalarının tamamı grup içinde aynı. Son satırdaki farklılıkta, redo6 ile başlayan grubun aktif olarak kullanılmasından kaynaklanıyor. Sürekli olarak değişiklikliğin yaşanması, komutu sürdürürken, redo log dosyalarının 7

değişmesiyle farklı md5 değerlerinin ortaya çıkmasına neden olmakta. (Aynı redo log dosyasının birden fazla kopya ile çalışmasını gördük. Benzer bir durum arşiv dosyalarının aynı anda farklı lokasyonlara yazılması için de vardır.) Redo Log dosyalarını hatalara karşı çoklarsak, güvenliğimiz artacaktır. Aşağıdaki senaryolar ve sonuçları çoklamanın faydalarını göstermek açısından yararlıdır: Şayet LGWR, grup elemanlarından en az birine yazabilirse, LGWR, bir sonraki grup elemanları arşivlenmediği için erişemiyorsa, Sıradaki grubun bütün elemanlarına donanım kaynaklı bir problemden erişilemiyorsa, LGWR in yazma yaptığı bütün grup elemanları birden erişilmez hâle gelirse, Sonucunda Yazma işlemi normal gerçekleşir. LGWR, yazılabilen redo log üyelerine yazar, yazılamayanları önemsemez. Grup elemanları arşive çıkılana ve kullanım için uygun hâle gelene kadar, işlem durdurulur. Oracle hata döndürür ve veritabanı kapatılır. Bu durumda, bir online redo log un olmayışı nedeniyle recover işlemi yapmanız gerekebilir. Oracle hata döndürür ve veritabanı kapatılır. Eğer log un bulunduğu ortamda bir problem yoksa örneğin elektriğin birden kesilmesi gibi bir durum yaşandıysa recover işlemine gerek kalmayabilir. Aksi hâlde recover işlemi gerekecektir. Multiplexing yapılan elemanların farklı disklere yazılması veri kaybını azalmakta size yardımcı olacaktır. 7. Redo Log lara Grup/Eleman Ekleme/Çıkartma Grup/eleman ekleme, çıkartma gibi konulara devam etmeden önce, veritabanıyla ilgili bazı kontrol yapmamız gerekiyor. Çünkü redo log larla ilgili her türlü işlem öncesi MAXLOGFILES ve MAXLOGMEMBERS değerlerinin kontrolü mutlaka yapılmalıdır. Bu değerlere iki şekilde ulaşabilirsiniz. Birinci yöntem, controlfile i trace e çıkarak sağlanır. SQL> alter database backup controlfile to trace as '/tmp/create_cfile.sql'; 8

Database altered. SQL>! more /tmp/create_cfile.sql STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "YATIRIM" NORESETLOGS NOARCHIVELOG MAXLOGFILES 50 MAXLOGMEMBERS 5 MAXDATAFILES 100 MAXINSTANCES 1 MAXLOGHISTORY 292 Yukarıdaki çıktıya göre, MAXLOGFILES sayesinde maksimum 50 adet redo log grubu olabileceğini anlarız. MAXLOGMEMBERS ise her grupta 5 adet üye redo log bulunabileceğini söyler. Controlfile ile uğraşmak yerine, sorgu çekmek suretiyle de aynı parametreleri yakalayabilirsiniz. Fakat verilecek sorgu bir X$ view lerini kullandığından SYSDBA yetkisine sahip olmanız ve sisteme bu şekilde girmeniz gerekmektedir. SQL> SELECT DECODE (INDX, 3,'MAXLOGFILES',4,'MAXDATAFILES',2,'MAXINSTANCES',9,'MAXLOGHISTORY ') VARIABLE, RSNUM FROM X$KCCRS WHERE INDX IN (3,4,2,9) UNION ALL SELECT 'MAXLOGMEMBERS ',DIMLM FROM X$KCCDI; VARIABLE RSNUM -------------- ---------- MAXINSTANCES 1 MAXLOGFILES 50 MAXDATAFILES 100 MAXLOGHISTORY 292 MAXLOGMEMBERS 5 Eğer SYSDBA yetkiniz yoksa ve controlfile a erişemiyorsanız, bir başka sorguyla MAXLOGFILES değerini okumanız mümkündür. Ancak tek başına bu bilgi yeterli olmayacaktır. SQL> SELECT TYPE,RECORDS_TOTAL FROM V$CONTROLFILE_RECORD_SECTION WHERE TYPE='REDO LOG' ORDER BY 1; TYPE RECORDS_TOTAL ---------------------------- ------------- REDO LOG 50 9

Gerekli bütün bilgilerden emin olduktan sonra, aşağıdaki SQL ifadelerini kullanabilirsiniz. Dikkat edilmesi gereken en önemli nokta, işlem yaptığınız grubun aktif olmamasıdır. Aşağıdaki SQL ifadesiyle grubun statüsünü okuyabilirsiniz; /* REDOLOG DOSYALARININ DURUMUNU GORMEK ICINDIR */ SELECT V1.MEMBER, V2.* FROM V$LOGFILE V1, V$LOG V2 WHERE V1.GROUP# = V2.GROUP# ORDER BY 3; Eğer üzerinde işlem yapmak istediğiniz grup aktif ise, aşağıdaki komutlarla switch etmeniz gerekecektir. Switch sonrasında yukarıdaki sorgunun mutlaka tekrar çalıştırılıp üzerinde işlem yapılacak grubun inaktif olduğundan emin olunması lâzımdır. /* LOGFILE GRUBUNUN DEGISIP ARSIVE CIKMASI ICIN */ ALTER SYSTEM SWITCH LOGFILE; /* CHECKPOINT ISLEMINI MANUEL TETIKLEMEK ICIN */ ALTER SYSTEM CHECKPOINT; Her elemanı 100 MB boyutunda olan 8 numaralı yeni bir grup yaratmak istersek, aşağıdaki ifadeyi kullanabiliriz. (Buradaki 100MB i keyfi atamamak önemlidir. Diğer redo log gruplarlarıyla aynı değerde olmasına dikkat etmek gerekir.) /* REDO LOG DOSYALARINA YENI BIR GRUP EKLEMEK ICIN */ ALTER DATABASE ADD LOGFILE GROUP 8 ('/data2/ccebi_test/oradata/redo82.log') SIZE 100M; /* AYNI ANDA IKI ELEMANLI YENI BIR GRUP EKLEMEK */ ALTER DATABASE ADD LOGFILE GROUP 9 ('/data2/ccebi_test/oradata/redo91.log', '/data2/ccebi_test/oradata/redo92.log' ) SIZE 50M; /* MEVCUT BIR GRUBA YENI REDO LOG UYESI EKLEMEK ICIN */ ALTER DATABASE ADD LOGFILE MEMBER '/data2/ccebi_test/oradata/redo83.log' TO GROUP 8; Redo log gruplarını mümkün olduğunca birbiriyle aynı şekilde tutmak önemlidir. Yani bir grubu 2 elemanlı yaratırken, diğer grubun 4 elemanlı olması tasarım açısından güzel gözükmeyecektir. Böyle durumlarda, redo log grubundan eleman drop etmek için aşağıdaki ifadeleri kullanabilirsiniz: /* BIR REDOLOG FILE GRUBUNDA SADECE BELIRLI DOSYALARI DROP ETMEK ICINDIR */ ALTER DATABASE DROP LOGFILE MEMBER '/data2/ccebi_test/oradata/redo93.log', '/data2/ccebi_test/oradata/redo94.log'; 10

Bir redo log grubunun için bütün elemanları drop etmek mümün değildir. Bunu denediğinizde, en az bir eleman olması gerektiğini söyleyen bir hata mesajı sizi durduracaktır. Fakat bir redo log grubundan tamamen vazgeçmek ve drop etmek istiyorsanız aşağıdaki ifade ile bunu gerçekleştirmek mümkündür: /* BIR REDOLOG FILE GRUBUNU DROP ETMEK */ ALTER DATABASE DROP LOGFILE GROUP 4; DROP edilen redo log nesneleri aslında silinmezler. Ancak bir daha kullanılamazlar. Boşuna yer kaplamasının anlamı olmadığından, işletim sistemi üzerinden silinmesi gerekir. Aktif olmayan gruplar üzerinde çalıştığınız sürece, bu işlemleri online gerçekleştirebilirsiniz. (Elbette yedek alarak çalışmak her zaman ideal yöntemdir.) 8. Redo Log Dosyalarının Đsimlerini Değiştirmek Yedinci bölümde anlatılan prosedürleri izleyerek redo log dosyalarını online olarak yeniden isimlendirebilirsiniz. Fakat bunun ideal bir yöntem olduğunu söylemek oldukça güç, çünkü işlemi gerçekleştirmek hâyli zahmetli olur. Basit bir yöntem ise veritabanını kapatıp, redo log dosyalarını işletim sistemi üzerinden yeniden isimlendirmek ve ardından veritabanını startup mount mode ile başlatıp redo log ların isimlerinin değiştiğini Oracle a bildirmektir. Elbette veritabanını hazır kapatmışken yedek alarak işleme başlamanız, daha güvenli çalışmanızı sağlayacaktır. Veritabanını kapatıp, sonrasında startup mount mode ile başlattıktan sonra, aşağıdaki komutu vererek, redo log dosyalarının yeni isimlerini Oracle a tanıtabilirsiniz: SQL> ALTER DATABASE RENAME FILE '/datac5/oradata/redo1_1.dbf' TO '/datac5/oradata/redo11.dbf'; 11