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

241

Мне нужно скопировать базу данных с удаленного сервера на локальный. Я пытался использовать SQL Server Management Studio, но он создает резервные копии только на диске на удаленном сервере.

Некоторые моменты:

  • У меня нет доступа к удаленному серверу таким образом, чтобы я мог копировать файлы;
  • У меня нет доступа для настройки UNC-пути к моему серверу;

Любые идеи о том, как я могу скопировать эту базу данных? Должен ли я использовать сторонние инструменты?

Фернандо
источник
1
Я думаю, что если у вас вообще нет доступа к структуре каталогов, вам будет сложно это сделать.
JNK
3
Вы просто пытаетесь скопировать базу данных, а не копировать ее специально? Если это так, вы можете использовать мастер копирования базы данных или (в SQL Server 2008) использовать параметр «Создать сценарии» для сценария схемы и данных. Redgate SQL Compare и Data Compare также могут быть полезны здесь.
Мартин Смит
1
@MartinSmith По вашему предложению я сгенерировал скрипт, используя Generate and Publish Scriptsопцию. Я получаю все таблицы и схемы. Но я не получил никаких данных с таблицами. Как я могу это исправить.
ты действительно друг

Ответы:

182

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

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

  • Выберите базу данных, которую вы хотите сделать резервную копию, и нажмите «Далее»,
  • В опциях он представляет вам:
    1. В 2010 году: в разделе «Таблица / Параметры просмотра» измените «Данные сценариев» и «Индексы сценариев» на «Истина» и нажмите «Далее»,
    2. В 2012 году: в разделе «Общие» измените «Типы данных для сценария» с «Только схема» на «Схема и данные».
    3. В 2014 году: опция сценария данных теперь «скрыта» на шаге «Настройка параметров сценариев», необходимо нажать «Дополнительно» и установить для «Типы данных для сценария» значение «Схема и данные»
  • В следующих четырех окнах нажмите «выбрать все», а затем
  • Выберите сценарий для нового окна запроса

Как только это будет сделано, перед вами будет готов скрипт резервного копирования. Создайте новую локальную (или удаленную) базу данных и измените первый оператор «USE» в сценарии, чтобы использовать новую базу данных. Сохраните сценарий в безопасном месте и запустите его для новой пустой базы данных. Это должно создать вам (почти) дублированную локальную базу данных, которую вы сможете затем создавать резервные копии по своему усмотрению

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

Дэниэл Гилл
источник
9
В SQL Server Management Studio 2012 нет такой опции, как «Данные сценария», поэтому в более новых версиях для шага 2 выполните следующее: в разделе «Общие» измените «Типы данных в сценарий» с «Только схема» на «Схема». и данные ».
Березовский
1
Я проверил это на SQL Server 2008 R2, и он работал как шарм. Чтобы использовать его для стратегии резервного копирования, нужно немного поработать самому, но я думаю, что это лучше, чем использовать некоторые сторонние инструменты, такие как RedGate и т. Д. Возможно, у меня паранойя, но я думаю, что большинство сторонних инструментов имеют дополнительный код и получат мой контролировать и уменьшить простоту и прояснение сценария. Спасибо.
QMaster
2
@ShaunLuttin Если вы обязательно измените «Типы данных для сценария» с «Только схема» на «Схема и данные на втором шаге (в 2012 году), должны появиться операторы INSERT.
Дэниэл Гилл,
6
В SSMS 2014 опция перехода от схемы только к схеме и данным теперь скрыта за «Расширенными» при выборе места сохранения сценария.
MushinNoShin
2
Когда я пытаюсь запустить скрипт с помощью этого метода, я получаю ошибку от студии управления SQL-сервером по поводу «Недостаточно памяти для продолжения выполнения программы. (Mscorelib)»
Роб
51

Во-первых, предоставьте всем пользователям права полного доступа к локальному пути на вашем компьютере (как показано ниже). (Или альтернативно предоставьте разрешения специально для учетной записи агента SQL Server).

Во-вторых, выполните следующее:

BACKUP DATABASE [dev] TO  DISK = N'\\myMachine\c\dev.bak' WITH COPY_ONLY, INIT;
Т. Вебстер
источник
14
Это - ответ на вопрос. Это будет «резервное копирование удаленной базы данных SQL Server на локальный диск», а не «таблицы сценариев и данные». Кто-то: Пожалуйста, отметьте этот ответ как принятый и удалите неправильный ответ Даниэля Гилла
Хенрик Холмгаард Хойер
хотя я думаю, что это лучший ответ, вопрос задает вопрос: «Есть ли идеи, как я могу скопировать эту базу данных?» не специально бэкап.
Оливер Тауншенд
11
Это предполагает, что удаленный компьютер имеет доступ к файлам ваших локальных компьютеров, что не является общим случаем.
Андерс Линден
Хотелось бы, чтобы я тебя голосовал не раз. Это идеальный ответ, и я хотел сделать это годами. Так просто ... так прекрасно. Это не решит каждый случай в мире, но он отлично сработал для моего, где я удален в машину, но не в машину с SQL Server.
Уэйд Хэтлер,
Для меня это тоже рабочий. Просто временно поделитесь локальной папкой со всеми , выполните резервное копирование, а затем отключите общий доступ. Я тоже считаю, что это должен быть правильный ответ.
Фред Роджерс
51

Чтобы скопировать только данные и схему (не будут копировать хранимые процедуры, функции и т. Д.), Используйте мастер импорта и экспорта SQL Server и выберите « Создать ...» при выборе целевой базы данных.

Щелкните правой кнопкой мыши База данных> Задачи> Импорт данных.

Выберите источник данных

  • Источник данных : собственный клиент SQL Server
  • Имя сервера : удаленный сервер
  • Аутентификация :
  • База данных : имя БД

Выберите место назначения

  • Источник данных : собственный клиент SQL Server
  • Имя сервера : локальный сервер
  • Аутентификация :
  • База данных :New...

Остальное прямо вперед.

Шон Луттин
источник
2
Это сработало для меня намного лучше, чем принятый ответ. Гораздо чище обрабатывает отношения между таблицами.
MushinNoShin
7
Welp. К сожалению, он не устанавливает идентичности и ограничения по умолчанию. :(
MushinNoShin
1
Это намного лучше, чем создание сценариев. Сценарии могут быть довольно большими в разы. Личное предпочтение. Без обид :)
Vikas
Это намного проще, и я хотел бы перейти к нему, но если по какой-то причине вам нужны столбцы, такие как object_id, create_data, изменить дату AS IS в sys.tables, просто помните, что они будут изменены при создании.
Крисмограмма
@MushinNoShin Вы можете сначала создать сценарии, а затем импортировать / экспортировать данные, включив идентификационную вставку на этапе отображения.
HasanG
29

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

Все, что вы можете сделать, это создать резервную копию на компьютере с удаленным сервером, попросить кого-нибудь сжать ее и отправить вам.

marc_s
источник
5
Я не согласен. Во многих случаях вы можете использовать команду «Создание сценариев» в MS SQL Server Management Studio, чтобы создать сценарий, который можно запустить для создания локальной базы данных, которую затем можно будет выполнять по своему усмотрению. Смотрите мой ответ ниже или комментарий Мартина Смита по этому вопросу.
Даниэль Гилл
19
@Rafid: да, но это НЕ настоящее РЕЗЕРВНОЕ КОПИРОВАНИЕ - это экспорт скриптов / данных .....
marc_s
2
@marc_s Что там с «настоящей резервной копией», которая отличается от экспортированной копии? Журнал? Что-нибудь еще?
Дронз
31
@Dronz: ДА! Экспорт сценария воспроизведет структуру и, возможно, даже данные в таблице, но он не может включать такие вещи, как журналы транзакций и статистику, а также другие важные части базы данных SQL Server.
marc_s
1
@ShaunLuttin, вы можете включить данные.
Эрвин Ройяккерс
17

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

Проблема в том, что эта опция не обязательно генерирует скрипт в правильном порядке выполнения, потому что он не учитывает зависимости.

Для небольших баз данных это не проблема, но для более крупных это, конечно, потому, что для этого необходимо вручную переупорядочить этот скрипт. Попробуйте это на 500 объектах базы данных;)

К сожалению, в этом случае единственным решением являются сторонние инструменты.

Я успешно использовал инструменты сравнения из ApexSQL (Diff и Data Diff) для аналогичных задач, но вы не ошибетесь с любым другим, уже упомянутым здесь, особенно с Red Gate.

Филл С
источник
1
я не согласен, для меня sql всегда правильно упорядочивает зависимости, у вас есть конкретный пример того, как воспроизвести поведение, которое вы упомянули?
Сав
также есть возможность принять это во внимание
Gaspa79
13

Вы можете попробовать SQLBackupAndFTP . Он создаст сценарии для создания всех объектов в вашей базе данных и операторы INSERT для всех строк в ваших таблицах. В любой базе данных вы можете запустить этот файл сценария, и вся база данных будет воссоздана.

adinas
источник
4
Откомандирован. Пришлось установить новую версию студии управления сервером sql и не смог написать скрипт, как раньше. Этот инструмент позаботился об этом быстро и без проблем, даже не имея полного доступа к удаленному серверу (дополнение appharbor sqlserver)
Daniel Gill
1
Обратите внимание, что это программное обеспечение интенсивно использует ресурсы.
Dementic
Сверх того, что глючит и не совсем уверен, что это работает правильно. Не можете подключиться без проблем к удаленному серверу через PHP, но это не может? Когда у меня есть правильные настройки на самом сервере. ТАК я ... двигаюсь дальше.
Шон Ребело
7

Посмотрите в этом блоге описание того, как скопировать удаленную базу данных:

Резервное копирование базы данных SQL Server 2008 из среды общего хостинга

Марсель В
источник
1
Этот подход объясняет, как создавать сценарии структуры базы данных, создавать ее локально, а затем использовать инструменты управления SQL для копирования данных между локальной и удаленной базами данных.
Дрю Ноакс
1
Вы можете переключить опцию «Script Data» в True, чтобы также записать данные в один проход.
Даниэль Гилл
Копирование и резервное копирование это две разные вещи.
Андерс Линден
Это было прекрасно, потому что мне нужно работать с базой данных 2016 года с использованием sql server 2012 и не могу использовать резервную копию 2016 года в 2012 году.
majjam
6

Существует 99% решение, чтобы получить bak-файл с удаленного сервера sql на ваш локальный компьютер. Я описал это там в своем посте http://www.ok.unsode.com/post/2015/06/27/remote-sql-backup-to-local-pc

В целом это будет выглядеть так:

  • выполнить скрипт sql для генерации bak-файлов

  • выполнить скрипт sql для вставки каждого файла bak во временную таблицу с типом поля varbinary, выбрать эту строку и загрузить данные

  • повторить пред. шагайте столько раз, сколько у вас есть bak-файлов

  • выполнить скрипт sql для удаления всех временных ресурсов

Вот и все, у вас есть файлы BAK на вашем локальном компьютере.

okarpov
источник
5

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

это так просто

Pouyan
источник
Копирование базы данных требует привилегий SysAdmin. Это не решение для постоянных пользователей базы данных.
Buggieboy
В моем сегодняшнем выпуске наша команда разработчиков имеет привилегии sysadmin. Поэтому я буду использовать подход Пуян.
Коды с молотка
но мне нужно делать это каждый день, и мне нужен сценарий для этого
разъяснение
3

Бригада AppHarbor боролась с этим и разработала временное решение с использованием объектов управления сервером SQL и SqlBulkCopy.

Проверьте их сообщение в блоге об этом, или перейдите прямо к коду .

Они только протестировали его с AppHarbor, но это может стоить проверить.

Дэниэл Гилл
источник
3

Ответы выше просто не верны. Скрипт SQL даже с данными не является резервной копией. Резервная копия - это файл BAK, который содержит полную базу данных в ее текущей структуре, включая индексы.

Конечно, файл BAK, содержащий полную резервную копию со всеми данными и индексируемый из удаленной базы данных SQL Server, может быть получен в локальной системе.

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

Матиас
источник
Для этого вам нужны разрешения системного администратора.
LarryBud
Правильно. Учетной записи (windows или sql server), используемой для удаленного подключения к экземпляру sql server, необходимы разрешения sysadmin для получения резервных копий и их хранения на локальном компьютере. Упомянутый инструмент от FIDA Software шифрует и сжимает сетевой трафик с сервера sql и на него при извлечении резервных копий. Как только у вас есть файл bak на вашем компьютере, вы можете восстановить его там, где вы хотите.
Матиас
1

Как сказал Мартин Смит, если у вас нет доступа к компьютеру или файловой системе, вам потребуется использовать сторонние инструменты, такие как Red Gate или Adept, для сравнения исходной и целевой систем. Инструменты Red Gate позволят вам скопировать объекты и схемы И данные.

Vinnie
источник
1

В любом случае вы можете создать резервную копию с удаленного экземпляра SQL Server на локальном диске, если выполняется следующее условие:

  1. У вас есть общая папка на вашем локальном диске.
  2. Общая папка доступна из окна SQL Server.

Теперь при указании команды резервного копирования используйте путь к общей папке при указании параметра диска.

Naresh
источник
И чем ваш ответ отличается от ответа @Vivek?
Мартин Шредер,
1

просто попробуйте это:

1) Предоставить общий доступ к папке на вашем компьютере

2) на вашем сервере SQL: панель управления -> инструменты администрирования -> службы -> щелкните правой кнопкой мыши все службы SQL

на вкладке логин должен начинаться с вашего администратора домена

3) в мастере обслуживания сервера sql укажите место и папку для резервного копирования (\ yourcomputername \ sharedfoldernam)

Я сделал удаленное резервное копирование на 8 сервере SQL Server 2008 в нашей компании

Parsaria
источник
1

Я удивлен , что никто не упомянул скриптового решение для резервного копирования , предлагаемые Ola Hallengren , который абсолютно ничего позволит вам сделать резервную копию БД с удаленного сервера на путь UNC в сети бесплатно (я на самом деле , используя его как тип I сделать резервную копию БД с сервера dev, к которому у меня нет удаленного доступа, кроме как через SSMS, к общему ресурсу на моем компьютере dev). Это доступно с 2008 года и работает с SQL Server 2005 до 2014.

Вы должны убедиться, что настроенный вами общий ресурс имеет достаточный доступ: я имею тенденцию разрешать полное чтение / запись для группы AD «Все» на время процесса резервного копирования, потому что мне лень выяснять что-то более ограничительное, но это личный выбор

Он хорошо используется, хорошо документирован и очень гибок. Я склонен помещать процы и таблицу журналов в их собственную небольшую служебную базу данных, а затем запускать их. Если все находится в вашем домене AD и не является удаленным в том смысле, что оно находится на совместно расположенном сервере или чем-то еще, это работает очень хорошо.

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

Стив Петтифер
источник
1

Для 2019 года я бы порекомендовал использовать mssql-scripter, если вы хотите создать локальную резервную копию. Да, это сценарии, но вы можете настроить его так, чтобы он включал в себя все, что вы хотите, включая все данные. Я написал скрипт bash для автоматического ежедневного резервного копирования с использованием этого на машине с Linux. Оформить заказ

https://gist.github.com/tjmoses/45ee6b3046be280c9daa23b0f610f407
Тим Моисей
источник
0

Я мог бы сделать это один раз ... Чтобы сделать это, вы должны открыть общий ресурс на удаленном сервере. тогда вы можете непосредственно поместить резервную копию на сам ресурс, чем в папку по умолчанию ...

Обычно администратор берет резервную копию и делится ею с нами в какой-то общей папке. Я попытался, если это сработает, если я положу туда резервную копию. Это сработало.

Вивек
источник
0

Если вы используете Generate Scripts в SSMS, нажмите кнопку Advanced. Под опцией «Создать сценарии для зависимых объектов» нажмите «Истина». Нажав, что любые зависимости каждого объекта также будут записаны в правильном порядке.

user2684
источник
Значение по умолчанию в SSMS v17.8.1.
Крис Катиньяни
0

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

курандеро
источник
0

Для этой цели я использую инструменты Redgate Backup Pro 7 . Вы можете создать зеркало из файла резервной копии в создании плитки в другом месте. и может автоматически копировать файл резервной копии после создания в сети и на хост-хранилище.

Мехди Лотфи
источник
0

Создайте локальную общую папку с правами чтения и записи «каждому»

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

\ Моя_машина \ shared_folder \ mybackup.bak

(Пробовал в доменной среде Windows)

Раджеш Тампи
источник
0

Я знаю, что это более старая статья, но я обнаружил, что «самое простое» решение - просто щелкнуть правой кнопкой мыши базу данных и выбрать «Задачи» -> «Экспортировать приложение уровня данных». Вполне возможно, что эта опция доступна только потому, что сервер расположен на Azure (из того, что я помню, работая с Azure в прошлом, формат .bacpac был довольно распространённым там).

После этого вы можете щелкнуть правой кнопкой мыши список «Базы данных» на локальном сервере и использовать «Приложение уровня данных для импорта», чтобы получить данные на локальный компьютер с помощью файла .bacpac.

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

Киран Рамасвами
источник
-1

Если вы находитесь в локальной сети, вы можете поделиться папкой на локальном компьютере и использовать ее в качестве папки назначения для резервного копирования.

Пример:

  • Локальная папка:

    C:\MySharedFolder -> URL: \\MyMachine\MySharedFolder

  • Удаленный SQL Server:

    Select your database -> Tasks -> Back Up -> Destination -> Add -> Apply '\\MyMachine\MySharedFolder'

Tonatio
источник