Як я можу створити резервну копію віддаленої бази даних SQL Server на локальному диску?


241

Мені потрібно скопіювати базу даних з віддаленого сервера на локальний. Я намагався використовувати студію управління SQL Server, але це резервне копіювання лише на диск на віддаленому сервері.

Деякі моменти:

  • У мене немає доступу до віддаленого сервера таким чином, щоб я міг копіювати файли;
  • У мене немає доступу до налаштування шляху UNC до мого сервера;

Будь-які ідеї, як я можу скопіювати цю базу даних? Чи доведеться використовувати інструменти сторонніх виробників?


1
Я думаю, якщо ви взагалі не маєте доступу до структури каталогів, вам буде запропоновано це зробити.
JNK

3
Ви просто намагаєтесь скопіювати базу даних, а не спеціально створювати резервну копію? Якщо це так, ви можете скористатися майстром копіювання баз даних або (у SQL Server 2008), щоб скопіювати схему та дані, скористайтеся параметром "Створити сценарії". Тут також можуть бути корисні порівняння Redgate SQL і Порівняння даних.
Мартін Сміт

1
@MartinSmith Відповідно до вашої пропозиції, я створив сценарій за допомогою Generate and Publish Scriptsпараметра. Я отримую всі таблиці та схеми. Але я не отримав даних із таблицями. Як я можу це виправити.
ур по-справжньому друг

Відповіді:


182

У студії управління Microsoft SQL Server ви можете клацнути правою кнопкою миші базу даних, яку ви хочете створити, і натисніть Завдання -> Створити сценарії.

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

  • Виберіть базу даних, яку ви хочете створити, і натисніть наступну,
  • У представлених вами варіантах:
    1. У 2010 році: у розділі Параметри таблиці / Перегляду змініть "Дані сценарію" та "Індекси сценарію" на "Істинне" та натисніть кнопку "
    2. У 2012 році: у розділі "Загальні" змініть "Типи даних до сценарію" з "Тільки на схему" на "Схема та дані"
    3. У 2014 році: можливість скриптування даних тепер "приховано" на кроці "Встановити параметри сценарію", ви повинні натиснути "Додатково" та встановити значення "Типи даних для сценарію" на значення "Схема та дані".
  • У наступних чотирьох вікнах натисніть "Вибрати все", а потім наступне,
  • Виберіть сценарій до нового вікна запитів

Як тільки це зробить все, перед вами буде готовий резервний сценарій. Створіть нову локальну (або віддалену) базу даних та змініть перше твердження "USE" у сценарії, щоб використовувати вашу нову базу даних. Збережіть скрипт у безпечному місці та продовжте його та запустіть його проти нової порожньої бази даних. Це повинно створити вам (майже) копію локальної бази даних, яку ви можете створити в режимі резервного копіювання, як вам завгодно.

Якщо у вас є повний доступ до віддаленої бази даних, ви можете вибрати "скрипт усіх об'єктів" у першому вікні майстра, а потім змінити параметр "База даних сценаріїв" на "Істинне" у наступному вікні. Але будьте уважні, вам потрібно буде виконати повний пошук і заміну імені бази даних у скрипті на нову базу даних, яку в цьому випадку вам не доведеться створювати перед запуском сценарію. Це має створити більш точний дублікат, але іноді недоступне через обмеження дозволів.


9
У SQL Server Management Studio 2012 немає такої опції, як "Дані сценарію", тому в нових версіях виконайте наступний крок 2: у розділі "Загальні" змініть "Типи даних до сценарію" з "Тільки на схему" на "Схема" і дані ".
березівський

1
Я перевірив це на SQL Server 2008 R2, і він працював як шарм. Для того, щоб використовувати його для стратегії резервного копіювання, я потребую додаткової роботи, але я думаю, що це краще, ніж використання інструментів сторонніх виробників, таких як RedGate тощо. контролювати та зменшувати простоту та уточнення сценарію. Дуже дякую.
QMaster

2
@ShaunLuttin Якщо ви переконайтеся, що на другому кроці (на 2012 рік) "Типи даних для сценарію" із "Тільки схеми" змінено на "Схема та дані", на другому кроці (на 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
  • Назва сервера : віддалений сервер
  • Аутентифікація :
  • База даних : ім'я db

Виберіть пункт призначення

  • Джерело даних : власний клієнт SQL Server
  • Назва сервера : локальний сервер
  • Аутентифікація :
  • База даних :New...

Решта прямо вперед.


2
Це працювало для мене набагато краще, ніж прийнята відповідь. Набагато чіткіше обробляє відносини між таблицями.
MushinNoShin

7
Welp. На жаль, він не встановлює ідентичності та обмежень за замовчуванням. :(
MushinNoShin

1
Це набагато кращий спосіб, ніж створення сценаріїв. Сценарії можуть бути досить великими в рази. Особисті переваги. Без образи :)
Вікас

Це набагато простіше і було б моїм переходом, але якщо з якихось причин вам потрібні стовпці, як object_id, create_data, модифікуйте дату, ЯК ЯК Є в sys.tables, просто пам’ятайте, що вони будуть змінені після створення.
Крізмограма

@MushinNoShin ви можете спершу генерувати сценарії, а потім імпортувати / експортувати дані, дозволяючи вставляти ідентифікацію на етапі зіставлення.
HasanG

29

Ви не можете створити резервну копію з віддаленого сервера на локальний диск - просто не існує цього способу. І для мене це не існує сторонніх інструментів, наскільки я знаю.

Все, що ви можете зробити, - це створити резервну копію на віддаленій серверній машині і запропонувати кому-небудь застебнути та надіслати її вам.


5
Я не погоджуюсь. За багатьох обставин ви можете скористатися командою «Створити сценарії» MS SQL Server Management Studio для створення сценарію, який можна запустити для створення локальної бази даних, а потім ви можете робити за своїм бажанням. Дивіться мою відповідь нижче або коментар Мартіна Сміта до цього питання.
Даніель Гілл

19
@Rafid: так бут ось і НЕ істинний BACKUP - це експорт скрипт / дані .....
marc_s

2
@marc_s Що таке "справжню резервну копію", яка відрізняється від експортованої копії? Колода? Щось іще?
Дронз

31
@Dronz: ТАК! Експорт сценарію буде відтворювати структуру та, можливо, навіть дані в таблиці, але він не може включати в себе такі речі, як журнали транзакцій та статистику та інші життєво важливі частини бази даних SQL Server.
marc_s

1
@ShaunLuttin, ви можете включити дані.
Ервін Ройджаккерс

17

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

Проблема в тому, що ця опція не обов'язково генерує скрипт у правильному порядку виконання, оскільки він не враховує залежності.

Для невеликих баз даних це не проблема, але для більшої - це, звичайно, тому, що потрібно вручну повторно замовити цей сценарій. Спробуйте це на 500 об'єктній базі даних;)

На жаль, у цьому випадку єдиним рішенням є сторонні інструменти.

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


1
Я не згоден, для мене sql завжди впорядковує залежності, чи є у вас конкретний приклад того, як відтворювати поведінку, про яку ви згадали?
sawe

також є можливість врахувати це питання
Gaspa79

13

Ви можете спробувати SQLBackupAndFTP . Це створить сценарії для створення всіх об'єктів у вашій базі даних та виразів INSERT для всіх рядків ваших таблиць. У будь-якій базі даних можна запустити цей сценарій, і вся база даних буде створена заново.


4
Відряджений. Довелося встановити нову версію студії управління сервером sql і не зміг сценарій, як я раніше. Цей інструмент подбав про це швидко та без проблем, навіть не маючи повного доступу до віддаленого сервера (додаток appharbor sqlserver)
Daniel Gill

1
Зверніть увагу, що це програмне забезпечення активно використовує ресурси.
Дементік

Крім того, що ви багги і не зовсім впевнені, що це працює правильно. Чи можете підключити без проблем до віддаленого сервера через PHP, але це не може? Коли я маю належні налаштування на самому сервері. Так що ... рухаємось далі.
Шон Ребело

7

Подивіться у цьому блозі опис того, як скопіювати віддалену базу даних:

Резервне копіювання бази даних SQL Server 2008 із спільного середовища хостингу


1
Цей підхід пояснює, як скриптувати структуру бази даних, створювати її локально, а потім використовувати засоби управління SQL для копіювання даних між локальною та віддаленою базою даних.
Дрю Ноакс

1
Ви можете перевернути параметр "Сценарій даних" у "Істинно", щоб також за один раз прописати дані.
Даніель Гілл

Копіювання та резервне копіювання - це дві різні речі.
Андерс Лінден

Це було ідеально, оскільки мені потрібно працювати над базою даних 2016 року за допомогою сервера sql 2012 і не можу використовувати резервну копію 2016 року в 2012 році.
травень

6

Є 99% рішення отримати файл Bak із віддаленого сервера sql на локальний ПК. Я описав це там у своєму дописі http://www.ok.unsode.com/post/2015/06/27/remote-sql-backup-to-local-pc

Загалом це буде виглядати приблизно так:

  • виконати скрипт sql для генерації файлів Bak

  • виконати скрипт sql, щоб вставити кожен файл Bak у таблицю темп із типом поля варбінарного поля та вибрати цей рядок та завантажити дані

  • повторити поперед. зробіть стільки разів, скільки у вас є файли Bak

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

це все, у вас є файли Bak на вашому локальному ПК.


5

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

це так просто


База даних для копіювання вимагає привілеїв SysAdmin. Це не є рішенням для постійних користувачів бази даних.
Buggieboy

У моєму сьогоднішньому випуску наша команда розробників має привілеї щодо систематичного управління. Тому я буду використовувати підхід Пуяна.
Коди з Hammer

але мені потрібно це робити щодня, і мені потрібен сценарій для цього
уточнювач


3

Наведені вище відповіді просто невірні. SQL Script навіть із даними - це не резервне копіювання. Резервна копія - це файл BAK, який містить повну базу даних в її поточній структурі, включаючи індизи.

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

Це можна зробити за допомогою комерційного програмного забезпечення, щоб безпосередньо зберегти резервний файл BAK на вашій локальній машині, наприклад, цей безпосередньо створить резервну копію з віддаленого SQL db на вашій локальній машині.


Для цього вам потрібно дозволу sysadmin.
LarryBud

Правильно. Обліковий запис (Windows або sql-сервер), який використовується для віддаленого підключення до екземпляру сервера sql, потребує дозволів sysadmin для отримання резервних копій і зберігання їх на локальній машині. Згаданий інструмент від FIDA Software виконує шифрування та стискання мережевого трафіку з та на sql-сервер під час отримання резервних копій. Після того, як ви матимете файл bak на вашій машині, ви можете відновити його там, де вам потрібно.
Маттіас

1

Як сказав Мартін Сміт, якщо у вас немає доступу до машини або файлової системи, вам потрібно буде скористатись сторонніми інструментами, такими як Red Gate або Adept, щоб зробити порівняння у вихідній та цільовій системах. Інструменти Red Gate дозволять вам копіювати об'єкти та схеми ТА дані.


1

у будь-який спосіб ви могли взяти резервну копію з віддаленого екземпляра SQL Server на свій локальний диск, якщо виконується наступна умова:

  1. У вас є спільна папка на локальному диску.
  2. доступ до спільної папки доступний у вікні SQL Server.

Тепер, визначаючи команду резервного копіювання, використовуйте загальний шлях папки, коли вказуєте параметр диска.


І чим ваша відповідь відрізняється від відповіді від @Vivek?
Мартін Шредер

1

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

1) Поділіться папкою з повним дозволом на своєму комп’ютері

2) на вашому SQL-сервері: панель управління -> адміністративні інструменти -> послуги -> клацніть правою кнопкою миші на всіх службах SQL

вкладка входу повинна починатися з вашого адміністратора домену

3) у майстер технічного обслуговування сервера sql розмістіть резервне резервне копіювання розташування та папки (\ ваше ім'я комп’ютера \ спільний каталог)

Я робив віддалену резервну копію на 8 сервері sql сервера 2008 у нашій компанії


1

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

Вам потрібно забезпечити достатній доступ до створеної вами спільної частки: я, як правило, дозволяю повністю читати / писати групі AD для всіх "протягом тривалості процесу резервного копіювання, тому що я лінивий, щоб з'ясувати щось більш обмежувальне, але це особистий вибір.

Це добре використаний, добре задокументований та дуже гнучкий. Я схильний поміщати програми та таблицю реєстрації у свою маленьку базу даних утиліт, а потім запускати її. За умови, що все у вашому домені AD, а не віддалене в тому сенсі, що воно знаходиться на розташованому сервері чи що-небудь, це працює дуже добре.

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


1

На 2019 рік я рекомендую використовувати mssql-скриптер, якщо ви хочете фактичної локальної резервної копії. Так, це сценарії, але ви можете налаштувати його, щоб він включав все, що завгодно, що може включати всі дані. Я написав сценарій bash для автоматичного щоденного резервного копіювання, використовуючи це на машині Linux. Оформити мою суть:

https://gist.github.com/tjmoses/45ee6b3046be280c9daa23b0f610f407

0

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

Зазвичай адміністратор бере резервну копію і ділиться нею з нами в якійсь спільній папці. Я спробував, якщо це спрацює, якщо я розміщую там резервну копію. Це спрацювало.


0

Якщо ви використовуєте Створення скриптів під SSMS, натисніть кнопку Додатково. У розділі "Створити сценарії для залежних об'єктів" натисніть кнопку "Правда". Натиснувши, що будь-які залежності кожного об'єкта також будуть виписані в належному порядку.


Правда, за замовчуванням в SSMS v17.8.1.
Кріс Катіньяні

0

Деякі сторонні програми резервного копіювання дозволяють налаштувати передачу файлів із певними мережевими дозволами. Це дуже корисно, коли служба SQL Server працює під обмеженим обліковим записом і не має достатньої кількості мережевих дозволів. Спробуйте використовувати резервну копію EMS SQL, яка вирішує цю задачу.


0

Для цього я використовую інструменти Redgate backup pro 7 . ви можете створити дзеркало з резервного файлу у створенні плитки в іншому місці. і може копіювати файл резервного копіювання після створення в мережі та на хості автоматично.


0

Створіть локальну спільну папку з "усіма" правами читання / запису

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

\ mymachine \ shared_folder \ mybackup.bak

(Пробували в середовищі домену Windows)


0

Я знаю, що це старіший пост, але для того, що це варто, я виявив, що "найпростішим" рішенням є просто натиснути правою кнопкою миші на базу даних і вибрати "Завдання" -> "Експорт додатка рівня даних". Можливо, що ця опція доступна лише тому, що сервер розміщений на Azure (від того, що я пам'ятаю, працював з Azure в минулому, формат .bacpac там був досить поширеним).

Після цього ви можете клацнути правою кнопкою миші на списку "Бази даних" на вашому локальному сервері та використовувати "Імпорт додатка рівня даних", щоб отримати дані на локальну машину за допомогою файлу .bacpac.

Тільки майте на увазі, що експорт може зайняти тривалий час. Експорт закінчив приблизно дві години. Однак імпортна частина набагато швидша.


-1

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

Приклад:

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

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

  • Віддалений сервер SQL:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.