• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 23.04.2016 00:55:33C programlama 2 oyun
  • 20.04.2016 16:34:41Local Database
  • 15.04.2016 14:26:15Fatura kayıt işlemi
  • 21.03.2016 01:55:30C# problem

Popüler Sorular

  • 27.05.2012 05:49:50Asp.Net ile Date time alana veri ekleyemiiyorum ?
  • 2.04.2012 00:45:18.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 12.05.2012 08:44:49Acil Yardım
  • 27.05.2012 13:46:51veri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LINQ
  • LibreOffice
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

Oracle 11g Üzerinde Flashback Özellikleri

Oracle 10g sürümü ile ortaya çıkan Flashback özellikleri pek çok yenilik ile Oracle 11g sürümünde de veritabanı yöneticilerine felaket durumlarında yardımlar sağlamaktadır. Flashback Database, Flashba

09.01.2012

Yazar: Uğur İnal (Google+)

Kategori: Oracle

4348
Oracle 10g sürümü ile ortaya çıkan Flashback özellikleri pek çok yenilik ile Oracle 11g sürümünde de veritabanı yöneticilerine felaket durumlarında yardımlar sağlamaktadır. Flashback Database, Flashback Data Archive, Flashback Query, Flashback Table, Flashback Version Query, Flashback Drop ve Flashback Transaction Query olarak çeşitli türde bölümlendirilmiş ve herbirinin farklı amaçları olmaktadır.
 
Flashback Database
Flashback özelliklerinden yararlanmak için veritabanının flashback operasyonları için etkinleştirilmiş olması gerekmektedir. Aşağıda bu etkinleştirme adım-adım anlatılmaktadır.
1.       Oracle Enterprise Manager konsolunda SYS kullanıcısı ve SYSDBA rolü ile oturum açılır.
 
Description: a1.JPG
 
2.       Açılan ana konsol penceresinde High Avaliability kısmı altında Flashback Database Logging modunun devredışı olduğu görülmektedir. Flashback Database özelliğinden yararlanmak için bu mod etkin olmalıdır. Bunun için DISABLED üzerine tıklıyoruz.
 
Description: a2.JPG
 
3.       Açılan pencerede Enable Flashback Database seçeneğini tıklıyoruz. Flashback Retention Time seçeneğinin varsayılan ayarı 24 saattir(Flashback Query, DBMS_FLASHBACK ve Flashback Table metotlarında en son geri kurtarma zamanını işaret etmektedir). Dilerseniz bu ayarı arttırabilirsiniz, ancak Flashback Recovery Size ayarınında arttırılması kaçınılmaz olacaktır. APPLY düğmesine tıklayarak Flashback Database modunu etkin hale getiriyoruz.
 
Description: a3.JPG
 
4.       Bir sonraki pencerede yapılan ayarların geçerli olması için veritabanının yeniden başlatılacağını onaylamak için OK tuşuna tıklıyoruz.
 
Description: a4.JPG
 
5.       Veritabanını yeniden başlatmak için işletim sisteminde yönetici rolüne sahip kullanıcı/şifresi ve Oracle DBA rolündeki sistem kullanıcı/şifresi bilgilerini girip OK tuşuna tıklıyoruz.
 
Description: a5.JPG
 
Bu noktadan itibaren veritabanını istediğimiz zaman dilimine yada SCN numarasına döndürmek istediğimizde ne kadar  zaman öncesine dönebileceğimiz ile ilgili bilgi için aşağıdaki sorgu kullanılır.
 
Description: a6.JPG
 
Örneğin; veritabanını  Flashback Database metodu ile 1 gün önceye geri döndürmek için ;
SQL> shutdown;
SQL> startup mount exclusive;
SQL> flashback database to timestamp sysdate - 1;
 
Flashback Query
Oracle 9i Release 2 sürümü ile başlayarak günümüzde Oracle 11g sürümüne kadar gelen zamanda “as of” takısı SELECT sorgularında bir tablonun belirli bir zaman skalasından veya SCN(System Control Number) numarasından o anki durumu çağırabilmektedir. örneğin, geceyarısıdan sonra silinen satırları bulabilmek veya bir tablonun bugün ile dünkü girilen verileri arasındaki farkları görebilmek için kullanabilmekteyiz.
Aşağıdaki örnekte; UGUR adlı kullanıcı aynı gün içinde yüzlerce kayıt girdikten sonra TB_KURSIYERLER tablosundan 2 kayıdı silmekte ve daha sonra bu işlemi  commit komutu ile diske kalıcı olarak işlemektedir.
SQL > CONN UGUR/****
SQL > DELETE FROM tb_kursiyerler
           WHERE kursiyer_id IN (110,124);
2 rows deleted
SQL> commit;
 
Ancak, mevcut gün içerisinde UGUR adlı kullanıcı bu silinen kursiyerlerin yanlışlıkla silindiğini ve geri getirilmesi gerektiğini belirtmektedir. En son yedek bir gece once olduğundan ve tablomuza bugün içindede yüzlerce kayıt girdiğinden yedekten geri dönme şansımız yok. Bu noktada, silme işleminin 3 saat once yapıldığı bilgisi verilmektedir. Bir Veritabanı Yöneticisi olarak SYS kullanıcısı ve SYDBA rolunde  oturum açtığımızı farzederek;
 
SQL > CONN SYS/**** AS SYSDBA
SQL> INSERT INTO ugur.tb_kursiyerler
          SELECT * FROM ugur.tb_kursiyerler
          as of timestamp systimestamp - interval ‘180’ minute
          WHERE ugur.tb_kursiyerler.kursiyer_id NOT IN
         (SELECT kursiyer_id FROM tb_kursiyerler);
SQL> commit,
 
Yukardaki SQL cümlesini incelersek;  şu anki zamandan 180 dakika önceki TB_KURSİYERLER tablosuna gidiyoruz ve 180 dakika önceki TB_KURSİYER tablosunda yer alan ama şu anki zaman dilimindeki TB_KURSİYERLER tablosunda yer almayan kayıtları bulup, mevcut tablomuza ekliyoruz ve sonra bu işlemi commit ile diske işliyoruz.
 
DBMS_FLASHBACK
 
Flashback Query için diğer bir alternative ise DBMS_FLASHBACK paketidir. İkisinin arasındaki ana farklılık Flashback Query obje seviyesinde işlem yaparken, DBMS_FLASHBACK ise oturum seviyesinde çalışmaktadır ve genellikle kısa zaman dilimlerine dönülmek istendiğinde kullanılır.
 
Kullanıcı oturum seviyesi içinden DBMS_FLASHBACK paketi etkinleştirilebilir ve takip eden tüm işlemleri - çalışan uygulamalarda dahil- “as of” ve “select” sorgusuna gerek kalmadan  geri getirebilir. DBMS_FLASHBACK etkin iken DML işlemlerine izin verilmez.  Aşağıda DBMS_FLASHBACK paketinde kullanılan prosedürler ve bunların tanımları yer almaktadır.
 
Prosedür
Tanım
DISABLE
Oturum için flashback modunu devredışı bırakır
ENABLE_AT_SYSTEM_CHANGE_NUMBER
SCN belirterek oturumda Flashback modu etkinleştirir.
ENABLE_AT_TIME
TIMESTAMP olarak belirtilen e yakın SCNnumarasını kullanarak oturumda Flashback modu etkinleştirir.
GET_SYSTEM_CHANGE_NUMBER
Mevcut SCN numarasını çağırır.
 
Üstteki senaryomuzda olduğu gibi UGUR adlı kullanıcı aynı gün içinde yüzlerce kayıt girdikten sonra TB_KURSIYERLER tablosundan 2 kayıdı silmekte ve daha sonra bu işlemi  commit komutu ile diske kalıcı olarak işlemektedir.
SQL > CONN UGUR/****
SQL > DELETE FROM tb_kursiyerler
           WHERE kursiyer_id IN (110,124);
2 rows deleted
SQL> commit;
 
Ancak, mevcut gün içerisinde UGUR adlı kullanıcı bu silinen kursiyerlerin yanlışlıkla silindiğini ve geri getirilmesi gerektiğini belirtmektedir. En son yedek bir gece once olduğundan ve tablomuza bugün içindede yüzlerce kayıt girdiğinden yedekten geri dönme şansımız yok. Bu noktada, silme işleminin 10 dakika önce yapıldığı bilgisi verilmektedir. UGUR adlı kullanıcı olarak oturum açarak;
 
SQL > CONN UGUR/****
SQL> execute dbms_flashback.enable_at_time(
          to_timestamp(sysdate-interval ‘15’ minute));
 
Bu şekilde UGUR adlı kullanıcının oturumu 15 dakika öncesine geri döndüğünden silinen kayıtlar geri gelmiştir. Tabii, bu 10 dakikalık süre içerisinde UGUR adlı kullanıcı herhangi bir veri girişi yapmadığını farzediyoruz. Aksi durumda, Flashback Query kullanmak zaruri olacaktır.
 
DBMS_FLASHBACK işlemini devredışı bırakmak için UGUR adlı kullanıcı ile aşağıdaki komutu çalıştırmak yeterli gelecektir;
 
SQL> execute dbms_flashback.disable
 
Flashback Table
 
Oracle 10g sürümü ile beraber gelen Flashback table komutu ile bir tablonun sadece geçmiş bir zaman skalasından satırlarını geri kurtarmakla beraber, bu tabloya ait tetikleyiciler, indexler, yordamları dahi veritabanı açıkken geri getirebilmekteyiz. Bir tablo SCN numarasından veya belirli bir zaman diliminden geri getirilebilir. Kullanıcı sayısının az olduğu ve az sayıda tablodan oluşan veritabanı sistemlerinde tavsiye edilen flashback işlemidir. Daha fazla sayıdaki tabloları Flashback Database komutu ile geri getirmek daha avantajlı olacaktır. Flashback Table, standby(beklemede) veritabanlarında ve eklenen/çıkarılan kolonlar gibi bir takım DDL işlemlerinde işlev yapmaz.
 
Flashback Table özelliğini etkinleştirebilmek için once hedef tablolarda row movement özelliğinin etkin olması lazımdır.
 
SQL > ALTER TABLE ugur.tb_kursiyerler ENABLE ROW MOVEMENT;
SQL > ALTER TABLE ugur.tb_egitimler ENABLE ROW MOVEMENT;
SQL > ALTER TABLE ugur.tb_egitmenler ENABLE ROW MOVEMENT;
 
Ertesi gün UGUR adlı kullanıcı, TB_KURSIYERLER tablosundaki 190 kimlik numaralı kursiyer yerine, tüm satırları yanlış bir kopyala-yapıştır işlemi sonucu silmiştir. Bu arada commit ile işlem kalıcı olarak diske yazılmıştır.
 
SQL> DELETE FROM tb_kursiyerler
SQL> /
217 rows deleted
 
SQL > commit;
SQL> WHERE kursiyer_id = 190;
 
Bu durumda UGUR adlı kullanıcı olarak oturum açarak aşağıdaki komut ile bu tabloyu 15 dakika önceki durumuna geri getirme imkanına sahibiz.
 
SQL> flashback table tb_kursiyerler
          to timestamp systimestamp - interval ‘15’ minute;
SQL> SELECT count(*) FROM tb_kursiyerler;
 COUNT(*)
____________
          107
 
Flashback Data Archive
 
Gizli verilerin ve müşteri kayıtlarının yer aldığı tablolardaki satırlardaki değişikliklerinin tarihsel olarak saklanmasının gerekliolduğu SOX veya HIPAA gibi kanuni zorunluluklara tabi firmalar için, Oracle Flashback Data Archive metodu ile tablolardaki tüm değişiklikleri zaman bazlı olarak otomatik olarak kaydeder.
 
Flashback Data Archive, Oracle 11g ile yeni gelen bir özelliktir. Etkinleştirmek için bir veya daha fazla sayıda ambar alanı oluşturulması, ambar içindeki objeler için varsayılan saklama zamanının tanımlanması ve ilgili tabloların izleme için işaretlenmesi gerekmektedir. Flashback Data Archive içindeki tablolara Flashback Query komutları ile erişebiliriz.
·         Arşiv oluşturma:  Create Flashback Archive komutu ile mevcut tablespaceler için arşiv oluşturulabilsede, Oracle arşiv için ayrı bir tablespace oluşturulmasını ve bu tablespace in sadece arşiv için kullanılmasını tavsiye etmektedir. retention takısı ile varsayılan saklama aralığı belirtilir, eğer disk alanında kota tanınlanmak istenirse quota takısı eklenir.
 
Örneğimizde, arşiv için once bir tablespace oluşturacağız ve daha sonrada SATIŞ departmanı için 2 GB kota limitli ve 3 yıl saklamak üzere bir arşiv oluşturacağız.
 
SQL > create tablespace satisarsiv
           datafile ‘+DATA(datafile)’ size 10g;
 
SQL > create flashback archive fb_satis
           tablespace satisarsiv quota 2g
           retention 3 year;
 
Eğer ilerleyen zamanlarda başka departmanlar içinde arşiv ihtiyacımız olursa, yukardaki create flashback archive komutu ile arşivelemeye devam ederiz. İlerleyen zamanlarda satisarsiv adlı tablespace alanımızda boş alan sıkıntısı ile karşılaşırsak;
 
SQL> alter flashback archive fb_satis
           add tablespace satisarsiv2 quota 1g;
 
komutu ile daha önceden oluşturduğumuzu varsaydığımız satisarsiv2 adlı tablespace fb_satis adlı arşive ilave edilerek ek alan kazanılmış olunur.
 
·         Arşive tablo ekleme:  SQL > ALTER TABLE ugur.tb_kursiyerler flashback archive fb_satis;
 
komutu ilede UGUR kullanıcısına ait olan TB_KURSİYERLER adlı tablo izleme için işaretlenmekte ve bu tablo üzerindeki tüm değişiklikler FB_SATIS adlı arşivde saklanacaktır.
 
 
Flashback Drop ile düşürülen tabloların geri getirilmesi
 
Bir tabloyu düşürdüğünüz zaman, Oracle düşürülen tablo ile meydana gelen boş alanı başka objelerde kullanmak üzere hemen işleme sokmaz ve RECYCLE BIN olarak bilinen veritabanındaki çöp kutusuna yerleştirir.
 
SQL > DROP TABLE tb_kursiyerler;
 
Bu tablo nasıl geri getirilecektir? Düşürülen bir tablonun verilerinin yer aldığı bloklar hala tabloya ait tablespace içerisinde yer alır ve tablespace üzerinde kota olunan durumlarda bu düşürülen tabloya ait bloklar hala kota hesaplamasına dahildir.
 
Bu tablonun eğer satırları, indeksleri ve istatistikleri ile birlikte geri getirilmesi istenirse aşağıdaki komut kullanılabilir(eğebaşka bir tablo ile referans kısıtlamalarına sahipse bu kısıtlamalar geri gelmez);
 
SQL> flashback table tb_kursiyerler before drop;

Yazar Hakkında

Uğur İnal

Uğur İnal

uguroracle.blogspot.com/

10 yılı aşkın süredir Oracle benim için bir tutku... Oracle 9i sürümünden beri yurtiçi ve yurtdışında harmanlanmış Oracle eğitimleri verdim, ayrıca teknik danışmanlık hizmetlerinde bulundum. 2002 yılından beri Oracle 9i OCA ve OCP sertifikaları sahibiyim. Yıllardan beri bitiremediğim (yogunluktan vakit bulamayıp bahanesine sığınıp-aslında bitirmek istemediğim belkide-) MBA eğitimine devam etmekteyim. Son 2 yıldır uluslararası bir firmada global pozisyonda Oracle ağırlıklı RDBMS Performans Geliştirme Uzmanı olarak görev yapmaktayım. 2 yıldır da şube kurucusu olduğum Türkiye Bilişim Derneği(TBD) Antalya şubesinde yönetim kurulu üyesiyim. Benimle uinal@hotmail.com adresinden irtibata geçebilirsiniz.

Sosyal Medya

ORANLAR

  • 4348izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Merhaba, ellerinize sağlık çok yardımcı ol...
  • Merhaba Bu uygulama örneğinden ASP.net ...
  • Hocam Link başka sayfaya yönlendiriyor.
  • merhaba benim merak ettiğim bir konu var y...

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 122030
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 68134
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 49928
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ