Lagt .ldf filen = transaktionsloggen fel, eller behöver flytta den?

Oopps! Upgrade your browser pretty please.Oopps! Upgrade your browser pretty please.

Ibland blir det fel från början. Andra gånger finns det andra orsaker, som att en disk är full, olika databaser ska hållas isär på disk av administrativa, säkerhets- eller kanske performance skäl. Anledningarna kan vara olika till varför man vill flytta en användardatabas .ldf fil (transaktionslog filen) till en annan plats på disken eller till en annan disk. Om det är så att man har ett fönster där man kan ha exklusivt tillträde till databasen så finns det ändå flera sätt att utföra det på.

Backup+restore (med move file), detach+attach är två av ett flertal tänkbara sätt. Jag provade ett tredje sätt idag, och kände att det var ganska rättframt och enkelt, vilket kan vara viktigt när det är bråttom. Man kör först ett T-SQL skript, sen lite manuellt grepp mha managment studio, sen en operation i filsystemet följt av ett till manuellt grepp i managment studio. Det här tillvägagångssättet kräver att userdatabasen kan vara offline i någon minut, eller så lång tid det tar att utföra handgreppen (filkopieringstiden fram för allt som kan ta lite tid om det är en stor fil).

Se alltid till att ha backuper av databasen säkrade (backup tagen och backupfilerna kopierade till säkert sekundärmedia),  innan du börjar mixtra med databaserna. Det här sättet går ut på att du först talar om för SQL Server hur du skulle vilja att det såg ut mha ALTER DATABASE kommandot, då görs ändringen i systemdatabasen som SQL Server läser nästa gång databasen startas upp. Sedan tar du databasen offline, flyttar logfilen dit du vill ha den (observera att enhet, sökväg och filnamn är hyperviktigt att få till rätt både vid filflytten och i ALTER kommandot) och till sist sätter du databasen online igen. Det du behöver förbereda är vad logiska filnamnet är för logfilen, och att bestämma och se till att sökvägen, till dit du vill flytta transaktionslogfilen existerar. Exempel: flytta logfilen från där den ligger (spelar ingen roll var den ligger innan då vi använder logiska filnamnet) till en ny plats på f: under serversqlservertxlog mappen, och ge den namnet test_log.ldf (samma som den hette innan i mitt fall).

– 1) bestäm destination för .ldf filen och bygg mappstruktur som stämmer med det beslutet

– 2) Förbered sql server på ändringen: Gör ändringarna i systemdatabasen, i ett ”management studio query window” use master go ALTER DATABASE test MODIFY FILE ( NAME = test_log, FILENAME = ‘f:ServerSQLServerTXLOGtest_log.ldf’ )

–ger resultatet: –”The file ”test_log” has been modified in the system catalog. The new path will be used the next time the database is started.”

-3) Sätt databasen offline: Utför följande i ‘Management Studio’: Högerklick på databasen, välj ‘tasks’, ‘bring offline’

– 4)  Flytta filen: Öppna filhanteraren och flytta filen från källsökvägen till destinationssökvägen (efter att ha återskapat katalogstrukturen om det är en ny katalogstruktur för den enheten)

– 5) Sätt databasen online igen: Utför följande i ‘Management Studio’: Högerklick databasen, tasks, bring online.

Databasen startas nu upp med uppgiften att transaktionslogfilen ligger på f:serverSQLServerTXLOGtest_log.ldf, som om den aldrig funnits på annan plats.   Jonas Bergström