|
可以为每个数据库都设置若干个决定数据库特点的数据库级选项。只有系统管理员、数据库所有者以及 sysadmin 和 dbcreator 固定服务器角色和 db_owner 固定数据库角色的成员才能修改这些选项。这些选项对于每个数据库都是唯一的,而且不影响其它数据库。可以使用 ALTER DATABASE 语句的 SET 子句、sp_dboption 系统存储过程,或者在某些情况下使用 SQL Server 企业管理器设置数据库选项。 说明 通过使用 sp_configure 系统存储过程或者 SQL Server 企业管理器,可以设置服务器范围的设置。 设置了数据库选项之后,将自动发出一个检查点,它会使修改立即生效。 若要更改新创建数据库的任意数据库选项的默认值,请更改 model 数据库中的适当数据库选项。例如对于随后创建的任何新数据库,如果希望 AUTO_SHRINK 数据库选项的默认设置都为 ON,则将 model 的 AUTO_SHRINK 选项设置为 ON。 有五类数据库选项: 自动选项 游标选项 恢复选项 SQL 选项 状态选项 自动选项 自动选项控制某些自动行为。 AUTO_CLOSE 当设置为 ON 时,在数据库的最后一个用户退出,而且数据库中的所有过程都完成时,数据库将关闭并完全退出系统,从而释放所有资源。默认情况下,当使用 Microsoft® SQL Server™ 2000 Desktop Engine 时,对于所有数据库,此选项都设置为 ON,而对于所有其它版本都设置为 OFF,与操作系统无关。当用户试图再次使用数据库时,该数据库将自动重新打开。如果数据库完全退出系统,则该数据库不会重新打开,直到下一次 SQL Server 重新启动时,用户试图使用该数据库为止。当为 OFF 时,即使当前没有用户使用数据库,数据库仍然保持打开状态。 AUTO_CLOSE 选项对于桌面数据库很有用,因为它允许将数据库文件作为常规文件进行管理。它们可以移动、复制以制作备份,或者甚至通过电子邮件发送给其他用户。如果应用程序与 SQL Server 反复建立连接和断开连接,则不应对这样的应用程序所访问的数据库使用 AUTO_CLOSE 选项。在每个连接之间关闭和重新打开数据库的开销将削弱性能。 此选项的状态可以通过检查 DATABASEPROPERTYEX 函数的 IsAutoClose 属性来确定。 AUTO_CREATE_STATISTICS 当设置为 ON 时,将在谓词中使用的列上自动创建统计。添加统计将提高查询性能,因为 SQL Server 查询优化器可以更好地确定如何估算查询。如果未使用统计,则 SQL Server 将自动删除它们。当设置为 OFF 时,SQL Server 不自动创建统计;相反,可以手动创建统计。 默认情况下,AUTO_CREATE_STATISTICS 为 ON。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsAutoCreateStatistics 属性来确定。 AUTO_UPDATE_STATISTICS 当设置为 ON 时,因为更改表中数据而造成统计过期时,将自动更新现有的统计。当设置为 OFF 时,现有的统计不会自动更新;而可以手动更新该统计。 默认情况下,将 AUTO_UPDATE_STATISTICS 设置为 ON。 此选项的状态可以通过检查 DATABASEPROPERTYEX 函数的 IsAutoUpdateStatistics 属性来确定。 AUTO_SHRINK 当设置为 ON 时,数据库文件可作为定期收缩的对象。数据文件和日志文件都可以自动由 SQL Server 收缩。当设置为 OFF 时,在定期检查未使用空间的过程中,数据库文件不自动收缩。默认情况下,当使用 SQL Server 桌面版时,对于所有数据库,此选项都设置为 ON,而对于所有其它版本都设置为 OFF,与操作系统无关。 如果将数据库设置为 SIMPLE 恢复模型或备份日志,则 AUTO_SHRINK 只减小事务日志的大小。 当文件中超过百分之二十五的部分包含未使用的空间时,AUTO_SHRINK 选项将导致收缩文件。文件将收缩至未使用空间占文件 25% 的大小,或收缩至文件创建时的大小,两者之间取其大。 不能收缩只读数据库。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsAutoShrink 属性来确定。 游标选项 游标选项控制游标的行为和作用域。 CURSOR_CLOSE_ON_COMMIT 当设置为 ON 时,在提交事务时,所有打开的游标都将自动关闭(遵从 SQL-92 规范)。默认情况下,此设置为 OFF,并且游标仍然在各事务边界间保持打开状态,仅当连接关闭或被显式关闭时,才会关闭游标。 连接级设置(使用 SET 语句设置)替代 CURSOR_CLOSE_ON_COMMIT 的默认数据库设置。默认情况下,当连接到 SQL Server 时,ODBC 和 OLE DB 客户端发出连接级 SET 语句,以将会话的 CURSOR_CLOSE_ON_COMMIT 设置为 OFF。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsCloseCursorsOnCommitEnabled 属性来确定。 CURSOR_DEFAULT LOCAL | GLOBAL 如果设置了 CURSOR_DEFAULT LOCAL,且创建游标时没有将其定义为 GLOBAL,则对于在其中创建游标的批处理、存储过程或触发器,游标的作用域都是局部。游标名仅在该作用域内有效。在批处理、存储过程、触发器或存储过程 OUTPUT 参数中,该游标可由局部游标变量引用。当批处理、存储过程或触发器终止时,游标将被隐式释放,除非它在一个 OUTPUT 参数中传递回来。如果 OUTPUT 参数将游标传递回来,则游标在最后引用它的变量释放或离开作用域时释放。 如果设置了 CURSOR_DEFAULT GLOBAL,且在创建游标时没有将其定义为 LOCAL,则游标的作用域对于连接是全局的。在由连接执行的任何存储过程或批处理中,都可以引用该游标名称。该游标仅在断开时被隐式释放。CURSOR_DEFAULT GLOBAL 是默认设置。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsLocalCursorsDefault 属性来确定。 恢复选项 恢复选项控制数据库的恢复模型。 RECOVERY FULL | BULK_LOGGED | SIMPLE 指定 FULL 时,数据库备份和事务日志备份用于提供从媒体故障中完全恢复的能力。包括大容量操作(如 SELECT INTO、CREATE INDEX 和大容量装载数据)在内的所有操作都将完整记入日志。 指定 BULK_LOGGED 时,对所有 SELECT INTO、CREATE INDEX 和大容量装载数据操作的日志记录是最小的,因此所需的日志空间较少。这种模式可获得更好的性能和更少的日志空间使用量,但是丢失数据的危险比使用完整恢复要大。 指定 SIMPLE 时,只能将数据库恢复到上一次完整数据库备份或上一次差异备份。 SIMPLE 是 SQL Server 桌面版和数据引擎的默认设置,FULL 是所有其它版本的默认设置。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 Recovery 属性来确定。 TORN_PAGE_DETECTION 此恢复选项允许 SQL Server 检测由于电源故障或其它系统停歇导致的未完成的 I/O 操作。 当设置为 ON 时,只要一个 8 KB 的数据库页写入磁盘,该页的每个 512 字节扇区都有一位被翻转。当 SQL Server 以后读取该页时,如果有一个位发生错误,则该页将被错误写入;这样就会检测到一个残缺页。通常在恢复期间检测到残缺页,因为错误写入的任何页都可能在恢复时被读取。 虽然 SQL Server 数据库页是 8 KB,但是磁盘使用 512 字节的扇区执行 I/O 操作。因此,每个数据库页要写 16 个扇区。如果在操作系统将第一个 512 字节扇区写到磁盘和完成 8 KB I/O 操作之间系统失败(例如,由于电源故障),则可能出现残缺页。如果数据库页的第一个扇区在失败之前成功地写入磁盘,则磁盘上的数据库页将显示为更新过的,尽管可能没有更新成功。 说明 使用备用电池的磁盘高速缓存可以保证数据成功地写到磁盘上,或者根本就不写。 如果检测到残缺页,将出现一个 I/O 错误,并断开连接。如果在恢复过程中检测到残缺页,则数据库也会被标记为可疑。应该还原数据库备份,并应用所有事务日志备份,因为它在物理上是不一致的。 默认情况下,TORN_PAGE_DETECTION 为 ON。 此选项的当前设置可通过检查 DATABASEPROPERTYEX 的 IsTornPageDetectionEnabled 属性来确定。 SQL 选项 SQL 选项控制 ANSI 遵从选项。 ANSI_NULL_DEFAULT 允许用户控制数据库默认为空。未显式指定 NULL 或 NOT NULL 时,用户定义的数据类型或列定义将使用为空性的默认设置。为空性由会话或数据库设置确定。Microsoft® SQL Server™ 2000 默认为 NOT NULL。对于 ANSI 兼容性,数据库选项 ANSI_NULL_DEFAULT 设置为 ON 将使数据库默认设置更改为 NULL。 当此选项设置为 ON 时,在 CREATE TABLE 或 ALTER TABLE 语句过程中,没有显式定义为 NOT NULL 的所有用户定义的数据类型或列都将默认为允许空值。使用约束定义的列都将遵循约束规则,而无视此设置。 连接级设置(使用 SET 语句设置)替代 ANSI_NULL_DEFAULT 的默认数据库级设置。默认情况下,当连接到 SQL Server 时,ODBC 和 OLE DB 客户端发出连接级 SET 语句,以将会话的 ANSI_NULL_DEFAULT 设置为 ON。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsAnsiNullDefault 属性来确定。 ANSI_NULLS 当设置为 ON 时,所有与空值比较的值都取值为 NULL(未知)。当设置为 OFF 时,如果两个值都为 NULL,则非 Unicode 值与空值比较的值都取值为 TRUE。默认情况下,ANSI_NULLS 数据库选项为 OFF。 连接级设置(使用 SET 语句设置)替代 ANSI_NULLS的默认数据库设置。默认情况下,当连接到 SQL Server 时,ODBC 和 OLE DB 客户端发出连接级 SET 语句,将会话的 ANSI_NULLS 设置为 ON。 在计算列或索引视图上创建或操作索引时,SET ANSI_NULLS 也必须为 ON。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsAnsiNullsEnabled 属性来确定。 ANSI_PADDING 当设置为 ON 时,不剪裁字符值中插入到 varchar 列的尾随空格和二进制值中插入到 varbinary 列的尾随零。不将值按列的长度进行填充。当设置为 OFF 时,剪裁 varchar 列的尾随空格和 varbinary 列的尾随零。该设置只影响新列的定义。 SET ANSI_PADDING 为 ON 时,将允许空值的 Char(n) 和 binary(n) 列填充到列长,而当 SET ANSI_PADDING 为 OFF 时,将剪裁尾随空格和零。始终将不允许空值的 Char(n) 和 binary(n) 列填充到列长。 重要 建议始终将 ANSI_PADDING 设置为 ON。在计算列或索引视图上创建或操作索引时,SET ANSI_PADDING 必须为 ON。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsAnsiPaddingEnabled 属性来确定。 ANSI_WARNINGS 当设置为 ON 时,在出现如"被零除"或聚合函数中出现空值这类情形时,将发出错误或警告。当设置为 OFF 时,聚合函数中出现空值时不会发出警告,而在出现"被零除"这类情形时将返回空值。默认情况下,ANSI_WARNINGS 为 OFF。 在计算列或索引视图上创建或操作索引时,SET ANSI_WARNINGS 必须设置为 ON。 连接级设置(使用 SET 语句设置)替代 ANSI_WARNINGS 的默认数据库设置。默认情况下,当连接到 SQL Server 时,ODBC 和 OLE DB 客户端发出连接级 SET 语句,将会话的 ANSI_WARNINGS 设置为 ON。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsAnsiWarningsEnabled 属性来确定。 ARITHABORT 当设置为 ON 时,溢出或被零除错误将导致查询或批处理终止。如果错误发生在事务内,则回滚事务。当设置为 OFF 时,如果出现其中一个错误则显示警告信息,而查询、批处理或事务继续处理,就好象没有发生错误一样。 在计算列或索引视图上创建或操作索引时,SET ARITHABORT 必须设置为 ON。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsArithmeticAbortEnabled 属性来确定。 NUMERIC_ROUNDABORT 如果设置为 ON,则当表达式中出现精度损失时将生成错误。当设置为 OFF 时,精度损失不生成错误信息,并且将结果四舍五入为存储结果的列或变量的精度。 当在计算列或索引视图上创建或操作索引时,SET NUMERIC_ROUNDABORT 必须设置为 OFF。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsNumericRoundAbortEnabled 属性来确定。 CONCAT_NULL_YIELDS_NULL 当设置为 ON 时,如果串联操作中的某个操作数为 NULL,则操作结果为 NULL。例如,将字符串"This is"和 NULL 串联将得到 NULL 值,而不是值"This is"。 当为 OFF 时,将一个空值与一个字符串联在一起产生作为结果的字符串;该空值被视为空字符串进行处理。默认情况下,CONCAT_NULL_YIELDS_NULL 为 OFF。 当在计算列或索引视图上创建或操作索引时,SET CONCAT_NULL_YIELDS_NULL 必须设置为 ON。 连接级设置(使用 SET 语句设置)替代 CONCAT_NULL_YIELDS_NULL 的默认数据库设置。默认情况下,当连接到 SQL Server 时,ODBC 和 OLE DB 客户端发出连接级 SET 语句,将会话的 CONCAT_NULL_YIELDS_NULL 设置为 ON。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsNullConcat 属性来确定。 QUOTED_IDENTIFIER 当设置为 ON 时,可以用双引号分隔标识符,并且必须用单引号分隔文字。所有用双引号分隔的字符串都被解释为对象标识符。引用的标识符不必遵循用于标识符的 Transact-SQL 规则。它们可以是关键字,而且可以包括 Transact-SQL 标识符中通常不允许的字符。如果单引号 (') 是文字字符串的一部分,则可以用双引号 (") 表示它。 当设置为 OFF(默认)时,标识符不能用引号围住,而且必须遵循所有用于标识符的 Transact-SQL 规则。文字可以由单引号或双引号分隔。 SQL Server 还允许使用方括号 ([ ]) 分隔标识符。无论 QUOTED_IDENTIFIER 的设置如何,都可以始终使用括号标识符。 当在计算列或索引视图上创建或操作索引时,SET QUOTED_IDENTIFIER 必须设置为 ON。 连接级设置(使用 SET 语句设置)替代 QUOTED_IDENTIFIER 的默认数据库设置。默认情况下,连接到 SQL Server 时,ODBC 和 OLE DB 客户端发出连接级 SET 语句,将 QUOTED_IDENTIFIER 设置为 ON。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsQuotedIdentifiersEnabled 属性来确定。 RECURSIVE_TRIGGERS 当设置为 ON 时,触发器可以递归激发。当设置为 OFF(默认)时,触发器不能递归激发。 说明 当 RECURSIVE_TRIGGERS 为 OFF 时,只禁止直接递归。若要禁用间接递归,还必须将 nested triggers 服务器选项设置为 0。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsRecursiveTriggersEnabled 属性来确定。 状态选项 状态选项控制数据库是联机还是脱机、谁可以连接到数据库以及数据库是否为只读模式。当数据库从一种状态转换到另一种状态时,终止子句可用于控制如何终止连接。 OFFLINE | ONLINE 当指定 OFFLINE 时,数据库被关闭并且干净地退出,并标记为脱机。数据库脱机时不能进行修改。 当指定 ONLINE 时,数据库处于打开状态并可供使用。ONLINE 是默认设置。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 Status 属性来确定。 READ_ONLY | READ_WRITE 指定 READ_ONLY 时,数据库处于只读模式。用户可以从数据库检索数据,但是不能修改数据。因为只读数据库不允许数据修改: 系统启动时,跳过自动恢复。 不能收缩数据库。 只读数据库中不会发生锁定,这使查询性能更快。 指定 READ_WRITE 时,用户可以检索并修改数据。READ_WRITE 是默认设置。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 Updateability 属性来确定。 SINGLE_USER | RESTRICTED_USER | MULTI_USER SINGLE_USER 每次允许一个用户连接到数据库。所有其它用户连接均中断。中断连接的时间段由 ALTER DATABASE 语句的终止子句控制。新的连接尝试将被拒绝。即使设置此选项的用户注销,数据库仍保持 SINGLE_USER 模式。这时,其他用户(但只能是一个)可以连接到数据库。 若要允许多个连接,必须将数据库更改为 RESTRICTED_USER 或 MULTI_USER 模式。 RESTRICTED_USER 只允许 db_owner 固定数据库角色成员以及 dbcreator 和 sysadmin 固定服务器角色成员连接到数据库,不过对连接数没有限制。在 ALTER DATABASE 语句的终止子句所指定的时间段内,不是这些角色成员的用户连接将被断开连接。而且,不合格用户所做的新连接尝试将被拒绝。 MULTI_USER 允许所有具有适当权限的用户连接到数据库。MULTI_USER 是默认设置。 此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 UserAccess 属性来确定。 WITH ALTER DATABASE 语句的终止子句指定:当数据库从一种状态转换到另一种状态时,如何终止未完成的事务。通过中断事务与数据库的连接终止事务。如果省略终止子句,则 ALTER DATABASE 语句将无限期等待,直到事务主动提交或回滚为止。 ROLLBACK AFTER integer [SECONDS] ROLLBACK AFTER integer SECONDS 等待指定的秒数,然后中断不合格的连接。未完成的事务将回滚。当转换为 SINGLE_USER 模式时,不合格的连接是除发出 ALTER DATABASE 语句的连接以外的所有连接。当转换为 RESTRICTED_USER 模式时,不合格的连接是非 db_owner 固定数据库角色成员以及 dbcreator 和 sysadmin 固定服务器角色成员的用户连接。 ROLLBACK IMMEDIATE ROLLBACK IMMEDIATE 立即中断不合格的连接。所有未完成的事务都将回滚。不合格的连接与 ROLLBACK AFTER integer SECONDS 所描述的连接相同。 NO_WAIT NO_WAIT 在尝试更改数据库状态之前检查连接,如果存在某些连接,则导致 ALTER DATABASE 语句失败。当转换为 SINGLE_USER 模式时,如果存在任何其它连接,则 ALTER DATABASE 语句失败。当转换为 RESTRICTED_USER 模式时,如果存在任何不合格的连接,则 ALTER DATABASE 语句失败。 更改数据库选项 Transact-SQL(点击这里查看) 更改数据库的配置设置(企业管理器) 展开服务器组,然后展开服务器。 展开"数据库"文件夹,右击要更改的数据库,然后单击"属性"命令。 单击"选项"选项卡,再选择或清除要更改的配置设置。 |