Jak mogę wykonać kopię zapasową poszczególnych tabel w SQL Server 2008 za pomocą skryptu T-SQL

14

Chcę zrobić kopię zapasową niektórych tabel dostępnych w mojej bazie danych w .bakpliku, a wszystko to powinno być wykonane przy użyciu skryptu T-SQL.

Firoz Tennali
źródło

Odpowiedzi:

11

Typy kopii zapasowych zależą od SQL Server Recovery Model. Każdy model odzyskiwania umożliwia tworzenie kopii zapasowej całej lub częściowej bazy danych SQL Server lub pojedynczych plików lub aplikacjami bazy danych. Nie można utworzyć kopii zapasowej na poziomie tabeli, nie ma takiej opcji. Istnieje jednak obejście tego problemu

Tworzenie kopii zapasowej tabeli SQL Server możliwe w SQL Server. Istnieją różne alternatywne sposoby tworzenia kopii zapasowych tabeli w SQL Server SQL Server

  1. BCP (BULK COPY PROGRAM)
  2. Wygeneruj skrypt tabeli z danymi
  3. Zrób kopię tabeli za pomocą SELECT INTO
  4. ZAPISZ Dane tabeli bezpośrednio w pliku płaskim
  5. Eksportuj dane za pomocą SSIS do dowolnego miejsca docelowego

Tutaj wyjaśniam tylko pierwszą resztę, którą możesz znać

Metoda 1 - Wykonaj kopię zapasową tabeli sql przy użyciu BCP (BULK COPY PROGRAM)

Aby wykonać kopię zapasową tabeli SQL o nazwie „Person.Contact”, która znajduje się w SQL Server AdventureWorks, musimy wykonać następujący skrypt, który

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

WYNIK

wprowadź opis zdjęcia tutaj

Uwaga -

  1. Musisz mieć uprawnienia do importu / eksportu luzem
  2. W powyższym skrypcie -n oznacza rodzime typy danych SQL, które są kluczowe podczas przywracania
  3. -T oznacza, że ​​łączysz się z programem SQL Server przy użyciu uwierzytelniania systemu Windows, w przypadku, gdy chcesz połączyć się przy użyciu uwierzytelniania programu SQL Server, użyj opcji -U -P
  4. To również powie, że przyspieszysz transfer danych, w moim przypadku było to 212468.08 wierszy na sekundę.
  5. Po wykonaniu tych poleceń zostanie utworzony plik o nazwie „AdventureWorks.Person.Contact_20120222” ​​jest określonym folderem docelowym

Alternatywnie możesz uruchomić BCP za pomocą wiersza polecenia i wpisać następujące polecenie w wierszu polecenia, obie operacje wykonują tę samą czynność, ale podoba mi się powyższa metoda, ponieważ jest to typ zapisu podczas otwierania wiersza polecenia i typ.

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

wprowadź opis zdjęcia tutaj

Tufan Chand
źródło
9

Metoda 1:

Jeśli interesują Cię tylko dane w tabelach, które mają być używane lokalnie w tej samej bazie danych i na serwerze, możesz użyć poniższego zapytania, aby wykonać kopię zapasową wybranych tabel:

SELECT * INTO newtable1
FROM originalTable1

--- Dla tabeli 2

SELECT * INTO newtable2
FROM originalTable2

i tak dalej ... dla n liczby tabel

Ta instrukcja BĘDZIE STWORZYĆ tabele o nazwach newtable1, newtable1 itd., Więc nie musisz ich wcześniej tworzyć.

Uwaga * Ta metoda dość szybko wykonuje kopię zapasową, ale główną wadą jest to, że nie przenosi ona kluczy, indeksów i ograniczeń tabeli, a kopia zapasowa jest przechowywana w bazie danych, a nie gdzieś na zewnątrz pliku

Metoda 2:

Jeśli chcesz wykonać kopię zapasową tabeli na inny serwer w celu rozwiązania problemu z odzyskiwaniem danych po awarii lub zapobiegania utracie danych, możesz utworzyć skrypt do tabeli przy użyciu opcji Generuj skrypty z Zadań.

  1. Najpierw kliknij prawym przyciskiem myszy bazę danych zawierającą tabele, które chcesz utworzyć kopię zapasową, i wybierz Zadania -> Generuj skrypty

  2. Wybierz bazę danych z listy, której tabele należy utworzyć

  3. Następny ekran, który się pojawi, to Opcje skryptu.

  4. Przewiń w dół opcje skryptu, aż zobaczysz Opcje tabeli / widoku. Chcemy, aby spełnione były następujące warunki: Sprawdź ograniczenia, dane skryptu, klucze obce, klucze podstawowe, wyzwalacze i klucze unikalne. (Lub możesz oczywiście wybrać cokolwiek potrzebujesz). Wybierz Dalej, a zostanie wyświetlony ekran Wybierz typy obiektów

  5. Wybierz Tabele i kliknij Dalej. Na koniec wybierz tabelę lub tabele, których kopię zapasową chcesz utworzyć, i kliknij Dalej

Metoda 3:

Możesz także użyć narzędzia bcp do tworzenia kopii zapasowych tabel.

KASQLDBA
źródło
1

Nie można wykonać kopii zapasowej określonych tabel do .bakpliku, można je wyeksportować do pliku csv lub skrypty lub użyć bcpdo umieszczenia ich w pliku.

Co możesz zrobić, jeśli chcesz wykonać kopię zapasową określonych tabel (i zawsze są one takie same), przenieś je do osobnej grupy file groupi wykonaj kopię zapasową tej grupy plików.

Zobacz kopii zapasowych plików i Filegroups do dokumentacji.

Na przykład, jeśli chcesz wykonać kopię zapasową określonych plików lub aplikacjami przy użyciu T-SQL, którego możesz użyć (z linku)

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

i

--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
Tom V - spróbuj topanswers.xyz
źródło
1
Niestety, musisz wykonać kopię zapasową wszystkich grup plików do odczytu / zapisu, więc nie możesz wybrać tylko jednej.
Kamil Gosciminski
1

Opierając się na metodzie 1 z odpowiedzi KASQLDBA:

Utwórz osobną bazę danych, aby przechowywać kopię zapasową tabel. Zmodyfikuj zapytanie KASQLDBA, aby wybrać z oryginalnej tabeli i skopiować do alternatywnej bazy danych.

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

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

Możesz utworzyć skrypt, który upuści tabele w nowej bazie danych, a następnie uruchom polecenie select w komendach dla każdej wymaganej tabeli. Jeśli chcesz, aby indeksy i inne obiekty były dostępne, możesz je zbudować w nowej bazie danych i skrócić tabele przed ponownym zapełnieniem. Jeśli wolisz obcięcie, musisz użyć instrukcji wstawiania zamiast select w.

Ta opcja zapewni metodę tworzenia pliku .BAK. Po prostu uruchom polecenie tworzenia kopii zapasowej bazy danych po zapełnieniu tabel w nowej bazie danych.

Gary
źródło
1

Korzystając z funkcji masowego eksportu SSMS, oto najlepsza i najłatwiejsza z wymienionych metod

Kreator importu i eksportu programu SQL Server: Kreator importu i eksportu programu SQL Server zapewnia graficzny interfejs użytkownika w pakiecie SQL Server Integration Services (SSIS). Po utworzeniu pakiet można zautomatyzować, aby działał zgodnie z harmonogramem. Można go dalej konfigurować i modyfikować za pomocą narzędzi SQL Server Data Tools (SSDT)

Aby rozpocząć, otwórz kreatora importu i eksportu, kliknij bazę danych prawym przyciskiem myszy i wybierz podmenu Zadania -> Eksportuj dane.

wprowadź opis zdjęcia tutaj

Sayyed Dawood
źródło
Chociaż ten link może odpowiedzieć na pytanie, lepiej dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli zmieni się połączona strona. - Z recenzji
kevinsky
@kevinsky Pewnie! Ale przynajmniej powinieneś głosować!
Sayyed Dawood,
-1

Inną metodą jest użycie skryptu / sproc: DumpDataFromTable.sql z: https://github.com/Zindur/MSSQL-DumpTable/tree/master/Scripts

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

Musisz przekazać: nazwę schematu i nazwę tabeli, a następnie ścieżkę wyjściową, w której zostanie zapisany utworzony skrypt (folder notatek musi już zostać utworzony / istnieje, a sql ma uprawnienia, patrz komentarz w sproc).

A jeśli chcesz, możesz dodać warunek do tabeli (na razie filtr musi zaczynać się od AND)

Oleg Cio
źródło
Procedura ta zależy od brakującej procedury PRC_WritereadFile
SubqueryCrunch
-2

Wykonaj kopię zapasową pojedynczej tabeli z jej danymi z bazy danych w SQL Server 2008:

SELECT * INTO  [dbo].[tbl_NewTable] 
FROM [dbo].[tbl_OldTable]
JIYAUL MUSTAPHA
źródło