Автоматическая сверка данных между 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 и постепенно улучшайте его.