Добрый день!
В этой статье я покажу как легко и просто мигрировать (перенести данные) с PostgreSQL на облачную базу данных Windows Azure SQL Database.
Основные шаги:
- Создание новой базы данных в панели управления Windows Azure
- Установка ODBC-драйвера для PostgreSQL
- Создание проекта в SQL Server Data Tool
- Импорт данных
Создание новой базы данных в панели управления Windows Azure
Для создания новой базы данных перейдите в панель управления Windows Azure (https://manage.windowsazure.com/). Даже если у вас нет подписки, вы можете воспользоваться пробным периодом — $200 на один месяц, этого с лихвой хватит на различные эксперименты.
Щелкните по кнопке + New в левой нижней части и выберите Data Services > SQL Database > Quick Create. Заполните необходимые поля — имя БД, регион датацентра и логин/пароль для доступа к базе:
Через мгновение должно появится сообщение, что создание базы данных прошло успешно:
По умолчанию создается БД с максимальным размером 1Гб — после достижения верхнего предела база данных переходит в режим «только чтение». Впрочем, при необходимости размер можно увеличить вплоть до 150Гб.
Установка ODBC-драйвера для PostgreSQL
Теперь надо установить ODBC-драйвер для postgresql. Скачайте последнюю версию с официального сайта (качайте 32-битную версию, с ней меньше проблем). Внимание! Устанавливать драйвер надо на тот компьютер, на котором в дальнейшем будет производится копирование данных, а не на сервер БД.
Установка происходит элементарно и не вызывает каких-либо проблем — Next-Next-Next-Finish.
После этого надо добавить ODBC Source как для PostgreSQL, так и для SQL Database- просто введите odbc на стартовом экране и выберите из списка ODBC Data Sources (32-bit)
В появившемся окне нажмите Add…, выберите в списке PostgreSQL Unicode и нажмите Finish
После этого введите все необходимые данные:
Теперь один из моментов, ради которого и писалась эта статья — на этом окне нажмите кнопку Datasource и обязательно поставьте галочку Use Declare/Fetch.
Без этого все будет работать пока данных мало, но будет валится с ошибкой Out of memory на больших объемах — так, у меня возникала эта ошибка на таблице с приблизительно 60млн записями.
Теперь также создайте Data Source для конечного сервера в облаке — только в списке выберите SQL Server Native Client, а данные для подключения можно посмотреть в панели управления сервером, если щелкнуть «View SQL Database connection strings for ADO .Net, ODBC, PHP, and JDBC». И, как нам напоминает это окошко, надо не забыть разрешить подключения к БД с данного IP-адреса — по умолчанию коннект возможен только с IP-адресов служб Windows Azure (и то, если включена эта опция в настройках сервера)
Процесс настройки также не отличается сложностью, и после этого у вас будет приблизительно такая картина:
Создание проекта в SQL Server Data Tool
Если бы миграция происходила с MySQL, то все было бы проще — есть замечательный инструмент SQL Server Migration Assistant (SSMA), который поддерживает, помимо всего прочего, и MySQL, и позволяет мигрировать очень просто и быстро. Но для PostgreSQL такого нет, поэтому придется использовать SQL Server Data Tool (что, впрочем, тоже не сложно). Запустите SQL Server Data Tool, щелкните New Project и создайте проект на основе шаблона Integration Service Project
Перетащите из Toolbox'а Data Flow Task, щелкните на нем два раза — вы перейдете на вкладку Data Flow.
Перетащите на рабочее поле ODBC Data Source и ODBC Destination и соедините их синей стрелкой, идущей от ODBC Source:
Щелкните два раза на ODBC Source, в появившемся окне нажмите New, затем еще раз New и выберите наш источник данных:
Нажмите два раза Ok для закрытия этих окон и выберите таблицу, из которой будут импортироваться данные:
Теперь надо таким же образом настроить приемник данных — ODBC Destination
Там же можно настроить соответствие колонок, если это необходимо:
Теперь еще один важный момент — следует переключить запуск проекта в 32-битный режим. Для этого щелкните правой кнопкой мыши по проекту в Solution Explorer, выберите Properties, и в разделе Configuration Properties -> Debugging установите Run64BitRuntime в False.
Импорт данных
Теперь все готово для переноса данных! Нажмите F5 или кнопку «Start Debugging» на панели инструментов. В рабочей области появятся индикаторы, говорящие о том, что идет перенос данных:
А в панели Progress можно наблюдать текстовый отчет:
Убедившись, что все идет по плану, можно идти пить кофе/чай — это достаточно долгий процесс (на мой взгляд, SSMA работал быстрее). После завершение процесса на источнике и приемнике данных будут зеленые галочки:
А в окне Progress — текстовый отчет:
Как видим, 570К строк были скопированный за 50 минут. Можно подключится к облачной базе данных и удостоверится, что данные действительно там:
Вот так можно легко и быстро перенеси большой объем данных из PostgreSQL в облачную базу данных Windows Azure SQL Database.
Ссылки
Автор: jgc128