Лицензии и поддержка
Продлить лицензии или поддержку SQL Server нельзя либо невыгодно, а дата отказа от продукта уже названа.
Переносим базы MS SQL Server на PostgreSQL вместе с тем, что на них держится: хранимыми процедурами, заданиями SQL Server Agent, отчётами, правами и приложениями, которые ходят в базу напрямую. Сначала инвентаризация и оценка, потом перенос на тестовом контуре с нагрузкой и построчной сверкой, потом переключение с отрепетированным откатом. Исходники, схемы и документация остаются у вас, работаем в вашем контуре. Конвертера «в один клик» мы не обещаем: конвертер переносит синтаксис, а смысл приходится читать.
Обследование — от 200 000 ₽, 2–3 неделиИсходники и доступы остаются у васНулевой простой не обещаем: окно считаем на репетиции
Продлить лицензии или поддержку SQL Server нельзя либо невыгодно, а дата отказа от продукта уже названа.
Заказчик или нормативный срок требует СУБД из реестра отечественного ПО, а ваша система стоит на SQL Server.
Бизнес-правила живут в хранимых процедурах и триггерах, и целиком их уже никто не помнит.
Часть приложений и скриптов ходит в базу напрямую, список неполный, у старых программ нет исходников.
Конвертер перенёс таблицы, но отчёты показывают другой порядок строк, а процедуры падают на первом же вызове.
Серверы уходят на Linux, и вместе с ними нужно решать судьбу SQL Server. Об этом отдельно: переход с Windows Server на Linux.
Строка таблицы — типовое место, где перенос ломается. Полный перечень по вашей базе получаем на инвентаризации, а не из справочника. Подробности с примерами — в разборе различий в коде и данных.
LIMIT, OFFSET, FETCH FIRST n ROWS ONLYORDER BY порядок строк нестабилен; TOP … PERCENT переписывается вручнуюCOALESCE, CASE, CAST, to_charISNULL берёт тип первого аргумента, COALESCE — общий тип; стили CONVERT не переносятся один к одномуnow(), прибавление interval, вычитание дат, extractDATEDIFF считает пересечённые границы, а не прошедшее время; now() фиксируется на начало транзакции||, concat(), length(), strpos()LEN их не считалCREATE TEMP TABLE; табличных переменных нетANALYZEGENERATED … AS IDENTITY, последовательности, RETURNINGCROSS JOIN LATERAL, LEFT JOIN LATERAL … ON trueOUTER APPLY на обычное соединение теряет строкиINSERT … ON CONFLICT, RETURNING; MERGE в новых версияхMERGE нет; при конкуренции upsert ведёт себя иначеEXCEPTION в PL/pgSQL, RAISEFOR UPDATE, SKIP LOCKEDNOLOCK просто убирают, а очереди на READPAST переписывают; поведение под нагрузкой проверяем"имя", схема public или свояРасхождение типа не всегда видно сразу: данные переедут, а ошибка всплывёт в отчёте за квартал.
timestampDATETIME лежат с шагом около трёх миллисекунд (.000, .003, .007), и эти хвосты переедут вместе с даннымиtimestamptzboolean= 1 и = 0 в запросахboolean с числом даёт ошибку типов; условия переписываются на true и falsesmallint, numeric(19,4)tinyint нет; тип money в PostgreSQL зависит от локали, поэтому деньги держат в numericvarchar(n), textuuid, gen_random_uuid()NEWSEQUENTIALID() нет; функция gen_random_uuid() встроена в новых версиях, в старых нужно расширениеltree, PostGIS)Если на SQL Server лежит информационная база 1С, таблицы переносить напрямую не нужно: структурой хранения управляет платформа. Платформа 1С умеет работать с PostgreSQL, и перенос делается её средствами: выгрузкой информационной базы (файл .dt) и загрузкой в новую базу на PostgreSQL. Версия и сборка PostgreSQL должны входить в число поддерживаемых вашей версией платформы, это сверяем с документацией 1С на обследовании.
Работа вокруг выгрузки — всё остальное: внешние обработки и обмены, которые читают базу SQL-запросами, регламентные задания, резервное копирование, настройки кластера серверов и отчёты внешних систем. Они в выгрузку не попадают и переносятся отдельно. Про обмены см. интеграцию 1С.
Размер базы определяет длительность первой загрузки, а окно переключения определяет объём изменений за время переноса. Выбираем вариант на обследовании и проверяем на репетиции.
Цены — по тарифам. Обследование вычитается из следующего этапа. Остановиться можно после любой ступени: всё сделанное остаётся у вас по акту.
Инвентаризация объектов, потребителей и нагрузки, отчёт о совместимости, оценка объёма переписывания и вилка бюджета. 2–3 недели.
То же плюс задания SQL Server Agent, пакеты SSIS, отчёты SSRS, связанные серверы, обмены между системами, схема потребителей. 3–4 недели.
Одна база или схема на тестовом контуре: схема, данные, сверка, нагрузочный прогон на выборке запросов. 2–8 недель.
Много логики: переписывание процедур и триггеров, доработка приложений при наличии исходников, перенос отчётов и заданий, нагрузка. 2–3 месяца.
Репетиция переключения и отката, переключение, опытная эксплуатация, инструкции администраторам. Идёт этапами со своей приёмкой, от 3 месяцев.
Мониторинг, настройка планов запросов и автоочистки, обращения, разбор инцидентов. Три пакета по часам.
Схемы, таблицы, представления, процедуры, функции, триггеры, задания, пакеты, отчёты, связанные серверы, логины и права. Параллельно ищем потребителей и снимаем профиль нагрузки, включая закрытие месяца: без базового замера нечем доказать, что стало не хуже.
Типы, ключи, индексы, ограничения. Кодировку, правила сортировки и правило именования решаем до создания базы: после создания их не поменять без пересоздания.
Тестовая загрузка на тестовый контур, сверка числа строк и контрольных сумм по таблицам, синхронизация последовательностей, сбор статистики после загрузки.
Процедуры, функции и триггеры читаем и переписываем. Автоматическая конвертация даёт черновик, а не результат; каждый объект получает проверку входов и выходов.
Ключевые отчёты запускаются на одинаковых данных в старой и новой системе, результаты сравниваются построчно с явной сортировкой. Расхождения объясняются письменно.
Реальный профиль запросов на тестовом контуре, разбор планов, индексы и параметры. Сравнение с базовым замером, снятым на шаге 1.
По регламенту: остановка или догон по выбранному варианту, финальная сверка, смена подключений, дежурство в первые дни в рабочее время.
Условие запуска и порядок возврата прописаны и отрепетированы до окна. Старая база остаётся рабочей до конца параллельного периода.
COPY, pg_stat_statements, EXPLAINКонвертер переносит синтаксис, но не смысл: порядок сортировки, NULL, границы дат. Каждую сконвертированную процедуру читаем руками, это заложено в срок.
Планировщик PostgreSQL строит планы иначе, часть запросов может стать медленнее. Без базового замера результат нечем доказать.
Задания SQL Server Agent, пакеты SSIS и отчёты SSRS прямых аналогов не имеют. Это отдельная строка трудоёмкости, и в оценках её чаще всего пропускают.
Если старая база не остаётся рабочей, первая же проблема превращается в аварию. Откат репетируется заранее, а не описывается на бумаге.
Постраничная выборка, NULL, регистр, даты, последовательности, блокировки и проверка после переноса.
Типовая задача с названным сроком: реестр зависимостей, протокол сверки, отрепетированный откат.
Те же шаги для Oracle: инвентаризация, оценка совместимости, нагрузка, переключение.
Короткий созвон: какая версия SQL Server, сколько в базе логики, кто в неё ходит и к какому сроку нужно уйти.
Точная цена называется только за обследование: 200 000 ₽ для одной базы и одного-двух приложений, 350 000 ₽ для нескольких систем. Дальше вилка: лёгкий пилот 150 000–400 000 ₽, тяжёлый 400 000–1 200 000 ₽, вывод в продуктив от 1 500 000 ₽ этапами по 300 000–700 000 ₽. Обследование вычитается из следующего этапа.
Срок называем после обследования: он зависит не от объёма данных, а от объёма логики в процедурах и числа приложений. По тарифам лёгкий пилот занимает 2–8 недель, тяжёлый 2–3 месяца, вывод в продуктив идёт от трёх месяцев.
Схему и данные в основном можно, процедурный код только частично. Конвертер даёт черновик T-SQL, переписанный на PL/pgSQL, но смысл он не проверяет: порядок сортировки, NULL, поведение транзакций. Поэтому каждый объект читаем и проверяем на тестовых данных.
Остановка записи на окно или догон изменений: вариант выбираем на обследовании. Нулевой простой не обещаем. Длительность окна определяется на репетиции переключения на копии боевых данных, а не оценкой.
Платформа 1С работает с PostgreSQL, и информационная база переносится её средствами: выгрузкой и загрузкой. Версию и сборку PostgreSQL сверяем с документацией вашей версии платформы. Внешние обмены и задания вокруг базы переносим отдельно.
Прямых аналогов нет. Задания переносятся на pg_cron или планировщик ОС, пакеты SSIS заменяются скриптами или другим средством загрузки, отчёты SSRS переносятся в другое средство отчётности. Объём видим на обследовании и закладываем отдельной строкой.
Приложение без исходников, которое работает с базой через драйвер SQL Server, на PostgreSQL без доработки не переключить. Такие места находим на обследовании, снимая запросы с работающей системы, и предлагаем варианты: восстановить исходники, заменить приложение или оставить эту базу на старой платформе до замены.
Обычную или сертифицированную: определяют ваши требования к реестру, поддержке и контуру. Технически перенос от выбора почти не меняется, но версию сверяем с приложениями и платформой 1С, если она есть.
Да. Обследование заканчивается документом: карта объектов и потребителей, отчёт о совместимости, оценка и вилка бюджета. С ним можно идти в тендер и сравнивать предложения, в том числе не наши.
Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.