SQL Server的有效安装

微软总是试图使它的软件安装尽可能地简单顺畅, SQL Server 2000 的安装也不例外。你从安装光盘的 x86\setup 文件夹启动 setupsql.exe 、在安装对话框中填入一些细节后,几分钟内,安装将在没有用户介入的情况下继续执行。你甚至可以成功的安装 SQL Server 2000 而不用明白那些选择意味着什么——只需在大多数安装对话框中点击“下一步”。然而,我强烈建议你不要如此轻率地对待安装;留意每一个选项并且确保你完全理解你所作的每个选择的影响。一些低劣的决定,比如错误的排序规则设置,可能很难被修复;其他的,比如接受默认的身份验证模式,可能创建了安全漏洞。

让我们看一些有关标准安装的重点,包括实例配置、安全性、排序规则和网络库。然后让我们探索无人值守和远程安装的高级选项。

实例

当你开始安装时,经常执行标准安装(与远程或无人值守安装相比)。你调用 setupsql.exe 程序来启动安装向导。在开始的两个对话框——欢迎和机器名——之后,你需要对你的实例配置作选择。 SQL Server 2000 支持在一台机器上安装多个 SQL Server 的实例。安装程序显示两个对话框来给你安装实例的选项。

首先,安装选择对话框显示了让你选择是否安装一个新的实例或者升级一个已经存在的安装。如果你选择安装一个新的实例,你将看到“实例名对话框”显示出来。你可以指明一个实例名或选择默认来安装一个默认实例——如果默认实例还未安装在机器上。

在做有关安装实例的选择时你需要考虑几件事。如果机器上没有默认实例、你打算在同一台机器上使用 SQL Server 2000 和 7.0 ,确信你没有将 SQL Server 2000 作为默认实例安装。 SQL Server 7.0 不支持命名实例,所以它必须成为默认实例。除了卸载和重新安装 SQL Server ,你不能把命名实例改为默认实例或者相反。你同样也不能在实例安装后更改实例名。然而,你可以在安装 SQL Server 2000 后再安装 SQL Server 7.0 ——如果你还没有安装一个默认实例的话。

如果一个 SQL Server 7.0 的安装已经存在,你可以将它升级——通过在安装选择对话框中选择升级路径并在后一个对话框中说明你想要升级默认实例。然而, SQL Server 2000 将成为默认实例, SQL Server 7.0 在这台机器上将不复存在。要两个版本都保留,把 SQL Server 2000 作为一个命名实例来安装。

安装完 SQL Server 2000 后,你可以使用备份和恢复、分离和连接、数据转换服务或者复制数据库向导来把 SQL Server 7.0 的数据库调到 SQL Server 2000 中来。注意,当你升级一个先前的版本到 SQL Server 2000 时,无论选择何种方式,你不能对数据库同样的拷贝指明超过一个的安装,所以每个安装必须维护它自己的每个数据库拷贝。

另一个考虑涉及 SQL Server 7.0 被称为“版本切换”的特性,它让 SQL Server 7.0 与 SQL Server 6.5 共存于同一台机器。但是,同时只有一个安装可以是活动的,另一个是静止的。当你调用版本控制,它激活静止的安装并使活动的那个停止活动。如果机器上包括一个 SQL Server 6.5 的安装——它没有以版本控制的形式和 SQL Server 7.0 共存,安装程序要求你选择两个选项之一:升级 SQL Server 6.5 到 SQL Server 2000 的默认实例并且在两个版本间保持一个版本控制;升级到 SQL Server 2000 的命名实例。和从 SQL Server 7.0 升级不同——它覆盖了当前的安装, 6.5 的安装保留在电脑中——不管你为升级到 2000 选择何种路径。

如果 7.0 和 6.5 都已安装并以“版本控制”的形式共存在同一台机器中,而且你不想升级已存在的安装,你可以安全地在同一台机器上安装 2000 的命名实例并且在同一台机器上使用所有三个版本。然而,以版本控制形式共存的同时只有一个版本可以运行,而所有命名实例可以同时运行。

在说明了你的实例选项后,我们来到安装类型对话框。

自定义安装

在安装类型对话框中,安装向导要求你在 3 个安装类型中作选择:典型、最小和自定义。如果你选择典型或者最小, SQL Server 对组件和子组件、排序规则和网络库都使用默认选项。因为典型安装会潜在地引起棘手的问题,我强烈建议始终选择自定义——即使你认为默认满足你的安装需求。一些以前提及的选项——特别是排序规则——在安装后如果发现不满足需求是非常难以更改的。自定义安装让你再次检查那些选项。

安全

在安装过程中,你在 2 个对话框中说明和安全相关的信息:服务账号和验证模式。在服务账号对话框里,你填入 SQL Server 和 SQL Server Agent 服务的服务账号细节。每个服务使用在对话框中说明的账号来被操作系统调入,并且在操作系统中运行于这个账号的安全上下文里。比如:当你备份到一个磁盘设备, SQL Server 检查你用来登录到 SQL Server 的登录是否具有适当的“备份数据库”权限。然而,创建备份文件设备并写入, SQL Server 必须在磁盘或者网络共享中创建一个文件,这个操作使用 SQL Server 服务账号的安全上下文。

同样的, SQL Server Agent 服务在 SQL Server Agent 服务账号的安全上下文下在 SQL Server 、操作系统或网络中运行过程。虽然一个在本机不具有管理权限的账号可以启动 SQL Server 服务,把 SQL Server 服务账号加入到本地管理员组是个好主意。否则,你需要额外地把所有所需的权限授权给该帐号,还需要授权该帐号合适的网络权限。

而如果你试图通过一个机器上不具有管理员权限的服务账号来启动 SQL Server Agent ,它甚至无法启动。而且如果 SQL Server Agent 在网络上的其他机器上执行操作,比如复制或者多服务器工作,你应该使用一个在其他机器上具有适当权限的域账号。比如在一个包含 3 台 SQL Server 机器的单域多服务器环境中,一台主服务器控制目标服务器上的自动活动。因为双方(主服务器和目标服务器)需要相互通讯,你需要确保主服务器上的 SQL Server Agent 服务账号在目标服务器上具有适当的权限,反之亦然。配置这样一个环境的最简便方法就是创建一个域账号,使它在所有服务器上成为本地管理员组的成员,并且通过该帐号来调用所有的 SQL Server Agent 服务。

在身份验证模式对话框中,你可以选择是否只允许 Windows 身份验证登录( Windows 身份验证模式)或者 Windows 和 SQL Server 两者登录(混合模式)。你也可以为 sa ( System Administrator )的 SQL Server 登录指定一个密码。 Windows 身份验证模式是默认的和最常用的推荐安全模式。然而,为安全起见,我建议你选择混合模式并且为 sa 账号提供一个密码,在安装完成和处理完一些其他的安全项目后,再把验证模式改为 Windows 身份验证模式。如果你选择 Windows 身份验证模式作为你的服务器的安全模式,安装过程把 sa 登录创建为无效并且没有密码(因为 SQL Server 身份验证模式是无效的)。你可以在安装后更改 sa 的密码——我强烈建议你这么做——但是一开始就选择 Windows 身份验证模式是危险的,因为你可能忘了更改密码或者使用空密码,以为 sa 已经失效。

无论你选择何种模式,安装程序都为 BUILTIN\Administrators 组创建一个 Windows 身份验证的登录,它映射到本地机器的管理员组。这个登录的创建意味着所有本地管理员组的成员,包括域组域管理员,都是你的 SQL Server 的系统管理员( sysadmin )角色的成员。给予网络和本地管理员在 SQL Server 上的毫无限制的权限并不总是一个好主意,因为这引入了安全风险,这样一来你可能决定从 SQL Server 的 sysadmin 角色中移除 BUILTIN\Administrators ,或者你可能从 SQL Server 中完全移去这些自动创建的登录而为 DBA 成员组用 sysadmin 身份创建一个登录——不是网络管理员。

如果你决定遵从上述这些建议,这样做就够了:首先,为 DBA 成员组用 sysadmin 身份创建一个登录,然后删除 BUILTIN\Administrators 登录。如果你的服务器的身份验证模式时 Windows 而且你在为 DBA 创建登录以前删除所有具有 sysadmin 资格的登录,你会发现你自己被锁在了 SQL Server 之外,无法执行管理任务——如:创建新的登录。如果你落入了这个陷阱,你仍然可以通过把注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\ 实例名 \MSSQLServer\LoginMode 的键值更改为 2 ,来把 SQL Server 身份验证的模式改为混合模式,修改好后重新启动 SQL Server 服务即可。

虽然通过注册表可以控制 SQL Server 的登录模式是方便的,它也有个缺点。任何人只要具有编辑注册表键值的权限,包括网络和本地管理员,都可以更改 SQL Server 的身份验证模式。如果你用 Windows 身份验证模式来安装 SQL Server , sa 是失效的但是仍然具有一个空白的密码。如果接着你更改 SQL Server 身份验证模式到混合模式(这就使 sa 登录有效),任何人都可以作为 sa 登录。所以,绝对确保你一完成安装就更改 sa 密码或者在安装过程中选择混合模式并且为 sa 提供一个密码。

排序规则

接下来,你需要选择排序规则设置。 SQL Server 2000 中的排序规则( Collation )设置用来管理和语言相关的行为、对象名称和列的值的唯一性,以及排序规则( sorting rules )。在排序规则设置对话框里,你说明排序规则并在 SQL Server 排序规则和 Windows 排序规则两者之间选择其一。如果你需要和以前 SQL Server 版本的向后兼容性,选择 SQL Server 排序规则——比如,如果你打算在一个早期版本的 SQL Server 和 SQL Server 2000 之间使用复制。否则,选择 Windows 排序规则。 SQL Server 2000 的排序规则设置,不管是 Windows 或是 SQL Server ,合并了在先前版本中的 3 个独立的设置:字符集,排序次序和 Unicode 排序规则。除了整合旧的 3 个设置到一起外, SQL Server 2000 在排序规则中还提供了比以前版本更为强大的灵活性。

在你安装 SQL Server 2000 时选择的排序规则决定了系统数据库的排序规则设置。要在安装后更该系统数据库的排序规则设置,你需要脚本化所有你的系统对象(比如:登录,消息,工作)并且运行 rebuildm.exe ,它用新的排序规则重建了所有的系统数据库。然而,你不必先导出用户数据库中的所有数据再在运行完 rebuildm.exe 后把他们再导入——就像你再 SQL Server 7.0 中所作的那样。你只须重新连接用户数据库到 SQL Server 。你可以用不同于默认服务器的排序规则(这是模板系统数据库的)的排序规则配置你的用户数据库,或者甚至用不同于服务器设置的排序规则连接或恢复一个数据库。你可以以后修改用户数据库的默认排序规则。对于特定的一列,你可以指定不同于默认的数据库排序规则的一种排序规则;你甚至可以稍后修改列的排序规则——如果该列上没有创建索引的话。

虽然在排序规则方面 SQL Server 2000 是灵活的,不要低估了你在安装时作的选择。正如我前面所言,服务器的排序规则应用到所有的系统数据库并且决定了记录在系统数据库中所有对象(如登录名,数据库名)的排序规则。进一步而言, tempdb 的排序规则也是你在安装过程中选择的服务器排序规则。当你创建一个临时表,表的列使用 tempdb 的排序规则——除非你在每列的定义里指明 COLLATE _ 数据库默认 _ 。

网络库

在说明了排序规则设置后,你来到了网络库对话框。网络库是客户机应用程序用来和 SQL Server 通讯的协议。客户机和 SQL Server 都必须有至少一个匹配的网络库,通过它两者可以通讯。在网络库对话框中,你设置 SQL Server 将会用来和客户机通讯的网络库。

在 SQL Server 6.5 中,只有命名管道和多协议允许 Windows 身份验证;所有其他网络库只允许 SQL Server 身份验证。这样一来,对于 SQL Server 6.5 来说,你想要支持的登录类型时你选择网络库的一个因素。进一步来说,只有多协议允许数据加密,所以如果你 SQL Server 6.5 支持数据加密,你就不得不选择这个网络库。在 SQL Server 7.0 中,所有网络库支持 Windows 身份验证,在这个意义上你就更加灵活,但是多协议仍然是唯一允许数据加密的网络库。

在 SQL Server 2000 里,你可以通过使用 SQL Server 网络工具和 SQL Server 客户机网络工具的安全套接字层( Secure Socket Layer , SSL )来对所有网络库强制加密,这样一来,加密因素不再决定网络库的选择。同样,在 SQL Server 2000 里,多协议不支持命名实例方案(服务器名 \ 实例名),这样的话,当你使用命名实例时,多协议也不是个好的选择。 SQL Server 2000 中最通用的网络库大概是 TCP/IP 套接字吧。它提供了良好的性能,允许 Windows 身份验证,而且你可以在需要时对它进行强制 SSL 加密。

大多数使用 SQL Server 早期版本的用户知道 SQL Server 的默认 TCP 端口是端口 1433 。当使用默认端口时,客户机连接除了服务器名或者 IP 地址不需要提供端口号。然而, SQL Server 2000 支持多个实例,这无法统统使用同样的端口号。所以当你安装一个命名实例时,安装程序建议把 0 作为端口号。端口号为 0 意味着当 SQL Server 第一次启动时,它动态地选择一个空闲的端口号并且把它永久保留或者直到你稍后手工修改它为止。那么客户机连接如何继续通过仅仅提供服务器名称 /IP 地址 + 实例名而不用指定端口号找到 SQL Server 呢? SQL Server 2000 中的一个监听器服务监听端口 1433 上的客户机请求,然后通过检测请求中的实例名并把它和实例的端口号匹配,再把该请求重定向到适当的实例。

无人值守和远程安装

现在我们的标准安装已经完成,让我们讨论一下无人值守安装。 Setupsql.exe 程序让你记录下一个应答文件,它包括了你在安装程序对话框中常选的对于各种安装选项的所有回答。稍后,你能够通过调用以该应答文件作为参数的 setupsql.exe 命令来运行一个安装。这种无需任何用户干预的安装类型被称为无人值守安装。

要准备应答文件,先启动安装程序,在安装选择对话框中选择高级选项,在对话框中选择选取“记录无人值守 .ISS 文件”。安装程序会指导你完成常规的安装对话框,其中你可以填入所有你想要记录的选项。当你完成后,安装程序在 \WINNT 文件夹下创建一个名为 setup.iss 的文件。

要启动一个无人值守安装,运行 setupsql.exe 程序,用 -s 作为执行安静安装的参数、 -fl 参数指定一个应答文件。例如,要启动一个安静的、无人值守的安装——安装完成后不通知你,你可以使用以下命令:

 1<path>\setupsql.exe –s –fl <path>\setup.iss 
 2
 3如果你想在安装完成时得到通知,从命令行执行如下  setupsql.exe  程序,或者把它写入一个批处理文件中: 
 4
 5start /wait <path>\setupsql.exe -s –fl <path>\setup.iss 
 6
 7直到安装结束,控制才会传递到下一条命令。当你从批处理文件启动安装,而这个文件又包括其他依赖于安装的行为时,使用  start /wait  选项是特别重要的。例如,假设你要为一个名为  INST1  的命名实例执行无人值守安装来创建批处理文件,然后启动  SQL Server  服务,再运行一个用来创建数据库及其对象(如:表、存储过程)的  sql  脚本。这个批处理文件看起来可能像这样: 
 8
 9start /wait D:\X86\Setup\setupsql.exe –s –fl C:\WINNT\setup.iss 
10
11net start MSSQL$INST1 
12
13OSQL /E /I “c:\data\scripts\createappdb.sql” 
14
15如果你不使用  start /wait  选项,控制从安装一开始就移到了批处理文件的第二条命令,而这条  NET START  命令试图启动一个还不存在的服务。 
16
17对一个无人值守安装进行故障排除要比对待标准安装的故障排除更需要慎重对待。标准安装往往在安装程序遇到问题时通过显示一个包含出错信息的对话框(并伴有响亮的警告声)来通知你。而无人值守安装只是简单地终止,且没有交互的通知。 
18
19要了解如何对无人值守安装进行故障排除,让我们来看一组我遇到过的问题。假设你已经在服务器上完成了另一个产品的安装,然后你试图执行一个  SQL Server  的无人值守安装。安装程序检测到在前一个安装结束后服务器尚未重启,于是放弃安装,同时没有任何信息提示。如果你保持任务管理器窗口打开,你会注意到  setupsql.exe  程序不活动,所以  SQL Server  没有被安装。你也应该检查日志文件。一旦安装成功,  \WINNT\setup.log  文件应该显示  0  作为出错代码;然而,在我描述的情景中,他很可能显示  -1  ,这表示一个基本错误。你也应该看一下出错信息。 
20
21当执行无人值守安装时,我遇到过多次的另一个错误是“对话框次序紊乱”。在我调用安装程序后不久我就意识到这一问题的存在——那是在我打开任务管理器并看到  setupsql.exe  虽然在运行但是没有像正常的无人值守安装那样调用和释放进程。同时,安装程序通常在  \Program Files\Microsoft SQL Server  下创建的文件夹也没有被创建。  Setupsql.exe  程序看来并没有占用  CPU  或者  I/O  资源,只是在大约  10  分钟后消失了。  Setup.log  文件显示一个  -12  的错误代码而  sqlstp.log  文件显示没有错误——实际上,它看来还未完成。  Sqlstp  包含了不完整的注意事项,只是一条消息——  Begin Action  :  DialogShow<dialogname> 。  BOL  显示了以下有关错误代码  -12  的信息:“对话框次序紊乱。这是一个常见错误,由在安装初始化文件(  Setup.iss  )文件中的一个对话框次序紊乱所引起。这是由于  Setup.iss  文件创建过程中的系统问题所产生。”足以确认,在我重新对  Setup.iss  文件排序后,无人值守安装成功完成。 
22
23除了完全安装,你还可以执行  SQL Server 2000  服务包的无人值守安装。要把服务包应用到默认实例上,从服务包的安装目录调用  setupsql.exe  程序,指明应答文件为位于服务包安装目录根目录下的  sql2kdef.iss  。例如:如果服务包安装文件位于  c:\sql2ksq2  下,执行入下命令: 
24
25start /wait c:\sql2ksp2\x86\setup\setupsql.exe –s –fl c:\sql2ksp2\sql2kdef.iss 
26
27要把服务包应用到命名实例上,使用  sql2knm.iss  应答文件,但是首先修改文件中的下列两行来对应正确的命名实例: 
28
29InstanceName = INSTANCE_NAME 
30
31NMPPipeName=\\\\.\pipe\MSSQL$INSTANCE_NAME\sql\query 
32
33另一个高级选项——远程安装——让你在一台远程的电脑上安装  SQL Server 2000  。你可以从一台本地的电脑上手工记录下一个  setup.iss  文件,把它复制到远程电脑上,在激活  setupsql.exe  程序和在远程电脑上的  setup.iss  &lt;SPAN style="FONT-FAMILY: 宋体; mso-asc</dialogname></path></path></path></path>
Published At
Categories with 数据库类
Tagged with
comments powered by Disqus