Как я могу сделать резервную копию отдельных таблиц в SQL Server 2008 с помощью скрипта T-SQL

14

Я хочу сделать резервную копию определенных таблиц, доступных в моей базе данных, в .bakфайле, и все это должно быть сделано с использованием сценария T-SQL.

Фироз Теннали
источник

Ответы:

11

Типы резервного копирования зависят от модели восстановления SQL Server. Каждая модель восстановления позволяет создавать резервные копии всей или частичной базы данных SQL Server или отдельных файлов или групп файлов базы данных. Невозможно создать резервную копию на уровне таблицы, такой опции нет. Но есть обходной путь для этого

Создание резервной копии таблицы SQL Server возможно в SQL Server. Существуют различные альтернативные способы резервного копирования таблицы в SQL Server SQL

  1. BCP (ПРОГРАММА БОЛЬШОГО КОПИРОВАНИЯ)
  2. Генерация табличного скрипта с данными
  3. Сделайте копию таблицы, используя SELECT INTO
  4. СОХРАНИТЬ данные таблицы непосредственно в плоский файл
  5. Экспорт данных с использованием SSIS в любой пункт назначения

Здесь я объясняю только первый отдых, который вы, возможно, знаете

Способ 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

ВЫХОД

введите описание изображения здесь

Заметка -

  1. У вас должны быть права на массовый импорт / экспорт
  2. Выше скрипт -n обозначает родные типы данных SQL, которые являются ключевыми при восстановлении.
  3. -T обозначает, что вы подключаетесь к SQL Server с использованием аутентификации Windows, если вы хотите подключиться с использованием аутентификации SQL Server, используйте -U -P
  4. Это также скажет вам скорость передачи данных, в моем случае это было 212468,08 строк в секунду.
  5. После выполнения этой команды будет создан файл с именем «AdventureWorks.Person.Contact_20120222» в указанной папке назначения.

В качестве альтернативы , вы можете запустить BCP через командную строку и ввести следующую команду в командной строке, обе операции выполняют одно и то же действие, но мне нравится вышеупомянутый метод, так как это тип сохранения при открытии командной строки и тип.

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

введите описание изображения здесь

Туфан Чанд
источник
9

Способ 1:

Если вас интересуют только данные в таблицах и данные, которые будут использоваться локально в одной и той же базе данных и на сервере, вы можете использовать следующий запрос для резервного копирования выбранных таблиц:

SELECT * INTO newtable1
FROM originalTable1

--- для таблицы 2

SELECT * INTO newtable2
FROM originalTable2

и так далее ... для n таблицы

Этот оператор создаст таблицы с именами newtable1, newtable1, .. поэтому вам не нужно предварительно создавать его.

Примечание * Этот метод выполняет резервное копирование довольно быстро, но основным недостатком является то, что он не переносит ключи, индексы и ограничения таблицы, а резервная копия хранится в базе данных, а не где-то извне в файл

Способ 2:

Если вы хотите сделать резервную копию таблицы на другом сервере для какого-либо решения аварийного восстановления или предотвращения потери данных, то вы можете создать сценарий для таблицы, используя опцию «Создать сценарии» в «Задачах».

  1. Сначала щелкните правой кнопкой мыши базу данных, которая содержит таблицы, которые вы хотите сделать резервную копию, и выберите Задачи -> Создать сценарии.

  2. Выберите свою базу данных из списка, таблицы которого необходимо сохранить

  3. Следующий экран, который появляется, - Опции скрипта.

  4. Прокрутите вниз параметры скрипта, пока не увидите Параметры таблицы / просмотра. Мы хотим, чтобы выполнялись следующие условия: проверка ограничений, данных сценария, внешних ключей, первичных ключей, триггеров и уникальных ключей. (Или вы можете выбрать все, что вам нужно, конечно). Выберите Next, и мы представим экран выбора типов объектов

  5. Выберите Таблицы и нажмите «Далее». Наконец, выберите таблицу или таблицы, которые вы хотите сделать резервную копию, и нажмите Далее

Способ 3:

Вы также можете использовать утилиту bcp для резервного копирования таблиц.

KASQLDBA
источник
1

Вы не можете создавать резервные копии определенных таблиц в .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
Том V - попробуйте topanswers.xyz
источник
1
К сожалению, вы должны создать резервные копии всех файловых групп для чтения / записи, поэтому вы не можете выбрать только одну.
Камил Госциминский
1

Опираясь на метод 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. Вы просто запускаете команду резервного копирования базы данных после заполнения таблиц в новой базе данных.

Gary
источник
1

Используя функцию массового экспорта SSMS, вот лучший и самый простой способ, упомянутый

Мастер импорта и экспорта SQL Server. Мастер импорта и экспорта SQL Server предоставляет графический интерфейс пользователя для пакета служб интеграции SQL Server (SSIS). После создания пакета его можно автоматизировать, чтобы запустить по расписанию. Он может быть дополнительно настроен и изменен с помощью инструментов данных SQL Server (SSDT)

Для начала откройте мастер импорта и экспорта, щелкните правой кнопкой мыши базу данных и выберите подменю Задачи -> Команда экспорта данных.

введите описание изображения здесь

Сайед Дауд
источник
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. - Из
рецензии
@kevinsky Конечно! Но, по крайней мере, вы должны были проголосовать за это!
Сайед Дауд
-1

Другой метод заключается в использовании 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)

Олег Чио
источник
эта процедура зависит от отсутствующего процедуры PRC_WritereadFile
SubqueryCrunch
-2

Резервное копирование одной таблицы с ее данными из базы данных в SQL Server 2008:

SELECT * INTO  [dbo].[tbl_NewTable] 
FROM [dbo].[tbl_OldTable]
JIYAUL MUSTAPHA
источник