SQL Server Korumalı Alanı


9

Rapor geliştiricilerimizin çalışmalarına bir korumalı alan kurmaya çalışıyorum. Şu anki planım her akşam veritabanını "sıfırlamak" ama bunu nasıl yapacağımdan emin değilim. Sıfırlama ile kastettiğim, aslında sunucudaki tek bir veritabanından tüm kullanıcı tablolarını, görünümleri, saklı yordamları vb. Bırakmak istiyorum. Sanırım başka bir seçenek de bırakın ve veritabanını yeniden oluşturmak olurdu ama eminim ki tüm uygun AD gruplarına / insanlara erişim yeniden ilgili anlamına gelir.

Bunu yapmak için en iyi yolun ne olacağını gerçekten bilmiyorum, bu yüzden bazılarınızın bazı iyi fikirler / öneriler sunabileceğini umuyorum. Teşekkürler.

Anlaşılır olması için bunu veritabanımızla yapmak istiyoruz: http://try.discourse.org/t/this-site-is-a-sandbox-it-is-reset-every-day/57 . Tek fark, kullanıcılarımızı her gün yeniden oluşturmak istemememiz.

Sürüm: SQL Server 2008
Sürümü: Geliştirici ve Kurumsal

Yanıtlar:


8

Başka bir fikir, bir copy_only yedeklemesi yapan ve dev sunucusunda (veya yalnızca bir sunucunuz varsa aynı sunucuda geri yükleyen, ancak bu harika bir fikir olmayabilir) gece işini kurmak olacaktır. Bununla ilgili güzel bir şey, geri yüklemenin herhangi bir sunucuya (veya birden çok sunucuya) gidebilmesi ve birincil veritabanındaki herhangi bir etkinlikten tamamen ayrılabilmesidir.

Sunucu 1'de:

BACKUP DATABASE db TO DISK = '\\someshare\file.bak' 
  WITH COPY_ONLY, INIT, COMPRESSION;

Sunucu 2'de:

RESTORE DATABASE db_dev FROM DISK = '\\someshare\file.bak'
  WITH REPLACE, RECOVERY;

MOVESunucular arasındaki disk düzeni farklıysa (veya kopyayı aynı sunucuya koyuyorsanız) komut eklemeniz de gerekebilir .

RESTORE DATABASE db_dev FROM DISK = '\\someshare\file.bak'
  WITH REPLACE, RECOVERY,
  MOVE 'data_file_name' TO 'D:\somepath\somefile.mdf',
  MOVE 'log_file_name'  TO 'E:\somepath\somefile.ldf';

Aynı sunucuyu geri yüklüyorsanız, kullanıcılarla herhangi bir sorun yaşamamalısınız. Farklı bir sunucuya geri yüklerseniz, kullanıcılarınız var olur ancak sunucu düzeyi oturum açmaları olmayabilir. Bunu düzeltmek için komut dosyaları ve SQL Server 2012'de ( İçerilen Veritabanları ) sorunu tamamen ortadan kaldıran yeni bir özellik vardır .


Dev / prod var ama dev bunun olacağı tek sunucudur. Prod yalnızca prod için hazır işlemler içindir.
Kittoes0124

Bu benim seçtiğim çözüm, lütfen çoğu durumda üretimi basit bir ortama kopyalamak istemediğinizi unutmayın. Lütfen, kullanıcıların e-posta adreslerini, iletişim bilgilerini, vb. Kaldıracak veya gizleyecek bir önlem (script?) Hazırlayın. Geliştiricilerinizin yanlışlıkla kullanıcılara e-posta göndermeye başlamasını istemezsiniz.
zeroDivisible

5

Enterprise Edition motorunda bir örneğiniz olduğundan, veritabanı anlık görüntülerini kullanacağım .

Bu, tüm veritabanını geri yüklemek zorunda kalmadan gün boyunca yapılan değişiklikleri hızlı ve kolay bir şekilde geri almanıza olanak tanır.

Geliştiriciler büyük veri yüklemeleri yapmayı planlıyorlarsa (sesler öyle değil mi?), Bu uygun olmayabilir.


Büyük veri yükleri yapıyorlarsa neden uygun olmaz? Bizimki her zaman söyleyebiliriz .... her zaman 100 sütun 8 milyon satır (sonra "olmamalı" bile) ama biz bunu önlemek için mutlaka istemiyoruz. Gerçekten umursadığımız tek şey günün sonunda her şeyin nüksetmesi.
Kittoes0124

2
@Kittoes çünkü kaynak veriler değiştiğinde anlık görüntü korunmalıdır. Kaynak değişirse mevcut sayfaları kaynaktan alması gerekir, böylece "önce" görünümünü korur. Kaynak veriler değişene kadar bunu yapmaz (anlık görüntü deltalar dışında boş seyrek bir dosya kullanır). Bu bakım oldukça pahalı olabilir. Veritabanı anlık görüntülerinin nasıl çalıştığını görün .
Aaron Bertrand

@AaronBertrand Tamam, eğer veritabanı bir gün içinde 8GB'a çıkarsa, anlık görüntü geri yüklendiğinde tüm yeni veriler kaldırılır, ancak veritabanı yine de 8GB boyutunda olur mu? Yoksa yanlış mı anladım?
Kittoes0124

@Kittoes bir anlık görüntünün salt okunur olduğundan kaynak veritabanına yalnızca yeni veriler yükleyebilirsiniz. Gün boyunca 8GB eklerseniz, olacak değil anlık görülebilir. Anlık görüntüyü geri döndürdüğünüzde / bıraktığınızda, kaynak veritabanında yine de 8GB veri bulunur ve buna göre boyutlandırılır. Daha sonra başka bir anlık görüntü alırsanız, yeni veriler görünür olur. Gün boyunca 8 GB'ı çıkarırsanız , anlık görüntüye eklenir .
Aaron Bertrand

1
@Kittoes, anlık görüntünün alındığı zamana geri dönerek 8GB veri yükünü geri almak istediğinizi kastediyorsanız, evet veri dosyalarınızı oldukları boyuta geri döndürmelidir (dosyaları gerçekten küçük boyutlu hale getirmek isteyip istemediğinize yarın tekrar 8GB yüklediğinizde daha fazla otomatik büyüme yapabilirsiniz, bu da başka bir konudur). Ama bu senaryoyu açıkça test etmedim. Ve bahsettiğim makalede, bu, temelde depolamanın güvenilirliğine de bağlı olduğu için, mutlaka kusursuz değildir. Yedekleme bunu yapmanın daha güvenli bir yoludur.
Aaron Bertrand

0

Size yardımcı olup olmadığını görmek için birkaç sent eklememe izin verin:

Şirketimde, geliştiricilerin her gece gün boyunca kullandıkları veritabanlarını yenilemek istedikleri aynı duruma sahibiz. Bu, Dev'in dokunmadığı bir dizi veritabanımız olduğu anlamına gelir - A diyelim ve tam kopya A olan başka bir dizi veritabanı var, ancak işlerini yapıyorlar ama her gece yenilenmek istiyorlar - B diyelim . Bu, 1 tek sunucu örneğinde olur.

Uyguladığım, bunu başarmak için NIGHTLY RESTORE PROCESS. Aşağıda nasıl çalıştığı:

Her akşam geri yüklenmesi gereken veritabanlarının listesini içeren bir sürücü tablosu oluşturun (bahsettiğiniz gibi).

Tablo: nightly_restore (OriginalDB, RestoreDB, yedek konum, etkin_YN, Sonuçlar, PASS_FAIL)

Daha sonra yukarıdaki tablodan veritabanları listesinde döngü yapacak bazı TSQL yazabilir ve sonra geri yüklemeleri gerçekleştirebilir ve Sonuçlar ve bit 1 = Pass veya 0 = Fail'de herhangi bir başarı veya başarısızlığı günlüğe kaydedebilirsiniz. Enabled_YN, bu veritabanının geri yüklenmesi gerekip gerekmediğini belirler.

Gelecekte eklenecek daha fazla veritabanı varsa, bunları yalnızca tabloya eklemeniz ve etkin_YN bitini Y (etkin) olarak ayarlamanız gerekir.

Bu şekilde süreç daha esnek ve yönetilebilir olacaktır.

Eğer yazdığım SQL istiyorsanız (eminim, yazabilirsiniz :-)), sadece bana ping veya yorum eklemek ve ben paylaşacağım.

HTH

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.