SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

EC2 の SQL Server のコンピューター名変更の方法を確認してみる

leave a comment

EC2 の AMI では、SQL Server インストール済みのイメージが提供されています。
SQL Server のコンピューター名を変更する場合、SQL Server 側の設定も変更する必要があるのですが、EC2 ではどのように設定をしているか調べてみました。

SQL Server のコンピューター名の変更ですが、EC2Config サービスを使用した Windows インスタンスの設定 を使用しているようです。

下の画像は、EC2Config の設定内容となりますが、「Scripts\PostSysprep.cmd」が設定されていることが確認できます。
image

それでは「C:\Program Files\Amazon\Ec2ConfigService\Scripts\PostSysprep.cmd」の内容を確認してみます。


@REM This setting can affect resource utilization upon start and customers can manually enable for their use case. 
@REM reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v AUOptions /t REG_DWORD /d 2 /f

@REM Restart the update service to stop any inflight downloads
@REM User "net start" and "stop" b/c they are synchronous
net stop wuauserv
net start wuauserv

@REM Sets local Admin user password to not expire
WMIC USERACCOUNT WHERE "Name='Administrator'" SET PasswordExpires=FALSE


@REM ***************
@REM Sets the MSSQLServer machine name (if installed) so that the name will be in sync
@REM If server is renamed at any point after sysprep, this should be run to keep the MSSQLServer name in sync
@REM For some configurations, this needs to be performed as the last step -- SQL needs to be restarted for the change to take effect
net start MSSQLSERVER
SQLCMD -Q "DECLARE @InternalInstanceName sysname; DECLARE @MachineInstanceName sysname; SELECT @InternalInstanceName = @@SERVERNAME, @MachineInstanceName = CAST(SERVERPROPERTY('MACHINENAME') AS VARCHAR(128))  + COALESCE('\' + CAST(SERVERPROPERTY('INSTANCENAME') AS VARCHAR(128)), '');IF @InternalInstanceName <> @MachineInstanceName BEGIN EXEC sp_dropserver @InternalInstanceName; EXEC sp_addserver @MachineInstanceName, 'LOCAL'; END"
net stop MSSQLSERVER /Y && net start MSSQLSERVER && net start SQLSERVERAGENT

 

コンピューター名と SQL Server が認識しているコンピューター名が異なっている場合は、ストアドプロシージャを実行して、SQL Server が認識しているコンピューター名を変更しているのが確認できますね。

これは、Sysprep 実行時の「C:\Windows\Setup\Scripts\SetupComplete.cmd」でも実現することができ、上記のスクリプトの中で、コンピューター名変更の個所を「SetupComplete.cmd」に設定することで、Sysprep 実行後にコンピューター名の変更を実行することができます。

@REM ***************
@REM Sets the MSSQLServer machine name (if installed) so that the name will be in sync
@REM If server is renamed at any point after sysprep, this should be run to keep the MSSQLServer name in sync
@REM For some configurations, this needs to be performed as the last step -- SQL needs to be restarted for the change to take effect
net start MSSQLSERVER
SQLCMD -Q "DECLARE @InternalInstanceName sysname;DECLARE @MachineInstanceName sysname;SELECT @InternalInstanceName = @@SERVERNAME, @MachineInstanceName = CAST(SERVERPROPERTY('MACHINENAME') AS VARCHAR(128))  + COALESCE('\' + CAST(SERVERPROPERTY('INSTANCENAME') AS VARCHAR(128)), '');IF @InternalInstanceName <> @MachineInstanceName BEGIN EXEC sp_dropserver @InternalInstanceName; EXEC sp_addserver @MachineInstanceName, 'LOCAL'; END"
net stop MSSQLSERVER /Y && net start MSSQLSERVER && net start SQLSERVERAGENT

Written by masayuki.ozawa

5月 22nd, 2016 at 10:32 pm

Posted in SQL Database

Tagged with

Leave a Reply

*