Резервное копирование на уровне таблицы

Ответы:

89

Вы не можете использовать BACKUP DATABASEкоманду для резервного копирования одной таблицы, если, конечно, рассматриваемая таблица не выделена для нее собственной FILEGROUP.

Как вы предложили, вы можете экспортировать данные таблицы в файл CSV. Теперь, чтобы получить определение вашей таблицы, вы можете "написать сценарий" CREATE TABLEскрипта.

Это можно сделать в среде SQL Server Management Studio:

щелкнув правой кнопкой мыши База данных> Задачи> Создать сценарий

Затем вы можете выбрать таблицу, которую хотите создать в сценарии, а также включить любые связанные объекты, такие как ограничения и индексы.

для того , чтобы получить DATAвместе с только schema, вы должны выбрать Advancedна вкладке набора опций сценариев, а в GENERALразделе установить Types of data to scriptвыберитеSchema and Data

Надеюсь, это поможет, но не стесняйтесь обращаться ко мне напрямую, если вам потребуется дополнительная помощь.

Джон Сэнсом
источник
«Мастер публикации базы данных» автоматизирует описанные мной шаги.
Джон Сэнсом,
25
Джон, не забудьте упомянуть, что для того, чтобы получить ДАННЫЕ вместе со схемой, вам нужно сделать выбор Advancedна вкладке настроек сценария, а в разделе ОБЩИЕ установить Types of data to scriptвыбор Schema and Data. В первый раз это было неочевидно.
Alex C
Совет Алекса очень важен. Кроме того, есть ли способ создать сценарий вместо просмотра меню в SQL Server?
sooprise
1
Вы сможете добиться этого, используя комбинацию PowerShell и SMO. См. Эту статью Фила Фактора в качестве руководства: simple-talk.com/sql/database-administration/…
Джон Сансом
@AlexC Спасибо! Избавил меня от головной боли :)
Саймон Уайтхед
55

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

экспортировать:

bcp.exe "select * from [MyDatabase].dbo.Customer " queryout "Customer.bcp" -N -S localhost -T -E

импортировать:

bcp.exe [MyDatabase].dbo.Customer in "Customer.bcp" -N -S localhost -T -E -b 10000

как видите, вы можете экспортировать на основе любого запроса, так что вы можете даже делать инкрементные резервные копии с этим. Кроме того, это скрипт, в отличие от других упомянутых здесь методов, использующих SSMS.

Kenwarner
источник
1
Просто предупреждаю. Если вы просто хотите скопировать таблицу, используя имя вместо запроса выбора, измените сценарий, чтобы использовать OUT вместо QUERYOUT.
Valamas
45

Вот необходимые шаги. Шаг 5 важен, если вам нужны данные. На шаге 2 вы можете выбрать отдельные таблицы.

Версия стека EDIT не совсем читается ... вот полноразмерное изображение http://i.imgur.com/y6ZCL.jpg

Вот шаги из ответа Джона Сансома

Alex C
источник
Какую SSMS вы использовали @Alex C? В моем SSMS2005 мой мастер отличается от вашего.
KirdApe
Извините, прошло много лет с тех пор, как я ответил на это. Я предполагаю, что я, вероятно, использовал 2008. Я только что проверил свой мастер сейчас, и вам больше не нужно НАЖАТЬ расширенный, но вместо этого весь список из кадра 5 (выше) отображается как одна из страниц мастера. Кроме того, опции СТРУКТУРА и ДАННЫЕ были разделены на опции ИСТИНА / ЛОЖЬ для каждого отдельно. Дайте мне знать, если я могу чем-то еще помочь.
Alex C
19

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

select * into newtablename from oldtablename

Чтобы скопировать только структуру таблицы, используйте запрос ниже.

select * into newtablename from oldtablename where 1 = 2
Хариприя
источник
7

Это похоже на решение qntmfred , но с использованием прямого дампа таблицы. Этот вариант немного быстрее (см. Документацию BCP ):

экспортировать:

bcp "[MyDatabase].dbo.Customer " out "Customer.bcp" -N -S localhost -T -E

импортировать:

bcp [MyDatabase].dbo.Customer in "Customer.bcp" -N -S localhost -T -E -b 10000
Диего
источник
1
Включает ли это ограничения?
user3071284 05
4

Если вы ищете что-то вроде MySQL DUMP, то хорошие новости: SQL Server 2008 Management Studio добавила эту возможность.

В SSMS просто щелкните правой кнопкой мыши нужную БД и выберите « Задачи»> «Создать сценарии» . Затем на 2 - й странице параметров мастера, убедитесь , что выбрать , что вы хотите на данные скриптовые , а также , и это произведет то , что составляет DUMPдля вас файл.

Майкл К. Кэмпбелл
источник
3

Создайте новую файловую группу, поместите в нее эту таблицу и сделайте резервную копию только этой файловой группы.

Константин Таркус
источник
Включает ли это ограничения?
user3071284 05
2

Вы можете использовать бесплатный мастер публикации базы данных от Microsoft для создания текстовых файлов с помощью сценариев SQL (CREATE TABLE и INSERT INTO).

Вы можете создать такой файл для отдельной таблицы и «восстановить» всю таблицу, включая данные, просто запустив сценарий SQL.

Кристиан Шпехт
источник
+1 Для всех людей, которые привыкли к сценариям SQL, это вариант, который вы ищете. Снимите флажок «Скрипт для всех объектов в выбранной базе данных», чтобы выбрать отдельные таблицы. Скриншоты: products.secureserver.net/products/hosting/…
lepe
2

Не знаю, будет ли это соответствовать описанной здесь задаче. Мне пришлось сделать инкрементную резервную копию таблицы! (Копировать следует только новые вставленные данные). Я раньше разрабатывал пакет DTS, где.

  1. Я получаю новые записи (на основе столбца «статус») и передаю данные в пункт назначения. (Через «Задачу преобразования данных»)

  2. Затем я просто обновил столбец «статус». (Через «Выполнить задачу SQL»)

Пришлось исправить «рабочий процесс» как следует.

азмноман
источник
2

Используйте мастер импорта и экспорта SQL Server.

  1. ssms
  2. Откройте компонент Database Engine
  3. Альт. щелкните базу данных, содержащую таблицу, для экспорта
  4. Выберите "Задачи"
  5. Выберите «Экспорт данных ...»
  6. Следуй за мастером
EndUzr
источник
1

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

От: Обзор резервного копирования (SQL Server)

Митч Уит
источник
0

У вас, вероятно, есть два варианта, поскольку SQL Server не поддерживает резервное копирование таблиц. Оба начнутся со сценария создания таблицы. Затем вы можете использовать параметр Script Table - INSERT, который будет генерировать множество операторов вставки, или вы можете использовать службы интеграции (DTS с 2000) или аналогичные для экспорта данных в формате CSV или аналогичном.

Майлз Д
источник
0

BMC Recovery Manager (ранее известный как SQLBacktrack) позволяет восстанавливать отдельные объекты в базе данных (также известные как таблицы) на определенный момент времени. Это не дешево, но отлично справляется: http://www.bmc.com/products/proddocview/0,2832,19052_19429_70025639_147752,00.html

http://www.bmc.com/products/proddocview/0,2832,19052_19429_67883151_147636,00.html

Мэтт Рогиш
источник
0

Если вы хотите восстановить таблицу после того, как кто-то по ошибке удалил из нее строки, возможно, вам стоит взглянуть на снимки базы данных. Вы можете довольно легко восстановить таблицу (или подмножество строк) из снимка. См. Http://msdn.microsoft.com/en-us/library/ms175158.aspx

SPE109
источник
0

Бесплатное приложение SqlTableZip выполнит эту работу. По сути, вы пишете любой запрос (который, конечно, также может быть [select * from table]), и приложение создает сжатый файл со всеми данными, которые можно восстановить позже.

Ссылка: http://www.doccolabs.com/products_sqltablezip.html

Asapir
источник
0

Handy Backup автоматически создает файлы дампа из MS SQL Server, включая MSSQL 2005/2008. Эти дампы представляют собой двоичные файлы уровня таблицы, содержащие точные копии конкретного содержимого базы данных.

Чтобы сделать простой дамп с помощью Handy Backup, следуйте следующей инструкции:

  1. Установите Handy Backup и создайте новое задание резервного копирования.
  2. Выберите «MSSQL» на шаге 2 в качестве источника данных. В новом окне отметьте базу данных для резервного копирования.
  3. Выберите одно из разных мест, где вы будете хранить свои резервные копии.
  4. На шаге 4 выберите вариант «Полная» резервная копия. При необходимости установите отметку времени.
  5. Пропустите шаг 5, если вам не нужно сжать или зашифровать получившийся файл дампа.
  6. На шаге 6 настройте расписание задачи для периодического создания дампов (в противном случае запускайте задачу вручную).
  7. Опять же, пропустите шаг 7 и дайте своей задаче имя на шаге 8. Вы закончили задачу!

Теперь запустите новую задачу, щелкнув значок перед ее названием, или дождитесь запланированного времени. Handy Backup автоматически создаст дамп вашей базы данных. Затем откройте место назначения резервной копии. Вы найдете папку (или пару папок) с вашими резервными копиями MS SQL. Любая такая папка будет содержать файл дампа уровня таблицы, состоящий из некоторых двоичных таблиц и настроек, сжатых в один ZIP-архив.

Другие базы данных

Handy Backup может сохранять дампы для MySQL, MariaDB, PostgreSQL, Oracle, IBM DB2, Lotus Notes и любой общей базы данных SQL, имеющей драйвер ODBC. Некоторые из этих баз данных требуют дополнительных действий для установления соединения между СУБД и Handy Backup.

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

Марк Гик
источник