Arkiv för kategori ‘Databas’

h1

Mera ässquäll

juni 3, 2009

Här kommer en snabbis, näh inte det ni önskar om ni inte gillar att torterade av sql-info…

xp_logevent siffra, info, typ

Där siffra är över 50000.
Info är det du vill logga.
Typ är warning, error eller informational.

Vad det handlar om? Loggning från t-sql till eventviewern. Möcke möcke bra.

//JFR

h1

Index backup

maj 27, 2009

Man kan inte bara scripta ut index från studion i sql2005. Så här kommer ett litet script hur man gör.

DECLARE cIX CURSOR FOR
SELECT OBJECT_NAME(SI.Object_ID), SI.Object_ID, SI.Name, SI.Index_ID
FROM Sys.Indexes SI
LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC ON SI.Name = TC.CONSTRAINT_NAME AND OBJECT_NAME(SI.Object_ID) = TC.TABLE_NAME
WHERE TC.CONSTRAINT_NAME IS NULL
AND OBJECTPROPERTY(SI.Object_ID, ”IsUserTable’) = 1
ORDER BY OBJECT_NAME(SI.Object_ID), SI.Index_ID

DECLARE @IxTable SYSNAME
DECLARE @IxTableID INT
DECLARE @IxName SYSNAME
DECLARE @IxID INT

– Loop through all indexes
OPEN cIX
FETCH NEXT FROM cIX INTO @IxTable, @IxTableID, @IxName, @IxID
WHILE (@@FETCH_STATUS = 0)
BEGIN
DECLARE @IXSQL NVARCHAR(4000) SET @PKSQL = ”
SET @IXSQL = ”CREATE ”

– Check if the index is unique
IF (INDEXPROPERTY(@IxTableID, @IxName, ”IsUnique’) = 1)
SET @IXSQL = @IXSQL + ”UNIQUE ”
– Check if the index is clustered
IF (INDEXPROPERTY(@IxTableID, @IxName, ”IsClustered’) = 1)
SET @IXSQL = @IXSQL + ”CLUSTERED ”

SET @IXSQL = @IXSQL + ”INDEX ” + @IxName + ” ON ” + @IxTable + ”(”

– Get all columns of the index
DECLARE cIxColumn CURSOR FOR
SELECT SC.Name
FROM Sys.Index_Columns IC
JOIN Sys.Columns SC ON IC.Object_ID = SC.Object_ID AND IC.Column_ID = SC.Column_ID
WHERE IC.Object_ID = @IxTableID AND Index_ID = @IxID
ORDER BY IC.Index_Column_ID

DECLARE @IxColumn SYSNAME
DECLARE @IxFirstColumn BIT SET @IxFirstColumn = 1

– Loop throug all columns of the index and append them to the CREATE statement
OPEN cIxColumn
FETCH NEXT FROM cIxColumn INTO @IxColumn
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF (@IxFirstColumn = 1)
SET @IxFirstColumn = 0
ELSE
SET @IXSQL = @IXSQL + ”, ”

SET @IXSQL = @IXSQL + @IxColumn

FETCH NEXT FROM cIxColumn INTO @IxColumn
END
CLOSE cIxColumn
DEALLOCATE cIxColumn

SET @IXSQL = @IXSQL + ”)”
– Print out the CREATE statement for the index
PRINT @IXSQL

FETCH NEXT FROM cIX INTO @IxTable, @IxTableID, @IxName, @IxID
END

CLOSE cIX
DEALLOCATE cIX

/JFR

h1

Dataskyffling del 2

april 17, 2009

För att spinna vidare på min Ninja-kollegas resonemang om dataskyffling så kan jag tipsa om ett underbart verktyg som har sparat mig och mina kollegor MÅNGA timmars jobb. Om man inte är beroende av att datasynkronisering sker i realtid finns ett alldeles utmärkt verktyg från Red Gate som heter SQL Compare. Med hjälp av verktyget kan man både synka data och struktur, jag har använt det flera år och det fungerar helt perfekt, enkelt och snabbt att använda. Det enda negativa jag kan komma på om det är att det inte är gratis ;)

 Det finns också liknande funktionalitet i Visual Studio Database Edition, men detta har jag tyvärr inte haft möjlighet att testa ännu.

Läs mer om SQL Compare här: http://www.red-gate.com/products/SQL_Compare/index.htm

/JK

h1

Dataskyffling via fil

april 17, 2009

Ofta har man stött på att man ska skyffla data från ett ställe till ett annat. Replikering eller inte, så ibland så finns inte den möjligheten.

Enklast möjliga som jag då kommit på är helt enkelt är att i varje tabell trigga upp att när en ändring sker skriva den förändringen till en ändringstabell, i form av exakta kommandot.

Tex: delete from tabellnamn where id=1

Om det inte är i realtid som ändringarna måste ske, så kan man sedan med jämna mellanrum köra sqlcommand och tömma alla rader till en textfil.

Sedan överför man den text-filen till den andra ”speglade” basen, på det sättet som det är möjligt. Själva dumpningen är blixtsnabb, och en miljon rader kan gå på ngn sekund.

Kom ihåg att sätta primärnyckel på en räknare!

På andra sidan kan man läsa in textfilen rakt av eftersom det är rena sql-kommandon det handlar om.

Kom ihåg:
-Att en backup/restore initialt behövs på den ”speglade”
-Att aktivera xpcmdshell

//JFR

Följ

Få meddelanden om nya inlägg via e-post.