可以为每个数据库都设置若干个决定数据库特点的数据库级选项只有系统管理员数据库所有者以及 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; 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 选项将导致收缩文件文件将收缩至未使用空间占文件 % 的大小或收缩至文件创建时的大小两者之间取其大
不能收缩只读数据库
此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 IsAutoShrink 属性来确定
游标选项
游标选项控制游标的行为和作用域
CURSOR_CLOSE_ON_COMMIT
当设置为 ON 时在提交事务时所有打开的游标都将自动关闭(遵从 SQL 规范)默认情况下此设置为 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 INTOCREATE INDEX 和大容量装载数据)在内的所有操作都将完整记入日志
指定 BULK_LOGGED 时对所有 SELECT INTOCREATE INDEX 和大容量装载数据操作的日志记录是最小的因此所需的日志空间较少这种模式可获得更好的性能和更少的日志空间使用量但是丢失数据的危险比使用完整恢复要大
指定 SIMPLE 时只能将数据库恢复到上一次完整数据库备份或上一次差异备份
SIMPLE 是 SQL Server 桌面版和数据引擎的默认设置FULL 是所有其它版本的默认设置
此选项的状态可通过检查 DATABASEPROPERTYEX 函数的 Recovery 属性来确定
TORN_PAGE_DETECTION
此恢复选项允许 SQL Server 检测由于电源故障或其它系统停歇导致的未完成的 I/O 操作
当设置为 ON 时只要一个 KB 的数据库页写入磁盘该页的每个 字节扇区都有一位被翻转当 SQL Server 以后读取该页时如果有一个位发生错误则该页将被错误写入这样就会检测到一个残缺页通常在恢复期间检测到残缺页因为错误写入的任何页都可能在恢复时被读取
虽然 SQL Server 数据库页是 KB但是磁盘使用 字节的扇区执行 I/O 操作因此每个数据库页要写 个扇区如果在操作系统将第一个 字节扇区写到磁盘和完成 KB I/O 操作之间系统失败(例如由于电源故障)则可能出现残缺页如果数据库页的第一个扇区在失败之前成功地写入磁盘则磁盘上的数据库页将显示为更新过的尽管可能没有更新成功
说明 使用备用电池的磁盘高速缓存可以保证数据成功地写到磁盘上或者根本就不写
如果检测到残缺页将出现一个 I/O 错误并断开连接如果在恢复过程中检测到残缺页则数据库也会被标记为可疑应该还原数据库备份并应用所有事务日志备份因为它在物理上是不一致的
默认情况下TORN_PAGE_DETECTION 为 ON
此选项的当前设置可通过检查 DATABASEPROPERTYEX 的 IsTornPageDetectionEnabled 属性来确定
SQL 选项
SQL 选项控制 ANSI 遵从选项
ANSI_NULL_DEFAULT
允许用户控制数据库默认为空未显式指定 NULL 或 NOT NULL 时用户定义的数据类型或列定义将使用为空性的默认设置为空性由会话或数据库设置确定Microsoft® SQL Server; 默认为 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_