ConfigureSQLDataLocations.ps1 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. # Copyright (c) Microsoft Corporation. All rights reserved.
  2. #
  3. # THIS SAMPLE CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
  4. # WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
  5. # WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
  6. # IF THIS CODE AND INFORMATION IS MODIFIED, THE ENTIRE RISK OF USE OR RESULTS IN
  7. # CONNECTION WITH THE USE OF THIS CODE AND INFORMATION REMAINS WITH THE USER.
  8. # The purpose of this script is
  9. # 1. Move all Data Files to E Drive of the Server
  10. # 2. Move all Log Files to F Drive of the Server
  11. # 3. Move Error Log and TraceFiles to E Drive of the Server
  12. # 4. Configure TempDB on the D Drive of the Server
  13. # 5. Configure backup on the F Drive of the Server
  14. Try
  15. {
  16. Import-Module sqlps -DisableNameChecking
  17. $SMOWmiserver = New-Object ('Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer') $env:COMPUTERNAME
  18. $ChangeService=$SMOWmiserver.Services | where {$_.name -eq "MSSQLSERVER"}
  19. If($ChangeService.ServiceState -eq "Stopped")
  20. {
  21. $ChangeService.Start()
  22. }
  23. #Give Time for the Service to Start.
  24. start-sleep -Seconds 5
  25. Write-Host "****************Configuring the TempDB location and Files *********************"
  26. $TSQLScript = ""
  27. $TSQLScript = " ALTER DATABASE tempdb MODIFY FILE ( NAME = N'tempdev',FILENAME = N'D:\tempdev.mdf' , SIZE = 500MB , FILEGROWTH = 50MB)
  28. GO
  29. ALTER DATABASE tempdb MODIFY FILE (NAME = N'templog', FILENAME = N'D:\templog.ldf', SIZE = 500MB, FILEGROWTH = 10MB)
  30. Go
  31. ALTER DATABASE tempdb Add FILE ( NAME = N'tempdev2',FILENAME = N'D:\tempdev2.ndf' , SIZE = 500MB , FILEGROWTH = 50MB)
  32. GO
  33. "
  34. # Execute the T-SQL script against the SQL Server instance
  35. Invoke-SqlCmd -ServerInstance . -Query $TSQLScript -Database "master" -verbose -QueryTimeout 0 | Out-File -filePath "C:\logs.txt"
  36. #Create Folders for the Data, Logs and Trace Files
  37. $datapath = "F:\Data\"
  38. $logpath = "G:\Logs\"
  39. $ErrorLog = "F:\ErrorLogs\"
  40. $BackupPath = "G:\Backups"
  41. [IO.Directory]::CreateDirectory($datapath)
  42. [IO.Directory]::CreateDirectory($logpath)
  43. [IO.Directory]::CreateDirectory($ErrorLog)
  44. [IO.Directory]::CreateDirectory($BackupPath)
  45. Write-Host "**************** Configuring Default Locations for the Server ************"
  46. $ChangeService.Refresh()
  47. $StartupPram = $ChangeService.StartupParameters.Split(';')
  48. $MasterDataFile = $StartupPram[0].Substring(2)
  49. $MasterLogFile = $StartupPram[2].Substring(2)
  50. # Stop SQL and Move the Master MDF/LDF Files
  51. $ChangeService.Stop()
  52. Start-Sleep 5
  53. [IO.File]::Copy($MasterDataFile, "F:\Data\Master.mdf")
  54. [IO.File]::Copy($MasterLogFile, "G:\Logs\Mastlog.ldf")
  55. #$ChangeService.StartupParameters = "-dE:\Data\Master.mdf;-eE:\ErrorLogs\Errorlog;-lF:\Logs\Mastlog.ldf"
  56. $ChangeService.Refresh()
  57. $ChangeService.Start()
  58. While ($ChangeService.ServiceState -ne "Running")
  59. {
  60. $ChangeService.Refresh()
  61. }
  62. #Change the Startup parameters and Instance Properties to reflect new locations
  63. $SQLObject = New-Object Microsoft.SqlServer.Management.Smo.Server($env:COMPUTERNAME)
  64. $SQLObject.Settings.BackupDirectory = $BackupPath
  65. $SQLObject.Settings.DefaultFile = $datapath
  66. $SQLObject.Settings.DefaultLog = $logpath
  67. $SQLObject.Alter()
  68. $SQLObject.Settings.Alter()
  69. #Change the SQL Server Startup Parameters -
  70. Write-Host "********* Moving the System DB's to the Data Drives **********"
  71. $CurrentFileLocations = $MasterDataFile.Substring(0,$MasterDataFile.Length-10)
  72. $SQLQuery = "ALTER DATABASE Model MODIFY FILE ( NAME = modeldev , FILENAME = 'F:\Data\model.mdf')
  73. Go
  74. ALTER DATABASE Model MODIFY FILE ( NAME = modellog , FILENAME = 'G:\Logs\modellog.ldf')
  75. Go
  76. ALTER DATABASE MSDB MODIFY FILE ( NAME = MSDBData , FILENAME = 'F:\Data\MSDBData.mdf')
  77. Go
  78. ALTER DATABASE MSDB MODIFY FILE ( NAME = MSDBLog , FILENAME = 'G:\Logs\MSDBLog.ldf')
  79. Go
  80. "
  81. Invoke-SqlCmd -ServerInstance . -Query $SQLQuery -Database "master" -verbose -QueryTimeout 0 | Out-File -filePath "C:\logs.txt"
  82. #Stop and Restart SQL for the values to take effect
  83. $ChangeService.Stop()
  84. Start-Sleep 30
  85. [IO.File]::Copy($CurrentFileLocations+"model.mdf", "F:\Data\model.mdf")
  86. [IO.File]::Copy($CurrentFileLocations+"modellog.ldf", "G:\Logs\modellog.ldf")
  87. [IO.File]::Copy($CurrentFileLocations+"MSDBData.mdf", "F:\Data\MSDBData.mdf")
  88. [IO.File]::Copy($CurrentFileLocations+"MSDBLog.ldf", "G:\Logs\MSDBLog.ldf")
  89. $ChangeService.Refresh()
  90. $ChangeService.Start()
  91. Start-Sleep 5
  92. While ($ChangeService.ServiceState -ne "Running")
  93. {
  94. $ChangeService.Refresh()
  95. $ChangeService.ServiceState
  96. }
  97. #Closing Try Block
  98. }
  99. Catch
  100. {
  101. Write-Host "********** Erorr in configuration of the SQL Data Locations ************" -ForegroundColor Red
  102. }