Можно ли восстановить .bak файлы SQL Server без SQL Server?

16

У меня есть несколько больших .bakфайлов из дампа SQL Server 2005.

Могу ли я восстановить их без использования SQL Server, либо в PostgreSQL, MySQL, либо в текстовые файлы?

Решение с открытым исходным кодом было бы наиболее полезным.

Abe
источник
1
«Я бы предпочел не делать этого только для этой задачи». Почему нет? Это способ сделать то, что вы пытаетесь сделать.
swasheck
Есть ли смысл в восстановлении чего-либо еще? Что вы хотите сделать с полученными данными?
Philᵀᴹ
1
@Phil Я хотел бы переместить полученные данные в базу данных PostgreSQL или даже в текстовые файлы.
Абэ
1
@swasheck Я удалил процитированную строку, поскольку это, похоже, отвлекло от вопроса. Но чтобы ответить на ваш вопрос, потому что я понятия не имею, как его использовать, и мой сервер работает под управлением Linux. В доступном ноутбуке Windows не хватает места.
Абэ
2
Ну, это информация, которой у нас не было раньше :). Спасибо за дополнительную информацию - у меня есть план
swasheck

Ответы:

19

Вот что я предлагаю:

  1. создать виртуальную машину под управлением Windows с достаточным пространством на диске для хранения резервной копии. Скопируйте туда файл резервной копии. Если у вас еще нет возможности создавать виртуальные машины, вы можете сделать это с помощью бесплатных продуктов, таких как Oracle VirtualBox .
  2. Загрузите и установите ознакомительную версию SQL Server . Убедитесь, что вы включили и ядро ​​базы данных, и средства управления - завершено.
  3. если на виртуальной машине достаточно места для хранения резервной копии, но недостаточно места для ее восстановления, вы можете выполнить «виртуальное восстановление», используя пробную версию продукта от Red-Gate с тем же именем (что позволяет взаимодействовать с файл резервной копии, как будто он был восстановлен). В противном случае восстановите базу данных обычным способом .

  4. Как только база данных станет доступной (с помощью обычного или виртуального восстановления), вы можете сгенерировать сценарии для схемы и данных следующим образом:

    • Откройте Management Studio и подключитесь к своему экземпляру.
    • Откройте Обозреватель объектов.
    • Щелкните правой кнопкой мыши вновь восстановленную базу данных, выберите «Задачи»> «Создать сценарии» ...
    • Нажмите Далее, Нажмите Далее
    • На странице «Выбор параметров сценария» прокрутите вниз и установите для параметра «Данные сценария» значение «Истина».
    • Нажмите кнопку "Далее
    • Проверьте все соответствующие объекты и нажмите Далее
    • Проверьте нужные таблицы и нажмите «Далее».
    • Выберите сценарий к файлу. Теперь у вас будет файл, содержащий все ваши объекты и данные с использованием синтаксиса вставки SQL Server, вам придется поиграть с выводом, чтобы получить его в формате, который работает для Postgres (я не знаком с какими-либо незначительными синтаксическими различиями).

В качестве альтернативы вы можете попробовать поиграть с утилитой BCP для извлечения данных в файлы CSV или аналогичные, но вам придется делать это по таблице или использовать некоторые умные сценарии (PowerShell, T-SQL, C # / SMO и т. Д. ) для генерации всех команд bcp для вас. Попав в CSV-файлы, следует выполнить массовую загрузку данных в Postgres (но у вас все еще будет немного работы для генерации таблиц).

В качестве окончательного предложения, если файл .bak не слишком большой и данные не являются конфиденциальными, я более чем готов попытаться сгенерировать для вас файлы в нужном вам формате. У меня много виртуальных машин Windows с пространством, и проблема заключается в том, чтобы доставить файл .BAK туда, где я могу его извлечь, особенно если он больше, чем поддерживает большинство служб обмена файлами.

Аарон Бертран
источник
+1 Я собирался предложить метод bcp, как только доберусь до компьютера. Некоторые ошибки - это разделители таблиц, IDENTITY (последовательность, в pg), nvarchar, и это лишь некоторые из них. В противном случае это то, что я бы предложил (без Red-Gate) в моем разделе редактирования.
swasheck
Имеется 8,25 ГБ .bak-файлов, и было бы здорово, если бы вы могли помочь, но, пожалуйста, смотрите соответствующие вопросы на gis.se, gis.stackexchange.com/q/28281/3218 и gis.stackexchange.com/q/28257. / 3218 о базе данных почв Министерства сельского хозяйства США (SSURGO). В настоящее время очень сложно использовать доступ к этим данным в автоматическом режиме для имитационного моделирования. Науке было бы очень полезно иметь эти данные в более удобной структуре. Вы можете скачать его с моего сервера. Данные не являются конфиденциальными, любой может получить их за $ 50 / CD или $ 100 / DVD или, возможно, дешевле у своего агента расширения.
Абэ
Похоже, у вас есть ответы о том, как получить данные на GIS.SE. Я пошел и посмотрел на эти сайты, но не вижу, где они указывают, что файл является резервной копией SQL Server. Как и откуда вы получили эти файлы?
swasheck
7

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

Итак, вам нужно установить экземпляр SQL Server. Вам также необходимо убедиться, что этот экземпляр может взаимодействовать с вашим сервером Postgres (фриг с pg_hba.conf). После этого у вас есть несколько хороших путей для переноса данных.

Первый путь - установить драйвер ODBC для Postgres Windows и установить соединение с сервером pg. Затем вы можете использовать SSIS для создания сценария миграции данных. Если вы собираетесь пойти по этому пути, я предлагаю вам установить SSIS при установке сервера базы данных.

Другой вариант также включает подключение драйвера ODBC, но вы можете создать связанный сервер в SQL Server и запускать вставки в экземпляр pg через SQL Server. Я уже ответил на этот точный вопрос здесь, поэтому его не должно быть трудно найти.

РЕДАКТИРОВАТЬ

Чтобы включить комментарий Аарона, после того, как вы запустите SQL Server, вы также можете экспортировать данные в простые файлы различными способами. Если вы выберете этот путь, дайте мне знать, и я опубликую несколько способов сделать это

РЕДАКТИРОВАТЬ (2):

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

Это оставляет ответ Аарона Бертрана лучшим ответом. Пожалуйста , обратите внимание , что в дополнение к типам данных ( по IDENTITYсравнению SEQUENCE, Postgres ничего не знает , NVARCHARтак как установить кодировку на самой базе данных). Postgres ничего не знает CREATE CLUSTERED INDEX( CLUSTERможет работать для вас). Наконец, поскольку я вижу в комментариях, что вы собираетесь использовать пространственные данные, postgresql ничего не знает о CREATE SPATIAL INDEXсинтаксисе. Вам нужно будет установить postgis и использовать INDEXTYPEключевое слово для создания пространственных индексов. Наконец, убедитесь, что вы правильно обрабатываете схемы.

Короче:

  1. Генерировать сценарии и данные, используя метод Аарона Бертранда (я бы, вероятно, придерживался уровня таблицы)
  2. Обратите внимание на индекс DDL (если он все еще действителен), но не включайте его
  3. Создавайте индексы на postgres, как только структура и данные на месте
swasheck
источник
3
Я не думаю, что вам нужно настроить SQL Server для общения с Postgres. Я уверен, что после установки SQL Server вы сможете извлекать данные в различные форматы, понятные Postgres.
Аарон Бертран
Извиняюсь. Я имел в виду, что вам нужно настроить Postgres для приема внешних соединений (в данном случае SQL Server)
swasheck
Не извиняйся. :-) Я только что пояснил, что вам не нужно, чтобы SQL Server говорил напрямую с Postgres или наоборот ..
Аарон Бертран