База остается в RESTORING после RESTORE DATABASE из Airflow (Через pyodbc) , хотя в SSMS тот же запрос работает

Пробую автоматизировать восстановление баз данных SQL Server с помощью Apache Airflow (2.9.3). Если выполнить тот же RESTORE DATABASE ... вручную в SSMS, база восстанавливается за ~2 минуты и становится ONLINE. Но если запустить этот же запрос из Airflow, таск завершается мгновенно, без ошибок, а база так и остаётся в состоянии RESTORING.

Подключение происходит к тому же серверу, что и в SSMS, пользователь, через которого происходит вызов процедуры в Airflow, имеет роль sysadmin.

Упрощенный код:

import pyodbc

def restore_database():
    conn = pyodbc.connect(
        "DRIVER={ODBC Driver 17 for SQL Server};"
        "SERVER=0.0.0.0,0000;"
        "DATABASE=master;"
        "UID=robot;PWD=***;"
        "TrustServerCertificate=yes;",
        autocommit=True,
    )
    sql = """
    RESTORE DATABASE [TestBase]
      FROM DISK = N'D:\\Bases\\TestBase-20-10-2025.bak'
      WITH REPLACE, STATS = 5,
           MOVE N'TestBase'     TO N'D:\\TestBase\\TestBase.mdf',
           MOVE N'TestBase_log' TO N'D:\\TestBase\\TTestBase_log.ldf';
    """
    cur = conn.cursor()
    cur.execute(sql)
    cur.close()
    conn.close()

Airflow показывает успешное выполнение за секунду, но в SQL Server база остается в RESTORING, а в msdb..restorehistory запись о восстановлении не появляется.

  • Этот же запрос в SSMS выполняется корректно (пользователь другой, но тоже роль sysadmin)
  • Был также вариант через SQLExecuteQueryOperator, но все то же самое
  • Пути к .bak корректные
  • В логах SQL Server нет ни ошибок, ни активностей

Почему так может происходить, что RESTORE DATABASE мгновенно завершается и ничего не делает? Какие есть особенности при выполнении запроса через pyodbc?


Ответы (0 шт):