База остается в 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?