This weekend I set up some SQL vNext virtual machines, two on Windows and one on Linux so that I could test some scenarios and build an availability group.
IMPORTANT NOTE :- The names of dbatools commands with a Sql prefix WILL CHANGE in a later release of dbatools. dbatools will use Dba throughout in the future as the sqlserver PowerShell module uses the Sql prefix
I used PowerShell version 5.1.14393.693 and SQL Server vNext CTP 1.3 running on Windows Server 2016 and Ubuntu 16.04 in this blog post
I set up one Windows box with some changes to the default configuration, these are for my lab only.
Min Server Memory to 2Gb
Max Server Memory to 6Gb
Remote Admin Connections to 1
Backup Compression to 1
Ad Hoc Distributed Queries to 1
I can do this in PowerShell by creating a SQL SMO Server object using Connect-DbaSqlServer from dbatools and then altering the Configuration Properties values and calling the Alter() method
$WinSQl1 = 'SQLvNextN1' $win1 = Connect-DbaSqlServer -SqlServer $WinSQl1 $win1.Configuration.Properties['DefaultBackupCompression'].ConfigValue = 1 $win1.Configuration.Properties['MinServerMemory'].ConfigValue = 2048 $win1.Configuration.Properties['MaxServerMemory'].ConfigValue = 6144 $win1.Configuration.Properties['RemoteAccess'].ConfigValue = 1 $win1.Configuration.Properties['OptimizeAdhocWorkloads'].ConfigValue = 1 $win1.Configuration.Alter()
I can see the change by using the Get-DbaSpConfigure from the popular PowerShell module dbatools. I like to output to Out-GridView (Alias ogv at the CLI)
$WinSQl1 = 'SQLvNextN1' Get-DbaSpConfigure -SqlServer $WinSQl1 | ogv
Out-GridView can filter in the top bar and it works very quickly. It is a very useful tool
You can also rearrange the columns and use the Add Criteria button to filter your results
You can use Export-SQLSpConfigure to export the configuration to a .sql file which is useful for DR or documentation purposes. There is also a corresponding Import-SqlSpConfigure command
$WinSQl1 = 'SQLvNextN1' $WinConfigPath = 'C:\Temp\Winconfig.sql' Export-SqlSpConfigure -SqlServer $WinSQl1 -Path $winConfigPath notepad $winConfigPath
Chrissy LeMaire b | t showed a neat trick when we were in Utrecht to compare the configuration of two servers
$WinSQl1 = 'SQLvNextN1' $WinSQl2 = 'SQLvNextN2' $Win1SPConfigure = Get-DbaSpConfigure -SqlServer $WinSQl1 $Win2SPConfigure = Get-DbaSpConfigure -SqlServer $WinSQl2 $propcompare = foreach ($prop in $Win1SPConfigure) { [pscustomobject]@{ Config = $prop.DisplayName 'Windows Node1 setting' = $prop.RunningValue 'Windows Node2 Setting' = $Win2SPConfigure | Where DisplayName -eq $prop.DisplayName | Select -ExpandProperty RunningValue } } $propcompare | ogv
Now we can copy the configuration from SQLvNextN1 to SQLvNextN2 using the Copy-SqlSpConfigure command
$WinSQl1 = 'SQLvNextN1' $WinSQl2 = 'SQLvNextN2' Copy-SqlSpConfigure -Source $WinSQl1 -Destination $WinSQl2
and we can see that those configurations are now the same for those two servers by comparing them like before.
We can use Get-DbaSpConfigure with Linux servers as well but we need to use SQL authentication like so (No, I don’t know why I used two v’s!)
$linuxSQL = 'LinuxvvNext' $cred = Get-Credential -UserName SA -Message "Linux SQL Auth" $linuxSpConfigure = Get-DbaSpConfigure -SqlServer $linuxSQL -SqlCredential $cred $linuxSpConfigure | ogv
and compare the three servers like so
$WinSQl1 = 'SQLvNextN1' $WinSQl2 = 'SQLvNextN2' $linuxSQL = 'LinuxvvNext' $cred = Get-Credential -UserName SA -Message "Linux SQL Auth" <div>$Win1SPConfigure = Get-DbaSpConfigure -SqlServer $WinSQl1 $Win2SPConfigure = Get-DbaSpConfigure -SqlServer $WinSQl2 $linuxSpConfigure = Get-DbaSpConfigure -SqlServer $linuxSQL -SqlCredential $cred $propcompare = foreach ($prop in $Win1SPConfigure) { [pscustomobject]@{ Config = $prop.DisplayName 'Windows Node1 setting' = $prop.RunningValue 'Windows Node2 Setting' = $Win2SPConfigure | Where DisplayName -eq $prop.DisplayName | Select -ExpandProperty RunningValue 'Linux Setting' = $linuxSpConfigure | Where DisplayName -eq $prop.DisplayName | Select -ExpandProperty RunningValue } } $propcompare | ogv
and see the differences for the Linux Server
we can export the Linux configuration using Export-SqlSpConfigure
So now lets copy the configuration changes from the Windows Server to the Linux Server
There was some Red text there you will notice. This is because there are unsupported features in Linux as you can see in the SQL Server on Linux Release Notes The errors from the command are
Database Mail XPs to 0. Feature may not be supported.
SMO and DMO XPs to 1. Feature may not be supported.
Ole Automation Procedures to 0. Feature may not be supported.
xp_cmdshell to 0. Feature may not be supported.
Ad Hoc Distributed Queries to 0. Feature may not be supported.
Replication XPs to 0. Feature may not be supported.
contained database authentication to 0. Feature may not be supported.
hadoop connectivity to 0. Feature may not be supported.
polybase network encryption to 1. Feature may not be supported.
remote data archive to 0. Feature may not be supported.
allow polybase export to 0. Feature may not be supported.
But if we compare the configurations again, we can see that the settings we wanted have been altered successfully
Lets reset the configuration on the Linux server using Import-SqlSpConfigure and the Linuxconfig-backup.sql file created before any changes
Interestingly this time we only had an error for Database Mail XPs, but as you can see below the Linux Configuration has been reset back to the original values.
Lets export the configuration from the Windows server to a file and import it onto the Linux server to see what happens
Again only an error for Database Mail XPs, and we can see the configurations are again matching.
Hopefully, this post has been of use in exploring the *SpConfigure* commands in dbatools and how you can use them to get the sp_configure output, compare it between servers, Export and import it to and from files, as well as copy it between servers for both Windows and Linux. Remember these commands have been tested from SQL 2000 to SQL vNext so they should work for you across your estate
Happy Automating!