Bir .bakdosyada veritabanımdaki belirli tabloların yedeğini almak istiyorum ve tüm bunlar bir T-SQL komut dosyası kullanılarak yapılmalıdır.
Bir .bakdosyada veritabanımdaki belirli tabloların yedeğini almak istiyorum ve tüm bunlar bir T-SQL komut dosyası kullanılarak yapılmalıdır.
Yanıtlar:
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
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

Not -
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

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.
İlk olarak, yedeklemek istediğiniz tabloları içeren veritabanına sağ tıklayın ve Görevler -> Komut Dosyaları Oluştur'u seçin.
Tabloları yedeklenmesi gereken listeden veritabanınızı seçin
Görünen bir sonraki ekran Kod Seçenekleri'dir.
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
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 .
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
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.
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.
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)
SQL Server 2008'deki bir veritabanındaki verileri içeren tek bir tabloyu yedekleyin:
SELECT * INTO [dbo].[tbl_NewTable]
FROM [dbo].[tbl_OldTable]