Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Копирование файлов по дате  [new]
Alexander JA
Member

Откуда:
Сообщений: 6
Доброго времени суток.
Не являюсь программистом, простой эникейщик в мелкой конторе.
Встала необходимость резервного копирования sql баз (sql server 2008).
Джобы сделал, всё бекапится отлично. Копируются в тех же джобах командами на cmd: robocopy, xcopy в другую директори. Но.
Надо, чтобы копировались эти копии не с помощью cmd, а с помощью скрипта t-sql.
Я даже простой запрос не могу своять... Начальство требует, чтобы именно так было сделано.
Т.е. какая стоит задача.
Если в папке допустим C:\backup\bk\day\full - полные копии. Надо копировать недельные копии их в папку C:\backup\bk\week и хранить их там 4 недели, и месячные копии, 28 числа каждого месяца в C:\backup\bk\month и хранить их там год.

Я как сделал на cmd.
1 -
rem скопируются файлы за последние 7 дней, запуск скрипта по расписанию по понедельникам
robocopy C:\backup\bk\day\full C:\backup\bk\week /maxage:7 /minage:1
set/A errlev="%ERRORLEVEL% & 24"
exit/B %errlev%

rem отдельным шагом удаление
FORFILES /P C:\backup\bk\week /D -28 /C "cmd /c del @path"

2-
rem копировать файлы по маске на 28 дату каждого месяца
copy C:\backup\bk\day\test_2014**28.* C:\backup\bk\month\

rem удалять копии старше года
FORFILES /P C:\backup\bk\month /D -356 /C "cmd /c del @path"

========================
Но как это вообразить на t-sql понятия не имею :(
Прошу помощи. Помогите, пожалуйста.
Вроде элементарщина... с sql практически не имел дела никогда...
13 фев 14, 17:04    [15563956]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37198
exec dbo.xp_cmdshell '
obocopy C:\backup\bk\day\full C:\backup\bk\week /maxage:7 /minage:1
set/A errlev="%ERRORLEVEL% & 24"
exit/B %errlev%

rem отдельным шагом удаление
FORFILES /P C:\backup\bk\week /D -28 /C "cmd /c del @path"

2-
rem копировать файлы по маске на 28 дату каждого месяца
copy C:\backup\bk\day\test_2014**28.* C:\backup\bk\month\

rem удалять копии старше года
FORFILES /P C:\backup\bk\month /D -356 /C "cmd /c del @path"
'
13 фев 14, 17:05    [15563962]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31816
Alexander JA
Но как это вообразить на t-sql понятия не имею :(
В t-sql нет средств копирования файлов.

Но можно запускать команды ОС (в том числе cmd файлы), используя xp_cmdshell
13 фев 14, 17:06    [15563967]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
Alexander JA
Member

Откуда:
Сообщений: 6
мм.м... ну хорошо....
Нет возможности копировать.. бог с ней... это допустим оставлю просто в отдельных шагах джоба...
Но а если удаление... удаление с проверкой по дате можно сделать?
мм... как там её... начальник говорил про функцию getdate... :(
13 фев 14, 17:14    [15563999]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37198
Alexander JA
мм.м... ну хорошо....
Нет возможности копировать.. бог с ней... это допустим оставлю просто в отдельных шагах джоба...
Но а если удаление... удаление с проверкой по дате можно сделать?
мм... как там её... начальник говорил про функцию getdate... :(
T-sql -- это язык для манипуляции данных, а не файлов.

Сообщение было отредактировано: 13 фев 14, 17:36
13 фев 14, 17:34    [15564118]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31816
Alexander JA
Но а если удаление... удаление с проверкой по дате можно сделать?

alexeyvg
можно запускать команды ОС (в том числе cmd файлы), используя xp_cmdshell
13 фев 14, 17:47    [15564205]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
aleks2
Guest
Гавриленко Сергей Алексеевич
Alexander JA
мм.м... ну хорошо....
Нет возможности копировать.. бог с ней... это допустим оставлю просто в отдельных шагах джоба...
Но а если удаление... удаление с проверкой по дате можно сделать?
мм... как там её... начальник говорил про функцию getdate... :(
T-sql -- это язык для манипуляции данных, а не файлов.

Ну скажите ж ему секретное слово: Maintenance Plans
13 фев 14, 18:16    [15564370]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
alex564657498765453
Member

Откуда:
Сообщений: 1925
интересная у вас контора, а ещо интересней начальник.
Который экономя в мелкой конторе, нанимает эникейщика на мелкую задачу, которую может сделать сам.


ЗЫ
как по мне подход не верен.

правильно сказали, манипулировать данными в базе и файлами в файловой системе, это как бы ....как рулевое управление для парусника и для автомобиля. можно в теории, одно использовать вместо другого, но попахивает идиотизмом.

ЗЫЗЫ
догадываюсь, твой начальник хочет единый центр управления полётами.
(но для этого не обязательно заправлять вертолёт ракетным топливом, ну или шатл дизелем)


ЕЦУП = виндоус, тогда из шела зупаускаешь скл- код в базе периодически
ЕЦУП = база, то из базы xpcmd - запуск команд шела.
13 фев 14, 19:45    [15564777]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
Alexander JA
Member

Откуда:
Сообщений: 6
Maintenance Plans не доступны мне :(

P.S. Можно как - то "втихаря" админские права на sql получить?

SQL Server 2008
13 фев 14, 20:13    [15564846]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Alexander JA,

вам же объяснили - есть процедура xpcmdshell - она вызывает виндовый cmd и передает ей ваши команды, которые вы в 1 параметре указали.

можете написать батник и запускать его с пом xpcmdshell

exec xp_cmdshell 'C:\123\1.bat'


в этот батник можно напихать всю логику.
если сдатами вам проще работать на t-sql - то генерите текст cmd и выполняйте его.

запуск по расписанию - JOB.
14 фев 14, 09:02    [15566001]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
Alexander JA
Member

Откуда:
Сообщений: 6
Т.е. на t-sql нельзя сделать проверку по дате... и если, допустим, условие выполнилось, то запускать cmd скрипт?
14 фев 14, 10:21    [15566300]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander JA
на t-sql нельзя сделать проверку по дате... и если, допустим, условие выполнилось, то запускать cmd скрипт?

t-sql - это язык для работы с данными.
Как запустить внешний скрипт вам уже несколько раз показали.
14 фев 14, 10:24    [15566314]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
Alexander JA
Member

Откуда:
Сообщений: 6
Хорошо.
Фиг бы с t-sql.
На простом SQL это тоже нельзя сделать?
14 фев 14, 10:40    [15566397]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander JA
На простом SQL это тоже нельзя сделать?

Если создадите свой SQL Server, то можно
14 фев 14, 10:41    [15566403]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
Alexander JA
Member

Откуда:
Сообщений: 6
Ладно понял.
Спасибо большое за ответы.
Премного благодарен.
14 фев 14, 10:48    [15566434]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
Владимир Лазурко
Member

Откуда: Украина
Сообщений: 8096
Alexander JA
Но а если удаление... удаление с проверкой по дате можно сделать?
exec
dbo.xp_cmdshell 'FORFILES /D -20 /M *.rar /P G:\Backup\ /C "cmd /c del @path"'
/D -20 - глубина проверки даты (по умолчанию от текущей), здесь - получить файлы старше 20 дней
/M *.rar - маска поиска файлов. По умолчанию в текущей папке
/P G:\Backup\ - папка, в которой происходит поиск файлов
4 авг 14, 12:38    [16395331]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
Владимир Лазурко
Member

Откуда: Украина
Сообщений: 8096
exec dbo.xp_cmdshell 'FORFILES /D -20 /M *.rar /P G:\Backup\ /C "cmd /c del @path"'
Поправил
4 авг 14, 12:46    [16395372]     Ответить | Цитировать Сообщить модератору
 Re: Копирование файлов по дате  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8485
xp_cmdshell требует весьма некислого разрешения CONTROL SERVER, которых у автора нет, судя по всему.
Кроме того, не стоит злоупотреблять неспециализированными возможностями...
4 авг 14, 14:00    [16395849]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить