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

Откуда:
Сообщений: 23
День добрый.
Подскажите, нужен скрипт для регулярного удаления устаревших записей из sql базы. Например удалять все записи старше месяца. Или какими методами можно это реализовать.
sql server 2005, база isa server.
5 окт 11, 10:20    [11386054]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Написать DELETE c WHERE, который посчитает дату на месяц назад от текущей ?
5 окт 11, 10:23    [11386072]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
HuppeR,

УДАЛИТЬ ИЗ ТАБЛИЦЫ ГДЕ ПОЛЕ_ДАТА < ДАТУДОБАВИТЬ(M,0,ДАТАРАЗАНИЦА(M,0,ТЕКУЩАЯДАТА())-1)
5 окт 11, 10:24    [11386074]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Fell
Member

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

Откуда:
Сообщений: 11
aleks2,
Не могу разобраться, как модифицировать ваш скрипт, чтобы происходило удаление данных, например старше 4-х недель.

И еще пара вопросов - соответственно нужен еще скрипт для регулярной очистки лога транзакций, так?

И после удаления записей из базы ее нужно обязательно шринковать?

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

Откуда:
Сообщений: 11
Антон_79
aleks2,
Не могу разобраться, как модифицировать ваш скрипт, чтобы происходило удаление данных, например старше 4-х недель.

И еще пара вопросов - соответственно нужен еще скрипт для регулярной очистки лога транзакций, так?

И после удаления записей из базы ее нужно обязательно шринковать?

А при каких процессах база данных будет залочена (т.е. в нее невозможно будет ничего записать) ?



Ребят, подскажите пожалуйста, если кто знает.
5 окт 11, 11:13    [11386430]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Антон_79
aleks2,
Не могу разобраться, как модифицировать ваш скрипт, чтобы происходило удаление данных, например старше 4-х недель.

И еще пара вопросов - соответственно нужен еще скрипт для регулярной очистки лога транзакций, так?

И после удаления записей из базы ее нужно обязательно шринковать?

А при каких процессах база данных будет залочена (т.е. в нее невозможно будет ничего записать) ?

set @d=...
тут прописать то что нужно не судьба? DATEADD функцию знаете?

aleks2 вам дал пример скрипта, где удаление порциями по 1000 штук, лог при этом не сильно расти будет.
Базу шринковать зачем? Она же опять вырастет. Ну разок еще можно (если у вас сейчас данных за пару лет), а когда скрипт в джоб засунете - однозначно не нужно. Более того, ISA насколько я помню чувствительна к случаям когда не может писать в таблицу и тупо отваливается. Посему и удаление и другие операции обслуживания лучше всего вынести на ночь и делать как можно реже/быстрее.
5 окт 11, 11:14    [11386439]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
кстати, я конечно не помню о поведении внутри процедур, но всеж-таки лучше перестраховаться и перед выходом прописать:

set rowcount 0

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

Откуда:
Сообщений: 11
kDnZP, Большое спасибо за ответы!!

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

Откуда: Moscow
Сообщений: 37200
Антон_79
kDnZP, Большое спасибо за ответы!!

Честно говоря, в SQl я не особо силен, если не затруднит, могли бы вы показать, как будет
выглядеть итоговый скрипт в свете всего выше сказанного.
Догда найдите того, кто понимает хоть что-то в SQL, иначе вы там наудаляете записей, ага.
5 окт 11, 12:24    [11387028]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Антон_79
Member

Откуда:
Сообщений: 11
Гавриленко Сергей Алексеевич
Антон_79
kDnZP, Большое спасибо за ответы!!

Честно говоря, в SQl я не особо силен, если не затруднит, могли бы вы показать, как будет
выглядеть итоговый скрипт в свете всего выше сказанного.
Догда найдите того, кто понимает хоть что-то в SQL, иначе вы там наудаляете записей, ага.


Коллеги, ну это же очевидно - был бы под руками такой спец - вопросов бы не возникло. :)

Просто возникла вот такая вот разовая задача довольно срочная. Т.е изучать всю теорию сейчас будет невозможно.
Поэтому и прошу решений у тех кто знает, и кому не сложно поделиться.
5 окт 11, 12:37    [11387139]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
iljy
Member

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

уважаемый, но это же очевидно! Адекватный человек не возмется за чистку чужой базы по фотографии. Если хотите, чтоб сделали за вас - идите на форум работа.
5 окт 11, 12:39    [11387158]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Антон_79
Поэтому и прошу решений у тех кто знает, и кому не сложно поделиться.

Вы хотите чтобы вам написали готовый универсальный скрипт ?
Который вы просто возьмете и запустите ?
5 окт 11, 12:40    [11387168]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Антон_79
Member

Откуда:
Сообщений: 11
Glory
Антон_79
Поэтому и прошу решений у тех кто знает, и кому не сложно поделиться.

Вы хотите чтобы вам написали готовый универсальный скрипт ?
Который вы просто возьмете и запустите ?


Ну так исходная задача то достаточно распространенная и типовая.
Наверняка же у кого-то что-то готовое уже есть, просто со своими цифрами.
5 окт 11, 12:46    [11387223]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Антон_79
Ну так исходная задача то достаточно распространенная и типовая.
Наверняка же у кого-то что-то готовое уже есть, просто со своими цифрами.

Ну так вам и дали скрипт
Осталось подставить в него свои параметры и объекты
5 окт 11, 12:49    [11387242]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Guest2011_10
Guest
Исключительно из любопытства, позвольте спросить - зачем тут это

while @@trancount>0 commit
5 окт 11, 13:36    [11387752]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
AxuliON
Member

Откуда: оттуда, и на лыжах
Сообщений: 574
Наибольшего бреда в жизни не видел.
Процедура просто убила.
Антон! Я надеюсь Вы ЭТО для себя написали, а не на месте - где работаете?


komrad
Антон_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, 14:17    [11388263]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
HuppeR
Member

Откуда:
Сообщений: 23
AxuliON
Наибольшего бреда в жизни не видел.
Процедура просто убила.
Антон! Я надеюсь Вы ЭТО для себя написали, а не на месте - где работаете?


komrad
Антон_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


Если присмотреться то скрипт скинул aleks2

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

Откуда:
Сообщений: 11
AxuliON
Наибольшего бреда в жизни не видел.
Процедура просто убила.
Антон! Я надеюсь Вы ЭТО для себя написали, а не на месте - где работаете?


komrad
Антон_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, 14:32    [11388444]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Антон_79
Member

Откуда:
Сообщений: 11
Знающие люди, посмотрите пожалуйста, что в скрипте неправильно?
5 окт 11, 15:17    [11388949]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Антон_79
Знающие люди, посмотрите пожалуйста, что в скрипте неправильно?

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

Откуда:
Сообщений: 11
Glory
Антон_79
Знающие люди, посмотрите пожалуйста, что в скрипте неправильно?

А в нем что-то неправильно ?


По словам AxuliON "он большего бреда в жизни не видел" - видимо, крутой спец. Но, что неправильно, не говорит. ))
5 окт 11, 15:24    [11389046]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт удаления устаревших записей из базы.  [new]
Glory
Member

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

Ну так спросите у него
5 окт 11, 15:25    [11389054]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить