65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL Server 2012无人值守安装

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2016年7月12日

CPOL

3分钟阅读

viewsIcon

14552

downloadIcon

217

尽管有很多关于 Microsoft SQL Server 数据库引擎无人值守安装的资料,本文介绍的脚本经过了实际生产环境的测试,可以最小程度甚至无需修改即可使用。

引言

作为 DBA、DevOps 或开发人员,Microsoft SQL Server 数据库引擎的无人值守安装,也称为“静默”安装,是开发和运维(简称为 DevOps)任务的一个很好的例子,在这些任务中,自动化是日常工作的核心。

本文介绍了一个使用 Powershell 工具自动安装 SQL Server 2012 的脚本。涉及的操作系统版本是 Windows Server 2012 和 Windows Server 2012 R2,并且已在实际的关键生产环境中进行了测试。

如果您想查看手动安装,请在本网站上搜索名为“安装 Microsoft SQL Server 2008 Express Edition(标准版或带有高级服务)的步骤”的文章。

背景

基本上,静默或无人值守安装脚本的通用规范在名为“使用配置文件进行 SQL Server 静默无人值守安装”的文章中介绍过。但是,当提供了一个好的配方,可以品尝到以最小的自定义成功安装,或者下载后无需任何修改即可执行时,获得一些帮助是非常有用的。 其目的是提出一种替代方法来执行自动化任务,不仅适用于 DBA,也适用于开发人员、DevOps 和系统管理员角色,在这些角色中,您需要执行自定义配置的覆盖,并且需要多次执行安装。

先决条件

所有先决条件均可在 Microsoft Windows Server 2012 和 Microsoft Windows Server 2012 R2 环境中运行,但它们也可能适用于 Windows 桌面版(Windows 8.1 和 Windows 10)。无论哪种情况,这些步骤必须使用管理员帐户执行。

步骤

1. 首先,检查以下组件是否已实际安装(并经过测试)。每个组件可能需要重启机器。

 1.1. .NET FrameWork 3.5. (图 1 和 图 2)

 1.2. Windows PowerShell 1.0  (图 3)

Figure 1

图 1. .NET FrameWork 3.5 功能的位置

Figure 2

图 2. 添加 .NET FrameWork 3.5 功能

Figure 3

图 3. PowerShell 工具

运行安装

此脚本假定

  1. SQL Server 媒体驱动器分配在驱动器 D 上
  2. 您必须将当前帐户管理用户更改为您机器的用户管理帐户规范。这里命名为:HELLIUM02\Administrator
  3. SQL Server 安装文件名为 "ConfigurationFile.ini"。
  4. 所有文件必须在同一目录中,此处命名为 C:\SQLInstall。因此,您必须创建 C:\SQLInstall。

脚本将创建

  • SQL Server 服务的帐户
  • 数据库引擎根数据目录是 C:\DATA
  • 用于测试目的的 testdbv1 数据库。
  • 用于连接到 SQL Server 数据库引擎实例的登录用户。

在 powershell 中编写和运行的源代码如下所示

# Version 2.0
# Date - 07/06/2016
# Author: Jesus Carroll
Clear-Host

<#*************Variable Declaration******************#>

# Script: Perform a preinstallation of Unattended SQL Server 2008 and 2012 Install, Uninstall SQL. Setup requirements
# Author: Jesus Carroll
# Version: 2.0
# Date - 07/06/2016

<#***********************************************START:Pre-installation Program********************************************#>
Write-Host "START Create DATA directory on C drive"
New-Item c:\DATA -type directory -force
Write-Host "END Create DATA directory"

Write-Host "START Create Account for SQL Server services"

$Computer = [ADSI]"WinNT://$Env:COMPUTERNAME,Computer"
$LocalAdmin = $Computer.Create("User", "services")
$LocalAdmin.SetPassword("Sqls2rv3")
$LocalAdmin.SetInfo()


Write-Host "END Create Account for SQL Server services"

<#***********************************************END:Pre-installation Program********************************************#>                

<#Get Date#>
[datetime]$unow = Get-Date
Write-Host "START[SQL Install Script]: SQL INSTALL PROGRAM MAIN"
Write-Host $unow

$scriptblock={D:\Setup.exe /IACCEPTSQLSERVERLICENSETERMS /ConfigurationFile=C:\SQLInstall\ConfigurationFile.ini}
Try
{
    Invoke-Command -scriptblock $scriptblock

    Write-Host "END [SQL Install Script]: Finished SQL INSTALL PROGRAM"

    <#***********************************************START:Post-installation Program********************************************#>
    # Change the Execution Policy to enable SQL Server Module.
    Write-Host "START Change the Execution Policy to enable SQL Server Module"
    Set-ExecutionPolicy Unrestricted
    Write-Host "END   Change the Execution Policy to enable SQL Server Module"

    Write-Host "****************************************************"
    Write-Host "START Check presence of SQL Server PowerShell Module"
    Copy-Item "C:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules\SQLPS" -Destination "C:\Windows\System32\WindowsPowerShell\v1.0\Modules\SQLPS" -Recurse
    Write-Host "END   Check presence of SQL Server PowerShell Module"
    Write-Host "****************************************************"

    # Wait to start slowest SQL Server machines
    Write-Host "START Wait to start slowest SQL Server machines"
    Start-Sleep -Seconds 5
    Write-Host "END Wait to start slowest SQL Server machines"

    # Import the SQL Server Module.
    
    Write-Host "START Perform customized SQL Server Engine"
    Import-Module “sqlps” -DisableNameChecking
    Set-Location SQLSERVER:\SQL

    Invoke-Sqlcmd "EXEC sys.sp_configure N'user options', N'512'; RECONFIGURE WITH OVERRIDE;"
    Invoke-Sqlcmd "CREATE LOGIN [user1] WITH PASSWORD=N'User2016', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;"
    Invoke-Sqlcmd "ALTER SERVER ROLE [sysadmin] ADD MEMBER [user1];"

    Write-Host "END Performed customized SQL Server Engine"

    # Create a sample database without data.

    Write-Host "START Create a sample database testdbv1"

    Invoke-Sqlcmd "USE master;
    IF EXISTS (SELECT * FROM sys.databases where name ='testdbv1')
    BEGIN
        DROP DATABASE testdbv1
        SELECT * FROM sys.databases
    END;
    CREATE DATABASE [testdbv1]
         CONTAINMENT = NONE
         ON  PRIMARY
        ( NAME = N'testdbv1', FILENAME = N'C:\DATA\testdbv1.mdf' , SIZE = 5120KB , FILEGROWTH = 1024KB )
         LOG ON
        ( NAME = N'testdbv1_log', FILENAME = N'C:\DATA\testdbv1_log.ldf' , SIZE = 2048KB , FILEGROWTH = 10MB)
    ;"
    Invoke-Sqlcmd "use master;
        IF EXISTS (SELECT * FROM sys.databases where name ='testdbv1')
        BEGIN
            ALTER DATABASE [testdbv1] SET COMPATIBILITY_LEVEL = 110
        
            ALTER DATABASE [testdbv1] SET ANSI_NULL_DEFAULT OFF
        
            ALTER DATABASE [testdbv1] SET ANSI_NULLS OFF
        
            ALTER DATABASE [testdbv1] SET ANSI_PADDING OFF
        
            ALTER DATABASE [testdbv1] SET ANSI_WARNINGS OFF
        
            ALTER DATABASE [testdbv1] SET ARITHABORT OFF
        
            ALTER DATABASE [testdbv1] SET AUTO_CLOSE OFF
        
            ALTER DATABASE [testdbv1] SET AUTO_CREATE_STATISTICS ON
        
            ALTER DATABASE [testdbv1] SET AUTO_SHRINK OFF
        
            ALTER DATABASE [testdbv1] SET AUTO_UPDATE_STATISTICS ON
        
            ALTER DATABASE [testdbv1] SET CURSOR_CLOSE_ON_COMMIT OFF
        
            ALTER DATABASE [testdbv1] SET CURSOR_DEFAULT  GLOBAL
        
            ALTER DATABASE [testdbv1] SET CONCAT_NULL_YIELDS_NULL OFF
        
            ALTER DATABASE [testdbv1] SET NUMERIC_ROUNDABORT OFF
        
            ALTER DATABASE [testdbv1] SET QUOTED_IDENTIFIER OFF
        
            ALTER DATABASE [testdbv1] SET RECURSIVE_TRIGGERS OFF
        
            ALTER DATABASE [testdbv1] SET  DISABLE_BROKER
        
            ALTER DATABASE [testdbv1] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
        
            ALTER DATABASE [testdbv1] SET DATE_CORRELATION_OPTIMIZATION OFF
        
            ALTER DATABASE [testdbv1] SET PARAMETERIZATION SIMPLE
        
            ALTER DATABASE [testdbv1] SET READ_COMMITTED_SNAPSHOT ON
        
            ALTER DATABASE [testdbv1] SET  READ_WRITE
        
            ALTER DATABASE [testdbv1] SET RECOVERY SIMPLE
        
            ALTER DATABASE [testdbv1] SET  MULTI_USER
        
            ALTER DATABASE [testdbv1] SET PAGE_VERIFY CHECKSUM  
        
            ALTER DATABASE [testdbv1] SET TARGET_RECOVERY_TIME = 0 SECONDS

            ALTER DATABASE [testdbv1] SET ALLOW_SNAPSHOT_ISOLATION ON
        END;"

    Invoke-Sqlcmd "USE [testdbv1];
    IF NOT EXISTS (SELECT name FROM
                   sys.filegroups WHERE is_default=1 AND name = N'PRIMARY')
                   ALTER DATABASE [testdbv1] MODIFY FILEGROUP [PRIMARY] DEFAULT;
    "

    Invoke-Sqlcmd "SELECT * FROM sys.databases where name ='testdbv1';"
    Write-Host "****************************************************"
    Write-Host "END Create a sample database testdbv1"
    Write-Host "****************************************************"
    Write-Host " "



    <#***********************************************END:Post-installation Program********************************************#>
}
Catch
{
    Write-Host -ForegroundColor Red "Error Setup SQL Server:"$_.Exception.Message                    
}

powershell 脚本和 ini 配置文件这两个文件的源代码都附在此文章中。

结论和进一步改进

此脚本不会尝试在生产服务器上发出不受控制的重启问题,因此有助于保持在线业务连续性。 必须先安装先决条件和 Windows 更新包,然后才能成功执行。 在此安装中,这是通过 Setup 过程实现的,它应该发现并包含产品更新 [1]。 当组织没有集群实现时,保持在线是一个“必须”原则。正如 Colin Dembovsky 在参考 [2] 中指出的那样在安装过程中重新启动总是很棘手的。有时根本没有其他选择。

参考文献

  • [1] Microsoft Technet: https://technet.microsoft.com/en-us/library/dd239405(v=sql.110).aspx
  • [2] Colin Dembovsky's Devops blog: http://www.colinsalmcorner.com/post/install-and-configure-sql-server-using-powershell-dsc
© . All rights reserved.