2009-11-06 22 views
6

Web uygulamasında uzun bir işlem için bir geri alma düğmesi uyguluyorum. Geri alma başka bir istek geleceğinden, işlemi yapmak zorundayım.Daha önce yapılmış bir işlemi nasıl geri alırım?

İşlemde "belki geri alma" gibi bir ipucu yayınlamanın bir yolu var mı? Bu nedenle, işlem tamamlandıktan sonra, gerekirse başka bir işlemde geri dönebilirim.

Aksi takdirde Geri Al işlevi, geri aldığınız işlem kadar karmaşık olacaktır.

Bu mümkün mü? Diğer fikirler hoş geldiniz!

+0

Yaptığınız bilgilere veri bağımlılıkları olacak mı? –

+0

Sadece yabancı anahtarlar ve alt verilerle. Bunlar da elbette silinmeli. Ama operasyon atomik ve geri dönüş doğru şeyi güvenli bir şekilde yapardı. –

cevap

4

Bu durumda buradaki fikir her işlem için günlüğe kaydetmektir - tersi işlem yapan özel bir günlüğe karşı bir sayaç işlemi ve geri almanız gerektiğinde, aslında oturum açtığınız komutları çalıştırırsınız. Bazı veritabanlarında DB'nin belirli bir tarih ve saate geri gitmesini isteyebileceğiniz flashback teknolojisine sahip bazı veritabanları vardır. ancak

Oracle Flashback SQL sunucusu üzerinde benzer bir teknoloji olduğunu sanmıyorum

ve ... nasıl çalıştığını anlamak ve sadece istediğiniz verileri ve diğer değil personel etkileyecek emin olmak gerekir Söyleyemediğini söyleyen bir cevap var, ama SQL evrimleşmeye devam ediyor ...

+0

Etkinlik çok uzun bir süre önce gerçekleşmemişse, Log PI veya Apex SQL'den araçlar kullanabilirsiniz (Lumigent, iyi bir tane oluşturdu, ancak 2005'te kayıt formatı değiştikten sonra üretmeyi durdurdu). Bu konuyla ilgili iyi tartışmalar, yerel olarak yapmayla ilgili makalelere bağlantılar (iyi bir yedekleme varsayılıyor): http://www.developersdex.com/sql/message.asp?p=580&r=6497847 Görev LiteSpeed ​​iyi bir yedeğe sahip Denetim özelliği de, verilerin yedekleme sırasında nasıl göründüğünü görmenizi sağlar. –

+0

ApexSQL Günlüğü: http://www.apexsql.com/sql_tools_log.asp ... Log PI artık yok gibi görünüyor ... Quest LiteSpeed: http://www.quest.com/litespeed-for-sql-server/ –

6

Dikkat edilmesi gereken başka bir seçenek: Kullanıcının işlemi geri alması mümkün ise, uygulamak isteyebilirsiniz. Bekleyen işlemleri depolayabileceğiniz bir 'niyet' tablosu. Uygulama akışınızdan geçtikten sonra, kullanıcının İşlemi Kabul Et veya Geri Alması gerekir; bu noktada, bekleyen işlemi yalnızca çalıştırabilir ve veritabanınıza uygulayabilirsiniz.

Web uygulamasında, bir kullanıcının işlem yapmak üzere bir işlem gönderebileceği ve iptal etmek için çalışmasının planlandığı gün saat 17: 00'a kadar devam edeceği benzer bir sistemimiz var. Bunu bir niyet tablosunda saklıyoruz ve günlük kesinti süresinden sonra o gün için planlanan işlemleri gerçekleştiriyoruz. Sizin durumunuzda, ilk “uzun çalışma” dan sonra kullanıcıdan açık bir 'Kabul' veya 'Geri Al' işlemine ihtiyacınız olacaktır, bu sayede süreciniz biraz değişecektir.

Bu yardımcı olur umarım.

1

Burada hangi teknolojilerin kullandığınızdan emin değilim, ancak bu konuda kesinlikle daha iyi yollar vardır. Verileri oturumda saklayarak ve son sayfada olduklarında taahhüt ederek başlayabilirsiniz. Bugünlerde birçok çerçeve, birden çok isteği kapsayan uzun süreli işlemlere de izin vermektedir. Bununla birlikte, muhtemelen her sayfanın sonunda işlem yapmayı ve sürecin tamamlandığı zaman için bir çeşit bayrak ayarlamayı isteyeceksiniz. Bu şekilde, ortasında bir şeyler yanlış giderse, kullanıcı kurtarabilir ve her şey kaybolmaz.

İlgili konular