Uzak bir SQL Server veritabanını yerel bir sürücüye nasıl yedekleyebilirim?


241

Uzak bir sunucudan yerel bir veritabanına bir veritabanı kopyalamak gerekiyor. SQL Server Management Studio'yu kullanmaya çalıştım, ancak yalnızca uzak sunucudaki bir sürücüye yedekleniyor.

Bazı noktalar:

  • Uzak sunucuya dosyaları kopyalayabileceğim şekilde erişemiyorum;
  • Sunucuma bir UNC yolu kurma erişimim yok;

Bu veritabanını nasıl kopyalayabilirim? 3. taraf araçlarını kullanmam gerekecek mi?


1
Bence dizin yapısına hiç erişiminiz yoksa, bunu yapmaya çalışırken size meydan okuyacaksınız.
JNK

3
Veritabanını özel olarak yedeklemek yerine kopyalamaya mı çalışıyorsunuz? Öyleyse Veritabanı Kopyalama Sihirbazı'nı veya (SQL Server 2008'de) Şema ve Verileri komut dosyası oluşturmak için "Komut Dosyaları Oluştur" seçeneğini kullanın. Redgate SQL Karşılaştırma ve Veri Karşılaştırma burada da yararlı olabilir.
Martin Smith

1
@MartinSmith Öneriye göre, Generate and Publish Scriptsseçeneği kullanarak komut dosyası oluşturdum . Tüm tabloları ve şemayı alıyorum.Ama tablolarla veri alamadım. Bunu nasıl düzeltebilirim.
ur gerçekten arkadaşım

Yanıtlar:


182

Microsoft SQL Server Management Studio'da yedeklemek istediğiniz veritabanını sağ tıklatıp Görevler -> Komut Dosyaları Oluştur'u tıklatabilirsiniz.

Bu, uzak bir sunucuda bile veritabanınızın iyi bir yedeğini almak için aşağıdakileri ayarlayabileceğiniz bir sihirbazı açar :

  • Yedeklemek istediğiniz veritabanını seçin ve ardından vurun,
  • Size sunduğu seçeneklerde:
    1. 2010 yılında: Tablo / Görünüm Seçenekleri altında, 'Komut Dosyası Verileri' ve 'Komut Dosyası Dizini'lerini Doğru olarak değiştirin ve ardından,
    2. 2012'de: "Genel" altında, "Yalnızca şema" dan "Şema ve veri" ye "Komut dosyası için veri türleri" ni değiştirin
    3. 2014'te: "Komut Dosyası Seçeneklerini Ayarla" adımında verileri komut dosyası yazma seçeneği artık "Gizli" yi tıklamalı ve "Komut dosyasına veri türleri" ni "Şema ve veri" değerine ayarlamalısınız
  • Sonraki dört pencerede "tümünü seç" i tıklayın ve ardından,
  • Yeni bir sorgu penceresine komut dosyası seç

Bir şey bittiğinde, önünüzde bir yedek komut dosyası hazır olacak. Yeni bir yerel (veya uzak) veritabanı oluşturun ve yeni veritabanınızı kullanmak için koddaki ilk 'USE' deyimini değiştirin. Komut dosyasını güvenli bir yere kaydedin ve devam edin ve yeni boş veritabanınızda çalıştırın. Bu, daha sonra istediğiniz gibi yedekleyebileceğiniz (neredeyse) yinelenen bir yerel veritabanı oluşturmalıdır.

Uzak veritabanına tam erişiminiz varsa , sihirbazın ilk penceresinde 'tüm nesneleri komut dosyasını' kontrol etmeyi ve ardından bir sonraki pencerede 'Komut Dosyası Veritabanı' seçeneğini True olarak değiştirebilirsiniz. Ancak dikkat edin, komut dosyasında veritabanı adının tam bir arama ve değiştirme işlemini yeni bir veritabanında yapmanız gerekir; bu durumda komut dosyasını çalıştırmadan önce oluşturmanız gerekmez. Bu, daha doğru bir kopya oluşturmalıdır, ancak bazen izin kısıtlamaları nedeniyle kullanılamaz.


9
SQL Server Management Studio 2012'de 'Komut Dosyası Verileri' diye bir seçenek yoktur, bu nedenle yeni sürümlerde 2. adım için aşağıdakileri yapın: 'Genel' altında, 'Yalnızca şema'dan' Şemaya 'Veri türlerini' değiştirin ve veri '.
berezovskyi

1
SQL Server 2008 R2'de kontrol ettim ve çekicilik gibi çalıştı. Yedekleme stratejisi için kullanmak için kendi başıma bazı ek çalışmalara ihtiyacım var ama RedGate vb gibi bazı üçüncü taraf araçlarını kullanmaktan daha iyi olduğunu düşünüyorum. Belki paranoyayım ama üçüncü taraf araçlarının çoğunun ekstra kodu var ve benim basitlik ve betik netleştirme kontrol ve azaltmak. Çok teşekkürler.
QMaster

2
@ShaunLuttin 'Komut dosyasına veri türleri'ni' Yalnızca şema 'yerine' Şema ve ikinci adımda (2012'de) veri olarak değiştirdiğinizden emin olursanız, INSERT ifadeleri gösterilmelidir.
Daniel Gill

6
SSMS 2014'te, komut dosyasını nereye kaydedeceğinizi seçerken artık yalnızca şemadan şema ve verilere geçme seçeneği "Gelişmiş" in arkasına gizlenmiştir.
MushinNoShin

2
Bu yöntemi kullanarak bir komut dosyası çalıştırmayı denediğimde, SQL sunucu yönetim stüdyosundan "Programın yürütülmesine devam etmek için Yetersiz Bellek" hakkında bir hata alıyorum. (Mscorelib) "
Rob

51

İlk olarak, Herkes ile makinenizdeki yerel bir yola (aşağıda gösterildiği gibi) tam kontrol izinleri verin. (Veya alternatif olarak SQL Server Agent hesabına özel izinler verin ).

İkinci olarak, aşağıdakileri yürütün:

BACKUP DATABASE [dev] TO  DISK = N'\\myMachine\c\dev.bak' WITH COPY_ONLY, INIT;

14
Bu sorunun cevabıdır. Bu, "komut dosyası tabloları ve verileri" değil, "uzak bir SQL Server veritabanını yerel bir sürücüye yedekler". Birisi: Lütfen bu yanıtı kabul edilmiş olarak işaretleyin ve Daniel Gill tarafından yanlış yanıtı kaldırın
Henrik Holmgaard Høyer

bunun daha iyi bir cevap olduğunu düşünürken, soru "Bu veritabanını nasıl kopyalayabilirim?" özel yedekleme değil.
Oliver Townshend,

11
Bu, uzak makinenin, genel durum olmayan yerel makine dosyalarınıza erişebileceğini varsayar.
Anders Lindén

Keşke seni birden fazla kez oylayabilseydim Bu mükemmel bir cevap ve yıllarca yapmak istediğim bir şey. Çok basit ... çok mükemmel. Dünyadaki her durumu çözmeyecek, ancak benim için mükemmel çalıştı, ancak bir makineye uzak kaldım, ancak SQL Server'ı olan makinede değil.
Wade Hatler

Bu benim için de bir işçi. Yerel klasörü geçici olarak herkesle paylaşmanız, yedeklemeyi gerçekleştirmeniz ve ardından paylaşımı devre dışı bırakmanız yeterlidir. Ayrıca bunun doğru cevap olması gerektiğini düşünüyorum.
Fred Rogers

51

Yalnızca verileri ve şemayı kopyalamak için (saklı yordamları, işlevleri vb. Kopyalamaz), SQL Server Alma ve Verme Sihirbazı'nı kullanın ve hedef veritabanını seçerken Yeni ... seçeneğini seçin .

Veritabanı> Görevler> Verileri İçe Aktar'ı sağ tıklayın.

Bir Veri Kaynağı Seçin

  • Veri Kaynağı : SQL Server Yerel İstemci
  • Sunucu Adı : uzak sunucu
  • Kimlik Doğrulama :
  • Veritabanı : db adı

Bir Hedef Seçin

  • Veri Kaynağı : SQL Server Yerel İstemci
  • Sunucu Adı : yerel sunucu
  • Kimlik Doğrulama :
  • Veritabanı :New...

Gerisi düz ileri.


2
Bu benim için kabul edilen cevaptan çok daha iyi çalıştı. Tablolar arasındaki ilişkileri daha temiz yönetir.
MushinNoShin

7
Welp. Ne yazık ki kimlikler ve varsayılan kısıtlamalar koymaz. :(
MushinNoShin

1
Bu, komut dosyası oluşturmaktan çok daha iyi bir yoldur. Komut dosyaları zaman zaman oldukça büyük olabilir. Kişisel tercih. Hücum yok :)
Vikas

Bu çok daha basit ve benim gitmek olurdu, ancak herhangi bir nedenle object_id, create_data, tarih değiştirme sys.tables AS IS gibi sütunlar sadece oluşturulduktan sonra değiştirileceğini unutmayın.
Crismogram

@MushinNoShin önce komut dosyaları oluşturabilir ve ardından eşleme adımında kimlik ekleme özelliğini etkinleştirerek verileri içe / dışa aktarabilirsiniz.
HasanG

29

Sen olamaz yerel diske uzak sunucudan bir yedeğini oluşturmak - Bunu yapmanın bir yolu, sadece yoktur. Ve bildiğim kadarıyla bunu yapacak üçüncü taraf araçları da yok.

Tek yapabileceğiniz uzak sunucu makinesinde bir yedek oluşturmak ve birisinin onu sıkıştırıp size göndermesini sağlamaktır.


5
Katılmıyorum. Birçok durumda MS SQL Server Management Studio'nun 'Komut Dosyaları Oluştur' komutunu, daha sonra istediğiniz gibi yapabileceğiniz yerel bir veritabanı oluşturmak için çalıştırılabilecek bir komut dosyası oluşturmak için kullanabilirsiniz. Aşağıdaki cevabımı veya Martin Smith'in soru üzerine yorumunu görün.
Daniel Gill

19
@Rafid: evet - ama bu gerçek bir YEDEKLEME DEĞİL - bu bir komut dosyası / veri dışa aktarma .....
marc_s

2
@marc_s Dışa aktarılan bir kopyadan farklı bir "gerçek yedekleme" hakkında ne var? Günlük? Başka herhangi bir şey?
Mart'ta Dronz

31
@Dronz: EVET! Komut verme Tabloya yapısını ve hatta muhtemelen verileri çoğaltmak olacak - ama olamaz işlem günlükleri ve istatistik ve bir SQL Server veritabanı diğer hayati parçaları gibi şeyler sayılabilir.
marc_s

1
@ShaunLuttin, verileri dahil edebilirsiniz.
Erwin Rooijakkers

17

Bunun geç cevap olduğunu biliyorum ama SSMS'de komut dosyası oluşturma seçeneğini kullandığını söyleyen en çok oy verilen cevap hakkında bir yorum yapmak zorundayım.

Bununla ilgili sorun, bu seçeneğin bağımlılıkları hesaba katmadığı için komut dosyasının doğru yürütme sırasında oluşturulması gerekmez.

Küçük veritabanları için bu bir sorun değildir, ancak büyük veritabanları için kesinlikle bu komut dosyasını el ile yeniden sipariş etmeyi gerektirdiği için. 500 nesne veritabanında deneyin;)

Ne yazık ki bu durumda tek çözüm üçüncü taraf araçlarıdır.

Benzer işler için ApexSQL'den (Diff ve Data Diff) karşılaştırma araçlarını başarıyla kullandım, ancak burada daha önce bahsedilen herhangi biriyle, özellikle Red Gate ile yanlış gidemezsiniz.


1
i katılıyorum, benim için sql her zaman dependancies doğru sipariş, u belirttiğiniz davranışı yeniden oluşturmak için belirli bir örnek var mı?
sawe

Ayrıca, bu konuyu dikkate almak için bir seçenek var
Gaspa79 16:18

13

SQLBackupAndFTP'yi deneyebilirsiniz . Veritabanınızdaki tüm nesneleri oluşturmak için komut dosyaları ve tablolarınızdaki tüm satırlar için INSERT ifadeleri oluşturur. Herhangi bir veritabanında bu komut dosyasını çalıştırabilirsiniz ve tüm veritabanı yeniden oluşturulur.


4
Destekliyorum. Sql sunucu yönetimi stüdyosu yeni bir sürümünü yüklemek zorunda kaldı ve eskiden gibi komut dosyası olamazdı. Bu araç, uzak sunucuya tam erişim olmadan bile hızlı ve sorunsuz bir şekilde halledildi (appharbor sqlserver eklentisi)
Daniel Gill

1
Bu yazılımın çok fazla kaynak kullandığını lütfen unutmayın.
Dementic

Buggy olmanın yanı sıra ve bunun doğru çalıştığından tamamen emin değilsiniz. PHP üzerinden uzak bir sunucuya hiçbir problem bağlayamazsınız, ama bu mümkün değil mi? Sunucunun kendisinde uygun ayarlara sahip olduğumda. SO ya ... devam ediyorum.
Shawn Rebelo

7

Uzak veritabanının nasıl kopyalanacağıyla ilgili açıklama için bu bloga bakın:

SQL Server 2008 Veritabanını Paylaşılan Barındırma Ortamından Yedekleme


1
Bu yaklaşım, veritabanının yapısının komut dosyasının nasıl yazılacağını, yerel olarak nasıl oluşturulacağını ve ardından yerel ve uzak bir veritabanı arasında veri kopyalamak için SQL yönetim araçlarının nasıl kullanılacağını açıklar.
Drew Noakes

1
Verileri tek seferde de komut dosyası oluşturmak için 'Script Verileri' seçeneğini True'ya çevirebilirsiniz.
Daniel Gill

Kopyalama ve yedekleme iki farklı şeydir.
Anders Lindén

Bu mükemmeldi çünkü sql server 2012 kullanarak bir 2016 veritabanında çalışmam gerekiyor ve 2012'de 2016 yedeklemesini kullanamıyorum.
majjam

6

Uzak sql sunucusundan yerel bilgisayarınıza bak dosyasını almak için% 99 çözüm var. Orada yazımda açıkladım http://www.ok.unsode.com/post/2015/06/27/remote-sql-backup-to-local-pc

Genel olarak şöyle görünecektir:

  • bak dosyaları oluşturmak için sql betiğini çalıştırma

  • her bir bak dosyasını varbinary alan türüyle geçici tabloya eklemek için sql komut dosyasını yürütün ve bu satırı seçin ve verileri indirin

  • tekrarlama Önceki bak dosyalarınız olduğu kadar çok adım atın

  • tüm geçici kaynakları kaldırmak için sql betiğini çalıştırma

işte bu, yerel bilgisayarınızda bak dosyalarınız var.


5

Veritabanını kopyala'yı kullanabilirsiniz ... uzak veritabanına sağ tıklayın ... görevleri seçin ve veritabanını kopyala ... kaynak sunucu ve hedef sunucu hakkında soru soracaktır. kaynağınızın uzak ve hedefin yerel sql sunucusu örneğidir.

işte bu kadar kolay


Veritabanını kopyala SysAdmin ayrıcalıkları gerektirir. Bu, veritabanının düzenli kullanıcıları için bir çözüm değildir.
Buggieboy

Bugünkü sayımda, dev ekibimizin sysadmin ayrıcalıkları var. Bu yüzden Pouyan'ın yaklaşımını kullanacağım.
Hammer ile kodlar

ama günlük olarak bunu yapmak gerekiyor ve ben bunu gerçekleştirmek için komut dosyasına gerek
arıtıcılara

3

AppHarbor çetesi bununla mücadele ediyor ve SQL sunucu yönetim nesneleri ve SqlBulkCopy kullanarak geçici bir çözüm geliştirdi.

Bu konudaki blog yayınlarına göz atın veya doğrudan koda gidin .

Sadece AppHarbor ile test ettiler, ancak kontrol etmeye değer olabilir.


3

Yukarıdaki cevaplar doğru değil. Verilerle bile bir SQL Script yedek değildir. Yedekleme, indisler dahil olmak üzere mevcut yapısında tam veritabanını içeren bir BAK dosyasıdır.

Tabii ki tüm verileri ve uzak bir SQL Server veritabanından indeksleri tam yedekleme içeren bir BAK dosyası yerel bir sistemden alınabilir.

Bu, ticari bir yazılımla yapılabilir, örneğin yedek bir BAK dosyasını doğrudan yerel makinenize kaydetmek için, örneğin bu doğrudan yerel makinenizdeki uzak bir SQL db'den bir yedek oluşturur.


Bunu yapmak için sysadmin izinlerine ihtiyacınız vardır.
LarryBud

Sağ. Sql sunucu yönetim ortamına uzaktan bağlanmak için kullanılan hesap (windows veya sql sunucusu), yedek önemsiz dosyaları almak ve bunları yerel makinenize depolamak için sysadmin izinlerine ihtiyaç duyar. FIDA Software'den bahsi geçen araç, yedekleme önemsizlerini alırken sql sunucusuna gelen ve gelen ağ trafiğini şifreliyor ve sıkıştırıyor. Makinenizde bak dosyasını aldıktan sonra istediğiniz yere geri yükleyebilirsiniz.
Matthias

1

Martin Smith'in dediği gibi, makineye veya dosya sistemine erişiminiz yoksa, kaynak ve hedef sistemlerde bir karşılaştırma yapmak için Red Gate veya Adept gibi üçüncü taraf araçları kullanmanız gerekecektir. Kırmızı Kapı araçları nesneleri ve şemaları VE verileri kopyalamanıza izin verecektir.


1

Aşağıdaki koşulun yerine getirilmesi durumunda, uzak bir SQL Server örneğinden yerel sürücünüze bir yedek alabileceksiniz:

  1. Yerel sürücünüzde paylaşılan bir klasörünüz var.
  2. paylaşımlı klasöre SQL Server kutusundan erişilebilir.

Şimdi yedekleme komutunu belirtirken, disk seçeneğini belirtirken paylaşılan klasör yolunu kullanın.


Peki cevabınız @Vivek'in yanıtından nasıl farklı?
Martin Schröder

1

sadece şunu deneyin:

1) Bilgisayarınızda tam izinle bir klasör paylaşın

2) SQL sunucunuzda: kontrol paneli -> yönetim araçları -> hizmetler -> tüm SQL hizmetlerine sağ tıklayın

oturum açma sekmesi etki alanı yöneticinizle başlamalıdır

3) sql sunucusunun bakım sihirbazında yedekleme konumunu ve klasörünü (\ kullanıcı adınız \ sharedfoldernam)

Şirketimizde 2008 sql server 8 sunucusunda uzaktan yedekleme yaptım


1

Kimsenin sunduğu betik yedekleme çözümünden bahsetmediğinden şaşırdım Ola Hallengren kesinlikle yok Aslında ben türü olarak kullanıyorum ücretsiz olarak ağdaki bir UNC yolu uzak bir sunucuya (gelen yedekleme için bir DB sizi izin SSMS üzerinden dev bilgisayarımdaki bir paylaşıma uzaktan erişimim olmayan bir dev sunucusundan bir DB yedeklemek için). Bu, 2008'den beri mevcuttur ve SQL Server 2005'ten 2014'e kadar çalışır.

Ayarladığınız paylaşımın yeterli erişime sahip olduğundan emin olmanız gerekir: Yedekleme işlemi süresince 'Herkes' AD grubuna tam okuma / yazma izni verme eğilimindeyim çünkü daha kısıtlayıcı bir şey bulamayacak kadar tembelim ama kişisel seçim.

İyi kullanılmış, iyi belgelenmiş ve çok esnektir. Ben procs ve günlük tablo kendi küçük yarar veritabanına koymak ve sonra ateş eğilimi. Her şeyin AD alan adınızda olması ve ortak konumdaki bir sunucuda veya başka bir şeyde uzak olması şartıyla, bu çok iyi çalışır.

Çok eski bir konu eklemek için özür dilerim ama başka bir şey ararken bu rastladı ve bu konu arayan herkes için değerli bir ek olduğunu düşündüm.


1

2019 için, gerçek bir yerel yedekleme istiyorsanız mssql-scripter kullanmanızı tavsiye ederim . Evet, komut dosyalarıdır, ancak tüm verileri içerebilecek şekilde istediğinizi içerecek şekilde ayarlayabilirsiniz. Bir linux makinede bunu kullanarak otomatik günlük yedeklemeler yapmak için bir bash betiği yazdım. Benim özeti ödeme:

https://gist.github.com/tjmoses/45ee6b3046be280c9daa23b0f610f407

0

Bunu bir kez yapabilirdim ... Bunu yapmak için uzak sunucuda bir paylaşım açmış olmalısınız. yedeklemeyi varsayılan konumdan doğrudan paylaşımın kendisine yerleştirebilirsiniz ...

Genellikle yönetici yedeklemeyi alır ve paylaşılan bir klasörde bizimle paylaşır. Eğer orada yedek yerleştirirseniz bu işe yarayacaksa denedim. İşe yaradı.


0

SSMS altında Komut Dosyası Oluştur'u kullanırsanız, Gelişmiş düğmesini tıklatın. 'Bağımlı nesneler için Komut Dosyaları Oluştur' seçeneğinin altında Doğru'yu tıklatın. Her nesnenin herhangi bir bağımlılığının uygun sırayla yazılacağını tıklatarak.


SSMS v17.8.1'de varsayılan değer True'dur.
Chris Catignani

0

Bazı üçüncü taraf yedekleme programları, belirli ağ izinleriyle dosya aktarımının ayarlanmasına izin verir. SQL Server hizmeti kısıtlı hesap altında çalışırken ve yeterli ağ izinlerine sahip olmadığında çok kullanışlıdır. Bu görevi çözen EMS SQL Yedeklemeyi kullanmayı deneyin .


0

Bu amaçla Redgate backup pro 7 araçlarını kullanıyorum . Diğer konumdaki kutucukta yedekleme dosyasından ayna oluşturabilirsiniz. ve ağda ve ana bilgisayar depolama alanında otomatik olarak oluşturduktan sonra yedekleme dosyasını kopyalayabilir.


0

"Herkes" okuma / yazma ayrıcalıklarına sahip yerel bir paylaşımlı klasör oluşturun

Hedef veritabanına bağlanın, yedeklemeyi başlatın ve aşağıdaki gibi paylaşıma yönlendirin

\ Makinem \ shared_folder \ mybackup.bak

(Windows etki alanı ortamında denendi)


0

Bu eski bir yazı olduğunu biliyorum, ama ne için değer, ben "basit" çözüm sadece veritabanına sağ tıklayın ve "Görevler" -> "Veri Katmanı Uygulaması Ver" seçmek olduğunu buldum. Bu seçenek yalnızca sunucu Azure'da barındırıldığı için kullanılabilir (geçmişte Azure ile çalıştığımı hatırladığımdan, .bacpac biçimi orada oldukça yaygındı).

Bunu yaptıktan sonra, yerel sunucu "Veritabanları" listesine sağ tıklayabilir ve .bacpac dosyasını kullanarak verileri yerel makinenize almak için "Veri Katmanı Uygulamasını İçe Aktar" seçeneğini kullanabilirsiniz.

İhracatın uzun sürebileceğini unutmayın . İhracatı bitirmek için kabaca iki saat sürdü. Ancak ithalat kısmı çok daha hızlı.


-1

Yerel bir ağdaysanız, yerel makinenizdeki bir klasörü paylaşabilir ve yedekleme için hedef klasör olarak kullanabilirsiniz.

Misal:

  • Yerel klasör:

    C:\MySharedFolder -> URL: \\MyMachine\MySharedFolder

  • Uzak SQL Server:

    Select your database -> Tasks -> Back Up -> Destination -> Add -> Apply '\\MyMachine\MySharedFolder'

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.