T-SQL Script kullanarak SQL Server 2008'deki belirli tabloları nasıl yedekleyebilirim?


Yanıtlar:


11

Yedekleme Türleri SQL Server Kurtarma Modeline bağlıdır. Her kurtarma modeli, tüm veya kısmi SQL Server veritabanını veya veritabanının tek tek dosyalarını veya dosya gruplarını yedeklemenizi sağlar. Tablo düzeyinde yedekleme oluşturulamıyor, böyle bir seçenek yok. Ancak bunun için bir geçici çözüm var

SQL Server'da SQL Server tablosunun yedeklenmesi mümkün. SQL SQL Server'da bir tabloyu yedeklemenin çeşitli alternatif yolları vardır

  1. BCP (TOPLU KOPYA PROGRAMI)
  2. Verilerle Tablo Komut Dosyası Oluştur
  3. SELECT INTO kullanarak tablonun bir kopyasını oluşturma
  4. Tablo Verilerini Doğrudan Düz bir dosyaya KAYDET
  5. SSIS kullanarak verileri herhangi bir hedefe aktarma

Burada sadece bildiğiniz ilk dinlenmeyi açıklıyorum

Yöntem 1 - BCP kullanarak toplu sql tablosu (TOPLU KOPYA PROGRAMI)

SQL Server AdventureWorks'te bulunan "Person.Contact" adlı bir SQL tablosunu yedeklemek için aşağıdaki komut dosyasını yürütmemiz gerekir.

-- SQL Table Backup
-- Developed by DBATAG, www.DBATAG.com
DECLARE @table VARCHAR(128),
@file VARCHAR(255),
@cmd VARCHAR(512)
SET @table = 'AdventureWorks.Person.Contact' --  Table Name which you want    to backup
SET @file = 'C:\MSSQL\Backup\' + @table + '_' + CONVERT(CHAR(8), GETDATE(), 112) --  Replace C:\MSSQL\Backup\ to destination dir where you want to place table data backup
+ '.dat'
SET @cmd = 'bcp ' + @table + ' out ' + @file + ' -n -T '
EXEC master..xp_cmdshell @cmd

ÇIKTI

resim açıklamasını buraya girin

Not -

  1. Toplu alma / verme ayrıcalıklarına sahip olmanız gerekir
  2. Yukarıdaki Script -n, geri yükleme sırasında anahtar olan yerel SQL veri türlerini gösterir
  3. -T, SQL Server Kimlik Doğrulaması kullanarak bağlanmak istemeniz durumunda, Windows Kimlik Doğrulaması kullanarak SQL Server'a bağlandığınızı belirtir.
  4. Bu da veri aktarım hızını söyleyecek, benim durumumda bu saniye başına 212468.08 satır oldu.
  5. Bu komutlar tamamlandığında, bu "AdventureWorks.Person.Contact_20120222" adlı bir dosya oluşturur, belirtilen bir hedef klasördür

Alternatif olarak , BCP'yi komut istemi aracılığıyla çalıştırabilir ve komut istemine aşağıdaki komutu yazabilirsiniz, her iki işlem de aynı etkinliği gerçekleştirir, ancak yukarıda belirtilen yöntemi bir komut istemi ve tür açarken kaydetme türü gibi seviyorum.

bcp AdventureWorks.Person.Contact out C:\MSSQL\Backup\AdventureWorks.Person.Contact_20120222.dat -n -T

resim açıklamasını buraya girin


9

Yöntem 1:

Yalnızca tablolardaki verilerle ilgileniyorsanız ve aynı veritabanı ve sunucuda yerel olarak kullanılacaksa, seçilen tabloların yedeğini almak için aşağıdaki sorguyu kullanabilirsiniz:

SELECT * INTO newtable1
FROM originalTable1

--- tablo 2 için

SELECT * INTO newtable2
FROM originalTable2

ve benzeri ... n tablo sayısı için

Bu ifade, newtable1, newtable1, .. adlı tabloları OLUŞTURACAKTIR, böylece daha önce oluşturmanıza gerek yoktur.

Not * Bu yöntem yedeklemeyi oldukça hızlı alır, ancak büyük dezavantaj, tablonun Anahtarları, Dizinleri ve Kısıtlarını taşımaması ve yedeklemenin veritabanında harici bir yerde olmayan bir yerde saklanmasıdır.

Yöntem 2:

Herhangi bir felaket kurtarma çözümü veya veri kaybı önleme için tabloyu başka bir sunucuya yedeklemek istiyorsanız, Görevler'den Komut Dosyaları Oluştur seçeneğini kullanarak tabloyu komut dosyası haline getirebilirsiniz.

  1. İlk olarak, yedeklemek istediğiniz tabloları içeren veritabanına sağ tıklayın ve Görevler -> Komut Dosyaları Oluştur'u seçin.

  2. Tabloları yedeklenmesi gereken listeden veritabanınızı seçin

  3. Görünen bir sonraki ekran Kod Seçenekleri'dir.

  4. Tablo / Görünüm Seçenekleri'ni görene kadar komut dosyası seçeneklerini aşağı kaydırın. Aşağıdakilerin doğru olmasını istiyoruz: Kısıtlamaları, Komut Dosyası Verilerini, Yabancı Anahtarları, Birincil Anahtarları, Tetikleyicileri ve Benzersiz Anahtarları kontrol edin. (Ya da elbette ihtiyacınız olanı seçebilirsiniz). İleri'yi seçtiğinizde Nesne Türlerini Seç Ekranı sunulur

  5. Tablolar'ı seçin ve sonrakine basın. Son olarak, yedeklemek istediğiniz tabloyu ya da tabloları seçin ve sonrakine basın

Yöntem 3:

Tablo yedeklemeleri için de bcp yardımcı programını kullanabilirsiniz .


1

Belirli tabloları bir .bakdosyaya yedekleyemezsiniz , bunları csv'ye dışa aktarabilir veya komut dosyalarına aktarabilir veya bcpbir dosyaya koymak için kullanabilirsiniz .

Belirli tabloları yedeklemek istiyorsanız (ve her zaman aynı olduklarını) yapabileceğiniz şey, bunları ayrı bir file groupdosyaya taşımak ve bu dosya grubunu yedeklemek.

Belgeler için Dosyaları ve Dosya Gruplarını Yedekleme konusuna bakın .

Örneğin, T-SQL kullanarak belirli dosyaları veya dosya gruplarını yedeklemek istiyorsanız (bağlantıdan)

--Back up the files in SalesGroup1.
BACKUP DATABASE Sales
   FILEGROUP = 'SalesGroup1',
   FILEGROUP = 'SalesGroup2'
   TO DISK = 'C:\MySQLServer\Backups\Sales\SalesFiles.bck';
GO

ve

--Backup the files in the SalesGroup1 secondary filegroup.
BACKUP DATABASE Sales
   FILE = 'SGrp1Fi2', 
   FILE = 'SGrp2Fi2' 
   TO DISK = 'G:\SQL Server Backups\Sales\SalesGroup1.bck';
GO

1
Ne yazık ki, tüm okuma / yazma dosya gruplarını birlikte yedeklemeniz gerekir, böylece yalnızca bir tanesini seçemezsiniz.
Kamil Gosciminski

1

KASQLDBA'nın yanıtından Yöntem 1'e dayanarak:

Tabloların yedek kopyasını tutmak için ayrı bir veritabanı oluşturun. KASQLDBA'nın sağladığı sorguyu orijinal tablonuzdan seçip alternatif veritabanına kopyalayacak şekilde değiştirin.

SELECT * INTO MyNewDatabase.dbo.newtable1
FROM OriginalDatabase.dbo.originalTable1

--- For table 2
SELECT * INTO MyNewDatabase.dbo.newtable2
FROM OriginalDatabase.dbo.originalTable2

Yeni veritabanındaki tabloları bırakan bir komut dosyası oluşturabilir, ardından select'i her gerekli tablo için komutlara çalıştırabilirsiniz. Dizinlerin ve diğer nesnelerin kullanılabilir olmasını istiyorsanız, bunları yeni veritabanınızda oluşturabilir ve yeniden doldurmadan önce tabloları kısaltabilirsiniz. Kesmeyi tercih ederseniz, seçim yerine insert deyimlerini kullanmanız gerekir.

Bu seçenek, bir .BAK dosyası oluşturmak için size bir yöntem sağlayacaktır. Yeni veritabanındaki tabloları doldurduktan sonra bir yedekleme veritabanı komutunu çalıştırmanız yeterlidir.


1

SSMS'nin toplu dışa aktarma özelliğini kullanarak, burada belirtilen en iyi ve en kolay yöntem

SQL Server alma ve verme sihirbazı: SQL Server Alma ve verme sihirbazı, SQL Server Entegrasyon Hizmetleri (SSIS) paketine grafik kullanıcı arabirimi sağlar. Oluşturulduktan sonra, paket bir zamanlamaya göre otomatik hale getirilebilir. SQL Server Veri Araçları (SSDT) ​​kullanılarak ayrıca yapılandırılabilir ve değiştirilebilir

Başlamak için İçe ve dışa aktarma sihirbazını açın, bir veritabanını sağ tıklayın ve Görevler alt menüsü -> Verileri dışa aktar komutunu seçin.

resim açıklamasını buraya girin


Bu bağlantı soruyu cevaplayabilirken, cevabın önemli kısımlarını buraya eklemek ve bağlantıyı referans olarak sağlamak daha iyidir. Bağlantı verilen sayfa değişirse, yalnızca bağlantı yanıtları geçersiz olabilir. - Yorumdan
kevinsky

@kevinsky Elbette! Ama en azından oy vermeliydin!
Sayyed Dawood

-1

Başka bir yöntem script / sproc: DumpDataFromTable.sql kullanmaktır: https://github.com/Zindur/MSSQL-DumpTable/tree/master/Scripts

 EXECUTE [dbo].[DumpDataFromTable] @SchemaName = 'dbo', @TableName = 'Table', @PathOut = 'c:\temp\Scripts'

Geçmeniz gereken şema adı ve tablo adı, daha sonra oluşturulan komut dosyasının kaydedileceği çıkış yolu (not klasörü zaten oluşturulmuş / var olmalıdır ve sql izinleri sproc yorum görmek).

İsterseniz tabloya bir koşul ekleyebilirsiniz (filtre şimdilik AND ile başlamalıdır)


Bu prosedür eksik prosedür PRC_WritereadFile bağlıdır
SubqueryCrunch

-2

SQL Server 2008'deki bir veritabanındaki verileri içeren tek bir tabloyu yedekleyin:

SELECT * INTO  [dbo].[tbl_NewTable] 
FROM [dbo].[tbl_OldTable]
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.