DSC 配置疑难解答



我正在寻找有关如何对 DSC 配置进行故障排除的建议。我正在使用 Azure DSC 扩展,日志是:

VERBOSE: [2017-09-08 02:56:48Z] [VERBOSE] [sql-sql-0]:                         
[[xSqlServer]ConfigureSqlServerWithAlwaysOn] The file "MSDBLog" has been 
modified in the system catalog. The new path will be used the next time the 
database is started.
VERBOSE: [2017-09-08 02:56:50Z] [ERROR] Exception setting "StartupParameters": 
"STARTUPPARAMETERS: unknown property."
VERBOSE: [2017-09-08 02:56:50Z] [VERBOSE] [sql-sql-0]:                         
[[xSqlServer]ConfigureSqlServerWithAlwaysOn] Stopping SQL server instance 
'MSSQLSERVER' ...
VERBOSE: [2017-09-08 02:57:07Z] [VERBOSE] [sql-sql-0]:                         
[[xSqlServer]ConfigureSqlServerWithAlwaysOn] Starting SQL server instance 
'MSSQLSERVER' ...

从那里它只是冻结然后超时。 这是我的 DSC 配置中唯一使用 xSQLServer 的部分:

xSqlServer ConfigureSqlServerWithAlwaysOn
{
InstanceName = $env:COMPUTERNAME
SqlAdministratorCredential = $Admincreds
ServiceCredential = $SQLCreds
MaxDegreeOfParallelism = 1
FilePath = "F:DATA"
LogPath = "G:LOG"
DomainAdministratorCredential = $DomainFQDNCreds
DependsOn = "[xSqlLogin]AddSqlServerServiceAccountToSysadminServerRole"
}

这是 MicrosoftAzure_xSqlServer.psm1 中提及"启动"的部分:

function Alter-SystemDatabaseLocation([string]$FilePath, [string]$LogPath,[PSCredential]$ServiceCredential )
{
$permissionString = $ServiceCredential.UserName+":(OI)(CI)(F)"
icacls $FilePath /grant $permissionString
icacls $LogPath /grant $permissionString
Invoke-Sqlcmd "Use master"
Invoke-sqlCmd "ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = '$FilePathtempdb.mdf');"
Invoke-sqlCmd "ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = '$LogPathtemplog.ldf');"
Invoke-sqlCmd "ALTER DATABASE model MODIFY FILE (NAME = modeldev, FILENAME = '$FilePathmodel.mdf');"
Invoke-sqlCmd "ALTER DATABASE model MODIFY FILE (NAME = modellog, FILENAME = '$LogPathmodellog.ldf');"
Invoke-sqlCmd "ALTER DATABASE msdb MODIFY FILE (NAME = MSDBData, FILENAME = '$FilePathmsdbdata.mdf');"
Invoke-sqlCmd "ALTER DATABASE msdb MODIFY FILE (NAME = MSDBLog, FILENAME = '$LogPathmsdblog.ldf');"
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SqlWmiManagement')| Out-Null
$smowmi = New-Object Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer 
$sqlsvc = $smowmi.Services | Where-Object {$_.Name -like 'MSSQL*'} 
$OldStartupParameters = $sqlsvc.StartupParameters
$params = '-d'+$FilePath+'master.mdf;-e'+$LogPath+'ERRORLOG;-l'+$LogPath+'mastlog.ldf'
$sqlsvc[1].StartupParameters = $params
$sqlsvc[1].Alter()
}

我下一步应该怎么做才能理解这个问题? 如果有任何不同,我正在尝试使用适用于Windows Server 2012 R2和SQL Server 2014的模板和DSC代码在Windows Server 2016和SQL Server 2016 SP1上创建SQL Server Always On 可用性组。

我的建议是使用现有的工作代码;)我认为复制粘贴博客文章是没有意义的。但我会在这里留下相关文件的链接。

友情链接:
1. DSC 模块
2.ARM 模板。注意:部署 sql 的 Arm 模板需要已具有 vnet 和域。此外,尝试在该框架之外部署此模板将遇到困难,因此可能只需复制 dsc 扩展\dsc 脚本并在部署中使用。
3. 参数文件示例

xSqlServer(新的)无法将sql移动到另一个磁盘,因此您只能使用自定义脚本或旧的xSql模块。另外,请注意,软件包内的 DSC 模块被修改了。这些 DSC 配置不适用于未修改的模块版本(xSqlCreateVirtualDataDiskxDatabasexSQLServerAlwaysOnAvailabilityGroupListener可能是其他一些模块,我现在不记得了)。

PS. 完成配置并修补相关部分并不是一个愉快的旅程...... .PPS。该存储库还包含 ADD 的 DSC 配置,这些配置也可以并行运行(与官方示例相比)。

试试这个。

$sqlsvc = $smowmi.Services | Where-Object {$_.Name -eq 'MSSQLSERVER'}  
$OldStartupParameters = $sqlsvc.StartupParameters
$params = '-d'+$FilePath+'master.mdf;-e'+$LogPath+'ERRORLOG;-l'+$LogPath+'mastlog.ldf'
$sqlsvc[0].StartupParameters = $params
$sqlsvc[0].Alter()

最新更新