修改数据库(设置数据库选项)

  可以为每个数据库都设置若干个决定数据库特点的数据库级选项。只有系统管理员、数据库所有者以及 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_
posted @ 2007-07-25 16:55  Athrun  阅读(793)  评论(0编辑  收藏  举报