Archive for the ‘SQL’ Category.

How to transfer logins and passwords between instances of SQL Server


Når man har flyttet en SQL database fra en server til en anden, er problemet at man ikke får brugernavn og password med.
Når man prøver at connecte til databasen på den nye server, får man en login fejl.
Nedenstående procedure beskriver hvordan man flytter brugernavn og password.
http://support.microsoft.com/kb/246133

Endvidere, hvis man prøver at restore en SQL database over på en anden server får man samme problem.
Jeg tidligere brugt nedenstående link med stor succes, når jeg skulle restore over på en anden server.
http://www.smallbizserver.net/tabid/266/articleType/ArticleView/ArticleID/171/PageID/226/Default.aspx

Recover en SQL database uden logfil og backup


For SQL 2000:


Jeg var ude hos en kunde, som kører systemet “Exchange Central” på en SQL 2000 server.
Logfilen var blevet korrupt og databasen var gået i “suspect mode”.


Logfilen var på ca. 80 GB og havde taget det meste af pladsen på deres log-partition. Retention tid for deres sidste native SQL backup var blevet overskrevet.
Jeg fandt så nedenstående udokumenteret procedure og fulgte den slavisk. Det virkedetilsyneladende helt fint.
http://blog.spaceprogram.com/2002/06/recovering-from-deleted-log-file-on_12.html

Problemet var bare, at jeg ikke fik restoret “stored procedure”, som “Exchange Central” var afhængig af. Så jeg måtte finde en anden løsning.
Efter en kort google søgning, fandt jeg nedenstående restore procedure (udokumenteret) og den virkede helt perfekt.

Trin 1 Backup the current database file:
Stop SQL Server service.
Backup den eksisterende database (i mit tilfælde hed den ExchangeCentral.MDF).
Rename Corrupted log file.
Start SQL Server service.

Trin 2 Change the database context to Master and allow updates to system tables:
Use Master
Go sp_configure ‘allow updates’, 1
reconfigure with override
Go

Trin 3 Set the database in Emergency (bypass recovery) mode:
select * from sysdatabases where name = ‘ExchangeCentral’
– note the value of the status column for later use in # 5
begin tran
update
sysdatabases set status = 32768 where name = ‘ExchangeCentral’
– Verify one row is updated before committing
commit tran


Stop and restart SQL server.

Trin 4 Call DBCC REBUILD_LOG command to rebuild a “blank” log file based on the suspected db:
DBCC rebuild_log(‘ExchangeCentral’,‘D:SQLlogExchangeCentral_log.LDF’)

Trin 5 Set the database in single-user mode and run DBCC CHECKDB to validate physical consistency:
sp_dboption ‘ExchangeCentral’, ‘single user’, ‘true’
DBCC checkdb(‘ExchangeCentral’)
Go
begin tran
update
sysdatabases set status = 0 where name = ‘ExchangeCentral’
– verify one row is updated before committing
commit tran
Go

Trin 6 Turn off the updates to system tables by using:
sp_configure ‘allow updates’, 0
reconfigure with override
Go

Trin 7 How to stop the transaction log of a SQL Server database from growing unexpectedly:
http://support.microsoft.com/kb/873235

For SQL 2005 – Denne metode har jeg ikke testet endnu.
Create a new database with the same name and logical file names.
Stop SQL Server service.
Swap in the old mdf file with a copy of the rescued mdf (no logfile).
Start SQL Server service and let the database attempt to be recovered and then go into suspect mode.
Put the database into emergency mode with alter database dbname set emergency
Run DBCC CHECKDB (dbname, REPAIR_ALLOW_DATA_LOSS) which will rebuild the log and run full repair.
For mere info omkring ovenstående process se dette link.
http://blogs.msdn.com/sqlserverstorageengine/archive/2006/06/18/636105.aspx