Embedding SQL Server 2008 Express in an Application
SQL Server Technical Article
Writers: KarlDehmer, Peter Saddow
Technical Reviewers: Peter Saddow, Russell Green, Devendra Tiwari and Arun Sundaram
Published: August 2009
Applies to: SQL Server 2008
Summary: This white paper is intended for developers who are responsible for designing and developing the setup and installation components for custom applications that embed Microsoft SQL Server 2008 Express. This document includes:
- How to determine which edition of Express to install
- How to verify existing SQL Server installations and instances
- How to handle exit codes and rules
- How to navigate and use the log files
<span id="_Toc237912056">
The use of the Microsoft® SQL Server® data management software for both business and personal applications continues to flourish. These applications are heavily ingrained in our daily lives and are providing increasingly more sophisticated information, which results in a greater need for supporting database technology. Microsoft SQL Server 2008 Express is a robust, freely distributable relational database management system. Express includes SQL Server Management Studio Basic. You can use SQL Server 2008 Express as a:
- Local data store
- Embedded database in an application
- Lightweight database server
When integrated with Microsoft Visual Studio® 2008 SP1, SQL Server 2008 Express helps facilitate the design and development of database applications.
Which Edition of SQL Server 2008 Express to Use?
You have a choice of four different editions of SQL Server 2008 Express. Your application requirements will determine which edition you need. The following table lists each edition and the features it includes.
SQL Server 2008 Express | Management Studio Basic | Runtime Only | with Tools | with Advanced Services |
---|---|---|---|---|
SQL Server Database Engine |
X |
X |
X |
|
SQL Server Management Studio Basic* |
X |
X |
X |
|
Full-Text Search |
X |
|||
Reporting Services |
X |
|||
Download Size |
38.5 MB |
82.5 MB |
230.4 MB |
546.5 MB |
Table 1: SQL Server 2008 Express editions
These four SQL Server 2008 editions include the following functionality and capabilities.
SQL Server 2008 Express with Tools
- SQL Server Database Engine – for creating, storing, updating, and retrieving data
- SQL Server Management Studio Basic – a visual database management tool for creating, editing and managing databases
SQL Server 2008 Express with Advanced Services
- SQL Server Database Engine - for creating, storing, updating, and retrieving data
- SQL Server Management Studio Basic – a visual database management tool for creating, editing and managing databases
- Full-Text Search – a powerful, high-speed engine for searching text-intensive data
- Reporting Services – an integrated design environment for creating reports
SQL Server 2008 Express (Runtime Only)
SQL Server Database Engine - for creating, storing, updating, and retrieving data
SQL Server 2008 Management Studio Express (SSMSE)
Free graphical management tool for configuring, managing, and administering SQL Server 2008 Express applications
Also use for managing multiple instances of the SQL Server Database Engine created by any edition of SQL Server 2008, including Workgroup, Web, Standard, and Enterprise editions
Note: This separate download is for customers who have previously installed SQL Server 2008 Express (Runtime Only). For new installations of SQL Server 2008 Express and SQL Server Management Studio Express, download the SQL Server 2008 Express with Tools from the SQL Server Installation Wizard.
For more information about SQL Server 2008 Express, go to the SQL Server 2008 Express Web site (https://www.microsoft.com/sqlserver/2008/en/us/express.aspx).
To download SQL Server 2008 Express, go to the SQL Server 2008 Express download page (https://www.microsoft.com/express/sql/download/).
<span id="_Toc237912062">
Before installing SQL Server 2008 Express on a computer, you need to determine whether prior versions of SQL Server or instances of SQL Server already exist. If prior versions exist, you need to decide whether to upgrade the existing instance or install a new instance.
The recommended and officially supported way to detect other versions of SQL Server, or SQL server instances on a computer, is by using the SQL Server Windows® Management Instrumentation (WMI) provider. Although other detection methods exist, this white paper uses the SQL Server WMI provider for SQL Server 2008 and SQL Server 2005. Other methods, such as using the registry for detecting instances, are not recommended.
Note: The SQL Server WMI provider can only detect instances of SQL Server 2005 and later.
The following code sample uses the WMI provider for SQL Server 2008 to detect all SQL Server 2008 and SQL Server 2005 instances. For every instance detected, the code will list the edition and version of each instance in the results. The sample illustrates how to obtain the list of instance names.
C# Example
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
namespace ExpressDetection
{
class Program
{
static void Main(string[] args)
{
if (!EnumerateSQLInstances())
{
Console.WriteLine("There are no instances of SQL Server 2005 or SQL Server 2008 installed");
}
}
/// <summary>
/// Enumerates all SQL Server instances on the machine.
/// </summary>
/// <returns></returns>
public static bool EnumerateSQLInstances()
{
string correctNamespace = GetCorrectWmiNameSpace();
if (string.Equals(correctNamespace, string.Empty))
{
return false;
}
string query = string.Format("select * from SqlServiceAdvancedProperty where SQLServiceType = 1 and PropertyName = 'instanceID'");
ManagementObjectSearcher getSqlEngine = new ManagementObjectSearcher(correctNamespace, query);
if (getSqlEngine.Get().Count == 0)
{
return false;
}
Console.WriteLine("SQL Server database instances discovered :");
string instanceName = string.Empty;
string serviceName = string.Empty;
string version = string.Empty;
string edition = string.Empty;
Console.WriteLine("Instance Name \t ServiceName \t Edition \t Version \t");
foreach (ManagementObject sqlEngine in getSqlEngine.Get())
{
serviceName = sqlEngine["ServiceName"].ToString();
instanceName = GetInstanceNameFromServiceName(serviceName);
version = GetWmiPropertyValueForEngineService(serviceName, correctNamespace, "Version");
edition = GetWmiPropertyValueForEngineService(serviceName, correctNamespace, "SKUNAME");
Console.Write("{0} \t", instanceName);
Console.Write("{0} \t", serviceName);
Console.Write("{0} \t", edition);
Console.WriteLine("{0} \t", version);
}
return true;
}
/// <summary>
/// Method returns the correct SQL namespace to use to detect SQL Server instances.
/// </summary>
/// <returns>namespace to use to detect SQL Server instances</returns>
public static string GetCorrectWmiNameSpace()
{
String wmiNamespaceToUse = "root\\Microsoft\\sqlserver";
List<string> namespaces = new List<string>();
try
{
// Enumerate all WMI instances of
// __namespace WMI class.
ManagementClass nsClass =
new ManagementClass(
new ManagementScope(wmiNamespaceToUse),
new ManagementPath("__namespace"),
null);
foreach (ManagementObject ns in
nsClass.GetInstances())
{
namespaces.Add(ns["Name"].ToString());
}
}
catch (ManagementException e)
{
Console.WriteLine("Exception = " + e.Message);
}
if (namespaces.Count > 0)
{
if (namespaces.Contains("ComputerManagement10"))
{
//use katmai+ namespace
wmiNamespaceToUse = wmiNamespaceToUse + "\\ComputerManagement10";
}
else if (namespaces.Contains("ComputerManagement"))
{
//use yukon namespace
wmiNamespaceToUse = wmiNamespaceToUse + "\\ComputerManagement";
}
else
{
wmiNamespaceToUse = string.Empty;
}
}
else
{
wmiNamespaceToUse = string.Empty;
}
return wmiNamespaceToUse;
}
/// <summary>
/// method extracts the instance name from the service name
/// </summary>
/// <param name="serviceName"></param>
/// <returns></returns>
public static string GetInstanceNameFromServiceName(string serviceName)
{
if (!string.IsNullOrEmpty(serviceName))
{
if (string.Equals(serviceName, "MSSQLSERVER", StringComparison.OrdinalIgnoreCase))
{
return serviceName;
}
else
{
return serviceName.Substring(serviceName.IndexOf('$') + 1, serviceName.Length - serviceName.IndexOf('$')-1);
}
}
else
{
return string.Empty;
}
}
/// <summary>
/// Returns the WMI property value for a given property name for a particular SQL Server service Name
/// </summary>
/// <param name="serviceName">The service name for the SQL Server engine serivce to query for</param>
/// <param name="wmiNamespace">The wmi namespace to connect to </param>
/// <param name="propertyName">The property name whose value is required</param>
/// <returns></returns>
public static string GetWmiPropertyValueForEngineService(string serviceName, string wmiNamespace, string propertyName)
{
string propertyValue = string.Empty;
string query = String.Format("select * from SqlServiceAdvancedProperty where SQLServiceType = 1 and PropertyName = '{0}' and ServiceName = '{1}'", propertyName, serviceName);
ManagementObjectSearcher propertySearcher = new ManagementObjectSearcher(wmiNamespace, query);
foreach (ManagementObject sqlEdition in propertySearcher.Get())
{
propertyValue = sqlEdition["PropertyStrValue"].ToString();
}
return propertyValue;
}
}
}
The screen shot in Figure 1 reflects the output from the sample code above. The results list all of the instances detected in addition to the instance edition and instance version.
Figure 1: Results of detected instances
To detect SQL Server 2005 instances, use the following namespace: root\Microsoft\SqlServer\ComputerManagement
For more information about troubleshooting problems with WMI, see Windows Management Instrumentation (https://msdn.microsoft.com/en-us/library/aa394582(VS.85).aspx).
<span id="_Toc237912063">
The two SQL Server 2008 Express installation modes are:
- New SQL Server 2008 Express installations
- Upgrade installations
Each installation mode has its own set of parameters that provide information and instructions on how to perform the new installation or upgrade. Parameters are either required or optional.
To accommodate installing or upgrading large numbers of systems, the SQL Server 2008 Express setup process is fully scriptable. You can run Express with associated parameters from:
- The command prompt
- Part of a command shell script
- Another program
Regardless of where you execute a new installation or upgrade, you can run the statement from one of two places:
- At the command prompt
- In a configuration file (ConfigurationFile.ini)
Packaging SQL Server 2008 Express with Your Application
It is recommended that you ship the Express package extracted on your media and then launch Setup.exe directly. To extract the Express package, run the following command.
{Express package} /X:{Directory to extract to}
Command Prompt Vs. Configuration File
Even though both the SQL Server 2008 Express command prompt and the configuration file installation methods provide similar functionality (that is, they have the same parameters), their implementation differs. The ConfigurationFile.ini stores the user input settings for the specific installation (public settings applicable to the current installation).
You can use the configuration file to restart the installation using the user settings from an earlier setup. The only settings not saved in the configuration file are the passwords for the accounts and the product ID (PID). When necessary, you can add these parameters through the configuration file, at a command prompt, or through a user interface prompt.
Installing SQL Server Express from the Command Prompt
When installing new instances or upgrading existing instances of SQL Server at the command prompt, you can specify the features to install and configure. You can also specify silent, basic, or full interaction with the setup user interface. Your installation requirements will determine setup interaction type.
For more information, see How to: Install SQL Server 2008 from the Command Prompt (https://msdn.microsoft.com/en-us/library/ms144259.aspx).
Performing a New Installation of SQL Server 2008 Express
An example of performing a new installation from the command prompt:
Setup.exe /q /Action=Install /Hideconsole /Features=SQL,Tools
/InstanceName=SQLExpress /SQLSYSADMINACCOUNTS="Builtin\Administrators"
/SQLSVCACCOUNT="<DomainName\UserName>" /SQLSVCPASSWORD="<StrongPassword>
In the preceding example:
- /q – specifies that Setup run in a quiet mode without any user interface.
- /Action – specifies which action to perform. In this example, the action is Install.
- /Hideconsole – specifies that the console window is hidden or closed during the install.
- /Features – specifies which parent features and features to install. In this example, the parent feature SQL is installed, which includes SQLEngine, Replication, and Fulltext components. The Tools feature installs all of the tools components.
- /InstanceName – specifies a SQL Server instance name.
- /SQLSYSADMINACCOUNTS –provisions logins to be members of the system administrators role.
- /SQLSVCACCOUNT – specifies the startup account for the SQL Server service.
- /SQLSVCPASSWORD – specifies the password for SQLSVCACCOUNT.
The following table contains the list of parameters that are available to SQL Server 2008 Express, which is a partial list of all of the parameters in SQL Server 2008. The parameters marked with an X are typical for SQL Server 2008 Express embedded installations. The parameters with no X are not typically used for common SQL Server Express installations.
Parameter | Description | Typical Parameter |
---|---|---|
/AddCurrentUserAsSQLAdmin Required |
This will provision the database engine with the user running setup. Use this parameter if you want to provision the user running setup. If you want to provision other users, use the /SQLSYSADMINACCOUNTS.
This parameter is not required if /SQLSYSADMINACCOUNTS is specified. |
X |
/ACTION Required |
Required to indicate the installation workflow. Supported values:
|
X |
/CONFIGURATIONFILE Optional |
Specifies the configuration file to use. |
|
/ERRORREPORTING Optional |
Specifies the error reporting for SQL Server. For more information, see Privacy Statement for the Microsoft Error Reporting Service (http://oca.microsoft.com/en/dcp20.asp). Supported values: 1=enabled 0=disabled (Default) |
|
/FEATURES Required |
Specifies components to install:
|
X |
/INSTALLSHAREDDIR Optional |
Specifies a nondefault installation directory for 64-bit shared components. |
|
/INSTALLSHAREDWOWDIR Optional |
Specifies a nondefault installation directory for 32-bit shared components. Supported only on a 64-bit system. |
|
/INSTANCEDIR Optional |
Specifies a nondefault installation directory for instance-specific components. |
|
/INSTANCENAME Required |
Specifies a SQL Server instance name. For more information, see Instance Configuration(https://msdn.microsoft.com/en-us/library/ms143531.aspx). |
X |
/Q Optional |
Specifies that Setup run in a quiet mode without displaying user interface messages or requiring user input. Used for unattended installations. |
X |
/QS Optional |
Specifies that Setup runs and shows progress through the UI, but does not accept any user input or display any error messages. |
|
/SQMREPORTING Optional |
Specifies feature usage reporting for SQL Server. For more information, see Privacy Statement for the Microsoft Error Reporting Service. Supported values:
|
|
/HIDECONSOLE Optional |
Specifies that the console window is hidden or closed. If not specified, the console stays open while Setup runs, which is usually not preferred. |
X |
/ENABLERANU Optional |
Enables run-as credentials for SQL Server Express installations. This option is disabled by default. |
X |
/INSTALLSQLDATADIR Optional |
Specifies the data directory for SQL Server data files. Default values are:
|
|
/SAPWD Required when /SECURITYMODE=SQL |
Specifies the password for the SQL Server system administrator account. |
X |
/SECURITYMODE Optional |
Specifies the security mode for SQL Server. If this parameter is not supplied, the default of Windows-only authentication mode is applied. The supported value is SQL |
X |
/SQLBACKUPDIR Optional |
Specifies the directory for backup files. The default value is <InstallSQLDataDir>\ <SQLInstanceID>\MSSQL\Backup |
|
/SQLCOLLATION Optional |
Specifies the collation settings for SQL Server. The default value is SQL_Latin1_General_CP1_CS_AS |
|
/SQLSVCACCOUNT Required |
Specifies the startup account for the SQL Server service. |
X |
/SQLSVCPASSWORD |
Specifies the password for SQLSVCACCOUNT. (This is required only if a local account or domain account is used.) |
X |
/SQLSVCSTARTUPTYPE Optional |
Specifies the startup mode for the SQL Server service. Supported values are:
|
X |
/RSSVCACCOUNT Required |
Specifies the startup account for the Reporting Server service. This is available only in the Express Advanced Package. |
|
/RSSVCPASSWORD |
Specifies the password for Reporting Server Service. This is available only in the Express Advanced Package. (It is required only if a local account or domain account is used.) |
|
/RSSVCSTARTUPTYPE Optional |
Specifies the startup mode for the Reporting Server Service. Supported values are:
This is available only in the Express Advanced Package. |
|
/SQLSYSADMINACCOUNTS Required |
Provisions logins to be members of the sysadmin role. This parameter is not required if /AddCurrentUserAsSQLAdmin is specified. |
|
/SQLTEMPDBDIR Optional |
Specifies the directory for the data files for tempdb. The default value is <InstallSQLDataDir>\ <SQLInstanceID>\MSSQL\Data |
|
/SQLTEMPDBLOGDIR Optional |
Specifies the directory for the log files for tempdb. The default value is <InstallSQLDataDir>\ <SQLInstanceID>\MSSQL\Data |
|
/SQLUSERDBDIR Optional |
Specifies the directory for the data files for user databases. The default value is <InstallSQLDataDir>\ <SQLInstanceID>\MSSQL\Data |
|
/SQLUSERDBLOGDIR Optional |
Specifies the directory for the log files for user databases. The default value is <InstallSQLDataDir>\ <SQLInstanceID>\MSSQL\Data |
|
/USESYSDB Optional |
Specifies the location of the SQL Server system databases to use for this installation. Do not include the \Data suffix in the specified path. |
|
/FILESTREAMLEVEL Optional |
Specifies the access level for the FILESTREAM feature. Supported values are:
|
|
/FILESTREAMSHARENAME Optional Required when FILESTREAMLEVEL is greater than 1. |
Specifies the name of the Windows share on which the FILESTREAM data will be stored. |
|
/FTSVCACCOUNT Optional |
Specifies the account for Full-Text filter launcher service. The default value is Local Service Account. This parameter is ignored in Windows Server® 2008 and Windows Vista® operating systems. ServiceSID is used to help secure the communication between SQL Server and the full-text filter daemon. If the values are not provided, the FDHOST Launcher service, which is used to the filter daemon host process, is disabled. Use SQL Server Control Manager to change the service account and enable full-text functionality. |
|
/FTSVCPASSWORD Optional |
Specifies the password for the Full-Text filter launcher service. This parameter is ignored in the Windows Server 2008 and Windows Vista operating systems. |
|
/NPENABLED Optional |
Specifies the state of the Named Pipes protocol for the SQL Server service. Supported values are:
Note: To enable remote connections, you need to enable the NPENABLED or TCPENABLED parameters. |
|
/TCPENABLED Optional |
Specifies the state of the TCP protocol for the SQL Server service. Supported values are:
Note: To enable remote connections, you need to enable the NPENABLED or TCPENABLED parameters. |
Table 2: Parameters for performing a new installation of SQL Server 2008 Express
Performing a Basic Upgrade to SQL Server 2008 Express
Although an upgrade from SQL Server 2005 Express is straightforward, there are important differences between MSDE and SQL Server Express that you must understand before creating an upgrade plan. For more information about upgrading to SQL Server 2008 Express, see the Ultimate guide for upgrading to SQL Server 2008 (https://blogs.technet.com/dataplatforminsider/archive/2008/12/04/ultimate-guide-for-upgrading-to-sql-server-2008.aspx) and refer to Chapter 10, “Upgrading to SQL Server 2008 Express”.
Here’s an example of performing a basic upgrade:
Setup.exe /q /Hideconsole /ACTION=upgrade /INSTANCENAME=SQLExpress
The following table contains a list of the input parameters used for upgrading to SQL Server 2008 Express.
Parameter | Description | Typical Parameter |
---|---|---|
/ACTION Required |
Required to indicate the installation workflow. The supported value is Upgrade. |
X |
/CONFIGURATIONFILE Optional |
Specifies the configuration file to use. |
|
/ERRORREPORTING Optional |
Specifies the error reporting for SQL Server. For more information, see Privacy Statement for the Microsoft Error Reporting Service. Supported values are:
|
X |
/ INSTANCEDIR Optional |
Specifies a nondefault installation directory for shared components |
|
/INSTANCENAME Required |
Specifies a SQL Server instance name. For more information, see Instance Configuration. |
X |
/Q Optional |
Specifies that Setup run in a quiet mode without any user interface. Use this parameter for unattended installations. |
X |
/SQMREPORTING Optional |
Specifies feature usage reporting for SQL Server. For more information, see Privacy Statement for the Microsoft Error Reporting Service. Supported values are:
|
|
/HIDECONSOLE Optional |
Specifies the console window is hidden or closed. If a value is not specified, the console stays open while the setup process is running, which usually is not the preferred option. |
X |
/BROWSERSVCSTARTUPTYPE Optional |
Specifies the startup mode for the SQL Server Browser service. Supported values are:
|
|
/FTUPGRADEOPTION Optional |
Specifies the full-text catalog upgrade option. Supported values are:
|
Table 3: All parameters for performing an upgrade
Installing SQL Server Express with a Configuration File (ConfigurationFile.ini)
When installing new instances or upgrading existing instances of SQL Server at the command prompt, you can specify the features to install and configure. You can also specify silent, basic, or full interaction with the setup user interface. Your installation requirements will determine setup interaction type.
Using a configuration file allows you to store all of the installation or upgrade parameters in a single, more organized location. This option also provides a level of encapsulation allowing the standardized use of a single configuration file or multiple configuration files for more diverse deployment requirements.
The following configuration file example performs the same functionality as the preceding command-line installation example in order to better illustrate the differences between the methods.
Configuration file example:
;SQLSERVER2008 Configuration File [SQLSERVER2008]
; Setup will not display any user interface.
QUIET="True"
; Specifies a Setup work flow, like INSTALL, UNINSTALL, or UPGRADE. This is a required parameter.
ACTION="Install"
; Specifies that the console window is hidden or closed.
HIDECONSOLE="True"
; Specifies features to install, uninstall, or upgrade. The list of top-level
features include SQL, AS, RS, IS, and Tools. The SQL feature will install the
Database Engine, replication, and full-text. The Tools feature will install
Management Tools, SQL Server Books Online, Business Intelligence Development Studio, and other
shared components.
FEATURES=SQL, TOOLS
; Specify a default or named instance. MSSQLSERVER is the default instance for non-
Express editions, and SQLExpress is the default instance for Express editions. This parameter is required when
installing the SQL Server Database Engine (SQL), Analysis Services (AS), or Reporting
Services (RS).
INSTANCENAME="SQLEXPRESS"
; Windows account(s) to provision as SQL Server system administrators.
SQLSYSADMINACCOUNTS="Builtin\Administrators"
; Account for SQL Server service: Domain\User or system account.
/SQLSVCACCOUNT="<DomainName\UserName>"
; Specifies the password for SQLSVCACCOUNT
/SQLSVCPASSWORD="<StrongPassword>
Another example of a configuration file can be found on any computer with SQL Server 2008 Express installed at the default location of C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Log\<timestamp folder>\ConfigurationFile.ini.
For more information about using the configuration file, see How to: Install SQL Server 2008 Using a Configuration File (https://msdn.microsoft.com/en-us/library/dd239405.aspx).
<span id="_Toc237912070">
To ensure a successful and user-friendly installation, your installation application must trap and process SQL Server 2008 Express exit codes. These codes allow you to take corrective action for managing a new installation or upgrade of SQL Server 2008 Express.
Except for the "Success but Reboot Required" error, if setup returns a nonzero error code:
- A rule failed during setup.
- Setup was unable to handle an installation failure.
If a rule failed, address the cause for rule failure and restart the setup program. If there is an unhandled failure, view the log files to understand the cause. For more information about the log files, see “Understanding the SQL Server Log Files” later in this paper.
Refer to the following table for a list of exit codes for common installation failure points. Consider the list as a core set of codes for the minimum basic checks for an installation. For a larger list of exit codes in the form of rules, see “Rule Failures.”
Exit Code | Meaning |
---|---|
0 |
Successful installation. |
0xBC2 |
Successful installation; however, a system reboot is required. |
It means if hex exit code ends with BC2: 0x8XXX0BC2 |
A system reboot required before the installation can continue. |
0x84c408 |
.NET is required. |
84c40010 |
Microsoft Windows Installer 4.5 is required. |
Table 4: Exit Codes Returned by Setup
Rule Failures
Rules provide a greater degree of functionality and control, which allows for a more managed and polished installation. In addition, rule failures populate the error logs, which provide detailed information for investigating any installation issues.
Three categories of rules exist. Each category represents a processing or execution phase for a typical setup request:
- Global rules check
- Component update
- User-requested action
Each of these phases generates both a detail and a summary log, which may generate additional log files when required. User-requested Setup actions call the Setup application at least three times during a product installation. For more information, see “Understanding the SQL Server Log Files” later in this paper.
The following table lists the rule failures you can check during an installation.
Rule | Description | Failure code |
---|---|---|
OsVersionCheck |
Checks if the computer meets minimum operating system version requirements. |
0x84BE0001 |
ThreadHasAdminPrivilegeCheck |
Checks if the account running SQL Server Setup has administrator rights on the computer. |
0x84BE0007 |
RebootRequiredCheck |
Checks if a pending computer restart is required; a pending restart can cause setup to fail. |
0x84BE0BC2 |
WmiServiceStateCheck |
Checks if the WMI service has started and is running on the computer. |
0x84BE0003 |
AclPermissionsFacet |
Checks if the SQL Server registry keys are consistent. |
0x84BE01FF |
MediaPathLength |
Checks if the SQL Server installation media is not too long. |
0x84BE0009 |
FusionRebootCheck |
Checks if a computer restart is required because of broken fusion ATL; a pending restart can cause setup to fail. |
0x84BE0BC2 |
SqlUnsupportedProductBlocker |
Checks if SQL Server 7.0 or SQL Server 7.0 OLAP Services is installed; SQL Server 2008 is not supported with SQL Server 7.0. |
0x84BE020D |
PerfMonCounterNotCorruptedCheck |
Checks if the existing performance counter registry hive is consistent. |
0x84BE0004 |
Bids2005InstalledCheck |
Checks for previous releases of SQL Server 2008 Business Intelligence Development Studio. |
0x84BE0005 |
BlockInstallSxS |
Checks if there is an existing SQL Server 2008 Community Technology Preview (CTP) installation. |
0x84BE01FA |
FacetDomainControllerCheck |
Checks if the computer is a domain controller; installing SQL Server 2008 on a domain controller is not recommended. |
0x84BE0201 |
SSMS_IsInternetConnected |
Verifies that the computer is connected to the Internet. If a Microsoft .NET application such as Microsoft Management Studio starts, a delay may occur while the .NET security check validates a certificate. |
0x84BE0BD1 |
FacetWOW64PlatformCheck |
Determines whether SQL Server Setup is supported on this operating system platform. |
0x84BE0213 |
FacetPowerShellCheck |
Checks if Windows PowerShell® is installed; Windows PowerShell is a prerequisite of Microsoft SQL Server 2008 Express with Advanced Services. |
0x84BE0214 |
IsFirewallEnabled |
Checks if the Windows Firewall is enabled. |
0x84BE0BD2 |
BlockMixedArchitectureInstall |
Checks if the installing features are the same CPU architecture as the specified instance. |
0x84BE0202 |
BlockCrossLanguageInstall |
Checks if the setup language is the same as the language of existing SQL Server features. |
0x84BE0205 |
StandaloneInstall_HasClusteredOr |
Checks if the selected instance name is already used by an existing cluster-prepared or clustered instance on any cluster node. |
0x84BE0207 |
RS_DoesCatalogExist |
Checks if the Reporting Services catalog database file exists. |
0x84BE03F4 |
RS_DoesCatalogTempDBExist |
Checks if the Reporting Services catalog temporary database file exists. |
0x84BE03F5 |
Sql2005SsmsExpressFacet |
Checks if SQL Server 2005 Express tools are installed. |
0x84BE0218 |
EditionRequirementCheck |
Checks if the SQL Server edition is supported on the existing operating system |
0x84BE0219 |
FAT32FileSystemCheck |
Checks if the specified drive is a FAT32 file system volume; installing on a FAT32 file system is supported but not recommended because it is less secure than the NTFS file system |
0x84BE0249 |
LibertyASInstallRule |
Checks if SQL Server 2000 Analysis Services is installed; SQL Server 2000 Analysis Services cannot be installed if the default instance name for SQL Server 2008 is used. |
0x84BE024A |
InstanceClashRule |
Checks if the specified instance name is already used by an existing SQL Server instance. |
0x84BE024B |
VSShellInstalledRule |
Checks for previous releases of Visual Studio 2008. |
0x84BE024C |
BlockMixedArchitectureUpgrade |
Checks if the CPU architecture of feature upgrades is different from the CPU architecture of installed program. |
0x84BE0203 |
ShilohUpgradeRule |
Checks if the selected instance of SQL Server 2000 meets minimum upgrade requirements. |
0x84BE01F4 |
LibertyASUpgradeRule |
Checks if you must upgrade SQL Server 2000 Analysis Services before you upgrade SQL Server Database Services. SQL Server 2000 Analysis Services must be upgraded before any Database Services named instance. |
0x84BE0258 |
YukonUpgradeSidRule |
Checks if the SIDs that are associated with selected features for an upgrade are valid. |
0x84BE0217 |
BlockCrossLanguageUpgrade |
Checks if the setup language is the same as the language of the SQL Server feature upgrades. |
0x84BE0200 |
KatmaiBuildToBuildUpgradeRule |
Checks if the selected instance of SQL Server 2008 meets the minimum requirement for a build-to-build upgrade. |
0x84BE01F8 |
RS_ValidDSN |
Checks if the Report Server has a valid DSN. |
0x84BE03E9 |
RS_ValidDatabaseVersion |
Checks if the Report Server database version can be used by the SQL Server 2008 Report Server. |
0x84BE03EA |
RS_NoCustomRenderingExtensions |
Checks if Report Server has any custom rendering extensions configured. |
0x84BE03EB |
RS_NoCustomSecurityExtensions |
Checks if Report Server has any custom security extensions configured. |
0x84BE03EC |
RS_NoCustomAuthExtensions |
Checks if Report Server has any custom authentication extensions configured. |
0x84BE03ED |
RS_ReportServerUnsupportedSecurityMode |
Checks if Report Server is using any unsupported Microsoft Internet Information Services (IIS) security modes. |
0x84BE03EE |
RS_ReportManagerUnsupported |
Checks if Report Manager is using any unsupported IIS security modes. |
0x84BE03EF |
RS_ReportServerClientCertificate |
Checks if Report Server is required to use client certificates. |
0x84BE03F0 |
RS_ReportManagerClientCertificate |
Checks if Report Server is required to use client certificates. |
0x84BE03F1 |
RS_RS2000SP2Required |
Checks if SQL Server 2000 Reporting Services Service Pack 2 (SP2) is installed. |
0x84BE03F2 |
RS_RSServiceRunning |
Checks if the Reporting Services service is running when the clustered instance is being upgraded. |
0x84BE03F3 |
Engine_SqlServerServiceDisabled_Id |
Checks if the SQL Server service is not set as Disabled. |
0x84BE07D1 |
Engine_SqlEngineHealthCheck |
Checks if the SQL Server service can be restarted; or for a clustered instance, whether the SQL Server resource is online. |
0x84BE07D5 |
Engine_AllSystemDatabases |
Checks if all system databases are accessible. |
0x84BE07D4 |
Engine_UserHasNotDefinedSchema |
Checks if the user has defined a schema named 'sys'. |
0x84BE07D6 |
Engine_FilestreamAndRcsiDatabasesCheck |
Checks for databases with FILESTREAM file groups and READ_COMMITTED_SNAP |
0x84BE07DC |
Engine_ResourceDLLUpdateRestart |
Checks for shared resource DLL updates, which cause restarts for clustered SQL Server instances active on this node. |
0x84BE07E1 |
ShilohServiceAccountUpgradeRule |
Checks if SQL Server 2000 service accounts meet upgrade requirements. |
0x84BE0204 |
Engine_ServiceAccountOnDomain |
Checks if the SQL Server service account when running on a domain controller is suitable for upgrade. |
0x84BE07D3 |
Cluster_MultipleGroupsUpgradeRule |
Checks if the selected clustered instance of SQL Server 2005 is installed into multiple groups. |
0x84BE0BC9 |
Cluster_BlockLibertyUpgrade |
Checks if the instance selected for upgrade is a clustered SQL Server 2000 64-bit instance. |
0x84BE0BCB |
FeatureUpgradeMatrixCheck |
Checks if the specified feature meets SQL Server 2008 upgrade requirements. |
0x84BE0212 |
IncompleteUpgradeCheck |
Checks if the upgrade operation completed successfully. |
0x84BE020E |
FailedUpgradeCheck |
Checks if a previous upgrade failed. |
0x84BE020F |
LocalOnly_SqlFeatureStateCheck |
Checks if the SQL Server Database Services feature upgrade was successfully configured. |
0x84BE0215 |
LocalOnly_AsFeatureStateCheck |
Checks if the SQL Server Analysis Services feature upgrade was successfully configured. |
0x84BE0216 |
RsFeatureStateCheck |
Checks if the SQL Server Reporting Services feature upgrade was successfully configured. |
0x84BE0217 |
Table 5: Rule failures
<span id="_Toc237912072">
Many of the same security considerations for SQL Server 2005 also apply to SQL Server 2008 Express. For more information about these considerations, see Security Considerations for a SQL Server Installation (https://msdn.microsoft.com/en-us/library/ms144228.aspx).
Consider the following security guidelines when embedding and deploying SQL Server 2008 Express:
Service account – It is recommended that you configure the service account under a domain account or a local account. If Windows Vista is used, the recommended setup is to run SQL Server services under the Network Service account. For more information, see (https://msdn.microsoft.com/en-us/library/ms143504.aspx). If installing SQL Server Express on a domain controller, you cannot use the default Network Service account.
SQL Server Authentication Mode – During installation, the recommended configuration is to set up SQL Server to enable Windows Authentication mode, which is the default. If the application requirements do not allow this, you need to enable mixed mode authentication.
If you select mixed mode authentication during setup, you must provide and then confirm a strong password for the built-in SQL Server system administrator account named “sa.” Renaming the sa account is also recommended.
For more information, see (https://msdn.microsoft.com/en-us/library/ms144284.aspx).
Firewall – Consider the following:
- Firewall systems help prevent unauthorized access to computer resources. If a firewall is turned on but not correctly configured, attempts to connect to SQL Server may be blocked.
- To access an instance of SQL Server through a firewall, you must configure the firewall on the computer running SQL Server to allow access. You can use the firewall that is included with Windows, or you can install a different firewall.
For more information, see Configuring the Windows Firewall to Allow SQL Server Access (https://msdn.microsoft.com/en-us/library/cc646023.aspx).
<span id="_Toc237912073">
Understanding the SQL Server log files is important when troubleshooting installation issues. If an error occurs during installation, the first step is to review the error log. While error logs of older versions of SQL Server may appear similar, the error logs for SQL Server Setup have changed for this release.
For more information, see How to Troubleshoot SQL Server 2008 Setup Issues (https://support.microsoft.com/kb/955396).
To review the SQL Server error logs, follow these steps:
- If an installation error occurs, first find and review the main log located in %programfiles%\Microsoft SQL Server\100\Setup Bootstrap\LOG\Summary.txt
- If the main log in step 1 does not exist, find and review: SqlSetup.log in %temp%
- If no errors exist in the Summary.txt log or SqlSetup.log, find and review the Detail.log file located in %programfiles%\Microsoft SQL Server\100\Setup Bootstrap\LOG\<session folder> and search for "error:" You should see the error near this tag.
Log File Details
A SQL Server 2008 Express installation generates many log files in both a new installation and an upgrade. Each set of log files provides varying levels of detail and scope of content.
The log files for an installation are created in %programfiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\<YYYYMMDD_HHMM>. Every time setup runs, it creates a new timestamp directory.
The log file for the unmanaged Setup.exe is located in%temp%\sqlsetup*.log. This log contains the information regarding the execution and steps taken by Setup.exe. The Setup100.exe log is located in the SetupBootstrap\log folder.
All files in the logs folder, with the exception of the unmanaged log, are archived into the Log*.cab file in their respective log folder (a cab generated for each session folder). The following section describes the four categories of log files.
Summary.txt Log File
Location: %programfiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\
Purpose: This log is the “clean” and “user-friendly” log file that directs the user to the problem. This file lists all detected SQL Server components, the operating system environment, the specified command-line parameters and values, and the overall status of the Windows Installer (.msi file) and the Windows Installer update package (.msp file) that runs. The Summary.txt log file in this location is the latest one. The following table describes the sections of the log file.
Section | Description |
---|---|
Overall Summary: |
Brief summary of the execution |
Machine properties: |
Machine configuration |
Discovered product features: |
Product features already installed on the machine |
Package properties: |
Brief description of the product version installed, such as SQL Server 2008 |
User Input Settings: |
Overview of the input settings provided for the scenario |
Configuration file: |
Configuration file location |
Detailed results: |
Execution results |
Rules with failures: |
Failed rules |
Global rules: |
Global rules |
Scenario specific rules: |
Scenario specific rules |
Rules report file: |
Location of rules report file |
Table 6: Log file sections
If there are errors, the errors are listed in the overall summary section in the beginning of the file. The feature specific failures are listed in the detailed results.
Summary_{MachineName}_<timestamp>.txt log file
Location: %programfiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\<YYYYMMDD_HHMM>\Summary_ {MachineName}_<_20080503_040551.txt
Purpose: This is the Summary.txt log file for this session.
Summary_{MachineName}_<timestamp>_ComponentUpdate.txt log file
Location: %programfiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\<YYYYMMDD_HHMM>\ Summary {MachineName}_20080503_040551_ComponentUpdate.txt
Purpose: This is similar to the summary file that is generated during the component update work flow.
Summary_{MachineName}_<timestamp>_GlobalRules.txt log file
Location: %programfiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\<YYYYMMDD_HHMM>\Summary_{MachineName}_20080503_040551_GlobalRules.txt
Purpose: This is similar to the summary file generated during the global rules workflow.
Detail.txt Log File
Location: %programfiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\<YYYYMMDD_HHMM>\Detail.txt
Purpose: This log file contains the results from processing the global rules and component update, and it provides a detailed log of the execution. The Detail.txt log file organizes the line entries in the order of the timestamps and the file extensions (module optional) that produce the log. This log file is important for identifying any failures, because it generates the logs based on the time the actions are invoked. You can use this file to determine the step-by-step execution process, the order in which actions execute, and the dependencies between actions. This file is generated for the main workflow (similar to an installation or upgrade).
If an error occurs in the setup process, the installation program logs exceptions or errors when they occur. To find errors in this file, you can find the exception or error at the end of the file. Then search the file for “error” or “exception” keywords, which will help you determine when and where the error occurred.
Example of a failure in the Detail.txt log:
2009-05-12 10:26:26 Slp: Error: Action "RunFeatureSpecificRules" threw an exception during execution.
2009-05-12 10:26:27 Slp: Microsoft.SqlServer.Setup.Chainer.Workflow.ActionExecutionException: A previous release of Microsoft Visual Studio 2008 is installed on this computer. Upgrade Microsoft Visual Studio 2008 to the SP1 before installing SQL Server 2008. ---> Microsoft.SqlServer.Configuration.RulesEngineExtension.RulesEngineRuleFailureException: A previous release of Microsoft Visual Studio 2008 is installed on this computer. Upgrade Microsoft Visual Studio 2008 to the SP1 before installing SQL Server 2008.
2009-05-12 10:26:27 Slp: at Microsoft.SqlServer.Configuration.RulesEngineExtension.RunRulesAction.ExecuteAction(String actionId)
2009-05-12 10:26:27 Slp: at Microsoft.SqlServer.Chainer.Infrastructure.Action.Execute(String actionId, TextWriter errorStream)
2009-05-12 10:26:27 Slp: at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.InvokeAction(WorkflowObject metabase, TextWriter statusStream)
2009-05-12 10:26:27 Slp: at Microsoft.SqlServer.Setup.Chainer.Workflow.PendingActions.InvokeActions(WorkflowObject metaDb, TextWriter loggingStream)
2009-05-12 10:26:27 Slp: --- End of inner exception stack trace ---
2009-05-12 10:26:27 Slp: at Microsoft.SqlServer.Setup.Chainer.Workflow.PendingActions.InvokeActions(WorkflowObject metaDb, TextWriter loggingStream)
2009-05-12 10:26:32 Slp: Received request to add the following file to Watson reporting: C:\Users\petersad\AppData\Local\Temp\tmpDEE9.tmp
2009-05-12 10:26:32 Slp: The following is an exception stack listing the exceptions in outermost to innermost order
2009-05-12 10:26:32 Slp: Inner exceptions are being indented
2009-05-12 10:26:32 Slp:
2009-05-12 10:26:32 Slp: Exception type: Microsoft.SqlServer.Configuration.RulesEngineExtension.RulesEngineRuleFailureException
2009-05-12 10:26:32 Slp: Message:
2009-05-12 10:26:32 Slp: A previous release of Microsoft Visual Studio 2008 is installed on this computer. Upgrade Microsoft Visual Studio 2008 to the SP1 before installing SQL Server 2008.
2009-05-12 10:26:32 Slp: Data:
2009-05-12 10:26:32 Slp: DisableWatson = true
2009-05-12 10:26:32 Slp: Stack:
2009-05-12 10:26:32 Slp: at Microsoft.SqlServer.Configuration.RulesEngineExtension.RunRulesAction.ExecuteAction(String actionId)
2009-05-12 10:26:32 Slp: at Microsoft.SqlServer.Chainer.Infrastructure.Action.Execute(String actionId, TextWriter errorStream)
2009-05-12 10:26:32 Slp: at Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.InvokeAction(WorkflowObject metabase, TextWriter statusStream)
2009-05-12 10:26:32 Slp: at Microsoft.SqlServer.Setup.Chainer.Workflow.PendingActions.InvokeActions(WorkflowObject metaDb, TextWriter loggingStream)
2009-05-12 10:26:34 Slp:
2009-05-12 10:26:34 Slp: ----------------------------------------------------------------------
2009-05-12 10:26:34 Slp:
2009-05-12 10:26:34 Slp: Error result: -2067922356
2009-05-12 10:26:34 Slp: Result facility code: 1214
2009-05-12 10:26:34 Slp: Result error code: 588
Detail_ComponentUpdate.txt Log File
Location: %programfiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\<YYYYMMDD_HHMM>\Detail_ComponentUpdate.txt
Purpose: Similar to the Detail.txt log file, this file is generated for the component update workflow.
Detail_GlobalRules.txt Log File
Location: %programfiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\<YYYYMMDD_HHMM>\Detail_GlobalRules.txt
Purpose: Similar to the Detail.txt log file, this file is generated for the global rules execution.
MSI Log Files
- <Feature>_<Architecture>_< Iteration >.log
- <Feature>_<Architecture>_<Language>_< Iteration >.log
- <Feature>_<Architecture>_<Iteration>_<workflow>.log
Location: %programfiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\<YYYYMMDD_HHMM>\<Name>.log
Purpose: The MSIEXEC package installation process generates details in the MSI log files. To find errors in the MSI log files, search for “value 3” (English MSI version only); the error is usually near this string. At the end of the file, is a summary of the execution (pass or fail status and other properties). This does not apply for initialization failures, which are logged in a different way.
ConfigurationFile.ini
Location: %programfiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\<YYYYMMDD_HHMM>\Configurationfile.ini
Purpose: This file contains the input settings specific to an installation (public settings that apply to the current setup). The configuration file stores and uses settings provided by the user to restart the installation. This eliminates the need to enter the same parameter values again. Passwords for the accounts and the PID are the only settings not saved in the configuration file. You can add these parameter values later to the configuration file, or you can provide them at a command prompt or in the UI.
SystemConfigurationCheck_Report.htm log file
Location: %programfiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\<YYYYMMDD_HHMM>\SystemConfigurationCheck_Report.htm
Purpose: Contains a user-friendly version of the rules execution status. It also provides a short description of each executed rule.
<span id="_Toc237912085">
SQL Server 2008 Express is designed to provide a lightweight and easy-to-use way to include powerful SQL Server functionality in your applications. a successful, seamless installation or upgrade in your SQL Server 2008 Express application. When embedding SQL Server 2008 Express in an application, it is important for the new installation or upgrade to be successful and seamless. This paper provides examples, tips, and troubleshooting information to help you achieve that goal.
For more information:
https://www.microsoft.com/sqlserver/: SQL Server Web site
https://technet.microsoft.com/en-us/sqlserver/: SQL Server TechCenter
https://msdn.microsoft.com/en-us/sqlserver/: SQL Server DevCenter
Did this paper help you? Please give us your feedback. Tell us on a scale of 1 (poor) to 5 (excellent), how would you rate this paper and why have you given it this rating? For example:
- Are you rating it high due to having good examples, excellent screen shots, clear writing, or another reason?
- Are you rating it low due to poor examples, fuzzy screen shots, or unclear writing?
This feedback will help us improve the quality of white papers we release.
To send feedback on this white paper, visit the Microsoft Connect Site.