【问题标题】:Troubleshooting DSC configurationDSC 配置故障排除
【发布时间】:2017-09-08 04:34:52
【问题描述】:

我正在寻找有关如何对 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 = '$FilePath\tempdb.mdf');"
    Invoke-sqlCmd "ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = '$LogPath\templog.ldf');"

    Invoke-sqlCmd "ALTER DATABASE model MODIFY FILE (NAME = modeldev, FILENAME = '$FilePath\model.mdf');"
    Invoke-sqlCmd "ALTER DATABASE model MODIFY FILE (NAME = modellog, FILENAME = '$LogPath\modellog.ldf');"

    Invoke-sqlCmd "ALTER DATABASE msdb MODIFY FILE (NAME = MSDBData, FILENAME = '$FilePath\msdbdata.mdf');"
    Invoke-sqlCmd "ALTER DATABASE msdb MODIFY FILE (NAME = MSDBLog, FILENAME = '$LogPath\msdblog.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 可用性组。

【问题讨论】:

  • 我稍微修改了代码,如果你使用 sql iaas 扩展,你可以完全删除 xsql 模块,这在我看来非常好。代码在回购中

标签: sql-server powershell azure dsc


【解决方案1】:

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

链接:
1.DSC modules
2.ARM Template。注意:部署 sql 的 Arm 模板需要已经有 vnet 和域。此外,您将很难尝试在该框架之外部署此模板,因此可能只需复制 dsc extension\dsc 脚本并在您的部署中使用。
3.Parameters file example

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

附言。解决该配置并修补相关部分并不是一个愉快的旅程...... 聚苯乙烯。该 repo 还包含 ADDS 的 dsc 配置,也可以并行运行(与官方示例相比)。

【讨论】:

    【解决方案2】:

    试试这个。

    $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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 2013-07-15
      • 2010-11-30
      • 2021-09-11
      • 2012-02-18
      • 2011-03-07
      相关资源
      最近更新 更多