Я хочу сделать резервную копию определенных таблиц, доступных в моей базе данных, в .bak
файле, и все это должно быть сделано с использованием сценария T-SQL.
Я хочу сделать резервную копию определенных таблиц, доступных в моей базе данных, в .bak
файле, и все это должно быть сделано с использованием сценария T-SQL.
Ответы:
Типы резервного копирования зависят от модели восстановления SQL Server. Каждая модель восстановления позволяет создавать резервные копии всей или частичной базы данных SQL Server или отдельных файлов или групп файлов базы данных. Невозможно создать резервную копию на уровне таблицы, такой опции нет. Но есть обходной путь для этого
Создание резервной копии таблицы SQL Server возможно в SQL Server. Существуют различные альтернативные способы резервного копирования таблицы в SQL Server SQL
Здесь я объясняю только первый отдых, который вы, возможно, знаете
Способ 1 - Резервное копирование таблицы SQL с использованием BCP (ПРОГРАММА БОЛЬШОГО КОПИРОВАНИЯ)
Для резервного копирования таблицы SQL с именем Person.Contact, которая находится в SQL Server AdventureWorks, нам нужно выполнить следующий скрипт, который
-- 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
ВЫХОД
Заметка -
В качестве альтернативы , вы можете запустить BCP через командную строку и ввести следующую команду в командной строке, обе операции выполняют одно и то же действие, но мне нравится вышеупомянутый метод, так как это тип сохранения при открытии командной строки и тип.
bcp AdventureWorks.Person.Contact out C:\MSSQL\Backup\AdventureWorks.Person.Contact_20120222.dat -n -T
Способ 1:
Если вас интересуют только данные в таблицах и данные, которые будут использоваться локально в одной и той же базе данных и на сервере, вы можете использовать следующий запрос для резервного копирования выбранных таблиц:
SELECT * INTO newtable1
FROM originalTable1
--- для таблицы 2
SELECT * INTO newtable2
FROM originalTable2
и так далее ... для n таблицы
Этот оператор создаст таблицы с именами newtable1, newtable1, .. поэтому вам не нужно предварительно создавать его.
Примечание * Этот метод выполняет резервное копирование довольно быстро, но основным недостатком является то, что он не переносит ключи, индексы и ограничения таблицы, а резервная копия хранится в базе данных, а не где-то извне в файл
Способ 2:
Если вы хотите сделать резервную копию таблицы на другом сервере для какого-либо решения аварийного восстановления или предотвращения потери данных, то вы можете создать сценарий для таблицы, используя опцию «Создать сценарии» в «Задачах».
Сначала щелкните правой кнопкой мыши базу данных, которая содержит таблицы, которые вы хотите сделать резервную копию, и выберите Задачи -> Создать сценарии.
Выберите свою базу данных из списка, таблицы которого необходимо сохранить
Следующий экран, который появляется, - Опции скрипта.
Прокрутите вниз параметры скрипта, пока не увидите Параметры таблицы / просмотра. Мы хотим, чтобы выполнялись следующие условия: проверка ограничений, данных сценария, внешних ключей, первичных ключей, триггеров и уникальных ключей. (Или вы можете выбрать все, что вам нужно, конечно). Выберите Next, и мы представим экран выбора типов объектов
Выберите Таблицы и нажмите «Далее». Наконец, выберите таблицу или таблицы, которые вы хотите сделать резервную копию, и нажмите Далее
Способ 3:
Вы также можете использовать утилиту bcp для резервного копирования таблиц.
Вы не можете создавать резервные копии определенных таблиц в .bak
файл, вы можете экспортировать их в CSV или сценарий или использовать, bcp
чтобы поместить их в файл.
Если вы хотите выполнить резервное копирование определенных таблиц (и они всегда одинаковые), вы можете переместить их в отдельную группу file group
и создать резервную копию этой группы файлов.
См. Резервное копирование файлов и файловых групп для документации.
Например, если вы хотите выполнить резервное копирование определенных файлов или файловых групп с использованием T-SQL, вы можете использовать (по ссылке)
--Back up the files in SalesGroup1.
BACKUP DATABASE Sales
FILEGROUP = 'SalesGroup1',
FILEGROUP = 'SalesGroup2'
TO DISK = 'C:\MySQLServer\Backups\Sales\SalesFiles.bck';
GO
и
--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 из ответа KASQLDBA:
Создайте отдельную базу данных для хранения резервной копии таблиц. Измените предоставленный запрос KASQLDBA, чтобы выбрать из исходной таблицы и скопировать в альтернативную базу данных.
SELECT * INTO MyNewDatabase.dbo.newtable1
FROM OriginalDatabase.dbo.originalTable1
--- For table 2
SELECT * INTO MyNewDatabase.dbo.newtable2
FROM OriginalDatabase.dbo.originalTable2
Вы можете создать скрипт, который удаляет таблицы в новой базе данных, а затем запускать команды выбора в каждой требуемой таблице. Если вы хотите, чтобы индексы и другие объекты были доступны, то вы можете создать их в своей новой базе данных и обрезать таблицы до их повторного заполнения. Если вы предпочитаете усечение, вам нужно будет использовать операторы вставки вместо select в.
Эта опция предоставит вам метод для создания файла .BAK. Вы просто запускаете команду резервного копирования базы данных после заполнения таблиц в новой базе данных.
Используя функцию массового экспорта SSMS, вот лучший и самый простой способ, упомянутый
Мастер импорта и экспорта SQL Server. Мастер импорта и экспорта SQL Server предоставляет графический интерфейс пользователя для пакета служб интеграции SQL Server (SSIS). После создания пакета его можно автоматизировать, чтобы запустить по расписанию. Он может быть дополнительно настроен и изменен с помощью инструментов данных SQL Server (SSDT)
Для начала откройте мастер импорта и экспорта, щелкните правой кнопкой мыши базу данных и выберите подменю Задачи -> Команда экспорта данных.
Другой метод заключается в использовании script / sproc: DumpDataFromTable.sql из: https://github.com/Zindur/MSSQL-DumpTable/tree/master/Scripts
EXECUTE [dbo].[DumpDataFromTable] @SchemaName = 'dbo', @TableName = 'Table', @PathOut = 'c:\temp\Scripts'
Вы должны передать: имя схемы и имя таблицы, затем выходной путь, в котором будет сохранен созданный скрипт (папка заметки должна быть уже создана / существует, и у sql есть разрешение на просмотр комментария в sproc).
И если вы хотите, вы можете добавить условие в таблицу (на данный момент фильтр должен начинаться с AND)
Резервное копирование одной таблицы с ее данными из базы данных в SQL Server 2008:
SELECT * INTO [dbo].[tbl_NewTable]
FROM [dbo].[tbl_OldTable]