2017-09-08 236 views
1

我正在尋找關於如何排除DSC配置故障的建議。我正在使用Azure DSC擴展,日誌如下:疑難解答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 Availability組。

+0

我已經稍微修改了代碼,如果你使用sql iaas擴展,你可以完全刪除xsql模塊,這在我看來是非常好的。代碼在回購中 – 4c74356b41

回答

1

我的建議是使用現有的工作代碼;)我認爲複製粘貼blog post是沒有意義的。但是我會在這裏留下相關文件的鏈接。

鏈接:

2. ARM Template。注意:部署sql的arm模板需要具有vnet和域。此外,您將很難嘗試在該框架之外部署此模板,因此可能只需複製dsc extension \ dsc腳本並在您的部署中使用。
3. Parameters file example

的xSqlServer(新一)不能夠移動SQL到另一個磁盤上的,所以你被卡住自定義腳本或這個老XSQL模塊。另請注意,包內的DSC模塊已被修改。 這些DSC配置將不適用於未修改版本的模塊xSqlCreateVirtualDataDisk,xDatabase,xSQLServerAlwaysOnAvailabilityGroupListener也許是一些其他模塊,我現在不記得)。

PS。將配置工作並修補相關部分並不是一個愉快的旅程...... PPS。該回購還包含ADDS的dsc配置,也可以並行運行(與官方示例相比)。

1

試試這個。

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