Chcę zrobić kopię zapasową niektórych tabel dostępnych w mojej bazie danych w .bak
pliku, a wszystko to powinno być wykonane przy użyciu skryptu T-SQL.
źródło
Chcę zrobić kopię zapasową niektórych tabel dostępnych w mojej bazie danych w .bak
pliku, a wszystko to powinno być wykonane przy użyciu skryptu T-SQL.
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
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
Uwaga -
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
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ń.
Najpierw kliknij prawym przyciskiem myszy bazę danych zawierającą tabele, które chcesz utworzyć kopię zapasową, i wybierz Zadania -> Generuj skrypty
Wybierz bazę danych z listy, której tabele należy utworzyć
Następny ekran, który się pojawi, to Opcje skryptu.
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
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.
Nie można wykonać kopii zapasowej określonych tabel do .bak
pliku, można je wyeksportować do pliku csv lub skrypty lub użyć bcp
do 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 group
i 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
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.
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.
źródło
Korzystając z funkcji masowego eksportu SSMS, oto najlepsza i najłatwiejsza z wymienionych metod
źródło
Inną metodą jest użycie skryptu / sproc: DumpDataFromTable.sql z: https://github.com/Zindur/MSSQL-DumpTable/tree/master/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)
źródło
Wykonaj kopię zapasową pojedynczej tabeli z jej danymi z bazy danych w SQL Server 2008:
źródło