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

Откуда:
Сообщений: 6
Добрый день!
Подскажите, как можно с помощью скриптов T-sql, ну или CmdExec'a:
1) Получить имя самого последнего файла в папке?
2) Закинуть файл с этим именем на ftp?
Со вторым более менее понятно - в CmdExec есть команда "ftp". А вот над первым что-то я призадумался.
Нашел процедуру master.sys.xp_dirtree, однако она возвращает всё содержимое директории. Непонятно, как выбрать из результата этой процедуры последнюю запись.
10 авг 15, 10:16    [17997379]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы ms sql 2005 на ftp  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
k1ng_kong,

эти задачи к сиквелу не имеют никакого отношения и решаются другими средствами программирования.
10 авг 15, 11:35    [17997743]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы ms sql 2005 на ftp  [new]
k1ng_kong
Member

Откуда:
Сообщений: 6
Какими средствами?
10 авг 15, 11:57    [17997863]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы ms sql 2005 на ftp  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
k1ng_kong,

да хоть batch-скриптами.
можете выбирать что угодно
10 авг 15, 12:37    [17998160]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы ms sql 2005 на ftp  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
На VBS можно написать, например, используя FSO. Поставить задание в планировщик Windows.
10 авг 15, 12:49    [17998254]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы ms sql 2005 на ftp  [new]
k1ng_kong
Member

Откуда:
Сообщений: 6
Несмотря на то, что задача не имеет никакого отношения к sql, решается другими средствами, а я - безграмотный лох с 3 классами церковно-приходской школы, решение было найдено.
+

IF OBJECT_ID('tempdb..#DirectoryTree') is not null 
begin
drop table #DirectoryTree
end

CREATE TABLE #DirectoryTree ( 

       id int IDENTITY(1,1) 

      ,subdirectory nvarchar(512)

      ,depth int

      ,isfile bit);

INSERT #DirectoryTree (subdirectory,depth,isfile)

EXEC master.sys.xp_dirtree 'E:\Backup\utm',1,1;

SELECT * FROM #DirectoryTree 

WHERE isfile = 1 AND RIGHT(subdirectory,4) = '.rar' 

ORDER BY id DESC; 

GO

DECLARE @fileName VARCHAR(512) 

DECLARE my_cur CURSOR FOR 
SELECT subdirectory FROM #DirectoryTree 
ORDER BY Subdirectory DESC
OPEN my_cur

FETCH NEXT FROM my_cur INTO @fileName 
CLOSE my_cur 
DEALLOCATE my_cur

DECLARE
@FTPServer varchar(128) ,
@FTPUser varchar(128) ,
@FTPPWD varchar(128) ,
@FTPPath varchar(128) ,
@FTPFileName varchar(128) ,
@SourcePath varchar(128) ,
@SourceFile varchar(128) ,
@workdir varchar(128),
@workfilename varchar(128),
@cmd varchar(1000)

SELECT @workfilename = ‘ftpcmd.txt’

SET @workdir = ‘C:\FTP\’
SET @FTPServer = ‘Server NameSET @FTPUser = ‘FTP User NameSET @FTPPWD = ‘FTP User PasswordSET @SourcePath = ‘E:\Backup\WorkBase’
SET @SourceFile = @FileName
SET @FTPPath = ‘incoming’
SET @FTPFileName = @FileName

SELECT @cmd = ‘echo ‘ +open+ @FTPServer + ‘ > ‘ + @workdir + @workfilename
EXEC master..xp_cmdshell @cmd
SELECT @cmd = ‘echo ‘ + @FTPUser + ‘>> ‘ + @workdir + @workfilename
EXEC master..xp_cmdshell @cmd
SELECT @cmd = ‘echo ‘ + @FTPPWD + ‘>> ‘ + @workdir + @workfilename
EXEC master..xp_cmdshell @cmd
SELECT @cmd = ‘echo ‘ + ‘put ‘ + @SourcePath + @SourceFile + ‘ ‘ + @FTPPath + @FTPFileName + ‘ >> ‘ + @workdir + @workfilename
EXEC master..xp_cmdshell @cmd
SELECT @cmd = ‘echo ‘ + ‘quit’ + ‘ >> ‘ + @workdir + @workfilename
EXEC master..xp_cmdshell @cmd
SELECT @cmd = ‘ftp -s:’ + @workdir + @workfilename
— Executing final step
EXEC master..xp_cmdshell @cmd
GO


Такие дела.

Сообщение было отредактировано: 10 авг 15, 19:08
10 авг 15, 14:49    [17999146]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы ms sql 2005 на ftp  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
k1ng_kong,

можете гордиться тем что изнасиловали заставили СУБД выполнять функционал который по факту должны выполнять несколько другие системы

+ p.s

за минусом синхронного выполнения можете встрять очень неплохо, когда ваш ftp сервер решит отвалиться или переливать данные несколько дольше чем вы предполагали

но это личное имхо, раз вас устраивает то мои вам поздравления
10 авг 15, 15:40    [17999581]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы ms sql 2005 на ftp  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31957
felix_ff
можете гордиться тем что изнасиловали заставили СУБД выполнять функционал который по факту должны выполнять несколько другие системы
Почему так мрачно?, чловеку сказали, "решаются другими средствами программирования", он и выполнил копирование утилитой ftp, всё правильно.
Сиквел сам не умеет бакапить на хранилище по ФТП протоколу, но скопировать бакап, удалить файлы, свалить всё в rar-архив, наотправлять писем можно другими программами, а программы эти можно запустить из того же джоба (или плана обслуживания), в котором делается бакап.
10 авг 15, 16:37    [17999955]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы ms sql 2005 на ftp  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31957
k1ng_kong
1) Получить имя самого последнего файла в папке?
2) Закинуть файл с этим именем на ftp?
Со вторым более менее понятно - в CmdExec есть команда "ftp". А вот над первым что-то я призадумался.
Ну, если запустить ftp несложно, то уж с dir разберётесь :-)
Команда dir вернёт список файлов. Вставляете результат в таблицу (insert ... exec xp_smdshell 'dir ...'), и дальше разбираете его, как вам нужно.
10 авг 15, 16:42    [17999986]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы ms sql 2005 на ftp  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
k1ng_kong,
автор
решение было найдено


Решение-то существует, и о, да, сиквел может и не такое, но это не значит, что решение оптимальное и инструмент использован по назначению. Если вы поставили задачу заставить сервер выполнять функции администратора windows, то Вы, конечно, справились. Не поймите превратно, но "пирог нужно есть вилкой" (с).
10 авг 15, 18:38    [18000709]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы ms sql 2005 на ftp  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4539
k1ng_kong, а попробуйте http://netdrive.net/ если работает - расскажите...
10 авг 15, 19:05    [18000825]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы ms sql 2005 на ftp  [new]
k1ng_kong
Member

Откуда:
Сообщений: 6
buser,
Дело в том, что сеть в последнее время наводнило большое количество адовых шифровальщиков и если такой вдруг проникнет на сервер, то скорее зашифрует к чертям и те бэкапы, которые на локальных дисках и те, которые на ftp, подключенных, как локальные. С меньшей долей вероятности он подключится к sql-серверу, найдет там job-ы, из них выдернет логин-пароль, подключится с этим логином-паролем и зашифрует файло. Поэтому тут только варик со скриптовой заливкой на ftp
11 авг 15, 08:59    [18001926]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы ms sql 2005 на ftp  [new]
o-o
Guest
какие ужасы, а что потом шифровальщик хочет, выкуп за бэкап?
11 авг 15, 11:24    [18002577]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы ms sql 2005 на ftp  [new]
человек_ниоткуда
Guest
k1ng_kong
buser,
С меньшей долей вероятности он подключится к sql-серверу, найдет там job-ы, из них выдернет логин-пароль, подключится с этим логином-паролем и зашифрует файло. Поэтому тут только варик со скриптовой заливкой на ftp

А что использование доменных аутентификаций это уже казуальщина?
11 авг 15, 18:58    [18005076]     Ответить | Цитировать Сообщить модератору
 Re: Бэкап базы ms sql 2005 на ftp  [new]
andrey odegov
Member

Откуда:
Сообщений: 473
можно использовать wmi-событие (постоянное) создания файла. для создания и обработки можно использовать powershell.
12 авг 15, 11:56    [18007185]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить