Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Скрипт удаления устаревших записей из базы.  [new]
Антон_79
Member

Откуда:
Сообщений: 11
Glory
Антон_79
По словам AxuliON "он большего бреда в жизни не видел" - видимо, крутой спец. Но, что неправильно, не говорит. ))

Ну так спросите у него


Так ж спрашивал ))
5 окт 11, 15:32    [11389132]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Антон_79
Member

Откуда:
Сообщений: 11
И еще вопрос - если в скрипте

ALTER PROCEDURE dbo._Старое_Удаление_данных_по_трафику
AS

declare @d datetime, @rc int
set @d=dbo.[isa2006 Old date]()

set nocount ON
set rowcount 1000

set @rc=1
while @rc>0 begin
while @@trancount>0 commit
waitfor delay '00:00:01'
DELETE dbo.[FW] WHERE (logDate < @d)
set @rc=@@rowcount
end

while @@trancount>0 commit

RETURN

Заменить set @d=dbo.[isa2006 Old date]() на set @d=cast(convert(varchar(20),getdate(),104) as datetime)-28;
для удаления записей старше месяца - будет ли работать ?
5 окт 11, 15:37    [11389199]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Антон_79
Заменить set @d=dbo.[isa2006 Old date]() на set @d=cast(convert(varchar(20),getdate(),104) as datetime)-28;
для удаления записей старше месяца - будет ли работать ?

Ну так посмотрите, какая дата у вас получилась в переменной @d
Что вам мешает ?
5 окт 11, 15:38    [11389215]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
iljy
Member

Откуда:
Сообщений: 8711
Антон_79,

вы спортивным хождением по граблям решили заняться? Работать с датой, как со строкой, да еще и формат не указывать, использовать вместо документированных функций работы с датой недокументированные арифметические операции, у вас что, жизнь скучная?
5 окт 11, 15:41    [11389244]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Антон_79
Member

Откуда:
Сообщений: 11
iljy
Антон_79,

вы спортивным хождением по граблям решили заняться? Работать с датой, как со строкой, да еще и формат не указывать, использовать вместо документированных функций работы с датой недокументированные арифметические операции, у вас что, жизнь скучная?


) Это подсказали наши Оракловые программеры. Видимо, они так видят..
5 окт 11, 15:50    [11389350]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Антон_79
) Это подсказали наши Оракловые программеры. Видимо, они так видят..

Для изменения даты в MSSQL есть специальная функция DATEADD()
С ее помощью и надо вычислять смещения
5 окт 11, 15:52    [11389363]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
komrad
Member

Откуда:
Сообщений: 5252
Антон_79
Заменить set @d=dbo.[isa2006 Old date]() на set @d=cast(convert(varchar(20),getdate(),104) as datetime)-28;
для удаления записей старше месяца - будет ли работать ?


dateadd(month,-1,getdate())


dateadd
5 окт 11, 15:56    [11389395]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Dima T
Member

Откуда:
Сообщений: 15017
Нельзя использовать getdate() для такого удаления. В один прекрасный день админ зачем-нибудь текущую дату на компе вперед сдвинет и твоей базе придет полярная лисичка, со всеми вытекающими.

Бери минимальное от текущей даты и максимального значения даты в базе. Еще неплохо ограничить минимально возможное количество записей.
5 окт 11, 16:13    [11389525]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37068
Dima T
Нельзя использовать getdate() для такого удаления. В один прекрасный день админ зачем-нибудь текущую дату на компе вперед сдвинет и твоей базе придет полярная лисичка, со всеми вытекающими.
Угу. Но во всех остальных местах пусть getdate() остается.
5 окт 11, 16:16    [11389548]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
baracs
Member

Откуда: Москва
Сообщений: 7204
Dima T
Нельзя использовать getdate() для такого удаления. В один прекрасный день админ зачем-нибудь текущую дату на компе вперед сдвинет и твоей базе придет полярная лисичка, со всеми вытекающими.
Паранойя?
Dima T
Бери минимальное от текущей даты и максимального значения даты в базе.
Откуда вы знаете, какое у него в базе максимальное значение даты?
Dima T
Еще неплохо ограничить минимально возможное количество записей.
Как его узнать, не подскажите?
5 окт 11, 16:19    [11389580]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
HuppeR
Member

Откуда:
Сообщений: 23
Так где true?
5 окт 11, 16:51    [11389911]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Glory
Member

Откуда:
Сообщений: 104760
HuppeR
Так где true?

В чем сила, брат ?
5 окт 11, 16:53    [11389940]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
iljy
Member

Откуда:
Сообщений: 8711
Антон_79
iljy
Антон_79,

вы спортивным хождением по граблям решили заняться? Работать с датой, как со строкой, да еще и формат не указывать, использовать вместо документированных функций работы с датой недокументированные арифметические операции, у вас что, жизнь скучная?


) Это подсказали наши Оракловые программеры. Видимо, они так видят..

Ага, мы таких "програмеров" тоже видали. Гвоздь им в голову забейте.
5 окт 11, 17:27    [11390262]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
aleks2
Guest
kDnZP
кстати, я конечно не помню о поведении внутри процедур, но всеж-таки лучше перестраховаться и перед выходом прописать:

set rowcount 0

чтобы не было мучительно больно.


1. Хе-хе?
USE tempdb
go
create procedure setrc
as
set rowcount 1000
dbcc useroptions
return
go
dbcc useroptions
exec setrc
dbcc useroptions
go

2. Нет никакой нужды в set rowcount 1000
Можна DELETE top(1000) ... написать.

3. Это просто процедура ишо эпохи MS SQL 2000 и DELETE top(@n) было недоступно, а set rowcount @n работало.
5 окт 11, 19:20    [11391056]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
aleks2, ну оно конечно правильно, что проверить поведение внутри процедуры надобно было))). Просто я в ветку заглянул на пару минут, в момент наличия свободного времени, вот и отписался слегка о потенциальных граблях. По скрипту подумал, что речь идет о 2000, какой там сервер у ТС не глянул.
5 окт 11, 19:43    [11391111]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
HuppeR
Member

Откуда:
Сообщений: 23
Товарищи!
Не нашел ответа на вопрос.
Job состоит из двух шагов:
1.
delete from WebProxyLog where logTime<DATEADD(week,-6,getdate());
Проходит ОК, но база не уменьшается.
2.
delete from FirewallLog where logTime<DATEADD(week,-6,getdate());
Так же них, пишет в логах
Date 13.08.2012 15:47:48
Log SQL Server (Current - 13.08.2012 15:47:00)

Source spid56

Message
The transaction log for database 'ISALogs' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases

Места на диске меньше метра. Но даже при свободном месте вылетала ошибка. Такое чувство что где-то пропущен символ... или какая то простая опечатка.
Хелп плиз.
13 авг 12, 16:14    [13004876]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2995
HuppeR
Message
The transaction log for database 'ISALogs' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases

Места на диске меньше метра. Но даже при свободном месте вылетала ошибка. Такое чувство что где-то пропущен символ... или какая то простая опечатка.
Хелп плиз.


если сервер говорит, что места нет, значит нет
Вы оцените кол-во удаляемых записей и прикинте, хватит свободного места, чтобы запихнуть их в лог или нет

удаляйте порциями
13 авг 12, 16:47    [13005122]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
HuppeR
Member

Откуда:
Сообщений: 23
С одним разобрался.
Да тупо не было места.
Теперь не понятно по чему растет файл *.ldf но не уменьшается *.mdf?
13 авг 12, 16:48    [13005133]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37068
HuppeR
Теперь не понятно по чему растет файл *.ldf но не уменьшается *.mdf?
Потому что для уменьшения размеров файлов есть специальная команда dbcc shrinkfile.
13 авг 12, 16:49    [13005142]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
HuppeR
Member

Откуда:
Сообщений: 23
Гавриленко Сергей Алексеевич,

Подскажите скрипт удаления данных старше допустим 6 недель?

Я был уверен то что наши скрипты удаляют данные, а не переносят.
13 авг 12, 17:27    [13005378]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37068
HuppeR
Гавриленко Сергей Алексеевич,

Подскажите скрипт удаления данных старше допустим 6 недель?

Я был уверен то что наши скрипты удаляют данные, а не переносят.
И куда по вашему переносит данные команда delete? O_o
13 авг 12, 17:30    [13005398]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
HuppeR
Member

Откуда:
Сообщений: 23
Гавриленко Сергей Алексеевич,

По моему DELETE это удалить. К сожаления Я 0 в SQL и как трактуются команды я не знаю.
Был скрипт который по идее должен удалять данные из базы. А получалось так что он переносил данные в *.ldf файл не уменьшая .mdf .
Смысл?
13 авг 12, 17:45    [13005506]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Glory
Member

Откуда:
Сообщений: 104760
HuppeR
По моему DELETE это удалить.

Удалить не значит уничтожить.
Вы этих данных нигде не видите. Поэтому для вас они удалены.
И не вкладывайте в синтаксическую фразу DELETE больше действий, чем происходит на самом деле
13 авг 12, 17:54    [13005568]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37068
HuppeR
Гавриленко Сергей Алексеевич,

По моему DELETE это удалить. К сожаления Я 0 в SQL и как трактуются команды я не знаю.
Был скрипт который по идее должен удалять данные из базы. А получалось так что он переносил данные в *.ldf файл не уменьшая .mdf .
Смысл?
В ldf-файле нет данных.
13 авг 12, 17:55    [13005576]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
HuppeR
Member

Откуда:
Сообщений: 23
Мужики тогда покажите как удалить из базы нафиг данные старше 6 недель?
14 авг 12, 12:10    [13008206]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить