Avatar billede jokkejensen Novice
05. september 2012 - 15:03 Der er 8 kommentarer og
1 løsning

Løbe alle databaser igennem, og rydde en bestemt tabel

Hej.

Jeg har en produktionsserver med adskillelige umbraco løsninger på.

For hver database findes tabellen "umbracoLog" som løbende vokser:

CREATE TABLE [dbo].[umbracoLog](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [userId] [int] NOT NULL,
    [NodeId] [int] NOT NULL,
    [Datestamp] [datetime] NOT NULL,
    [logHeader] [nvarchar](50) NOT NULL,
    [logComment] [nvarchar](4000) NULL,

Jeg kunne godt tænke mig et sql script der løb samtlige databaser igennem der starter med "UMB_", og ryddede ovenstående tabel for poster der er ældre end en mdr.

Jeg kan godt lige tage en enkelt af gangen selv, men kunne være skønt med et "ordentligt" oprydningsscript der tog dem alle.

Nogle forslag ?

vh
Jacob
Avatar billede montago Praktikant
05. september 2012 - 15:21 #1
sp_msforeachdb 'select "?" + ''.dbo.'' + name, * from [?].sys.tables where name like ''UMB%'''

dette kan du så lige opgradere til at gøre det du vil...
Avatar billede montago Praktikant
05. september 2012 - 15:21 #2
sp_msforeachdb 'select "?" + ''.dbo.'' + name, * from [?].sys.tables where name like ''UMB%'''

dette kan du så lige opgradere til at gøre det du vil...
Avatar billede montago Praktikant
05. september 2012 - 15:24 #3
hmm eller dvs... der mangler nok lige at man eksekvere et script pr fund :-/
Avatar billede jokkejensen Novice
05. september 2012 - 17:17 #4
ja det er netop mit spørgsmål.
Avatar billede C:\> Juniormester
06. september 2012 - 22:38 #5
Jeg plejer at skrive noget i retningen af dette: (sletter rækker ældre end 30 dage)

DELETE FROM tabel WHERE  DATEDIFF(Datestamp, CURDATE()) < -30";
Avatar billede jokkejensen Novice
07. september 2012 - 11:21 #6
Jeg forsøger lige at forklare mig igen.

Jeg vil gerne iterere igennem alle database og udføre ovenstående. Jeg kan godt hente alle databaser, jeg kan godt finde ud af at slette fra en tabel. Men hvordan gør jeg det i en omgang ?

Jeg leder efter et færdigt sql script.

/J
Avatar billede arne_v Ekspert
16. september 2012 - 17:06 #7
Ide:

CREATE PROCEDURE usp_cleanup AS
    DECLARE @name VARCHAR(255)
    DECLARE c CURSOR FOR SELECT name FROM sys.databases WHERE name LIKE 'XXX%'
    OPEN c
    FETCH NEXT FROM c INTO @name
    WHILE @@FETCH_STATUS = 0
    BEGIN
        -- EXEC('DELETE FROM ' + @name + '..foobar')
        PRINT 'DELETE FROM ' + @name + '..foobar'
        FETCH NEXT FROM c INTO @name
    END
    CLOSE c
    DEALLOCATE c
GO

EXEC usp_cleanup
GO
Avatar billede jokkejensen Novice
17. september 2012 - 09:39 #8
1000 tak, løste dog midlertidigt med en simple service for at kunne eksekvere begge kald.

Jeg har oprettet dit kode som et job på sql serveren der kører hver nat, og det virker fint !!!

Kast et svar.

Vh
/J
Avatar billede arne_v Ekspert
17. september 2012 - 15:26 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Cognizant Technology Solutions Denmark ApS

Sr. Test Analyst

MAN Energy Solutions

Principal Expert DevOps