Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 3 вперед Ctrl→ все |
HuppeR Member Откуда: Сообщений: 23 |
День добрый. Подскажите, нужен скрипт для регулярного удаления устаревших записей из sql базы. Например удалять все записи старше месяца. Или какими методами можно это реализовать. sql server 2005, база isa server. |
5 окт 11, 10:20 [11386054] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Написать DELETE c WHERE, который посчитает дату на месяц назад от текущей ? |
5 окт 11, 10:23 [11386072] Ответить | Цитировать Сообщить модератору |
Ken@t Member Откуда: 大地 Сообщений: 3264 |
HuppeR, УДАЛИТЬ ИЗ ТАБЛИЦЫ ГДЕ ПОЛЕ_ДАТА < ДАТУДОБАВИТЬ(M,0,ДАТАРАЗАНИЦА(M,0,ТЕКУЩАЯДАТА())-1) |
5 окт 11, 10:24 [11386074] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Ну запускай вот такую хрень JOB-ом.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 |
5 окт 11, 10:25 [11386083] Ответить | Цитировать Сообщить модератору |
Fell Member Откуда: Сообщений: 9 |
и видимо вызывать его из джоба |
5 окт 11, 10:25 [11386085] Ответить | Цитировать Сообщить модератору |
Антон_79 Member Откуда: Сообщений: 11 |
aleks2, Не могу разобраться, как модифицировать ваш скрипт, чтобы происходило удаление данных, например старше 4-х недель. И еще пара вопросов - соответственно нужен еще скрипт для регулярной очистки лога транзакций, так? И после удаления записей из базы ее нужно обязательно шринковать? А при каких процессах база данных будет залочена (т.е. в нее невозможно будет ничего записать) ? |
5 окт 11, 10:42 [11386207] Ответить | Цитировать Сообщить модератору |
Антон_79 Member Откуда: Сообщений: 11 |
Ребят, подскажите пожалуйста, если кто знает. |
||
5 окт 11, 11:13 [11386430] Ответить | Цитировать Сообщить модератору |
kDnZP Member [заблокирован] Откуда: ★[msg=16399436]★[msg=20850760] Сообщений: 11289 |
set @d=...тут прописать то что нужно не судьба? DATEADD функцию знаете? aleks2 вам дал пример скрипта, где удаление порциями по 1000 штук, лог при этом не сильно расти будет. Базу шринковать зачем? Она же опять вырастет. Ну разок еще можно (если у вас сейчас данных за пару лет), а когда скрипт в джоб засунете - однозначно не нужно. Более того, ISA насколько я помню чувствительна к случаям когда не может писать в таблицу и тупо отваливается. Посему и удаление и другие операции обслуживания лучше всего вынести на ночь и делать как можно реже/быстрее. |
||
5 окт 11, 11:14 [11386439] Ответить | Цитировать Сообщить модератору |
kDnZP Member [заблокирован] Откуда: ★[msg=16399436]★[msg=20850760] Сообщений: 11289 |
кстати, я конечно не помню о поведении внутри процедур, но всеж-таки лучше перестраховаться и перед выходом прописать:set rowcount 0 чтобы не было мучительно больно. |
5 окт 11, 11:16 [11386451] Ответить | Цитировать Сообщить модератору |
Антон_79 Member Откуда: Сообщений: 11 |
kDnZP, Большое спасибо за ответы!! Честно говоря, в SQl я не особо силен, если не затруднит, могли бы вы показать, как будет выглядеть итоговый скрипт в свете всего выше сказанного. |
5 окт 11, 11:54 [11386764] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37200 |
|
||
5 окт 11, 12:24 [11387028] Ответить | Цитировать Сообщить модератору |
Антон_79 Member Откуда: Сообщений: 11 |
Коллеги, ну это же очевидно - был бы под руками такой спец - вопросов бы не возникло. :) Просто возникла вот такая вот разовая задача довольно срочная. Т.е изучать всю теорию сейчас будет невозможно. Поэтому и прошу решений у тех кто знает, и кому не сложно поделиться. |
||||
5 окт 11, 12:37 [11387139] Ответить | Цитировать Сообщить модератору |
iljy Member Откуда: Сообщений: 8711 |
Антон_79, уважаемый, но это же очевидно! Адекватный человек не возмется за чистку чужой базы по фотографии. Если хотите, чтоб сделали за вас - идите на форум работа. |
5 окт 11, 12:39 [11387158] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Вы хотите чтобы вам написали готовый универсальный скрипт ? Который вы просто возьмете и запустите ? |
||
5 окт 11, 12:40 [11387168] Ответить | Цитировать Сообщить модератору |
Антон_79 Member Откуда: Сообщений: 11 |
Ну так исходная задача то достаточно распространенная и типовая. Наверняка же у кого-то что-то готовое уже есть, просто со своими цифрами. |
||||
5 окт 11, 12:46 [11387223] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Ну так вам и дали скрипт Осталось подставить в него свои параметры и объекты |
||
5 окт 11, 12:49 [11387242] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5601 |
Антон_79,ALTER PROCEDURE dbo._Старое_Удаление_данных_по_трафику AS declare @d datetime, @rc int set @d=DATEADD(week,-4,getdate()) 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 set rowcount 0 RETURN |
5 окт 11, 13:30 [11387686] Ответить | Цитировать Сообщить модератору |
Guest2011_10
Guest |
Исключительно из любопытства, позвольте спросить - зачем тут этоwhile @@trancount>0 commit |
5 окт 11, 13:36 [11387752] Ответить | Цитировать Сообщить модератору |
AxuliON Member Откуда: оттуда, и на лыжах Сообщений: 574 |
Наибольшего бреда в жизни не видел. Процедура просто убила. Антон! Я надеюсь Вы ЭТО для себя написали, а не на месте - где работаете?
|
||
5 окт 11, 14:17 [11388263] Ответить | Цитировать Сообщить модератору |
HuppeR Member Откуда: Сообщений: 23 |
Если присмотреться то скрипт скинул aleks2 У вас есть правильное решение? ) |
||||
5 окт 11, 14:26 [11388355] Ответить | Цитировать Сообщить модератору |
Антон_79 Member Откуда: Сообщений: 11 |
Коллега, так напишите как правильно, если знаете как. какая проблема? |
||||
5 окт 11, 14:32 [11388444] Ответить | Цитировать Сообщить модератору |
Антон_79 Member Откуда: Сообщений: 11 |
Знающие люди, посмотрите пожалуйста, что в скрипте неправильно? |
5 окт 11, 15:17 [11388949] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
А в нем что-то неправильно ? |
||
5 окт 11, 15:21 [11388993] Ответить | Цитировать Сообщить модератору |
Антон_79 Member Откуда: Сообщений: 11 |
По словам AxuliON "он большего бреда в жизни не видел" - видимо, крутой спец. Но, что неправильно, не говорит. )) |
||||
5 окт 11, 15:24 [11389046] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Ну так спросите у него |
||
5 окт 11, 15:25 [11389054] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 3 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |