Здравствуйте, Задача получить от сервера 2014 версии список баз со следующими параметрами: общий объем базы, размер лога, размер data файла, размер последнего бэкапа, естественно, с датой временем. Все это хозяйство, необходимо выложит csv файлом в определенное место. Что у меня получилось на данный момент: Код | Declare @dbn VARCHAR(80) -- результат первого курсора список имен баз Declare @bsdate VARCHAR(80) -- дата+ время старта Declare @dbsname VARCHAR(80) --имя базы Declare @bfdate VARCHAR(80) -- дата + время финиша Declare @dtotalsize VARCHAR(80) -- суммарный объем файлов базы Declare @ddatasize VARCHAR(80) -- размер дата файла Declare @dlogsize VARCHAR(80) -- размер лога Declare @bfullsize VARCHAR(80) --размер бэкапа
--курсор для выборки имен базы данных начало Declare dbh_cursor CURSOR LOCAL FOR SELECT name FROM sys.databases WHERE state = 0 and database_id>4 open dbh_cursor fetch next from dbh_cursor into @dbn --курсор для выборки имен базы данных конец WHILE @@FETCH_STATUS = 0 BEGIN print @dbn fetch next from dbh_cursor into @dbn END -- работает список выдает
Declare dbsize_cursor CURSOR SCROLL FOR SELECT bs.backup_start_date as [backup_start_date], bs.database_name, bs.backup_finish_date, sum(bf.file_size/1024/1024) [DB Size Total (MB)], (SELECT sum(bf2.file_size) FROM msdb..backupfile bf2 WHERE bf2.backup_set_id=bs.backup_set_id AND bf2.file_type='D')/1024/1024 [Data File (MB)], (SELECT sum(bf2.file_size) FROM msdb..backupfile bf2 WHERE bf2.backup_set_id=bs.backup_set_id AND bf2.file_type='L')/1024/1024 [Log File (MB)], bs.backup_size/1024/1024 [Backup Size (MB)] FROM msdb..backupset bs JOIN msdb..backupfile bf ON bs.backup_set_id=bf.backup_set_id WHERE bs.database_name = @dbn and bs.type='D' GROUP BY bs.backup_start_date, bs.backup_set_id, bs.server_name, bs.database_name, bs.recovery_model, bs.backup_size, bs.backup_finish_date, bs.name, bs.user_name order by 2,bs.backup_finish_date DESC
open dbsize_cursor fetch next from dbsize_cursor into @bsdate,@dbsname, @bfdate, @dtotalsize, @ddatasize, @dlogsize, @bfullsize IF @@FETCH_STATUS =0 Print 'Нет данных' WHILE @@FETCH_STATUS = 0 BEGIN print @bsdate +';'+ @dbsname+';'+ @bfdate+';'+ @dtotalsize+';'+ @ddatasize+';'+ @dlogsize+';'+@bfullsize+';' fetch next from dbsize_cursor into @bsdate,@dbsname, @bfdate, @dtotalsize, @ddatasize, @dlogsize, @bfullsize END -- Здесь выдается список только для последней базы в списке close dbsize_cursor deallocate dbsize_cursor close deallocate dbh_cursor
|
Проблема возникла в вопросах: как отправить результат в файл и вернуть указатель курсора в начало списка баз при выборке данных во втором курсоре.
|