2011-08-09 6 views
11

Uygulamalarımızdan birinde, günde üç kez yenilenen ve yenilenmesi için yedi saat süren muazzam bir Malzeme Görünümü'ne sahibiz. (İdeal değil, biliyorum). Bu beni şaşırttı, çünkü kullanıcılar ve oturumların yenilenmişken bu gerçekleşmiş görünüme erişemediğini sanıyordum, ama görünüşe göre onlar! (Yenileme türü tamamlandı yenilendi)Oracle - Materyalleştirilmiş Görünüm tam yenileme sırasında hala erişilebilir. Bu nasıl çalışıyor?

Tam bir yenileme işlemi sırasında, mevcut veri kümesi düşüyor ve sorgu yeniden çalıştırılıyor. Bu doğruysa, , somutlaştırılmış görünüm yenilenirken kullanıcılar/diğer oturumlar gerçekleşen görüntüye nasıl erişebilir?

+0

Buna inanıyorum: Bu okuma tutarlı bir görüş. Bu, bir satır değiştirildiği zaman, birisinin o masayı sorgulaması durumunda, orijinal satırın işlemin sonuna kadar korunacağı anlamına gelir. – Randy

cevap

15

Tam bir yenilemenin iki farklı yolu vardır: atomik yenileme veya atomik olmayan bir yenileme. Bir atomik yenileme, yalnızca, materyalize edilmiş görünümdeki tüm satırları silmek için bir DELETE yayınlar ve ardından yeni verileri eklemek için bir INSERT yapar. Tüm bunlar tek bir işlem içinde. Bu yüzden Oracle'ın standart çoklu sürüm okuma tutarlılık mimarisi, yenilemenin tamamlanmasına kadar Oracle'ın diğer oturumları eski verileri göstermesine izin veriyor. Atomik olmayan bir yenilemede Oracle, gerçekleştirilmiş görünümde bir TRUNCATE ve ardından yeni verileri eklemek için bir doğrudan yol INSERT yapar. Bu önemli ölçüde daha verimlidir, ancak TRUNCATE DDL olduğundan, eski verilerin yenileme sırasında diğer oturumlar tarafından görülmediği anlamına gelir.

+0

Harika cevap, teşekkür ederim! – contactmatt

İlgili konular