Восстановить резервную копию SQL Server 2012 базы данных SQL Server 2008?

Есть ли способ восстановить резервную копию базы данных SQL Server 2012 на SQL Server 2008?

Я попытался прикрепить файл, он не работает.

38 голосов | спросил urlreader 9 J000000Monday12 2012, 20:46:54

3 ответа


26

У вас есть несколько вариантов:

Вариант A : база данных скриптов в режиме совместимости с использованием опции «Создать скрипт»:

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

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

<p> <strong> Вариант B: </strong> </p>

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

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

<ol>
<li>
<p> bcp вывести данные, используя скрипт ниже. установите SSMS в текстовом режиме и скопируйте результат, сгенерированный ниже сценарием в файле bat. </p>

<pre><code>- сохранить ниже выход в файле bat, выполнив ниже в SSMS в режиме TEXT

- очистить: создать файл bat с этой командой -> del D: \ BCP \ *. dat

выберите «C: \ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \ bcp.exe» '/* путь к BCP.exe * /
    + QUOTENAME (DB_NAME ()) + '.' /* Текущая база данных * /
    + QUOTENAME (SCHEMA_NAME (SCHEMA_ID)) + '.'
    + QUOTENAME (имя)
    + 'out D: \ BCP \' /* Путь, в котором будут сохраняться файлы BCP out * /
    + REPLACE (SCHEMA_NAME (schema_id), '', '') + '_'
    + REPLACE (имя, '', '')
    + '.dat -T -E -SServerName \ Instance -n' /* ServerName, -E позаботится об Identity, -n для Native Format * /
из sys.tables
где is_ms_shipped = 0 и name <gt; 'sysdiagrams' /* sysdiagrams классифицируется как MST в качестве UserTable, и мы не хотим этого * /
/* и schema_name (schema_id) <gt; 'unwantedschema' * //* Необязательно для исключения любой схемы * /
order by schema_name (schema_id)
</code></pre>
</li>
<li> <p> Запустите файл bat, который будет генерировать файлы .dat в указанной вами папке. </p> </li>
<li>
<p> Запустите ниже сценарий на целевом сервере с SSMS в текстовом режиме. </p>

<pre><code>--- Выполнить это на целевой сервере. База данных из SSMS.

--- Убедитесь, что вы изменили путь @Destdbname и bcp out в соответствии с вашей средой.

declare @Destdbname sysname
set @Destdbname = 'destinationDB' /* Имя базы данных назначения, где вы хотите Bulk Insert in * /
выберите «BULK INSERT»
/* Помните, что таблицы должны присутствовать в целевой базе данных * /
+ QUOTENAME (@Destdbname) + '.'
+ QUOTENAME (SCHEMA_NAME (SCHEMA_ID))
+ '.' + QUOTENAME (имя)
+ 'from' 'D: \ BCP \' /* Измените здесь путь bcp out * /
+ REPLACE (SCHEMA_NAME (schema_id), '', '') + '_' + REPLACE (имя, '', '')
+ '.dat' 'с (KEEPIDENTITY, DATAFILETYPE =' 'native' ', TABLOCK)'
+ char (10)
+ 'print' 'Массовая вставка для' + REPLACE (SCHEMA_NAME (schema_id), '', '') + '_' + REPLACE (имя, '', '') + 'сделано ...' ''
+ char (10) + 'go'
   из sys.tables
   где is_ms_shipped = 0
и имя> 'sysdiagrams' /* sysdiagrams классифицируется как MST в качестве UserTable, и мы не хотим этого * /
и schema_name (schema_id) <gt; 'unwantedschema' /* Необязательно исключать любую схему * /
    order by schema_name (schema_id)
</code></pre>
</li>
<li> <p> Запустите вывод, используя SSMS, чтобы вставить данные обратно в таблицы. </p> </li>
</ol>
<p> Это очень быстрый метод bcp, поскольку он использует собственный режим. </p></body></html>

ответил Kin 12 J0000006Europe/Moscow 2013, 07:23:40
23

Нет, вы не можете идти назад, только вперед. Вы можете создать пустую базу данных в 2008 году, а затем использовать мастер создания скриптов в Management Studio для сценария схемы и данных (или сторонних инструментов сравнения от Red Gate и других). Убедитесь, что вы выбрали правильную целевую версию как 2008, и вам придется выполнять несовместимые вещи (например, OFFSET или FORMAT), которые вы могли использовать в 2012 году.

ответил Aaron Bertrand 9 J000000Monday12 2012, 20:58:39
7

Нет поддерживаемого способа сделать это, потому что SQL Server не допускает такого рода совместимость.

Что вы можете сделать, это

  1. восстановить базу данных на SQL 2012

  2. генерировать скрипты для объектов и данных

  3. очистить скрипты от всех подробностей, которые уникальны для SQL 2012
  4. выполнить сценарии в 2008 году

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

В этом случае просто создайте пустую базу данных на SQL 2008 и используйте такие инструменты, как ApexSQL Diff и ApexSQL Data Diff для синхронизации объектов и данных. Вы можете найти их у других крупных поставщиков, таких как Red-Gate или Idera.

ответил David Smithers 12 J0000006Europe/Moscow 2013, 05:56:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132