Подтвердить что ты не робот

Как восстановить базу данных SQL Server 2012 до SQL Server 2008 R2?

Я пытаюсь восстановить резервную копию, взятую с SQL Server 2012 на SQL Server 2008 R2, и это дает ошибку

Указанный приказ недействителен. (SqlManagerUI)

Если у вас есть какое-либо решение, дайте комментарий

спасибо.

4b9b3361

Ответ 1

ПРИМЕЧАНИЕ. НЕКОТОРЫЕ ИЗ ВЫШЕИЗЛОЖЕННЫХ ОТВЕТОВ НЕПОСРЕДСТВЕННО! ЭТО МОЖЕТ БЫТЬ СОВЕРШЕННО И ВСЕ В СТАНДАРТЕ УПРАВЛЕНИЯ SQL SERVER (SQL MS)


Существует множество методов, которые вы можете использовать для "понижения" базы данных, но недавно я обнаружил, что, как я считаю, не был найден в ранних выпусках SQL MS 2012, это мастер копирования базы данных. Вот как вы можете скопировать базу данных из экземпляра сервера 2012 в экземпляр 2008 R2:

  • В примере 2012 щелкните правой кнопкой мыши на базе данных, которую вы хотите скопировать/ "понизить", и выберите "Задачи" > "Копировать базу данных...".

  • "Добро пожаловать в Мастер копирования базы данных" нажмите [Далее].

  • "Выберите исходный сервер": установите "Исходный сервер" как экземпляр 2012 года (или экземпляр сервера более высокой версии) и установите соответствующую проверку подлинности. Нажмите "Далее]. [Заметка. службы агента сервера должны быть запущены]

  • "Выберите целевой сервер:" Установите "Целевой сервер" как 2008 R2 (или экземпляр нижней версии) и установите соответствующую проверку подлинности. Нажмите "Далее]. [Заметка. службы агента сервера должны быть запущены]

  • "Выберите метод передачи". Для этого примера выберите "Использовать метод объекта управления SQL", нажмите [Далее].

  • Выберите, чтобы переместить или скопировать необходимые базы данных, нажмите [Далее].

  • Настроить конечный путь базы данных и логические имена и т.д. Выберите необходимый параметр, если база данных существует. Нажмите [Далее].

  • Настройте пакет служб интеграции, нажмите [Далее].

  • В этом примере выберите параметр "Запустить сразу" для параметров "Запланировать пакет", нажмите [Далее].

  • "Завершите работу мастера", нажмите [Готово], чтобы выполнить пакет и создать "пониженную" базу данных.

Вы закончили, счастливые дни.:]


Другим методом, который я нашел, был мастер миграции базы данных SQL, который был создан Microsoft и который, как я думаю, не знает, что был создан мастер. Получите его здесь http://sqlazuremw.codeplex.com/. Чтобы использовать этот пакет для миграции баз данных с SQL Server 20012 на 2008 R2, вы можете сделать следующее:

  • Запустите SQLAzureMW.exe.

  • Выберите переключатель Analyze/Migrate с правой стороны главного окна.

  • Выберите целевой сервер как "Последняя версия службы SQL Database (V12)". Нажмите [Далее].

  • Подключитесь к экземпляру SQL Server 2012. Имя сервера для моего компьютера - "VAIOE\SQLSERVER2012", используйте проверку подлинности Windows, выберите "Master DB (список всех баз данных)" из параметров базы данных и "Сохранить информацию о пользователе". Нажмите [Подключить].

  • Выберите требуемую базу данных для миграции [используйте базу данных отчетов GVH на данный момент]. Нажмите [Далее].

  • Выберите "Script все объекты базы данных".

  • Нажмите [Advance] и измените следующие параметры:

а. В разделе Общие установите "Целевой сервер" на "SQL Server".

б. В разделе "Параметры таблицы/просмотра" установите "Script Таблица/Данные" в "Табличная схема с данными". Установите "Хранимые процедуры для базы данных" на "Истина". Установите "Функции безопасности", "Сохраненные сохраненные процедуры" и "Системные функции" на "Истина".

Нажмите [OK]. Нажмите [Далее].

  1. Просмотрите свой выбор. Нажмите [Далее].

  2. Вам будет предложено "Готов к созданию Script?", нажмите [Да]. Это запустит генерацию script. После этого нажмите [Далее].

  3. Теперь вы получите еще один диалог подключения. На этот раз выберите базу данных на целевом сервере (экземпляр SQL Server 2008 R2). Выберите главную базу данных, чтобы получить выбор целевой БД. Нажмите [Подключить].

  4. Теперь, скорее всего, вы хотите перейти в новую базу данных, поэтому нажмите [Создать базу данных].

  5. Введите целевое имя базы данных и оставьте "Collation" как "", это нас не касается. Нажмите [Создать базу данных]. Нажмите [Далее].

  6. Теперь вам будет предложено "Выполнить script на сервере назначения?", нажмите [Да].

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

  8. Нажмите [Выход].

Вы закончили. Теперь, если вы откроете Management Studio и подключитесь к экземплярам SQL Server 2012 и 2008 R2, с которыми мы только что работали, вы можете увидеть, что схема исходной базы данных 2012 года соответствует только что созданной целевой базе данных.


Два вышеупомянутых процесса почти идентичны и обеспечивают ту же функциональность. Я бы не выполнил последнее, если вам не требуется выполнить миграцию на Azure, или метод 1 не подходит для вас.

Надеюсь, это поможет кому-то.

Ответ 2

Щелкните правой кнопкой мыши на своей базе данных и выберите "Задачи → Сгенерировать скрипты"

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

Теперь нажмите "Далее" → "Дополнительно" и выберите "Script для версии сервера" в версию "ssms", которую вы хотите восстановить, например, 2008 или 2008 R2 или другой.

также выберите "тип данных в script" в "Схема и данные"

Наконец, запустите этот .sql файл в ssms назначения и измените имя базы данных в базе данных первой строки

если базы данных там нет, тогда создайте ее, и если вы получите ошибку с выполнением script, выполните script из ключевого слова alter, чтобы завершить дно.

Ответ 3

Вы не можете, вы НИКОГДА не сможете восстановить более высокую версию до более низкой версии SQL Server. Единственным вариантом является script из базы данных, а затем передача данных через SSIS, BCP, связанный сервер или сценарий данных

Ответ 4

To: Killercam Спасибо за ваши решения. Я пробовал первое решение в течение часа, но не работал у меня.

Я использовал скрипты для генерации метода для переноса данных с SQL Server 2012 на SQL Server 2008 R2 в виде шагов ниже:

В SQL Management Studio 2012

  • Задачи → Сгенерировать скрипты (на первом экране мастера нажмите "Далее" - может не показывать)
  • Выберите Script всю базу данных и все объекты базы данных → Далее
  • Нажмите кнопку [Дополнительно] 3.1 Измените [Типы данных на script] с "Только схема" на "Схема и данные" 3.2 Измените [ Script для версии сервера] "2012" на "2008"
  • Завершите следующие шаги мастера для создания Script файла
  • Используйте sqlcmd для импорта экспортированного файла Script на ваш SQL Server 2008 R2 5.1. Откройте командную строку Windows. 5.2 Тип [sqlcmd -S -i Путь к вашему файлу] (Пример: [sqlcmd -S localhost -i C:\mydatabase.sql])

Это работает для меня.

Ответ 5

Вы не сможете восстановить с 2012 до 2008. Вы можете использовать такой инструмент, как red-gate SQL compare, чтобы скопировать схему и т.д. (При условии, что ничего не используется в 2012 году). Если у вас есть данные для копирования, вы можете использовать их Data Compare, и я думаю, что вы получаете 14-дневную бесплатную пробную версию.

Ответ 6

Единственный встроенный способ "понизить" базу данных с одной версии SQL Server до более низкой - это трудный путь: Script удалить всю базу данных, схему и данные, а затем выполнить Script на целевой сервер.

Это делает, но имеет тенденцию быть жестоким.

Ответ 7

Как уже упоминалось, вы не можете использовать функции "Резервное копирование" и "Восстановить", чтобы перейти от базы данных SQL Server 2012 к базе данных SQL Server 2008. Программа, которую я написал, SQL Server Scripter, будет, однако, подключаться к базе данных SQL Server и script из базы данных, ее схемы и данных. Он может быть git клонирован из BitBucket и скомпилирован с Visual Studio 2010 или более поздней версией (если это более поздняя версия, просто откройте .csproj).

Ответ 8

Вот еще один вариант, который помогло: https://dba.stackexchange.com/a/44340

Там я использовал вариант B. Это не моя идея, поэтому все заслуги автора. Я просто помещаю его здесь, так как знаю, что иногда ссылки не функционируют, и рекомендуется иметь полноценную историю.

Только один отзыв от меня: сначала разрешите несовместимость схемы, если таковая имеется. Затем заливка данных должна быть легкой.


Вариант A: Script выход из базы данных в режиме совместимости с помощью функции Generate Script:

Примечание. Если вы Script выходите из базы данных со схемой и данными, в зависимости от вашего размера данных, Script будет массивным и не будет обрабатываться SSMS, sqlcmd или osql (может быть и в GB).

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

Вариант B:

Сначала Script вывести таблицы со всеми индексами, FK и т.д. и создать пустые таблицы в целевой базе данных - опция только с SCHEMA (Нет данных).

Используйте BCP для вставки данных

я. BCP вывести данные, используя ниже script. Установите SSMS в текстовом режиме и скопируйте результат, сгенерированный ниже Script в файле bat.

-- save below output in a bat file by executing below in SSMS in TEXT mode

-- clean up: create a bat file with this command --> del D:\BCP\*.dat 

select '"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp.exe" ' /* path to BCP.exe */
    +  QUOTENAME(DB_NAME())+ '.' /* Current Database */
    +  QUOTENAME(SCHEMA_NAME(SCHEMA_ID))+'.'            
    +  QUOTENAME(name)  
    +  ' out D:\BCP\'  /* Path where BCP out files will be stored */
    +  REPLACE(SCHEMA_NAME(schema_id),' ','') + '_' 
    +  REPLACE(name,' ','') 
    + '.dat -T -E -SServerName\Instance -n' /* ServerName, -E will take care of Identity, -n is for Native Format */
from sys.tables
where is_ms_shipped = 0 and name <> 'sysdiagrams'                       /* sysdiagrams is classified my MS as UserTable and we dont want it */
/*and schema_name(schema_id) <> 'unwantedschema'    */                             /* Optional to exclude any schema  */
order by schema_name(schema_id)

II. Запустите файл bat, который будет генерировать файлы .dat в указанной вами папке.

III. Запустите ниже Script на целевом сервере с SSMS в текстовом режиме.

--- Execute this on the destination server.database from SSMS.

--- Make sure the change the @Destdbname and the bcp out path as per your environment.

declare @Destdbname sysname
set @Destdbname = 'destinationDB' /* Destination Database Name where you want to Bulk Insert in */
select 'BULK INSERT '
/*Remember Tables must be present on destination database */ 
+ QUOTENAME(@Destdbname) + '.' 
+ QUOTENAME(SCHEMA_NAME(SCHEMA_ID)) 
+ '.' + QUOTENAME(name) 
+ ' from ''D:\BCP\' /* Change here for bcp out path */ 
+ REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '') 
+ '.dat'' with ( KEEPIDENTITY, DATAFILETYPE = ''native'', TABLOCK )' 
+ char(10) 
+ 'print ''Bulk insert for ' + REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '') + ' is done... ''' 
+ char(10) + 'go'
from sys.tables
where is_ms_shipped = 0
and name <> 'sysdiagrams' /* sysdiagrams is classified my MS as UserTable and we dont want it */
--and schema_name(schema_id) <> 'unwantedschema' /* Optional to exclude any schema */
    order by schema_name(schema_id)

IV. Запустите вывод, используя SSMS, чтобы вставить данные обратно в таблицы.

Это очень быстрый метод BCP, поскольку он использует собственный режим.

Ответ 9

Объединить репликацию. Вы можете создать подписчика (2008) у дистрибьютора (2008). После того, как база данных полностью синхронизирована, снимите подписку и публикацию.

Ответ 10

Если вы находитесь в одной сети, добавьте целевой сервер в студию Студия управления MS Server, используя параметр подключения, а затем попробуйте экспортировать из источника в пункт назначения. Самый простой способ:)