List MOM2005 agents with IP-adress

A small SQL-script to list all agents on a MOM2005 installation.

USE OnePoint

SELECT Computer.Name AS ComputerName, ComputerAttribute.[Value] AS IP
FROM ComputerAttribute
        INNER JOIN Computer ON ComputerAttribute.idComputer = Computer.idComputer
WHERE ComputerAttribute.idComputerAttributeDefinition = (
        SELECT ClassAttributeID as idComputerAttributeDefinition
        FROM ClassAttribute
        WHERE ClassAttributeName = 'IPAddress')
ORDER BY Computer.Name

Backup av SQL-databaser

Att ta backup på SQL-databaser & loggar är lite lagomt tråkigt.
Gör man det med maintenance-plan’s så får man en miljard (nåja… ett ganska rejält gäng iaf) filer. Kör man det genom någon annan wizard så blir det måttligt bra.

Nu har jag gjort samma backup-script i femtielva varianter och det känns som att det här fungerar riktigt bra.

Vad gör det då? Jo det är tvådelat, ett script för transaktionsloggar och ett för databasbackup.
Det script som är för dbbackup kör man lämpligtvis efter att bandaren har plockat upp filerna på band. Varför? Scriptet kör med “WITH INIT” vilket tömmer filerna och alla transloggar försvinner.
Det andra scriptet kör backup på transloggar på de databaser som är i recovery-model “Full” och inte är satta till “read only”.
Båda scripten kör backup till samma fil vilket gör det mycket enkelt att återläsa, och även att återläsa till en viss tidpunkt.

Databas-backup (Körs lämpligtvis efter bandbackup, en gång per dygn)

-- -------------------------------------------------------------------
--  Funktion: Backup av samtliga lokala databaser
--  Skapat:   2007-05-10 av 
--
--  Filerna namnsätts \\XYZ\DBBackup\SQLSERVER-INSTANS\DBnamn.bak
-- -------------------------------------------------------------------

-- Deklaration av variabler
DECLARE
        @backupPath sysname,
        @DBname sysname,
        @backupfile sysname

-- Konfiguration
SET @backupPath = '\\XYZ\DBBackup\'

-- -------------------------------------------------------------------
DECLARE myCur CURSOR
        -- Läser ur samtliga lokala databaser (förutom tempdb), sortera systemdatabaser först därefter i namnordning
        FOR SELECT NAME FROM MASTER..SYSDATABASES WHERE NAME NOT IN ('tempdb') ORDER BY SID, NAME
        FOR READ ONLY
OPEN myCur

-- Start av loop
FETCH NEXT FROM myCur INTO @DBname
WHILE (@@FETCH_STATUS <> -1) BEGIN
        -- Sätter sökvägen för backupfilerna
        SET @backupfile = @backupPath + RTrim(REPLACE(@@SERVERNAME, '\', '-')) + '\' + RTrim(REPLACE(@DBname, ' ', '_')) + '.bak'

        -- Skriver info till användaren/loggen
        PRINT ''
        PRINT '--- DB-backup to: ' + @backupfile

        -- Kör backup
        BACKUP DATABASE @DBname TO DISK = @backupfile WITH NAME = 'Scripted backup', DESCRIPTION = 'Full Backup', INIT

        -- Fortsätter loopen
        FETCH NEXT FROM myCur INTO @DBname
END
CLOSE myCur
DEALLOCATE myCur
-- -------------------------------------------------------------------

Translogg-backup (Körs lämpligtvis varje halvtimme mellan 06:00 & 19:00, om det nu är tiderna då användare arbetar i databaserna)

-- -------------------------------------------------------------------
--  Funktion: Backup av transaktionsloggen på lokala databaser
--  Skapat:   2007-05-10 av 
--
--  Filerna namnsätts \\XYZ\DBBackup\SQLSERVER-INSTANS\DBnamn.bak
-- -------------------------------------------------------------------

-- Deklaration av variabler
DECLARE
        @backupPath sysname,
        @DBname sysname,
        @backupfile sysname

-- Konfiguration
SET @backupPath = '\\XYZ\DBBackup\'

-- -------------------------------------------------------------------
DECLARE myCur CURSOR
        -- Läser ur samtliga lokala databaser (förutom tempdb & model), sortera systemdatabaser först därefter i namnordning
        FOR SELECT NAME FROM MASTER..SYSDATABASES WHERE NAME NOT IN ('tempdb', 'model') ORDER BY SID, NAME
        FOR READ ONLY
OPEN myCur

-- Start av loop
FETCH NEXT FROM myCur INTO @DBname
WHILE (@@FETCH_STATUS <> -1) BEGIN
        -- Kollar att det är recoverymodel full och att den inte är skrivskyddad
        IF (convert(sysname,DatabasePropertyEx(@DBname,'Recovery')) = 'FULL') AND (convert(sysname,DatabasePropertyEx(@DBname,'Updateability')) = 'READ_WRITE') BEGIN
                -- Sätter sökvägen för backupfilerna
                SET @backupfile = @backupPath + RTrim(REPLACE(@@SERVERNAME, '\', '-')) + '\' + RTrim(REPLACE(@DBname, ' ', '_')) + '.bak'

                -- Skriver info till användaren/loggen
                PRINT ''
                PRINT '--- Log-backup to: ' + @backupfile

                -- Kör backup
                BACKUP LOG @DBname TO DISK = @backupfile WITH NAME = 'Scripted backup', DESCRIPTION = 'Logbackup', NOINIT
        END

        -- Fortsätter loopen
        FETCH NEXT FROM myCur INTO @DBname
END
CLOSE myCur
DEALLOCATE myCur
-- -------------------------------------------------------------------

Det som är (mest) imponerande är att det finns kommentarer! :-)


SQL-Script: logTrunkering

Ett litet SQL-script som trunkerar överväxta log-filer.

Script: logTrunkering.sql


Bygga om index i en SQL-DB

Så här bygger man om alla index i en SQL-databas.

DECLARE @TableName varchar(255)

DECLARE TableCursor CURSOR FOR
SELECT table_name FROM information_schema.TABLES
WHERE table_type = ‘base TABLE

OPEN TableCursor

        FETCH NEXT FROM TableCursor INTO @TableName
        WHILE @@FETCH_STATUS = 0
        BEGIN
                DBCC DBREINDEX(@TableName,‘ ‘,90)
                PRINT ‘Reindex INDEX ON TABLE: ‘ + @TableName
                FETCH NEXT FROM TableCursor INTO @TableName
        END

CLOSE TableCursor

DEALLOCATE TableCursor
 


Uppdatera GroomDays i SCDW

För att minska ner storleken på SystemCenterReporting-databasen kan man dra ner på antalet dagar man sparar data.

Genom att köra det här SQL-scriptet så drar man ner till 7 dagar.

USE SystemCenterReporting

Declare @Groomdays int
SELECT @Groomdays=7

exec p_updateGroomDays ‘SC_SampledNumericDataFact_Table’, @Groomdays
exec p_updateGroomDays ‘SC_AlertFact_Table’, @Groomdays
exec p_updateGroomDays ‘SC_EventParameterFact_Table’, @Groomdays
exec p_updateGroomDays ‘SC_AlertToEventFact_Table’, @Groomdays
exec p_updateGroomDays ‘SC_EventFact_Table’, @Groomdays
exec p_updateGroomDays ‘SC_AlertHistoryFact_Table’, @Groomdays
 


Backup/Restore av SQL-databas

Jag har nog svarat femtielva gånger på varför användarna inte följer med när man flyttar en SQL-databas från en server till en annan

Så här är det.
- Användarna finns i databasen MSDB
- Rättigheterna finns i den “vanliga” databasen

Så för att göra det enkelt… om du ska flytta en liten databas med ett fåtal användare, exempelvis ett datastore för en citrix-farm, gör så här:
På gamla servern:
- Ta backup av databasen
På nya server:
- Skapa upp en användare med samma namn som på gamla servern
- Kör restore av databasen
- Kicka igång Query Analyzern
- Se till att du är ansluten mot rätt databas (Finns en drop-down i mitten av toolbaren) eller så använder du use-kommandot
- Kör:

USE DatabasensNamn
sp_change_users_login @Action = ‘Auto_Fix’, @UserNamePattern  = ‘minfinauser’
 

Ja, det är bra att ändra minfinauser mot rätt namn :-)

Nu ska den ha länkat ihop din nya användare med rätt rättigheter i din gamla databas.