LOGMINER (Hayat Kurtarmanın Hızlı Yolu)
28/08/2010, 10:53 | RECOVERY kategorisinde yayınlandı | 1 Yorum
Etiketler: logminer, oracle logminer, Türkçe Oracle
Oracle’da veri kurtarmak için kullanılabilecek ,kullanımı oldukça kolay olan ve hızlı bir şekilde sonuç alabileceğiniz bir yöntem; LOGMINER.
Kullanımı bu kadar basit olmasına rağmen çok fazla bilinmediğini ve kullanılmadığını düşünüyorum.
Aslında bu yazıyı yaklaşık bir ay önce yazmaya karar vermiştim. Çünkü iki gün üst üste iki farklı canlı veritabanında kullanmak zorunda kaldım. Her iki durum da, müşteri uygulamalarından yanlışlıkla kayıt sildiklerini ve silinen bu kayıtları kurtarmak için farklı bir ortama veritabanını Point In Time (PIT) recovery yapmak için benden destek istemeleri ile başladı.
Olayı inceledikten sonra kayıtları silen personeli dinledikten sonra buna gerek olmadığını çok uzun sürecek Point In Time recovery yerine logminer kullanacağımı ve kısa sürede silinen kayıtları kurtarabileceğimizi anlattım.
Bu yöntemi kullanabilmek için öncelikle bir takım ön koşullar var .
1-işlemin hangi tablodan yapıldığı bilmek;
Bu olmazsa olmaz değil fakat işimizi hızlandıracaktır. Sorgulama yaparken seg_name ‘e göre arama yapabiliriz.
2-ilgili tablonun logging mode’unun enabled olması.
Tablo’nun logging modu’ enabled değilse o tablo üzerinde yapılacak delete , insert ve update işlemleri redo.log lara yazılmayacağı için logminer kullanamayız.
3-işlemin yaklaşık olarak ne zaman yapıldığının bilinmesi,
Bize hangi redo.log veya arşiv logları kullanacağımız hakkında fikir verecektir ve arama alanımızı kısıtlayacağı için daha hızlı sonuç alabiliriz.
LOGMINER ile kurtarma:
Veritabanına yapılan tüm değişiklik işlemleri redolog.lara oradan da arşiv.loglara aktarılmaktadır. Logminer ile de bu loglardaki yapılan işlemlere bakarak işlemleri geri alabiliriz.
İşlemin hangi saat aralığında yapıldığını tespit ettikten sonra alert.loga bakarak o saatler arasında işlemlerin hangi arşiv.loglarda veya redo.log da olduğu bulup bir kenara not ediyoruz.
Veritabanında hangi schema ait işlem yapıldığını ve tablo adını da aldıktan sonra işleme başlayabiliriz. İşlemlerimiz elbette yetkili bir kullanıcı ile yapıyoruz. Ben sys kullanıcısını kullandım.
Log dosyalarının logminer’a tanıtılması;
Bu kısımda aradığımız işlemi barındırdığını düşündüğümüz redo.log ve arşiv.log dosyaları logminer’a tanıtılır.
Benim örneğimde kayıtların silinmesi redo03.log dosyasında olduğu düşünülerek sadece bu eklenmiştir.
Lomgminer işlemi başlatılır.
EXEC dbms_logmnr.start_logmnr(options=> dbms_logmnr.dict_from_online_catalog);
Aradığımız kayıtların bulunması;
Tanıtmış olduğumuz redo03.log dan sorgulama yapılır. Burada benim kullandığım yöntem sorgulama yaparken bulunan kayıtların , tekrar sorgulama için bir tabloya yazdırılmasıdır.
Create table verikurtar as SELECT * FROM v$logmnr_contents WHERE seg_owner=’SCHEMA_USER’ AND seg_name=’TABLO_ADI’ and operation =’DELETE’ ;
Buarada asıl amaç v$logmnr_contents in sorgulanmasıdır.
seg_owner=’SCHEMA_USER’ , tablonun sahibi olan kullanıcı
seg_name=’TABLO_ADI’ , kaydın silindiği tablo adı
operation =’DELETE’ ; , aradığımız işlem
sorgulama işlemi tamamlandıktan sonra
SQL_REDO kolonunda yapılan delete işlemi bulunur.
SQL_UNDO kolonunda ise yapılan delete işlemini geri almak için kullanacağımız INSERT işlemi bulunur.
Sql_redo kolonundaki kayıtlar incelenerek yanlışlıkla silinen kayıtlar bulunur, bu Kayıların sql_undo sütünündaki insert cümleleri alınarak veritabanına uygulanır ve silinen kayıtlarınızı kurtarırız.
Logminer işlemi sonlandırılır.
Komutu çalıştırılarak işlemimiz sonlanmış olur.
Anlattığım örnekten de anlaşılacağı gibi , logminer yöntemi kullanılabiliyorsa Point In Time recovery kullanarak verilerimizi kurtarmak için harcayacağımız zaman ile kıyaslanamayacak kısa ve kolay bir yöntemdir.
Logminer ile ilgili bilgiler çok güzeldi. Açıklayıcı ve kolay uygulanabilir. Özellikle Ahmet abi (kayıtları silen arkadaş) çok sevindi. Teşekkürler.
Comment by Blueice— 14/01/2013 #