Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 2, 2018 21:13:44

Ace
Зарегистрирован: 2012-09-05
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

ms sql 2008 r2 backup - пропадает результирующий файл

Добрый !

Писал процедуру копирования. Сам процесс проходил успешно, кроме финала.
Вижу, что файл создается, но после завершения скрипта - сразу пропадает. В мусорке нет, на диске нет.

Извините, вопрос почти сразу закрылся решением (см. ниже)
Может, пригодится кому-нить

 # -*- coding: utf-8 -*-
import pyodbc
import time
db_conn=pyodbc.connect('DRIVER={SQL Server};SERVER=192.168.0.3;DATABASE=base_name;UID=username;PWD=password',autocommit=True)
db_cursor=db_conn.cursor()
db_cursor.execute(r"BACKUP DATABASE database_name TO DISK='d:\sql\backup\123.bak' ")
# !!!
time.sleep(1)  
db_cursor.close()
db_conn.close()


P.S. Намек на решение оказался тут же на форуме
Намек на этом же сайте…
почему-то без костыля в виде паузы не работает

Отредактировано Ace (Ноя. 3, 2018 06:30:58)

Офлайн

#2 Ноя. 3, 2018 00:15:52

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9715
Репутация: +  842  -
Профиль   Отправить e-mail  

ms sql 2008 r2 backup - пропадает результирующий файл

Ace
почему-то без костыля в виде паузы не работает
Вообще, коммит принято делать
https://github.com/mkleehammer/pyodbc/wiki/Getting-started#updating-and-deleting



Офлайн

#3 Ноя. 3, 2018 06:30:23

Ace
Зарегистрирован: 2012-09-05
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

ms sql 2008 r2 backup - пропадает результирующий файл

Пробовал в различных комбинациях. Представленный код минимально рабочий.
Если поставить коммит , но убрать паузу - не работает. Т.е симптом именно как в топике - файл создается, а после выполнения скрипта удаляется.

Отредактировано Ace (Ноя. 3, 2018 06:32:43)

Офлайн

#4 Ноя. 5, 2018 23:02:42

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2576
Репутация: +  58  -
Профиль   Отправить e-mail  

ms sql 2008 r2 backup - пропадает результирующий файл

ну знаете.
У вас код немного марсианский тоже между прочим.
вы либо открывайте файл питоном через
with open(…) as f:

И заполняйте его селектом.
Или выполняйте бекап через subprocess
а то как то белое с квадратным смешано.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#5 Ноя. 9, 2018 20:01:18

Ace
Зарегистрирован: 2012-09-05
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

ms sql 2008 r2 backup - пропадает результирующий файл

Ну почему марсианский.
Эта просто выполнение средствами питона типовых команд MS SQL server.
При их выполнении из MS SQL Studio не надо никакого колдовства - просто выполняется и сохраняет файл куда указано.

Офлайн

#6 Ноя. 9, 2018 20:08:04

Ace
Зарегистрирован: 2012-09-05
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

ms sql 2008 r2 backup - пропадает результирующий файл

py.user.next
Ну вообще-то BACKUP это не DML и не DDL, т.к. команда не определяет структуру данных и не вмешивается в них. Поэтому не вижу в коммите. Тем более, в строке соединения включен автокомит.
Без него команда не выполняется в принципе.

Офлайн

#7 Ноя. 10, 2018 00:31:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9715
Репутация: +  842  -
Профиль   Отправить e-mail  

ms sql 2008 r2 backup - пропадает результирующий файл

Ace
Поэтому не вижу в коммите.
Сами модули питона могут быть неправильными, так как они часто сторонние, поэтому обычная логика здесь не применима.

Сделай маленькую базу и примени к ней свой скрипт.



Офлайн

#8 Ноя. 10, 2018 07:53:34

Ace
Зарегистрирован: 2012-09-05
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

ms sql 2008 r2 backup - пропадает результирующий файл

Так я на боевой базе и пробую. с паузой работает, без пауз файл бэкапа пропадает.
Пробовал одним файлом бэкапить несколько баз, паузу стояла после всех команд бэкапа - сохранился только последний файл.
Правльно понимаю, вы предлагаете после самой команды бэкапа еще дать явную SQL COMMIT или курсоровский коммит-метод из питона ?

Офлайн

#9 Ноя. 10, 2018 08:15:07

Ace
Зарегистрирован: 2012-09-05
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

ms sql 2008 r2 backup - пропадает результирующий файл

Хорошо. Пытаемся провести ПФЭ. Всю обвязку писать не буду, только нужное

1.

 db_cursor.execute(r"BACKUP DATABASE tcsbase_empty TO DISK='d:\sql\backup\tcsbase26.bak';COMMIT;")
- файл бэкапа пропадает
2.
 db_cursor.execute(r"BACKUP DATABASE tcsbase_empty TO DISK='d:\sql\backup\tcsbase26.bak';COMMIT;")
db_conn.commit()
- файл бэкапа пропадает
3.
 db_cursor.execute(r"BACKUP DATABASE tcsbase_empty TO DISK='d:\sql\backup\tcsbase26.bak'")
db_conn.commit()
- файл бэкапа пропадает
4.
 db_cursor.execute(r"BACKUP DATABASE tcsbase_empty TO DISK='d:\sql\backup\tcsbase26.bak'")
db_cursor.commit()
- файл бэкапа пропадает
5.
 db_cursor.execute(r"BEGIN TRANSACTION")
db_cursor.execute(r"BACKUP DATABASE tcsbase_empty TO DISK='d:\sql\backup\tcsbase26.bak'")
db_cursor.execute(r"COMMIT TRANSACTION")
- ошибка “невозможно выполнить операцию резервного копирования или восстановления в пределах транзакции”, что логично. Если есть несколько одновременных активных транзакций - шут его знает, что попадет в бэкап

Т.е пока помогает только пауза. Или я делаю нечто совсем незаконное ?

P.S.
- MS SQL 2008 R2 10.50.6220
- python 3.6.3
- pyodbc 4.0.24

Отредактировано Ace (Ноя. 10, 2018 08:28:35)

Офлайн

#10 Ноя. 10, 2018 08:53:48

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9715
Репутация: +  842  -
Профиль   Отправить e-mail  

ms sql 2008 r2 backup - пропадает результирующий файл

Ace
Так я на боевой базе и пробую. с паузой работает, без пауз файл бэкапа пропадает.
А я предлагаю сделать маленькую базу и проверить этот скрипт на ней, убрав sleep() из него. Потому что пропадает файл не просто так, а по какой-то причине. Вот её и надо определить, а не действовать наугад.

Всё, давай, без коммитов свой первый скрипт с закомментированным sleep() применяешь к маленькой базе.

Я думаю, файл пропадает потому, что скрипт не успевает закончить операцию и его завершение приводит к её отмене. Таким образом оно думает, что файл этот не нужен, раз он не дописан.



Отредактировано py.user.next (Ноя. 10, 2018 09:00:31)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version