Rendszeradatbázisok mozgatása SQL 2008-ban
Az új verzió mindig jobb, szebb, gyorsabb, kényelmesebb, stb. És tényleg: most először kellett elmozgatnom SQL 2008 szerver rendszeradatbázisait, és király volt. Aki csinált ilyet 2005 vagy 2000 alatt, az tudja, hogy milyen szívás mindenféle hülye trace flaggel indítgatni a SQL-t, aztán rossz sorrendben attacsolni a modelt meg az msdb-t. Ehhez képest az SQL 2008-ban négyféle adatbázis van:
- Resource: Ő már nem is az adatfájloknál, hanem a programbinárisoknál lakik, hozzá se lehet nyúlni (és nem is kell).
- master: Változatlanul, a service startup paraméterét kell átírni.
- tempdb: Változatlanul alter database és nem kell fájlt másolni.
- a többi: (igen, model, msdb is többi) Alter database, szerver leáll, fájlmásolás, szerver start.
Annyira egyszerű volt, hogy lescripteltem az egészet, egy SQL, egy Powershell:
ALTER DATABASE model MODIFY FILE (NAME = modeldev, FILENAME = 'D:\mssql10\db_data\model.mdf') ALTER DATABASE model MODIFY FILE (NAME = modellog, FILENAME = 'E:\mssql10\db_logs\modellog.ldf') ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'D:\mssql10\db_data\tempdb.mdf') ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'E:\mssql10\db_logs\templog.ldf') ALTER DATABASE msdb MODIFY FILE (NAME = MSDBData, FILENAME = 'D:\mssql10\db_data\MSDBData.mdf') ALTER DATABASE msdb MODIFY FILE (NAME = MSDBLog, FILENAME = 'E:\mssql10\db_logs\MSDBLog.ldf')
# atirjuk a registryben a startup parametereket Set-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.INSTANCENAME\MSSQLServer\Parameters' -name "SQLArg0" -value "-dD:\mssql10\db_data\master.mdf" Set-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.INSTANCENAME\MSSQLServer\Parameters' -name "SQLArg2" -value "-eD:\mssql10\SrvLogs\ERRORLOG" Set-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.INSTANCENAME\MSSQLServer\Parameters' -name "SQLArg1" -value "-lE:\mssql10\db_logs\mastlog.ldf" # SQL stop - a force azert kell, h a dependens service-ek is megalljanak Stop-Service 'MSSQL$INSTANCENAME' -Force Start-Sleep 10 # kopi adatbazis fajlok Move-Item 'D:\mssql10\db_data\MSSQL10.INSTANCENAME\MSSQL\DATA\*.mdf' 'D:\mssql10\db_data' Move-Item 'D:\mssql10\db_data\MSSQL10.INSTANCENAME\MSSQL\DATA\*.ldf' 'E:\mssql10\db_logs' #Start-Service - az agent elinditja a SQL-t magat is Start-Service 'SQLAgent$INSTANCENAME'
És kész is vagyunk… Scriptelni jó.

