Автоматическая сверка данных между FireBird и MS SQL

    При ведении двух баз данных (FireBird и MS SQL) часто возникает проблема расхождения транзакций. Ручная проверка отнимает время и чревата ошибками. В этой статье мы разберём, как настроить автоматическое сравнение таблиц и отправку уведомлений в Telegram при несовпадении данных.

    Почему данные расходятся?

    Транзакции могут не записаться в одну из БД из-за сбоев сети, ошибок в коде приложения или конкурентного доступа. В результате касса фиксирует операцию в FireBird, но не в MS SQL, или наоборот. Чтобы избежать финансовых расхождений, нужна регулярная автоматическая верификация.

    Инструменты для автоматизации

    Для реализации задачи подойдут следующие подходы:

    • Скрипты на Python - универсальный язык с библиотеками для работы с обеими СУБД (pyodbc для MS SQL, firebirdsql для FireBird).
    • Планировщик задач - cron (Linux) или Task Scheduler (Windows) для ежедневного запуска.
    • Telegram Bot API - отправка сообщений через простой HTTP-запрос.

    Пошаговая инструкция для новичка

    1. Написание скрипта сравнения

    Создайте Python-скрипт, который подключается к обеим БД, выполняет одинаковые SELECT-запросы и сравнивает результаты. Пример фрагмента кода:

    import pyodbc, firebirdsql
    
    conn_mssql = pyodbc.connect('DRIVER={SQL Server};SERVER=...')
    conn_fire = firebirdsql.connect(host='...', database='...', user='...', password='...')
    
    # Получаем данные из обеих БД
    cursor_mssql = conn_mssql.cursor()
    cursor_mssql.execute('SELECT SUM(amount) FROM transactions WHERE date = ?', [today])
    sum_mssql = cursor_mssql.fetchone()[0]
    
    cursor_fire = conn_fire.cursor()
    cursor_fire.execute('SELECT SUM(amount) FROM transactions WHERE date = ?', [today])
    sum_fire = cursor_fire.fetchone()[0]
    
    if sum_mssql != sum_fire:
        send_telegram_alert('Обнаружено расхождение!')

    Если опыта мало, начните с простого сравнения итоговых сумм (например, дневного оборота), а затем усложняйте до построчной сверки.

    2. Интеграция с Telegram-ботом

    Создайте бота через @BotFather, получите токен. Добавьте в скрипт функцию отправки:

    import requests
    
    def send_telegram_alert(message):
        token = 'ВАШ_ТОКЕН'
        chat_id = 'ID_ЧАТА'
        url = f'https://api.telegram.org/bot{token}/sendMessage'
        requests.post(url, data={'chat_id': chat_id, 'text': message})

    3. Автоматический запуск

    На Windows используйте Планировщик задач: создайте задачу с ежедневным триггером, указав путь к Python и вашему скрипту. На Linux - добавьте строку в crontab:

    0 8 * * * /usr/bin/python3 /path/to/script.py

    Скрипт будет выполняться каждый день в 8:00.

    Альтернативные решения

    Если вы не хотите писать код, рассмотрите готовые инструменты:

    • DBeaver - позволяет экспортировать данные и сравнивать через внешние утилиты.
    • SQL Server Integration Services (SSIS) - мощный ETL-инструмент для сравнения и синхронизации.
    • Сторонние сервисы (например, Zapier) - но они требуют HTTP-доступа к БД, что небезопасно.

    Рекомендации по безопасности

    Храните учётные данные в переменных окружения, а не в коде. Используйте отдельного пользователя БД с правами только на чтение. Настройте логирование работы скрипта.

    Автоматизация сверки данных между FireBird и MS SQL - задача, решаемая за несколько часов даже начинающим разработчиком. Начните с простого скрипта на Python и постепенно улучшайте его.

    Часто задаваемые вопросы