Чи можу я відновити файли .bak SQL Server без SQL Server?


16

У мене є декілька великих .bakфайлів з дампа SQL Server 2005.

Чи можу я відновити їх без використання SQL Server, або до PostgreSQL, MySQL, або до плоских текстових файлів?

Рішення з відкритим кодом було б найбільш корисним.


1
"Я вважаю за краще не робити цього тільки для цього завдання". Чому ні? Це спосіб робити те, що ви намагаєтеся зробити.
swasheck

Чи має відновлення до чогось іншого навіть якийсь сенс? Що ви хочете зробити з отриманими даними?
Philᵀᴹ

1
@Phil Я хотів би перемістити отримані дані в базу даних PostgreSQL або навіть плоскі текстові файли.
Абе

1
@swasheck Я видалив цитований рядок, оскільки, здається, це відхилило від питання. Але відповісти на ваше запитання, оскільки я не маю уявлення, як ним користуватися, і мій сервер працює під управлінням Linux. Наявний ноутбук Windows не має достатньо місця.
Абе

2
Ну це інформація, якої у нас раніше не було :). Дякую за додаткову інформацію - у мене є план
swasheck

Відповіді:


19

Ось що я пропоную:

  1. побудувати віртуальну машину під управлінням Windows, з достатньою кількістю дискового простору для утримання резервної копії. Скопіюйте туди файл резервної копії. Якщо ви ще не маєте можливості створювати віртуальні машини, ви можете зробити це з безкоштовними продуктами, такими як Oracle VirtualBox .
  2. завантажте та встановіть оцінку видання SQL Server . Переконайтеся, що ви включаєте як двигун бази даних, так і Інструменти управління - завершено.
  3. якщо у VM є достатньо місця для резервного копіювання, але недостатньо місця для його відновлення, ви можете виконати "віртуальне відновлення", використовуючи пробну версію продукту з Red-Gate з тим же найменуванням (що дозволяє взаємодіяти з файл резервної копії, як ніби він був відновлений). В іншому випадку відновіть базу даних звичайним чином .

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

    • Відкрийте студію управління та підключіться до свого примірника.
    • Відкрийте Провідник об’єктів.
    • Клацніть правою кнопкою миші вашу щойно відновлену базу даних, виберіть Завдання> Створити сценарії ...
    • Клацніть Далі, Клацніть Далі
    • На сторінці "Вибір параметрів сценарію" прокрутіть вниз і встановіть "Дані сценарію" на "Істинно"
    • Клацніть Далі
    • Перевірте всі відповідні об’єкти і натисніть кнопку Далі
    • Перевірте потрібні таблиці та натисніть кнопку Далі
    • Виберіть сценарій до файлу. Тепер у вас буде файл, який містить усі ваші об'єкти та дані, використовуючи синтаксис вставки SQL Server, вам доведеться грати з результатом, щоб отримати його у форматі, що працює для Postgres (я не прихильний до незначних відмінностей синтаксису).

Крім того, ви можете спробувати і пограти з утилітою bcp, щоб витягти дані у файли CSV або подібні, але вам доведеться це робити за таблицею або використовувати якісь розумні сценарії (PowerShell, T-SQL, C # / SMO тощо). ) для створення всіх команд bcp для вас. Опинившись у файлах CSV, максимум завантаження даних у Postgres (але у вас все ще буде певна робота над генерацією таблиць).

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


+1 Я збирався запропонувати метод bcp, як тільки я потрапив до комп'ютера. Деякі номери - це розділювачі таблиці, IDENTITY (послідовність, у pg), nvarchar, лише декілька назв. В іншому випадку це те, що я запропонував би (sans Red-Gate) у своєму розділі редагування.
сварка

Існує 8, 20 ГБ .bak файлів, і було б чудово, якби ви могли допомогти, але дивіться відповідні запитання на gis.se, gis.stackexchange.com/q/28281/3218 та gis.stackexchange.com/q/28257 / 3218 про базу даних грунтів USDA (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. На це питання я вже відповів раніше, тому його не важко знайти.

EDIT

Щоб включити коментар Аарона, після запуску та запуску SQL Server ви також можете експортувати дані в плоскі файли різними способами. Якщо ви вибрали цей шлях, дайте мені знати, і я опублікую кілька способів зробити це

EDIT (2):

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

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

Довга історія:

  1. Створюйте сценарії та дані, використовуючи метод Аарона Бертранда (я, мабуть, дотримуватимуться рівня таблиці
  2. Візьміть до уваги індекс DDL (якщо він все ще дійсний), але не включайте його
  3. Створіть індекси на postgres, коли структура і дані будуть створені

3
Я не думаю, що вам потрібно налаштувати SQL Server для розмови з Postgres. Я впевнений, що після встановлення SQL Server ви зможете витягти дані в різні формати, які зрозуміє Postgres.
Аарон Бертран

Вибачення. Я мав на увазі, що вам потрібно буде налаштувати Postgres для прийому зовнішніх з'єднань (у цьому випадку SQL Server)
swasheck

Не вибачайтеся. :-) Я тільки роз'яснював, що вам не потрібно спілкуватися на SQL Server безпосередньо з Postgres або навпаки ..
Аарон Бертран
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.