peux-tu insérer un select count(*) pour vérifier que le nombre de lignes
diminue et un select @@trancount pour vérifier que tu as bien terminé la
transaction
br
"Alain" wrote in message
news:%Bonjour,
Je tourne en rond depuis un moment sur un probléme qui ne devrait pas en
être un : supprimer des lignes dans une table. Ma table contient 60
millions de lignes. Je souhaie faire le ménage, j'ai fait un bcp vers un
fichier texte pour l'archivage et maintenant je souhaite effacer des
lignes de la base.
Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
transaction énorme, je lui demande de suppimer par boc de 100 000 lignes
et j'ai mis la base en mode recovery simple.
J'ai un script trés simple :
alter Database [ma_database] set recovery simple
go
SET ROWCOUNT 100000
declare @nbrow int
declare @nbcount int
declare @i int
select @nbRow =count(id)
from [ma_table]
where ma_condition
print @nbRow
set @nbcount = @nbrow / 100000
set @i=0
while @i<=@nbcount
begin
begin transaction
delete from [maTable] where
ma_condition
commit
set @i= @i+1
print @i
end
go
SET ROWCOUNT 0
go
je shrink les fichiers
et ensuite je replace ma base en mode recovery bulk copy
pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé
100000 lignes, mais les données sont toujours présentes !!!!
Je deviens fous, si quelqu'un peut m'aider...
merci d'avance
Alain
peux-tu insérer un select count(*) pour vérifier que le nombre de lignes
diminue et un select @@trancount pour vérifier que tu as bien terminé la
transaction
br
"Alain" <abazoul@hotmail.com> wrote in message
news:%23LnaQSBRFHA.3076@TK2MSFTNGP14.phx.gbl...
Bonjour,
Je tourne en rond depuis un moment sur un probléme qui ne devrait pas en
être un : supprimer des lignes dans une table. Ma table contient 60
millions de lignes. Je souhaie faire le ménage, j'ai fait un bcp vers un
fichier texte pour l'archivage et maintenant je souhaite effacer des
lignes de la base.
Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
transaction énorme, je lui demande de suppimer par boc de 100 000 lignes
et j'ai mis la base en mode recovery simple.
J'ai un script trés simple :
alter Database [ma_database] set recovery simple
go
SET ROWCOUNT 100000
declare @nbrow int
declare @nbcount int
declare @i int
select @nbRow =count(id)
from [ma_table]
where ma_condition
print @nbRow
set @nbcount = @nbrow / 100000
set @i=0
while @i<=@nbcount
begin
begin transaction
delete from [maTable] where
ma_condition
commit
set @i= @i+1
print @i
end
go
SET ROWCOUNT 0
go
je shrink les fichiers
et ensuite je replace ma base en mode recovery bulk copy
pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé
100000 lignes, mais les données sont toujours présentes !!!!
Je deviens fous, si quelqu'un peut m'aider...
merci d'avance
Alain
peux-tu insérer un select count(*) pour vérifier que le nombre de lignes
diminue et un select @@trancount pour vérifier que tu as bien terminé la
transaction
br
"Alain" wrote in message
news:%Bonjour,
Je tourne en rond depuis un moment sur un probléme qui ne devrait pas en
être un : supprimer des lignes dans une table. Ma table contient 60
millions de lignes. Je souhaie faire le ménage, j'ai fait un bcp vers un
fichier texte pour l'archivage et maintenant je souhaite effacer des
lignes de la base.
Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
transaction énorme, je lui demande de suppimer par boc de 100 000 lignes
et j'ai mis la base en mode recovery simple.
J'ai un script trés simple :
alter Database [ma_database] set recovery simple
go
SET ROWCOUNT 100000
declare @nbrow int
declare @nbcount int
declare @i int
select @nbRow =count(id)
from [ma_table]
where ma_condition
print @nbRow
set @nbcount = @nbrow / 100000
set @i=0
while @i<=@nbcount
begin
begin transaction
delete from [maTable] where
ma_condition
commit
set @i= @i+1
print @i
end
go
SET ROWCOUNT 0
go
je shrink les fichiers
et ensuite je replace ma base en mode recovery bulk copy
pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé
100000 lignes, mais les données sont toujours présentes !!!!
Je deviens fous, si quelqu'un peut m'aider...
merci d'avance
Alain
Alain,
Se peut-il qu'aucune rangée ne satisfait "ma_condition"?
Si vous n'affichez pas le script précis, il est difficile de vous
aider. Certes que votre script ne contient pas "where ma_condition".
De toute façon, qui vous "dit à chaque fois qu'il a supprimé 100000
lignes"?
Quoiqu'aucune rangée ne satisfasse ma_condition, la condition de boucle
@i <= @nbcount sera satisfaite, et la boucle fera un tour.
Steve Kass
Drew University
Alain wrote:Bonjour,
Je tourne en rond depuis un moment sur un probléme qui ne devrait pas en
être un : supprimer des lignes dans une table. Ma table contient 60
millions de lignes. Je souhaie faire le ménage, j'ai fait un bcp vers un
fichier texte pour l'archivage et maintenant je souhaite effacer des
lignes de la base.
Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
transaction énorme, je lui demande de suppimer par boc de 100 000 lignes
et j'ai mis la base en mode recovery simple.
J'ai un script trés simple :
alter Database [ma_database] set recovery simple
go
SET ROWCOUNT 100000
declare @nbrow int
declare @nbcount int
declare @i int
select @nbRow =count(id)
from [ma_table]
where ma_condition
print @nbRow
set @nbcount = @nbrow / 100000
set @i=0
while @i<=@nbcount
begin
begin transaction
delete from [maTable] where
ma_condition
commit
set @i= @i+1
print @i
end
go
SET ROWCOUNT 0
go
je shrink les fichiers
et ensuite je replace ma base en mode recovery bulk copy
pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé 100000
lignes, mais les données sont toujours présentes !!!!
Je deviens fous, si quelqu'un peut m'aider...
merci d'avance
Alain
Alain,
Se peut-il qu'aucune rangée ne satisfait "ma_condition"?
Si vous n'affichez pas le script précis, il est difficile de vous
aider. Certes que votre script ne contient pas "where ma_condition".
De toute façon, qui vous "dit à chaque fois qu'il a supprimé 100000
lignes"?
Quoiqu'aucune rangée ne satisfasse ma_condition, la condition de boucle
@i <= @nbcount sera satisfaite, et la boucle fera un tour.
Steve Kass
Drew University
Alain wrote:
Bonjour,
Je tourne en rond depuis un moment sur un probléme qui ne devrait pas en
être un : supprimer des lignes dans une table. Ma table contient 60
millions de lignes. Je souhaie faire le ménage, j'ai fait un bcp vers un
fichier texte pour l'archivage et maintenant je souhaite effacer des
lignes de la base.
Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
transaction énorme, je lui demande de suppimer par boc de 100 000 lignes
et j'ai mis la base en mode recovery simple.
J'ai un script trés simple :
alter Database [ma_database] set recovery simple
go
SET ROWCOUNT 100000
declare @nbrow int
declare @nbcount int
declare @i int
select @nbRow =count(id)
from [ma_table]
where ma_condition
print @nbRow
set @nbcount = @nbrow / 100000
set @i=0
while @i<=@nbcount
begin
begin transaction
delete from [maTable] where
ma_condition
commit
set @i= @i+1
print @i
end
go
SET ROWCOUNT 0
go
je shrink les fichiers
et ensuite je replace ma base en mode recovery bulk copy
pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé 100000
lignes, mais les données sont toujours présentes !!!!
Je deviens fous, si quelqu'un peut m'aider...
merci d'avance
Alain
Alain,
Se peut-il qu'aucune rangée ne satisfait "ma_condition"?
Si vous n'affichez pas le script précis, il est difficile de vous
aider. Certes que votre script ne contient pas "where ma_condition".
De toute façon, qui vous "dit à chaque fois qu'il a supprimé 100000
lignes"?
Quoiqu'aucune rangée ne satisfasse ma_condition, la condition de boucle
@i <= @nbcount sera satisfaite, et la boucle fera un tour.
Steve Kass
Drew University
Alain wrote:Bonjour,
Je tourne en rond depuis un moment sur un probléme qui ne devrait pas en
être un : supprimer des lignes dans une table. Ma table contient 60
millions de lignes. Je souhaie faire le ménage, j'ai fait un bcp vers un
fichier texte pour l'archivage et maintenant je souhaite effacer des
lignes de la base.
Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
transaction énorme, je lui demande de suppimer par boc de 100 000 lignes
et j'ai mis la base en mode recovery simple.
J'ai un script trés simple :
alter Database [ma_database] set recovery simple
go
SET ROWCOUNT 100000
declare @nbrow int
declare @nbcount int
declare @i int
select @nbRow =count(id)
from [ma_table]
where ma_condition
print @nbRow
set @nbcount = @nbrow / 100000
set @i=0
while @i<=@nbcount
begin
begin transaction
delete from [maTable] where
ma_condition
commit
set @i= @i+1
print @i
end
go
SET ROWCOUNT 0
go
je shrink les fichiers
et ensuite je replace ma base en mode recovery bulk copy
pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé 100000
lignes, mais les données sont toujours présentes !!!!
Je deviens fous, si quelqu'un peut m'aider...
merci d'avance
Alain
Certes que votre script ne contient pas "where ma_condition".
La clause WHERE n'est pas vraiment nécessaire ici.
La limite est faite par le SET ROWCOUNT 100000
--
Bien cordialement
Med Bouchenafa
"Steve Kass" a écrit dans le message de news:Alain,
Se peut-il qu'aucune rangée ne satisfait "ma_condition"?
Si vous n'affichez pas le script précis, il est difficile de vous
aider. Certes que votre script ne contient pas "where ma_condition".
De toute façon, qui vous "dit à chaque fois qu'il a supprimé 100000
lignes"?
Quoiqu'aucune rangée ne satisfasse ma_condition, la condition de boucle
@i <= @nbcount sera satisfaite, et la boucle fera un tour.
Steve Kass
Drew University
Alain wrote:Bonjour,
Je tourne en rond depuis un moment sur un probléme qui ne devrait pas en
être un : supprimer des lignes dans une table. Ma table contient 60
millions de lignes. Je souhaie faire le ménage, j'ai fait un bcp vers un
fichier texte pour l'archivage et maintenant je souhaite effacer des
lignes de la base.
Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
transaction énorme, je lui demande de suppimer par boc de 100 000 lignes
et j'ai mis la base en mode recovery simple.
J'ai un script trés simple :
alter Database [ma_database] set recovery simple
go
SET ROWCOUNT 100000
declare @nbrow int
declare @nbcount int
declare @i int
select @nbRow =count(id)
from [ma_table]
where ma_condition
print @nbRow
set @nbcount = @nbrow / 100000
set @i=0
while @i<=@nbcount
begin
begin transaction
delete from [maTable] where
ma_condition
commit
set @i= @i+1
print @i
end
go
SET ROWCOUNT 0
go
je shrink les fichiers
et ensuite je replace ma base en mode recovery bulk copy
pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé
100000 lignes, mais les données sont toujours présentes !!!!
Je deviens fous, si quelqu'un peut m'aider...
merci d'avance
Alain
Certes que votre script ne contient pas "where ma_condition".
La clause WHERE n'est pas vraiment nécessaire ici.
La limite est faite par le SET ROWCOUNT 100000
--
Bien cordialement
Med Bouchenafa
"Steve Kass" <skass@drew.edu> a écrit dans le message de news:
e15w35JRFHA.356@TK2MSFTNGP14.phx.gbl...
Alain,
Se peut-il qu'aucune rangée ne satisfait "ma_condition"?
Si vous n'affichez pas le script précis, il est difficile de vous
aider. Certes que votre script ne contient pas "where ma_condition".
De toute façon, qui vous "dit à chaque fois qu'il a supprimé 100000
lignes"?
Quoiqu'aucune rangée ne satisfasse ma_condition, la condition de boucle
@i <= @nbcount sera satisfaite, et la boucle fera un tour.
Steve Kass
Drew University
Alain wrote:
Bonjour,
Je tourne en rond depuis un moment sur un probléme qui ne devrait pas en
être un : supprimer des lignes dans une table. Ma table contient 60
millions de lignes. Je souhaie faire le ménage, j'ai fait un bcp vers un
fichier texte pour l'archivage et maintenant je souhaite effacer des
lignes de la base.
Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
transaction énorme, je lui demande de suppimer par boc de 100 000 lignes
et j'ai mis la base en mode recovery simple.
J'ai un script trés simple :
alter Database [ma_database] set recovery simple
go
SET ROWCOUNT 100000
declare @nbrow int
declare @nbcount int
declare @i int
select @nbRow =count(id)
from [ma_table]
where ma_condition
print @nbRow
set @nbcount = @nbrow / 100000
set @i=0
while @i<=@nbcount
begin
begin transaction
delete from [maTable] where
ma_condition
commit
set @i= @i+1
print @i
end
go
SET ROWCOUNT 0
go
je shrink les fichiers
et ensuite je replace ma base en mode recovery bulk copy
pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé
100000 lignes, mais les données sont toujours présentes !!!!
Je deviens fous, si quelqu'un peut m'aider...
merci d'avance
Alain
Certes que votre script ne contient pas "where ma_condition".
La clause WHERE n'est pas vraiment nécessaire ici.
La limite est faite par le SET ROWCOUNT 100000
--
Bien cordialement
Med Bouchenafa
"Steve Kass" a écrit dans le message de news:Alain,
Se peut-il qu'aucune rangée ne satisfait "ma_condition"?
Si vous n'affichez pas le script précis, il est difficile de vous
aider. Certes que votre script ne contient pas "where ma_condition".
De toute façon, qui vous "dit à chaque fois qu'il a supprimé 100000
lignes"?
Quoiqu'aucune rangée ne satisfasse ma_condition, la condition de boucle
@i <= @nbcount sera satisfaite, et la boucle fera un tour.
Steve Kass
Drew University
Alain wrote:Bonjour,
Je tourne en rond depuis un moment sur un probléme qui ne devrait pas en
être un : supprimer des lignes dans une table. Ma table contient 60
millions de lignes. Je souhaie faire le ménage, j'ai fait un bcp vers un
fichier texte pour l'archivage et maintenant je souhaite effacer des
lignes de la base.
Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
transaction énorme, je lui demande de suppimer par boc de 100 000 lignes
et j'ai mis la base en mode recovery simple.
J'ai un script trés simple :
alter Database [ma_database] set recovery simple
go
SET ROWCOUNT 100000
declare @nbrow int
declare @nbcount int
declare @i int
select @nbRow =count(id)
from [ma_table]
where ma_condition
print @nbRow
set @nbcount = @nbrow / 100000
set @i=0
while @i<=@nbcount
begin
begin transaction
delete from [maTable] where
ma_condition
commit
set @i= @i+1
print @i
end
go
SET ROWCOUNT 0
go
je shrink les fichiers
et ensuite je replace ma base en mode recovery bulk copy
pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé
100000 lignes, mais les données sont toujours présentes !!!!
Je deviens fous, si quelqu'un peut m'aider...
merci d'avance
Alain
Bonjour,
Oui, pour redéfinir le champ compteur a une valeur donné, il suffira de
faire :
SET IDENTITY_INSERT MyTable ON
INSERT INTO MyTable (...) VALUES(...)
SET IDENTITY_INSERT MyTable OFF
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
"Alain" wrote in message
news:4263dec9$0$22174$Ce n'est pas trop possible car j'efface des vielles données.
Et en plus j'ai mon identity dont j'ai besoin, masi je pense que ce doit
être possible de pouvoir l'initialiser à une autre valeur que 1.
C'est surtout le fait que je ne vide pas toute la table qui m'empêche de
le faire.
"Gislain" wrote in message
news:Bonjour Alain,
Je ne connais pas la raison de ton problème mais la méthode la plus
rapide
pour effectuer ce genre de purge globale est de générer un script sur
ta
table (description, index, clef, ...) et de le lancer.
Avantage :
. Cela aura pour effet de supprimer/recréer la table en un clin d'oeil
Inconvénient :
. Si tu as un compteur identity il est réinitialisé à 1, charge à toi de
savoir si c'est important, au besoin tu le valorises manuellement
a+
Gislain.
"Alain" a écrit dans le message de
news:%Bonjour,
Je tourne en rond depuis un moment sur un probléme qui ne devrait pas
en
être un : supprimer des lignes dans une table. Ma table contient 60
millionsde lignes. Je souhaie faire le ménage, j'ai fait un bcp vers un fichier
texte pour l'archivage et maintenant je souhaite effacer des lignes de
la
base.
Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
transaction énorme, je lui demande de suppimer par boc de 100 000
lignes
etj'ai mis la base en mode recovery simple.
J'ai un script trés simple :
alter Database [ma_database] set recovery simple
go
SET ROWCOUNT 100000
declare @nbrow int
declare @nbcount int
declare @i int
select @nbRow =count(id)
from [ma_table]
where ma_condition
print @nbRow
set @nbcount = @nbrow / 100000
set @i=0
while @i<=@nbcount
begin
begin transaction
delete from [maTable] where
ma_condition
commit
set @i= @i+1
print @i
end
go
SET ROWCOUNT 0
go
je shrink les fichiers
et ensuite je replace ma base en mode recovery bulk copy
pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé
100000
lignes, mais les données sont toujours présentes !!!!
Je deviens fous, si quelqu'un peut m'aider...
merci d'avance
Alain
Bonjour,
Oui, pour redéfinir le champ compteur a une valeur donné, il suffira de
faire :
SET IDENTITY_INSERT MyTable ON
INSERT INTO MyTable (...) VALUES(...)
SET IDENTITY_INSERT MyTable OFF
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
"Alain" <abazoul@hotmail.com> wrote in message
news:4263dec9$0$22174$626a14ce@news.free.fr...
Ce n'est pas trop possible car j'efface des vielles données.
Et en plus j'ai mon identity dont j'ai besoin, masi je pense que ce doit
être possible de pouvoir l'initialiser à une autre valeur que 1.
C'est surtout le fait que je ne vide pas toute la table qui m'empêche de
le faire.
"Gislain" <nospam@nospam.com> wrote in message
news:OV88NKCRFHA.3628@TK2MSFTNGP12.phx.gbl...
Bonjour Alain,
Je ne connais pas la raison de ton problème mais la méthode la plus
rapide
pour effectuer ce genre de purge globale est de générer un script sur
ta
table (description, index, clef, ...) et de le lancer.
Avantage :
. Cela aura pour effet de supprimer/recréer la table en un clin d'oeil
Inconvénient :
. Si tu as un compteur identity il est réinitialisé à 1, charge à toi de
savoir si c'est important, au besoin tu le valorises manuellement
a+
Gislain.
"Alain" <abazoul@hotmail.com> a écrit dans le message de
news:%23LnaQSBRFHA.3076@TK2MSFTNGP14.phx.gbl...
Bonjour,
Je tourne en rond depuis un moment sur un probléme qui ne devrait pas
en
être un : supprimer des lignes dans une table. Ma table contient 60
millions
de lignes. Je souhaie faire le ménage, j'ai fait un bcp vers un fichier
texte pour l'archivage et maintenant je souhaite effacer des lignes de
la
base.
Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
transaction énorme, je lui demande de suppimer par boc de 100 000
lignes
et
j'ai mis la base en mode recovery simple.
J'ai un script trés simple :
alter Database [ma_database] set recovery simple
go
SET ROWCOUNT 100000
declare @nbrow int
declare @nbcount int
declare @i int
select @nbRow =count(id)
from [ma_table]
where ma_condition
print @nbRow
set @nbcount = @nbrow / 100000
set @i=0
while @i<=@nbcount
begin
begin transaction
delete from [maTable] where
ma_condition
commit
set @i= @i+1
print @i
end
go
SET ROWCOUNT 0
go
je shrink les fichiers
et ensuite je replace ma base en mode recovery bulk copy
pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé
100000
lignes, mais les données sont toujours présentes !!!!
Je deviens fous, si quelqu'un peut m'aider...
merci d'avance
Alain
Bonjour,
Oui, pour redéfinir le champ compteur a une valeur donné, il suffira de
faire :
SET IDENTITY_INSERT MyTable ON
INSERT INTO MyTable (...) VALUES(...)
SET IDENTITY_INSERT MyTable OFF
----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France
"Alain" wrote in message
news:4263dec9$0$22174$Ce n'est pas trop possible car j'efface des vielles données.
Et en plus j'ai mon identity dont j'ai besoin, masi je pense que ce doit
être possible de pouvoir l'initialiser à une autre valeur que 1.
C'est surtout le fait que je ne vide pas toute la table qui m'empêche de
le faire.
"Gislain" wrote in message
news:Bonjour Alain,
Je ne connais pas la raison de ton problème mais la méthode la plus
rapide
pour effectuer ce genre de purge globale est de générer un script sur
ta
table (description, index, clef, ...) et de le lancer.
Avantage :
. Cela aura pour effet de supprimer/recréer la table en un clin d'oeil
Inconvénient :
. Si tu as un compteur identity il est réinitialisé à 1, charge à toi de
savoir si c'est important, au besoin tu le valorises manuellement
a+
Gislain.
"Alain" a écrit dans le message de
news:%Bonjour,
Je tourne en rond depuis un moment sur un probléme qui ne devrait pas
en
être un : supprimer des lignes dans une table. Ma table contient 60
millionsde lignes. Je souhaie faire le ménage, j'ai fait un bcp vers un fichier
texte pour l'archivage et maintenant je souhaite effacer des lignes de
la
base.
Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
transaction énorme, je lui demande de suppimer par boc de 100 000
lignes
etj'ai mis la base en mode recovery simple.
J'ai un script trés simple :
alter Database [ma_database] set recovery simple
go
SET ROWCOUNT 100000
declare @nbrow int
declare @nbcount int
declare @i int
select @nbRow =count(id)
from [ma_table]
where ma_condition
print @nbRow
set @nbcount = @nbrow / 100000
set @i=0
while @i<=@nbcount
begin
begin transaction
delete from [maTable] where
ma_condition
commit
set @i= @i+1
print @i
end
go
SET ROWCOUNT 0
go
je shrink les fichiers
et ensuite je replace ma base en mode recovery bulk copy
pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé
100000
lignes, mais les données sont toujours présentes !!!!
Je deviens fous, si quelqu'un peut m'aider...
merci d'avance
Alain
Effectivement, j'ai corrigé en rajoutant + 1.
si je fais un select satitisfaisant ma condition (where jour < 040101
and jour > 041231) j'obtiens 60 Millions d'enr, aprés execution du
script il en reste 57 millions si je setup rowcount à 1million.
Pourtant le print que je fais m'indique bien 60 itérations de ma boucle et
que 1 millions de lignes ont été supprimés à chaque fois .
"Patrice" wrote in message
news:La division entière peut peut-être laisser des lignes ??!!! (réfléchir en
fin de journée pfff) :
120000/100000=1, la boucle est faite une fois et il reste 20000 lignes
non
détruites ???
Est- ce qu'il reste le nnombre original de lignes ou des lignes
sont-elles
supprimées tout de même ???
Patrice
--
"Alain" a écrit dans le message de
news:4263dfaa$0$22175$Non, je n'ai pas de trigger.
J'ai l'impression que le code fonctionne pour un certain nombre
d'itérationsde la boucle et aprés ça ne fonctionne plus.
Je me demande s'il n'a pas un cache ou quelque chose du style qui le
fait
supprimer les même lignes toutes les itérations suivantes de la boucle.
Peut-être au niveau de la transaction ? C'est la première fois que je
l'utilise il faut peut être plus parametrer la transaction ?
Merci pour vos réponses.
Alain
"Med Bouchenafa" wrote in message
news:%
> Le script est tout ce qu'il y de plus correct.
> N'aurait-il pas un trigger qui annulerait la transaction ?
>
> --
> Bien cordialement
> Med Bouchenafa
>
> "Alain" a écrit dans le message de news:
> %
>> Bonjour,
>>
>> Je tourne en rond depuis un moment sur un probléme qui ne devrait pas
en>> être un : supprimer des lignes dans une table. Ma table contient 60
>> millions de lignes. Je souhaie faire le ménage, j'ai fait un bcp vers
un>> fichier texte pour l'archivage et maintenant je souhaite effacer des
>> lignes de la base.
>>
>> Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
>> transaction énorme, je lui demande de suppimer par boc de 100 000
lignes>> et j'ai mis la base en mode recovery simple.
>>
>> J'ai un script trés simple :
>>
>> alter Database [ma_database] set recovery simple
>> go
>>
>> SET ROWCOUNT 100000
>>
>> declare @nbrow int
>> declare @nbcount int
>> declare @i int
>>
>> select @nbRow =count(id)
>> from [ma_table]
>> where ma_condition
>> print @nbRow
>> set @nbcount = @nbrow / 100000
>> set @i=0
>> while @i<=@nbcount
>> begin
>> begin transaction
>> delete from [maTable] where
>> ma_condition
>> commit
>> set @i= @i+1
>> print @i
>> end
>> go
>> SET ROWCOUNT 0
>> go
>>
>> je shrink les fichiers
>> et ensuite je replace ma base en mode recovery bulk copy
>>
>> pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé
>> 100000 lignes, mais les données sont toujours présentes !!!!
>>
>> Je deviens fous, si quelqu'un peut m'aider...
>>
>> merci d'avance
>>
>> Alain
>>
>
>
Effectivement, j'ai corrigé en rajoutant + 1.
si je fais un select satitisfaisant ma condition (where jour < 040101
and jour > 041231) j'obtiens 60 Millions d'enr, aprés execution du
script il en reste 57 millions si je setup rowcount à 1million.
Pourtant le print que je fais m'indique bien 60 itérations de ma boucle et
que 1 millions de lignes ont été supprimés à chaque fois .
"Patrice" <nobody@nowhere.com> wrote in message
news:OYJuP6DRFHA.3716@TK2MSFTNGP14.phx.gbl...
La division entière peut peut-être laisser des lignes ??!!! (réfléchir en
fin de journée pfff) :
120000/100000=1, la boucle est faite une fois et il reste 20000 lignes
non
détruites ???
Est- ce qu'il reste le nnombre original de lignes ou des lignes
sont-elles
supprimées tout de même ???
Patrice
--
"Alain" <abazoul@hotmail.com> a écrit dans le message de
news:4263dfaa$0$22175$626a14ce@news.free.fr...
Non, je n'ai pas de trigger.
J'ai l'impression que le code fonctionne pour un certain nombre
d'itérations
de la boucle et aprés ça ne fonctionne plus.
Je me demande s'il n'a pas un cache ou quelque chose du style qui le
fait
supprimer les même lignes toutes les itérations suivantes de la boucle.
Peut-être au niveau de la transaction ? C'est la première fois que je
l'utilise il faut peut être plus parametrer la transaction ?
Merci pour vos réponses.
Alain
"Med Bouchenafa" <com.hotmail@bouchenafa> wrote in message
news:%231uAd1CRFHA.1096@tk2msftngp13.phx.gbl...
> Le script est tout ce qu'il y de plus correct.
> N'aurait-il pas un trigger qui annulerait la transaction ?
>
> --
> Bien cordialement
> Med Bouchenafa
>
> "Alain" <abazoul@hotmail.com> a écrit dans le message de news:
> %23LnaQSBRFHA.3076@TK2MSFTNGP14.phx.gbl...
>> Bonjour,
>>
>> Je tourne en rond depuis un moment sur un probléme qui ne devrait pas
en
>> être un : supprimer des lignes dans une table. Ma table contient 60
>> millions de lignes. Je souhaie faire le ménage, j'ai fait un bcp vers
un
>> fichier texte pour l'archivage et maintenant je souhaite effacer des
>> lignes de la base.
>>
>> Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
>> transaction énorme, je lui demande de suppimer par boc de 100 000
lignes
>> et j'ai mis la base en mode recovery simple.
>>
>> J'ai un script trés simple :
>>
>> alter Database [ma_database] set recovery simple
>> go
>>
>> SET ROWCOUNT 100000
>>
>> declare @nbrow int
>> declare @nbcount int
>> declare @i int
>>
>> select @nbRow =count(id)
>> from [ma_table]
>> where ma_condition
>> print @nbRow
>> set @nbcount = @nbrow / 100000
>> set @i=0
>> while @i<=@nbcount
>> begin
>> begin transaction
>> delete from [maTable] where
>> ma_condition
>> commit
>> set @i= @i+1
>> print @i
>> end
>> go
>> SET ROWCOUNT 0
>> go
>>
>> je shrink les fichiers
>> et ensuite je replace ma base en mode recovery bulk copy
>>
>> pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé
>> 100000 lignes, mais les données sont toujours présentes !!!!
>>
>> Je deviens fous, si quelqu'un peut m'aider...
>>
>> merci d'avance
>>
>> Alain
>>
>
>
Effectivement, j'ai corrigé en rajoutant + 1.
si je fais un select satitisfaisant ma condition (where jour < 040101
and jour > 041231) j'obtiens 60 Millions d'enr, aprés execution du
script il en reste 57 millions si je setup rowcount à 1million.
Pourtant le print que je fais m'indique bien 60 itérations de ma boucle et
que 1 millions de lignes ont été supprimés à chaque fois .
"Patrice" wrote in message
news:La division entière peut peut-être laisser des lignes ??!!! (réfléchir en
fin de journée pfff) :
120000/100000=1, la boucle est faite une fois et il reste 20000 lignes
non
détruites ???
Est- ce qu'il reste le nnombre original de lignes ou des lignes
sont-elles
supprimées tout de même ???
Patrice
--
"Alain" a écrit dans le message de
news:4263dfaa$0$22175$Non, je n'ai pas de trigger.
J'ai l'impression que le code fonctionne pour un certain nombre
d'itérationsde la boucle et aprés ça ne fonctionne plus.
Je me demande s'il n'a pas un cache ou quelque chose du style qui le
fait
supprimer les même lignes toutes les itérations suivantes de la boucle.
Peut-être au niveau de la transaction ? C'est la première fois que je
l'utilise il faut peut être plus parametrer la transaction ?
Merci pour vos réponses.
Alain
"Med Bouchenafa" wrote in message
news:%
> Le script est tout ce qu'il y de plus correct.
> N'aurait-il pas un trigger qui annulerait la transaction ?
>
> --
> Bien cordialement
> Med Bouchenafa
>
> "Alain" a écrit dans le message de news:
> %
>> Bonjour,
>>
>> Je tourne en rond depuis un moment sur un probléme qui ne devrait pas
en>> être un : supprimer des lignes dans une table. Ma table contient 60
>> millions de lignes. Je souhaie faire le ménage, j'ai fait un bcp vers
un>> fichier texte pour l'archivage et maintenant je souhaite effacer des
>> lignes de la base.
>>
>> Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
>> transaction énorme, je lui demande de suppimer par boc de 100 000
lignes>> et j'ai mis la base en mode recovery simple.
>>
>> J'ai un script trés simple :
>>
>> alter Database [ma_database] set recovery simple
>> go
>>
>> SET ROWCOUNT 100000
>>
>> declare @nbrow int
>> declare @nbcount int
>> declare @i int
>>
>> select @nbRow =count(id)
>> from [ma_table]
>> where ma_condition
>> print @nbRow
>> set @nbcount = @nbrow / 100000
>> set @i=0
>> while @i<=@nbcount
>> begin
>> begin transaction
>> delete from [maTable] where
>> ma_condition
>> commit
>> set @i= @i+1
>> print @i
>> end
>> go
>> SET ROWCOUNT 0
>> go
>>
>> je shrink les fichiers
>> et ensuite je replace ma base en mode recovery bulk copy
>>
>> pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé
>> 100000 lignes, mais les données sont toujours présentes !!!!
>>
>> Je deviens fous, si quelqu'un peut m'aider...
>>
>> merci d'avance
>>
>> Alain
>>
>
>
Ma condition est seulement une selection de date :
where jour < 041231 and jour > 040101
J'ai verifié cette requete en lancant un select count(id) sur cette
condition et j'en obtenais bien 60 millions.
Quand je disais que l'analyseur me disait : " chaque fois qu'il a supprimé
100000 lignes"
Je parlais du print de l'analyseur qui m'indique que 100000 lignes ont ete
affectés par ma requête, et cela pour chaque itération de ma boucle.
En executant le script directement sur le serveur, il a correctement
fonctionné. Il y a donc un truc qui clochait sur mon poste client...
Merci en tous cas pour votre aide.
"Steve Kass" wrote in message
news:Alain,
Se peut-il qu'aucune rangée ne satisfait "ma_condition"?
Si vous n'affichez pas le script précis, il est difficile de vous
aider. Certes que votre script ne contient pas "where ma_condition".
De toute façon, qui vous "dit à chaque fois qu'il a supprimé 100000
lignes"?
Quoiqu'aucune rangée ne satisfasse ma_condition, la condition de boucle
@i <= @nbcount sera satisfaite, et la boucle fera un tour.
Steve Kass
Drew University
Alain wrote:Bonjour,
Je tourne en rond depuis un moment sur un probléme qui ne devrait pas en
être un : supprimer des lignes dans une table. Ma table contient 60
millions de lignes. Je souhaie faire le ménage, j'ai fait un bcp vers un
fichier texte pour l'archivage et maintenant je souhaite effacer des
lignes de la base.
Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
transaction énorme, je lui demande de suppimer par boc de 100 000 lignes
et j'ai mis la base en mode recovery simple.
J'ai un script trés simple :
alter Database [ma_database] set recovery simple
go
SET ROWCOUNT 100000
declare @nbrow int
declare @nbcount int
declare @i int
select @nbRow =count(id)
from [ma_table]
where ma_condition
print @nbRow
set @nbcount = @nbrow / 100000
set @i=0
while @i<=@nbcount
begin
begin transaction
delete from [maTable] where
ma_condition
commit
set @i= @i+1
print @i
end
go
SET ROWCOUNT 0
go
je shrink les fichiers
et ensuite je replace ma base en mode recovery bulk copy
pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé 100000
lignes, mais les données sont toujours présentes !!!!
Je deviens fous, si quelqu'un peut m'aider...
merci d'avance
Alain
Ma condition est seulement une selection de date :
where jour < 041231 and jour > 040101
J'ai verifié cette requete en lancant un select count(id) sur cette
condition et j'en obtenais bien 60 millions.
Quand je disais que l'analyseur me disait : " chaque fois qu'il a supprimé
100000 lignes"
Je parlais du print de l'analyseur qui m'indique que 100000 lignes ont ete
affectés par ma requête, et cela pour chaque itération de ma boucle.
En executant le script directement sur le serveur, il a correctement
fonctionné. Il y a donc un truc qui clochait sur mon poste client...
Merci en tous cas pour votre aide.
"Steve Kass" <skass@drew.edu> wrote in message
news:e15w35JRFHA.356@TK2MSFTNGP14.phx.gbl...
Alain,
Se peut-il qu'aucune rangée ne satisfait "ma_condition"?
Si vous n'affichez pas le script précis, il est difficile de vous
aider. Certes que votre script ne contient pas "where ma_condition".
De toute façon, qui vous "dit à chaque fois qu'il a supprimé 100000
lignes"?
Quoiqu'aucune rangée ne satisfasse ma_condition, la condition de boucle
@i <= @nbcount sera satisfaite, et la boucle fera un tour.
Steve Kass
Drew University
Alain wrote:
Bonjour,
Je tourne en rond depuis un moment sur un probléme qui ne devrait pas en
être un : supprimer des lignes dans une table. Ma table contient 60
millions de lignes. Je souhaie faire le ménage, j'ai fait un bcp vers un
fichier texte pour l'archivage et maintenant je souhaite effacer des
lignes de la base.
Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
transaction énorme, je lui demande de suppimer par boc de 100 000 lignes
et j'ai mis la base en mode recovery simple.
J'ai un script trés simple :
alter Database [ma_database] set recovery simple
go
SET ROWCOUNT 100000
declare @nbrow int
declare @nbcount int
declare @i int
select @nbRow =count(id)
from [ma_table]
where ma_condition
print @nbRow
set @nbcount = @nbrow / 100000
set @i=0
while @i<=@nbcount
begin
begin transaction
delete from [maTable] where
ma_condition
commit
set @i= @i+1
print @i
end
go
SET ROWCOUNT 0
go
je shrink les fichiers
et ensuite je replace ma base en mode recovery bulk copy
pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé 100000
lignes, mais les données sont toujours présentes !!!!
Je deviens fous, si quelqu'un peut m'aider...
merci d'avance
Alain
Ma condition est seulement une selection de date :
where jour < 041231 and jour > 040101
J'ai verifié cette requete en lancant un select count(id) sur cette
condition et j'en obtenais bien 60 millions.
Quand je disais que l'analyseur me disait : " chaque fois qu'il a supprimé
100000 lignes"
Je parlais du print de l'analyseur qui m'indique que 100000 lignes ont ete
affectés par ma requête, et cela pour chaque itération de ma boucle.
En executant le script directement sur le serveur, il a correctement
fonctionné. Il y a donc un truc qui clochait sur mon poste client...
Merci en tous cas pour votre aide.
"Steve Kass" wrote in message
news:Alain,
Se peut-il qu'aucune rangée ne satisfait "ma_condition"?
Si vous n'affichez pas le script précis, il est difficile de vous
aider. Certes que votre script ne contient pas "where ma_condition".
De toute façon, qui vous "dit à chaque fois qu'il a supprimé 100000
lignes"?
Quoiqu'aucune rangée ne satisfasse ma_condition, la condition de boucle
@i <= @nbcount sera satisfaite, et la boucle fera un tour.
Steve Kass
Drew University
Alain wrote:Bonjour,
Je tourne en rond depuis un moment sur un probléme qui ne devrait pas en
être un : supprimer des lignes dans une table. Ma table contient 60
millions de lignes. Je souhaie faire le ménage, j'ai fait un bcp vers un
fichier texte pour l'archivage et maintenant je souhaite effacer des
lignes de la base.
Pour éviter de surcharger le serveur, et eviter d'avoir un fichier de
transaction énorme, je lui demande de suppimer par boc de 100 000 lignes
et j'ai mis la base en mode recovery simple.
J'ai un script trés simple :
alter Database [ma_database] set recovery simple
go
SET ROWCOUNT 100000
declare @nbrow int
declare @nbcount int
declare @i int
select @nbRow =count(id)
from [ma_table]
where ma_condition
print @nbRow
set @nbcount = @nbrow / 100000
set @i=0
while @i<=@nbcount
begin
begin transaction
delete from [maTable] where
ma_condition
commit
set @i= @i+1
print @i
end
go
SET ROWCOUNT 0
go
je shrink les fichiers
et ensuite je replace ma base en mode recovery bulk copy
pb : il n'y pas d'erreurs, il me dit à chaque fois qu'il a supprimé 100000
lignes, mais les données sont toujours présentes !!!!
Je deviens fous, si quelqu'un peut m'aider...
merci d'avance
Alain