ALTER DATABASE (Transact-SQL)

更新日期: 2006 年 12 月 12 日

修改一个数据库或与该数据库关联的文件和文件组。在数据库中添加或删除文件和文件组、更改数据库的属性或其文件和文件组、更改数据库排序规则和设置数据库选项。不能修改数据库快照。若要修改与复制相关的数据库选项,请使用 sp_replicationdboption

主题链接图标Transact-SQL 语法约定

语法

 ALTER DATABASE database_name  {     <add_or_modify_files>   | <add_or_modify_filegroups>   | <set_database_options>   | MODIFY NAME = new_database_name    | COLLATE collation_name } [;]  <add_or_modify_files>::= {     ADD FILE <filespec> [ ,...n ]          [ TO FILEGROUP { filegroup_name } ]   | ADD LOG FILE <filespec> [ ,...n ]    | REMOVE FILE logical_file_name    | MODIFY FILE <filespec> }  <filespec>::=  (     NAME = logical_file_name       [ , NEWNAME = new_logical_name ]      [ , FILENAME = 'os_file_name' ]      [ , SIZE = size [ KB | MB | GB | TB ] ]      [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ]      [ , FILEGROWTH = growth_increment [ KB | MB | GB | TB| % ] ]      [ , OFFLINE ] )   <add_or_modify_filegroups>::= {     | ADD FILEGROUP filegroup_name      | REMOVE FILEGROUP filegroup_name      | MODIFY FILEGROUP filegroup_name         { <filegroup_updatability_option>          | DEFAULT         | NAME = new_filegroup_name          } } <filegroup_updatability_option>::= {     { READONLY | READWRITE }      | { READ_ONLY | READ_WRITE } }  <set_database_options>::= SET  {     { <optionspec> [ ,...n ] [ WITH <termination> ] } }  <optionspec>::=  {     <db_state_option>   | <db_user_access_option>    | <db_update_option>    | <external_access_option>   | <cursor_option>    | <auto_option>    | <sql_option>    | <recovery_option>    | <database_mirroring_option>   | <service_broker_option>   | <date_correlation_optimization_option>   | <parameterization_option> }  <db_state_option> ::=     { ONLINE | OFFLINE | EMERGENCY }  <db_user_access_option> ::=     { SINGLE_USER | RESTRICTED_USER | MULTI_USER }  <db_update_option> ::=     { READ_ONLY | READ_WRITE }  <external_access_option> ::= {     DB_CHAINING { ON | OFF }   | TRUSTWORTHY { ON | OFF } }  <cursor_option> ::=  {     CURSOR_CLOSE_ON_COMMIT { ON | OFF }    | CURSOR_DEFAULT { LOCAL | GLOBAL }  }  <auto_option> ::=  {     AUTO_CLOSE { ON | OFF }    | AUTO_CREATE_STATISTICS { ON | OFF }    | AUTO_SHRINK { ON | OFF }    | AUTO_UPDATE_STATISTICS { ON | OFF }    | AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF } }  <sql_option> ::=  {     ANSI_NULL_DEFAULT { ON | OFF }    | ANSI_NULLS { ON | OFF }    | ANSI_PADDING { ON | OFF }    | ANSI_WARNINGS { ON | OFF }    | ARITHABORT { ON | OFF }    | CONCAT_NULL_YIELDS_NULL { ON | OFF }    | NUMERIC_ROUNDABORT { ON | OFF }    | QUOTED_IDENTIFIER { ON | OFF }    | RECURSIVE_TRIGGERS { ON | OFF }  }  <recovery_option> ::=  {     RECOVERY { FULL | BULK_LOGGED | SIMPLE }    | TORN_PAGE_DETECTION { ON | OFF }   | PAGE_VERIFY { CHECKSUM | TORN_PAGE_DETECTION | NONE } }  <database_mirroring_option> ::=  { <partner_option> | <witness_option> }     <partner_option> ::=     PARTNER { = 'partner_server'              | FAILOVER              | FORCE_SERVICE_ALLOW_DATA_LOSS             | OFF             | RESUME              | SAFETY { FULL | OFF }             | SUSPEND              | TIMEOUT integer             }     <witness_option> ::=     WITNESS { = 'witness_server'              | OFF              }  <service_broker_option> ::= {     ENABLE_BROKER   | DISABLE_BROKER   | NEW_BROKER   | ERROR_BROKER_CONVERSATIONS }  <date_correlation_optimization_option> ::= {     DATE_CORRELATION_OPTIMIZATION { ON | OFF } }  <parameterization_option> ::= {     PARAMETERIZATION { SIMPLE | FORCED } }  <snapshot_option> ::= {     ALLOW_SNAPSHOT_ISOLATION {ON | OFF }   | READ_COMMITTED_SNAPSHOT {ON | OFF } } <termination> ::=  {     ROLLBACK AFTER integer [ SECONDS ]    | ROLLBACK IMMEDIATE    | NO_WAIT }

参数

  • database_name
    要修改的数据库的名称。
  • MODIFY NAME **=**new_database_name
    使用指定的名称 new_database_name 重命名数据库。
  • COLLATE collation_name
    指定数据库的排序规则。collation_name 既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称。如果不指定排序规则,则将 SQL Server 实例的排序规则指定为数据库的排序规则。

    有关 Windows 排序规则名称和 SQL 排序规则名称的详细信息,请参阅 COLLATE (Transact-SQL)

<add_or_modify_files>::=

指定要添加、删除或修改的文件。

  • ADD FILE
    将文件添加到数据库。

    • TO FILEGROUP { filegroup_name }
      指定要将指定文件添加到的文件组。若要显示当前文件组和当前的默认文件组,请使用 sys.filegroups 目录视图。
  • ADD LOG FILE
    将要添加的日志文件添加到指定的数据库。
  • REMOVE FILE logical_file_name
    从 SQL Server 的实例中删除逻辑文件说明并删除物理文件。除非文件为空,否则无法删除文件。

    • logical_file_name
      在 SQL Server 中引用文件时所用的逻辑名称。
  • MODIFY FILE
    指定应修改的文件。一次只能更改一个 <filespec> 属性。必须在 <filespec> 中指定 NAME,以标识要修改的文件。如果指定了 SIZE,那么新大小必须比文件当前大小要大。

    若要修改数据文件或日志文件的逻辑名称,请在 NAME 子句中指定要重命名的逻辑文件名称,并在 NEWNAME 子句中指定文件的新逻辑名称。例如:

    MODIFY FILE ( NAME = logical_file_name, NEWNAME = new_logical_name ) 
    

    若要将数据文件或日志文件移至新位置,请在 NAME 子句中指定当前的逻辑文件名称,并在 FILENAME 子句中指定新路径和操作系统文件名称。例如:

    MODIFY FILE ( NAME = logical_file_name, FILENAME = ' new_path/os_file_name ' )
    

    在移动全文目录时,请只在 FILENAME 子句中指定新路径。不要指定操作系统文件名称。

    有关详细信息,请参阅移动数据库文件

<filespec>::=

控制文件属性。

  • NAME logical_file_name
    指定文件的逻辑名称。

    • logical_file_name
      在 SQL Server 的实例中引用文件时所用的逻辑名称。
  • NEWNAME new_logical_file_name
    指定文件的新逻辑名称。

    • new_logical_file_name
      用于替换现有逻辑文件名称的名称。该名称在数据库中必须唯一,并应符合标识符规则。该名称可以是字符或 Unicode 常量、常规标识符或定界标识符。有关详细信息,请参阅使用标识符作为对象名称
  • FILENAME 'os_file_name'
    指定操作系统(物理)文件名称。

    • ' os_file_name '
      创建文件时操作系统使用的路径和文件名。该文件必须驻留在安装 SQL Server 的服务器上。在执行 ALTER DATABASE 语句前,指定的路径必须已经存在。

      如果为该文件指定了 UNC 路径,则无法设置 SIZE、MAXSIZE 和 FILEGROWTH 参数。

      不应将数据文件放在压缩文件系统中,除非这些文件是只读辅助文件或该数据库是只读的。日志文件一定不要放在压缩文件系统中。有关详细信息,请参阅只读文件组和压缩

      如果文件位于原始分区上,则 os_file_name 必须仅指定现有原始分区的驱动器号。每个原始分区上只能存放一个文件。

  • SIZE size
    指定文件大小。

    • size
      文件的大小。

      与 ADD FILE 一起指定时,size 是文件的初始大小。与 MODIFY FILE 一起指定时,size 是文件的新大小,而且必须大于文件的当前大小。

      如果没有为主文件提供 size,则 SQL Server 2005 数据库引擎将使用 model 数据库中的主文件的大小。如果指定了辅助数据文件或日志文件,但未指定该文件的 size ,则数据库引擎将以 1 MB 作为该文件的大小。

      后缀 KB、MB、GB 和 TB 可用于指定千字节、兆字节、千兆字节或兆兆字节。默认值为 MB。指定整数,不包含小数。若要指定兆字节的分数,应通过乘以数字 1024 将该值转换为千字节。例如,应指定 1536 KB 而不是 1.5MB(1.5 x 1024 = 1536)。

  • MAXSIZE { max_size| UNLIMITED }
    指定文件可增大到的最大文件大小。

    • max_size
      最大的文件大小。后缀 KB、MB、GB 和 TB 可用于指定千字节、兆字节、千兆字节或兆兆字节。默认值为 MB。指定整数,不包含小数。如果未指定 max_size,则文件大小将一直增加,直至磁盘已满。
    • UNLIMITED
      指定文件将增长到磁盘充满。在 SQL Server 2005 中,指定为不限制增长的日志文件的最大大小为 2 TB,而数据文件的最大大小为 16 TB。
  • FILEGROWTH growth_increment
    指定文件的自动增量。文件的 FILEGROWTH 设置不能超过 MAXSIZE 设置。

    • growth_increment
      每次需要新空间时为文件添加的空间量。

      该值可以 MB、KB、GB、TB 或百分比 (%) 为单位指定。如果未在数量后面指定 MB、KB 或 %,则默认值为 MB。如果指定 %,则增量大小为发生增长时文件大小的指定百分比。指定的大小舍入为最接近的 64 KB 的倍数。

      如果值为 0,则表明自动增长被设置为关闭,且不允许增加空间。

      如果未指定 FILEGROWTH,则数据文件的默认值为 1 MB,日志文件的默认增长比例为 10%,并且最小值为 64 KB。

      ms174269.note(zh-cn,SQL.90).gif注意:
      在 SQL Server 2005 中,数据文件的默认增量已从 10% 改为 1 MB。日志文件的默认值仍然为 10%。
  • OFFLINE
    将文件设置为脱机并使文件组中的所有对象都不可访问。

    ms174269.Caution(zh-cn,SQL.90).gif注意:
    仅当文件已损坏但可以还原时,才能使用该选项。对于设置为 OFFLINE 的文件,只有通过从备份中还原该文件,才能将其设置为联机。有关还原单个文件的详细信息,请参阅 RESTORE (Transact-SQL)
<add_or_modify_filegroups>::=

在数据库中添加、修改或删除文件组。

  • ADD FILEGROUP filegroup_name
    将文件组添加到数据库。
  • REMOVE FILEGROUP filegroup_name
    从数据库中删除文件组。除非文件组为空,否则无法将其删除。首先从文件组中删除所有文件。有关详细信息,请参阅本主题前面的“REMOVE FILE logical_file_name”部分。
  • MODIFY FILEGROUP filegroup_name { <filegroup_updatability_option> | DEFAULT | NAME **=**new_filegroup_name }
    通过将状态设置为 READ_ONLY 或 READ_WRITE、将文件组设置为数据库的默认文件组或者更改文件组名称来修改文件组。

    • <filegroup_updatability_option>
      对文件组设置只读或读/写属性。
    • 默认值
      将默认数据库文件组改为 filegroup_name。数据库中只能有一个文件组作为默认文件组。有关详细信息,请参阅了解文件和文件组
    • NAME = new_filegroup_name
      将文件组名称改为 new_filegroup_name
<filegroup_updatability_option>::=

对文件组设置只读或读/写属性。

  • READ_ONLY | READONLY
    指定文件组为只读。不允许更新其中的对象。主文件组不能设置为只读。若要更改此状态,您必须对数据库有独占访问权限。有关详细信息,请参阅 SINGLE_USER 子句。

    因为只读数据库不允许数据修改,所以将发生以下情况:

    • 系统启动时,将跳过自动恢复。
    • 不能收缩数据库。
    • 在只读数据库中不会进行锁定。这可以加快查询速度。
    ms174269.note(zh-cn,SQL.90).gif注意:
    在 Microsoft SQL Server 的未来版本中,将删除 READONLY 关键字。请避免在新的开发工作中使用 READONLY,并计划修改当前使用 READONLY 的应用程序。请改用 READ_ONLY。
  • READ_WRITE | READWRITE
    将该组指定为 READ_WRITE。允许更新文件组中的对象。若要更改此状态,您必须对数据库有独占访问权限。有关详细信息,请参阅 SINGLE_USER 子句。

    ms174269.note(zh-cn,SQL.90).gif注意:
    在 Microsoft SQL Server 的未来版本中,将删除 READWRITE 关键字。避免在新的开发工作中使用 READWRITE,并计划修改当前使用 READWRITE 的应用程序。请改用 READ_WRITE。

这些选项的状态可通过查看 sys.databases 目录视图中的 is_read_only 列或 DATABASEPROPERTYEX 函数的 Updateability 属性来确定。

<db_state_option>::=

控制数据库的状态。

  • OFFLINE
    数据库被关闭、完全关闭并标记为脱机。数据库脱机时,不能进行修改。
  • ONLINE
    该数据库已打开且可用。
  • EMERGENCY
    数据库标记为 READ_ONLY,禁用日志记录,并且仅限 sysadmin 固定服务器角色的成员访问。EMERGENCY 主要用于故障排除。例如,可以将由于损坏了日志文件而标记为可疑的数据库设置为 EMERGENCY 状态。这样,系统管理员便可对数据库进行只读访问。只有 sysadmin 固定服务器角色的成员才可以将数据库设置为 EMERGENCY 状态。

可通过查看 sys.databases 目录视图中的 statestate_desc 列,或者查看 DATABASEPROPERTYEX 函数的 Status 属性来确定此选项的状态。有关详细信息,请参阅数据库状态

无法将标记为 RESTORING 的数据库设置为 OFFLINE、ONLINE 或 EMERGENCY。在活动还原操作期间,或者当数据库还原操作或日志文件还原操作由于备份文件损坏而失败时,数据库可以处于 RESTORING 状态。有关详细信息,请参阅应对由损坏的备份导致的 SQL Server 还原错误

<db_user_access_option> ::=

控制用户对数据库的访问。

  • SINGLE_USER
    指定一次只能有一个用户可以访问数据库。如果指定了 SINGLE_USER,但已有其他用户连接到数据库,则 ALTER DATABASE 语句将被阻止,直到所有用户都断开与指定数据库的连接为止。若要取代此行为,请参阅 WITH <termination> 子句。

    即使设置此选项的用户已注销,数据库仍保持 SINGLE_USER 模式。这时,其他用户(但只能是一个)可以连接到数据库。

    在将数据库设置为 SINGLE_USER 之前,应验证 AUTO_UPDATE_STATISTICS_ASYNC 选项是否设置为 OFF。设置为 ON 时,用于更新统计信息的后台线程将对数据库建立连接,您将不能以单用户模式访问数据库。若要查看此选项的状态,请查询 sys.databases 目录视图中的 is_auto_update_stats_async_on 列。如果此选项设置为 ON,请执行以下任务:

    1. 将 AUTO_UPDATE_STATISTICS_ASYNC 设置为 OFF。
    2. 通过查询 sys.dm_exec_background_job_queue 动态管理视图来检查活动的异步统计信息作业。
    3. 如果存在活动的作业,可以允许作业完成,或通过使用 KILL STATS JOB 来手动终止这些作业。
  • RESTRICTED_USER
    RESTRICTED_USER 只允许 db_owner 固定数据库角色成员以及 dbcreatorsysadmin 固定服务器角色成员连接到数据库,不过对连接数没有限制。在 ALTER DATABASE 语句的终止子句所指定的时间范围内,所有数据库连接都将被断开。在数据库转换到 RESTRICTED_USER 状态后,不合格用户所做的连接尝试将被拒绝。
  • MULTI_USER
    所有拥有连接到数据库的相应权限的用户,都允许进行连接。

可通过查看 sys.databases 目录视图中的 user_access 列或 DATABASEPROPERTYEX 函数的 UserAccess 属性来确定此选项的状态。

<db_update_option>::=

控制是否允许更新数据库。

  • READ_ONLY
    用户可以从数据库读取数据,但不能修改数据库。
  • READ_WRITE
    允许对数据库执行读写操作。

若要更改此状态,您必须对数据库有独占访问权限。有关详细信息,请参阅 SINGLE_USER 子句。

<external_access_option>::=

控制是否允许外部资源(例如另一个数据库中的对象)访问数据库。

  • DB_CHAINING { ON | OFF }

    • ON
      数据库可以作为跨数据库所有权链接的源或目标。
    • OFF
      数据库不能参与跨数据库所有权链接。
    ms174269.note(zh-cn,SQL.90).gif重要提示:
    如果 cross db ownership chaining 服务器选项为 0 (OFF),SQL Server 实例将可以识别此设置。如果 cross db ownership chaining 为 1 (ON),则不论此选项为何值,所有用户数据库都可以参与跨数据库所有权链。可以使用 sp_configure 设置此选项。

    若要设置此选项,要求具有 sysadmin 固定服务器角色的成员身份。不能针对下列系统数据库设置 DB_CHAINING 选项:mastermodeltempdb

    可通过查看 sys.databases 目录视图中的 is_db_chaining_on 列确定此选项的状态。

    有关详细信息,请参阅所有权链

  • TRUSTWORTHY { ON | OFF }

    • ON
      使用模拟上下文的数据库模块(例如,用户定义函数或存储过程)可以访问数据库以外的资源。
    • OFF
      模拟上下文中的数据库模块不能访问数据库以外的资源。

    只要附加数据库,TRUSTWORTHY 就会设置为 OFF。

    默认情况下,除 msdb 数据库之外的所有系统数据库都将 TRUSTWORTHY 设置为 OFF。不能更改 modeltempdb 数据库的值。建议在任何情况下都不要将 master 数据库的 TRUSTWORTHY 选项设置为 ON。

    若要设置此选项,要求具有 sysadmin 固定服务器角色的成员身份。

    可通过查看 sys.databases 目录视图中的 is_trustworthy_on 列确定此选项的状态。

<cursor_option>::=

控制游标选项。

  • CURSOR_CLOSE_ON_COMMIT { ON | OFF }

    • ON
      关闭在提交或回滚事务时打开的所有游标。
    • OFF
      在提交事务时游标保持打开状态;回滚事务则会关闭除了定义为 INSENSITIVE 或 STATIC 的游标以外的所有游标。

    连接级别设置(使用 SET 语句设置)覆盖 CURSOR_CLOSE_ON_COMMIT 的默认数据库设置。默认情况下,当连接到 SQL Server 的实例时,ODBC 和 OLE DB 客户端会发出连接级别 SET 语句,将会话的 CURSOR_CLOSE_ON_COMMIT 设置为 OFF。有关详细信息,请参阅 SET CURSOR_CLOSE_ON_COMMIT (Transact-SQL)

    可通过查看 sys.databases 目录视图中的 is_cursor_close_on_commit_on 列或 DATABASEPROPERTYEX 函数的 IsCloseCursorsOnCommitEnabled 属性来确定此选项的状态。

  • CURSOR_DEFAULT { LOCAL | GLOBAL }
    控制游标作用域是使用 LOCAL 还是 GLOBAL。

    • LOCAL
      如果指定了 LOCAL,而创建游标时没有将其定义为 GLOBAL,那么游标的作用域将局限于创建游标时所在的批、存储过程或触发器。游标名仅在该作用域内有效。在批处理、存储过程、触发器或存储过程 OUTPUT 参数中,该游标可由局部游标变量引用。当批处理、存储过程或触发器结束时,游标将被隐式释放,除非它在一个 OUTPUT 参数中传递回来。如果 OUTPUT 参数将游标传递回来,游标在最后引用它的变量释放或离开作用域时释放。
    • GLOBAL
      如果指定了 GLOBAL,而创建游标时没有将其定义为 LOCAL,那么游标的作用域将是相应连接的全局范围。在由连接执行的任何存储过程或批处理中,都可以引用该游标名称。

    该游标仅在断开时被隐式释放。有关详细信息,请参阅 DECLARE CURSOR (Transact-SQL)

    可通过查看 sys.databases 目录视图中的 is_local_cursor_default 列或 DATABASEPROPERTYEX 函数的 IsLocalCursorsDefault 属性来确定此选项的状态。

<auto_option>::=

控制自动选项。

  • AUTO_CLOSE { ON | OFF }

    • ON
      在最后一个用户退出后,数据库完全关闭,并且释放资源。

      当用户尝试再次使用该数据库时,该数据库将自动重新打开。例如,通过发出 USE database_name 语句。如果数据库在 AUTO_CLOSE 设置为 ON 时完全关闭,则该数据库不会重新打开,直到下一次数据库引擎重新启动时,用户试图使用该数据库为止。

    • OFF
      在最后一个用户退出后,数据库仍然保持打开状态。

    AUTO_CLOSE 选项允许将数据库文件作为常规文件进行管理,因此,该选项对于桌面数据库很有用。它们可以移动、复制以制作备份,或者甚至通过电子邮件发送给其他用户。

    ms174269.note(zh-cn,SQL.90).gif注意:
    在 SQL Server 的早期版本中,AUTO_CLOSE 是一个同步进程,当与数据库引擎反复连接并不断中断连接的应用程序访问数据库时,将会导致性能下降。在 SQL Server 2005 中,AUTO_CLOSE 进程为异步进程;反复打开和关闭数据库不会降低性能。

    可通过查看 sys.databases 目录视图中的 is_auto_close_on 列或 DATABASEPROPERTYEX 函数的 IsAutoClose 属性来确定此选项的状态。

    ms174269.note(zh-cn,SQL.90).gif注意:
    当 AUTO_CLOSE 为 ON 时,由于该数据库不可用于检索数据,所以 sys.databases 目录视图中的某些列和 DATABASEPROPERTYEX 函数将返回 NULL。若要解决此问题,请执行 USE 语句打开数据库。
    ms174269.note(zh-cn,SQL.90).gif注意:
    数据库镜像要求将 AUTO_CLOSE 设置为 OFF。

    数据库设置为 AUTOCLOSE = ON 时,启动数据库自动关闭的操作将清除 SQL Server 实例的计划缓存。清除计划缓存将导致对所有后续执行计划进行重新编译,并可能导致查询性能暂时性地突然降低。在 SQL Server 2005 Service Pack 2 中,对于计划缓存中的各个已清除的缓存存储区而言,SQL Server 错误日志将包含以下信息性消息:“由于某些数据库维护或重新配置操作,SQL Server 经历了 '%s' 缓存存储区(计划缓存的一部分)的 %d 次刷新”。只要每五分钟刷新一次缓存,此消息就将每五分钟记录一次。

  • AUTO_CREATE_STATISTICS { ON | OFF }

    • ON
      在查询优化期间,将自动生成优化查询需要但缺少的任何统计信息。

      添加统计信息将提高查询性能,因为 SQL Server 查询优化器可以更好地确定估算查询的方式。如果未使用统计信息,则数据库引擎将自动删除它们。如果设置为 OFF,将不自动创建统计信息;相反,您可以手动创建统计信息。有关详细信息,请参阅索引统计信息

    • OFF
      必须手动创建统计信息。

    可通过查看 sys.databases 目录视图中的 is_auto_update_stats_on 列或 DATABASEPROPERTYEX 函数的 IsAutoUpdateStatistics 属性来确定此选项的状态。

    ms174269.note(zh-cn,SQL.90).gif注意:
    无论 AUTO_CREATE_STATISTICS 实际设置情况如何,查询优化器在处理所有内部系统表时,都按照它被设置为 ON 的情况来处理。这些表包括系统基表、XML 索引、全文索引、Service Broker 队列表和查询通知表。
  • AUTO_SHRINK { ON | OFF }

    • ON
      数据库文件是定期收缩的候选项。

      数据文件和日志文件都可以自动收缩。只有在数据库设置为 SIMPLE 恢复模式时,或事务日志已备份时,AUTO_SHRINK 才可减小事务日志的大小。当设置为 OFF 时,在定期检查未使用空间的过程中,数据库文件不自动收缩。

      当文件中超过百分之二十五的部分包含未使用的空间时,AUTO_SHRINK 选项将导致收缩文件。文件将收缩至未使用空间占文件 25% 的大小,或收缩至文件创建时的大小,以两者中较大者为准。

      不能收缩只读数据库。

    • OFF
      在定期检查未使用空间时不会自动收缩数据库文件。

    可通过查看 sys.databases 目录视图中的 is_auto_shrink_on 列或 DATABASEPROPERTYEX 函数的 IsAutoShrink 属性来确定此选项的状态。 .

  • AUTO_UPDATE_STATISTICS { ON | OFF }

    • ON
      在查询优化期间,将自动更新优化查询需要但已过期的所有统计信息。
    • OFF
      必须手动更新统计信息。
    ms174269.note(zh-cn,SQL.90).gif注意:
    除非指定了 NORECOMPUTE 子句,否则 UPDATE STATISTICS 语句会在目标表或视图上重新启用统计信息自动更新。
    ms174269.note(zh-cn,SQL.90).gif注意:
    无论 AUTO_UPDATE_STATISTICS 实际设置情况如何,查询优化器在处理所有内部系统表时,都按照它被设置为 ON 的情况来处理。这些表包括系统基表、XML 索引、全文索引、Service Broker 队列表和查询通知表。

    有关详细信息,请参阅索引统计信息

  • AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }

    • ON
      启动过期统计信息的自动更新的查询在编译前不会等待统计信息被更新。后续查询将使用可用的已更新统计信息。
    • OFF
      启动自动更新过期统计信息的查询将一直等待,直到更新的统计信息可在查询优化计划中使用。

    除非已将 AUTO_UPDATE_STATISTICS 设置为 ON,否则将此选项设置为 ON 不会产生任何影响。

    有关详细信息,请参阅索引统计信息

<sql_option>::=

在数据库级别控制 ANSI 编译选项。

  • ANSI_NULL_DEFAULT { ON | OFF }
    确定在 CREATE TABLE 或 ALTER TABLE 语句中未显式定义为空性的 alias 数据类型CLR user-defined type 列的默认值(NULL 或 NOT NULL)。使用约束定义的列都将遵循约束规则,而与此设置无关。

    • ON
      默认值为 NULL。
    • OFF
      默认值为 NOT NULL。

    连接级设置(使用 SET 语句设置)覆盖 ANSI_NULL_DEFAULT 的默认数据库级别设置。默认情况下,当连接到 SQL Server 的实例时,ODBC 和 OLE DB 客户端发出连接级 SET 语句,将会话的 ANSI_NULL_DEFAULT 设置为 ON。有关详细信息,请参阅 SET ANSI_NULL_DFLT_ON (Transact-SQL)

    对于 ANSI 兼容性,数据库选项 ANSI_NULL_DEFAULT 设置为 ON 将使数据库默认设置改为 NULL。

    可通过查看 sys.databases 目录视图中的 is_ansi_null_default_on 列或 DATABASEPROPERTYEX 函数的 IsAnsiNullDefault 属性来确定此选项的状态。

  • ANSI_NULLS { ON | OFF }

    • ON
      与空值的所有比较的结果均为 UNKNOWN。
    • OFF
      如果两个值都为 NULL,则非 UNICODE 值与空值的比较结果为 TRUE。

    连接级设置(使用 SET 语句设置)覆盖 ANSI_NULLS 的默认数据库设置。默认情况下,当连接到 SQL Server 的实例时,ODBC 和 OLE DB 客户端发出连接级 SET 语句,以将会话的 ANSI_NULLS 设置为 ON。有关详细信息,请参阅 SET ANSI_NULLS (Transact-SQL)

    建立或更改计算列或索引视图的索引时,SET ANSI_NULLS 也必须为 ON。

    可通过查看 sys.databases 目录视图中的 is_ansi_nulls_on 列或 DATABASEPROPERTYEX 函数的 IsAnsiNullsEnabled 属性来确定此选项的状态。

  • ANSI_PADDING { ON | OFF }

    • ON
      在对字符串进行转换或将其插入 varcharnvarchar 数据类型之前,会将字符串填充到同一长度。

      不剪裁插入 varcharnvarchar 列中的字符值的尾随空格,也不剪裁插入 varbinary 列中的二进制值的尾随零。不将值填充到列的长度。

    • OFF
      剪裁 varcharnvarchar 的尾随空格以及 varbinary 的尾随零。

    如果指定了 OFF,该设置只影响新列的定义。

    char(n)binary(n) 列(允许为空值)在 ANSI_PADDING 设置为 ON 时将填充到列长,而当 ANSI_PADDING 为 OFF 时,则将剪裁尾随空格和零。不允许为空值的 char(n)binary(n) 列将始终填充到列长。

    连接级别设置(使用 SET 语句设置)覆盖 ANSI_PADDING 的默认数据库级别设置。默认情况下,当连接到 SQL Server 的实例时,ODBC 和 OLE DB 客户端发出连接级 SET 语句,将会话的 ANSI_PADDING 设置为 ON。有关详细信息,请参阅 SET ANSI_PADDING (Transact-SQL)

    ms174269.note(zh-cn,SQL.90).gif重要提示:
    建议始终将 ANSI_PADDING 设置为 ON。建立或更改计算列或索引视图的索引时,ANSI_PADDING 也必须为 ON。

    可通过查看 sys.databases 目录视图中的 is_ansi_padding_on 列或 DATABASEPROPERTYEX 函数的 IsAnsiPaddingEnabled 属性来确定此选项的状态。

  • ANSI_WARNINGS { ON | OFF }

    • ON
      当出现被零除的情况或聚合函数中出现空值时,将发出错误或警告。
    • OFF
      出现被零除等情况时不会引发警告,而是返回空值。

    建立或更改计算列或索引视图的索引时,SET ANSI_WARNINGS 也必须为 ON。

    连接级别设置(使用 SET 语句设置)覆盖 ANSI_WARNINGS 的默认数据库设置。默认情况下,当连接到 SQL Server 的实例时,ODBC 和 OLE DB 客户端发出连接级 SET 语句,将会话的 ANSI_WARNINGS 设置为 ON。有关详细信息,请参阅 SET ANSI_WARNINGS (Transact-SQL)

    可通过查看 sys.databases 目录视图中的 is_ansi_warnings_on 列或 DATABASEPROPERTYEX 函数的 IsAnsiWarningsEnabled 属性来确定此选项的状态。

  • ARITHABORT { ON | OFF }

    • ON
      在查询执行过程中出现溢出或被零除等错误时,结束查询。
    • OFF
      如果出现其中一个错误则显示警告消息,而查询、批处理或事务继续处理,就好象没有发生错误一样。

    建立或更改计算列或索引视图的索引时,SET ARITHABORT 也必须为 ON。

    可通过查看 sys.databases 目录视图中的 is_arithabort_on 列或 DATABASEPROPERTYEX 函数的 IsArithmeticAbortEnabled 属性来确定此选项的状态。

  • CONCAT_NULL_YIELDS_NULL { ON | OFF }

    • ON
      当串联运算的两个操作数中任意一个为 NULL 时,结果也为 NULL。例如,将字符串“This is”和 NULL 串联将得到 NULL 值,而不是值“This is”。
    • OFF
      空值被视为空字符串进行处理。

    建立或更改计算列或索引视图的索引时,CONCAT_NULL_YIELDS_NULL 也必须为 ON。

    连接级别设置(使用 SET 语句设置)覆盖 CONCAT_NULL_YIELDS_NULL 的默认数据库设置。默认情况下,当连接到 SQL Server 的实例时,ODBC 和 OLE DB 客户端发出连接级别 SET 语句,将会话的 CONCAT_NULL_YIELDS_NULL 设置为 ON。有关详细信息,请参阅 SET CONCAT_NULL_YIELDS_NULL (Transact-SQL)

    可通过查看 sys.databases 目录视图中的 is_concat_null_yields_null_on 列或 DATABASEPROPERTYEX 函数的 IsNullConcat 属性来确定此选项的状态。

  • QUOTED_IDENTIFIER { ON | OFF }

    • ON
      可以将分隔标识符包含在双引号中。

      所有用双引号分隔的字符串都被解释为对象标识符。加引号的标识符不必遵守 Transact-SQL 标识符规则。它们可以是关键字,并且可以包含 Transact-SQL 标识符中通常不允许的字符。如果单引号 (') 是文字字符串的一部分,则可以用双引号 (") 表示它。

    • OFF
      标识符不能包含在引号中,而且必须遵循所有 Transact-SQL 标识符规则。文字可以由单引号或双引号分隔。

    SQL Server 还允许使用方括号 ([ ]) 分隔标识符。无论 QUOTED_IDENTIFIER 的设置如何,都可以始终使用括号标识符。有关详细信息,请参阅分隔标识符(数据库引擎)

    创建表后,表的元数据中 QUOTED IDENTIFIER 选项始终是 ON,即使在创建表时将该选项设置为 OFF。

    连接级别设置(使用 SET 语句设置)覆盖 QUOTED_IDENTIFIER 的默认数据库设置。默认情况下,连接到 SQL Server 的实例时,ODBC 和 OLE DB 客户端发出连接级别 SET 语句,将 QUOTED_IDENTIFIER 设置为 ON。有关详细信息,请参阅 SET QUOTED_IDENTIFIER (Transact-SQL)

    可通过查看 sys.databases 目录视图中的 is_quoted_identifier_on 列或 DATABASEPROPERTYEX 函数的 IsQuotedIdentifiersEnabled 属性来确定此选项的状态。

  • NUMERIC_ROUNDABORT { ON | OFF }

    • ON
      当表达式中发生精度损失时生成错误。
    • OFF
      精度的降低不会生成错误消息,会根据存储结果的列或变量的精度,将结果舍入。

    建立或更改计算列或索引视图的索引时,NUMERIC_ROUNDABORT 也必须为 OFF。

    可通过查看 sys.databases 目录视图中的 is_numeric_roundabort_on 列或 DATABASEPROPERTYEX 函数的 IsNumericRoundAbortEnabled 属性来确定此选项的状态。

  • RECURSIVE_TRIGGERS { ON | OFF }

    • ON
      允许递归激发 AFTER 触发器。
    • OFF
      仅不允许 AFTER 触发器的直接递归激发。若还要禁用 AFTER 触发器的间接递归触发,请使用 sp_configure,将嵌套触发器服务器选项设置为 0
    ms174269.note(zh-cn,SQL.90).gif注意:
    当 RECURSIVE_TRIGGERS 设置为 OFF 时,只禁止直接递归触发。若要禁用间接递归触发,还必须将 nested triggers 服务器选项设置为 0

    可通过查看 sys.databases 目录视图中的 is_recursive_triggers_on 列或 DATABASEPROPERTYEX 函数的 IsRecursiveTriggersEnabled 属性来确定此选项的状态。

<recovery_option> ::=

控制数据库恢复选项和磁盘 I/O 错误检查。

  • FULL
    通过使用事务日志备份,在媒体发生故障后提供完整恢复。如果数据文件损坏,媒体恢复可以还原所有已提交的事务。有关详细信息,请参阅在完整恢复模式下备份
  • BULK_LOGGED
    在某些大规模或大容量操作中,可以提供最佳性能,占用的日志空间也最少,因此,在媒体发生故障后,可以提供恢复。有关有日志记录的大容量操作的信息,请参阅按最小方式记录操作。在 BULK_LOGGED 恢复模式下,这些操作的日志记录最少。有关详细信息,请参阅在大容量日志恢复模式下备份
  • SIMPLE
    系统将提供占用日志空间最小的简单备份策略。服务器故障恢复不再需要的日志空间可被自动重用。有关详细信息,请参阅简单恢复模式下的备份

    ms174269.note(zh-cn,SQL.90).gif重要提示:
    简单恢复模式比其他两种模式更容易管理,但代价是数据文件损坏时丢失数据的风险也较大。最近的数据库备份或差异数据库备份之后的所有更改都将丢失,必须手动重新输入。

默认恢复模式由 model 数据库的恢复模式确定。有关选择适当恢复模式的详细信息,请参阅选择数据库恢复模式

可通过查看 sys.databases 目录视图中的 recovery_modelrecovery_model_desc 列,或者查看 DATABASEPROPERTYEX 函数的 Recovery 属性来确定此选项的状态。

  • TORN_PAGE_DETECTION { ON | OFF }

    • ON
      数据库引擎可以检测不完整页。
    • OFF
      数据库引擎不能检测不完整页。
    ms174269.note(zh-cn,SQL.90).gif重要提示:
    在 Microsoft SQL Server 的未来版本中,将删除语法结构 TORN_PAGE_DETECTION ON | OFF。在新的开发工作中将不使用此语法结构,并计划修改当前使用该语法结构的应用程序。请改用 PAGE_VERIFY 选项。
  • PAGE_VERIFY { CHECKSUM | TORN_PAGE_DETECTION | NONE }
    发现磁盘 I/O 路径错误引起的损坏的数据库页面。磁盘 I/O 路径错误可能导致数据库损坏问题。这种错误通常是将该页面写入磁盘时发生的电源故障或是磁盘硬件故障而引起的。

    • CHECKSUM
      在向磁盘中写入页面时,计算整个页面内容的校验和并将该值存储在页头中。从磁盘中读取页时,将重新计算校验和,并与存储在页头中的校验和值进行比较。如果两个值不匹配,将同时在 SQL Server 错误日志和 Windows 事件日志中报告错误消息 824(指示校验和失败)。校验和失败指示存在 I/O 路径问题。若要确定其根本原因,需要调查硬件、固件驱动程序、BIOS、筛选器驱动程序(如防病毒软件)和其他 I/O 路径组件。
    • TORN_PAGE_DETECTION
      将页面写入磁盘时,将每个 512 字节扇区的特定位保存在 8 KB 数据库页面中并存储在数据库页头中。从磁盘中读取页时,页头中存储的残缺位将与实际的页扇区信息进行比较。如果值不匹配,表明只有页面的一部分被写入磁盘。在这种情况下,将同时在 SQL Server 错误日志和 Windows 事件日志中报告错误消息 824(指示残缺页面错误)。如果页面写入确实不完整,则数据库恢复通常会检测到残缺页面。不过,其他 I/O 路径故障可能随时导致残缺页的出现。
    • NONE
      数据库页面写入不会生成 CHECKSUM 或 TORN_PAGE_DETECTION 值。在读取过程中,即使页头中存在 CHECKSUM 或 TORN_PAGE_DETECTION 值,SQL Server 也不会验证校验和或残缺页。

    使用 PAGE_VERIFY 选项时,请考虑下列重要事项:

    • 在 SQL Server 2005 中,默认设置为 CHECKSUM。在 SQL Server 2000 中,TORN_PAGE_DETECTION 是默认设置。
    • 在用户数据库或系统数据库升级到 SQL Server 2005 后,将保留 PAGE_VERIFY 值(NONE 或 TORN_PAGE_DETECTION)。建议您使用 CHECKSUM。
    • TORN_PAGE_DETECTION 可能使用较少资源,但提供的 CHECKSUM 保护最少。
    • 无需使数据库脱机、锁定数据库或以其他方式阻止对数据库的并发访问,即可设置 PAGE_VERIFY。
    • CHECKSUM 与 TORN_PAGE_DETECTION 互相排斥。不能同时启用这两个选项。

    检测到残缺页或校验和时,如果故障仅限于索引页上,则可通过还原数据,可能还需要重建索引进行恢复。如果要在校验和失败的情况下确定受影响的一个或多个数据库页面的类型,请运行 DBCC CHECKDB。有关还原选项的详细信息,请参阅RESTORE 参数 (Transact-SQL)。虽然还原数据可解决数据损坏问题,但应尽快诊断并更正磁盘硬件故障等根本原因,以防止继续出错。

    SQL Server 将对因校验和、残缺页或其他 I/O 错误而失败的任何读取都重试四次。如果在其中一次尝试中读取成功,则会向错误日志中写入一条消息,且触发读取的命令将继续。如果重试失败,则该命令失败,且显示错误消息 824。

    有关校验和、页撕裂、读取重试、错误消息 823 和 824 以及其他 SQL Server I/O 审核功能的详细信息,请参阅此 Microsoft 网站

    可通过查看 sys.databases 目录视图中的 page_verify_option 列或 DATABASEPROPERTYEX 函数的 IsTornPageDetectionEnabled 属性来确定此选项的状态。

<database_mirroring_option>::=

控制数据库的数据库镜像。使用数据库镜像选项指定的值适用于数据库的副本以及整个数据库镜像会话。每个 ALTER DATABASE 语句中只允许有一个 <database_mirroring_option>:{ SET PARTNER <partner_option> | SET WITNESS <witness_option>}。

ms174269.note(zh-cn,SQL.90).gif重要提示:
SET PARTNER 或 SET WITNESS 命令在输入时可以成功完成,但随后失败。
ms174269.note(zh-cn,SQL.90).gif注意:
我们建议您在非高峰时段配置数据库镜像,因为此配置会影响性能。

有关数据库镜像的信息,请参阅数据库镜像

  • PARTNER <partner_option>
    控制用于定义数据库镜像会话的故障转移合作伙伴及其行为的数据库属性。有些 SET PARTNER 选项可在任一合作伙伴上设置;而其他选项则仅限于在主体服务器或镜像服务器上设置。有关详细信息,请参阅下文所述的各个 PARTNER 选项。无论在哪个合作伙伴上指定 SET PARTNER 子句,该子句都会同时影响数据库的两个副本。

    若要执行 SET PARTNER 语句,必须将两个合作伙伴的端点的 STATE 都设置为 STARTED。另请注意,必须将每个合作伙伴服务器实例的数据库镜像端点的 ROLE 设置为 PARTNER 或 ALL。有关如何指定端点的信息,请参阅如何创建使用 Windows 身份验证的镜像端点 (Transact-SQL)。若要了解服务器实例的数据库镜像端点的角色和状态,请使用以下 Transact-SQL 语句:

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints
    

    <partner_option> ::=

    ms174269.note(zh-cn,SQL.90).gif注意:
    每个 SET PARTNER 子句只允许使用一个 <partner_option>。
    • 'partner_server'
      指定在新数据库镜像会话中用作故障转移合作伙伴的 SQL Server 实例的服务器网络地址。每个会话需要两个伙伴:一个作为主服务器启动,另一个作为镜像服务器启动。建议这两个合作伙伴驻留在不同计算机上。

      在每个合作伙伴上,为每个会话指定一次此选项。启动数据库镜像会话需要两个 ALTER DATABASE database SET PARTNER ='partner_server' 语句。这两个语句的顺序非常重要。首先,连接到镜像服务器,并将主体服务器实例指定为 partner_server (SET PARTNER ='principal_server')。然后,连接到主体服务器,并将镜像服务器实例指定为 partner_server (SET PARTNER ='mirror_server');此操作会在这两个伙伴之间启动数据库镜像会话。有关详细信息,请参阅设置数据库镜像

      partner_server 的值为服务器网络地址。其语法如下所示:

      TCP**://<system-address>:**<port>

      其中

      • <system-address> 是一个字符串,例如系统名称、完全限定的域名或 IP 地址,它们明确标识了目标计算机系统。
      • <port> 是与合作伙伴服务器实例的镜像端点关联的端口号。

      有关详细信息,请参阅指定服务器网络地址(数据库镜像)

      以下示例阐释 SET PARTNER ='partner_server' 子句:

      SET PARTNER = 'TCP://MYSERVER.mydomain.Adventure-Works.com:7777'
      
      ms174269.note(zh-cn,SQL.90).gif重要提示:
      如果会话是使用 ALTER DATABASE 语句而不是 SQL Server Management Studio 设置的,则默认情况下该会话将设置为完全事务安全(SAFETY 设置为 FULL),并在无自动故障转移功能的高安全模式下运行。若要允许自动故障转移,请配置见证服务器;若要运行高性能模式,请关闭事务安全性 (SAFETY OFF)。
    • FAILOVER
      手动将故障从主体服务器转移到镜像服务器。只能在主体服务器上指定 FAILOVER。此选项仅在 SAFETY 设置为 FULL(默认设置)时有效。

      FAILOVER 选项需要以 master 作为数据库上下文。

      有关详细信息,请参阅手动故障转移

    • FORCE_SERVICE_ALLOW_DATA_LOSS
      未发生自动故障转移时,在数据库处于不同步状态或处于同步状态的情况下当主体服务器失败后,强制数据库服务转向镜像数据库。

      极力建议仅在主体服务器不再运行时强制运行该服务。否则,部分客户端可能会继续访问原始主体数据库而不是新的主体数据库。

      FORCE_SERVICE_ALLOW_DATA_LOSS 仅在镜像服务器上可用,且下列条件必须全部成立:

      • 主体服务器已关闭。
      • WITNESS 设置为 OFF,或者将见证服务器连接到镜像服务器。

      仅当您愿意为立即还原数据库服务而承担部分数据丢失的风险时,才能强制服务运行。有关强制运行服务的替代项的信息,请参阅异步数据库镜像(高性能模式)

      强制服务会挂起会话,并暂时将所有数据保留在原始的主体数据库中。一旦原始主体服务器进入服务状态并且能够与新的主体服务器通信时,数据库管理员就可以恢复服务。如果会话恢复,则所有未发送的日志记录和对应的更新都会丢失。

      有关强制服务所面临风险的详细信息,请参阅强制服务(可能造成数据丢失)

    • OFF
      删除数据库镜像会话,并从数据库删除镜像。可以在任一合作伙伴上指定 OFF。有关删除镜像会产生什么影响的信息,请参阅删除数据库镜像
    • RESUME
      恢复挂起的数据库镜像会话。只能在主体服务器上指定 RESUME。
    • SAFETY { FULL | OFF }
      设置事务安全的级别。只能在主体服务器上指定 SAFETY。

      默认值为 FULL。使用完全安全性,数据库镜像会话将同步运行(在“高安全模式”下**)。如果将 SAFETY 设置为 OFF,则数据库镜像会话将异步运行(在“高性能模式”下**)。

      高安全模式的行为部分取决于见证服务器,如下所示:

      • 当安全性设置为 FULL 并且已为该会话设置见证服务器时,会话将运行在高安全模式下,并且具有自动故障转移功能。失去主体服务器时,如果数据库被同步并且镜像服务器实例和见证服务器仍然相互连接(即它们有仲裁),则会话将自动故障转移。有关详细信息,请参阅仲裁:见证服务器如何影响数据库可用性
        如果为会话设置了见证服务器,但是当前未连接见证服务器,则镜像服务器的丢失会导致主体服务器出现故障。
      • 当安全性设置为 FULL 并且已将见证服务器设置为 OFF 时,会话将运行在高安全模式下,但没有自动故障转移功能。如果镜像服务器实例出现故障,则不会影响主体服务器实例。如果主体服务器实例出现故障,则可以将服务(可能丢失数据)强制到镜像服务器实例。

      如果将 SAFETY 设置为 OFF,则会话将运行在高性能模式下,并且不支持自动故障转移和手动故障转移。但是,镜像服务器的问题不会影响主体服务器的问题,如果主体服务器实例停止运行,如果需要,则可以强制服务(可能丢失数据)转到镜像服务器实例 - 如果 WITNESS 设置为 OFF,或者见证服务器当前连接到镜像服务器。有关强制服务的详细信息,请参阅这一部分前面的“FORCE_SERVICE_ALLOW_DATA_LOSS”。

      ms174269.note(zh-cn,SQL.90).gif重要提示:
      高性能模式并非旨在使用见证服务器。但是,我们极力建议您:一旦将 SAFETY 设置为 OFF,也要确保将 WITNESS 也设置为 OFF。

      有关详细信息,请参阅 Transact-SQL 设置和数据库镜像运行模式

    • SUSPEND
      挂起数据库镜像会话。

      可以在任一合作伙伴上指定 SUSPEND。

    • TIMEOUT integer
      以秒为单位指定超时期限。超时期限是在认为镜像会话中的另一实例已断开连接之前,一个服务器实例等待接收来自该镜像会话另一实例的 PING 消息的最长时间。

      只能在主体服务器上指定 TIMEOUT 选项。如果不指定此选项,则在默认情况下,超时期限为 10 秒。如果指定 5 或更高,则超时期限将设置为指定的秒数。如果指定 0 到 4 秒之间的超时值,则超时期限将自动设置为 5 秒。

      ms174269.note(zh-cn,SQL.90).gif重要提示:
      我们建议您将超时期限保持为 10 秒或更长。如果将值设置为低于 10 秒,则可能使高负荷系统丢失 PING 并声明错误故障。

      有关详细信息,请参阅数据库镜像期间可能出现的故障

  • WITNESS <witness_option>
    控制定义数据库镜像见证服务器的数据库属性。SET WITNESS 子句会影响数据库的两个副本,但只能在主体服务器上指定 SET WITNESS。如果为会话设置一个见证服务器,则需要仲裁为数据库提供服务,而不用考虑 SAFETY 设置;有关详细信息,请参阅仲裁:见证服务器如何影响数据库可用性

    建议使见证服务器和故障转移合作伙伴驻留在单独服务器上。有关见证服务器的信息,请参阅数据库镜像见证服务器。有关自动故障转移的信息,请参阅自动故障转移

    若要执行 SET WITNESS 语句,必须将主体服务器和见证服务器实例端点的 STATE 都设置为 STARTED。另请注意,必须将见证服务器实例的数据库镜像端点的 ROLE 设置为 WITNESS 或 ALL。有关指定端点的信息,请参阅数据库镜像端点

    若要了解服务器实例的数据库镜像端点的角色和状态,请使用以下 Transact-SQL 语句:

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints
    
    ms174269.note(zh-cn,SQL.90).gif注意:
    不能在见证服务器上设置数据库属性。

    <witness_option> ::=

    ms174269.note(zh-cn,SQL.90).gif注意:
    每个 SET WITNESS 子句只允许使用一个 <witness_option>。
    • 'witness_server'
      指定一个数据库引擎实例,作为数据库镜像会话的见证服务器。只能在主体服务器上指定 SET WITNESS 语句。

      在 SET WITNESS ='witness_server' 语句中,witness_server 的语法与 partner_server 的语法相同。

    • OFF
      从数据库镜像会话中删除见证服务器。将见证服务器设置为 OFF 会禁用自动故障转移。如果数据库设置为 FULL SAFETY 并且见证服务器设置为 OFF,则镜像服务器上的故障会导致主体服务器使该数据库不可用。
<service_broker_option>::=

控制 Service Broker 选项

  • ENABLE_BROKER
    指定对指定的数据库启用 Service Broker。在 sys.databases 目录视图中将 is_broker_enabled 标志设置为 True,消息传递已开始。

    ms174269.note(zh-cn,SQL.90).gif注意:
    在任何数据库中启用 SQL Server Service Broker 都需要数据库锁。若要在 msdb 数据库中启用 Service Broker,请首先停止 SQL Server 代理,这样 Service Broker 便可获得必要的锁。
  • DISABLE_BROKER
    指定对指定的数据库禁用 Service Broker。在 sys.databases 目录视图中将 is_broker_enabled 标志设置为 False,消息传递已停止。
  • NEW_BROKER
    指定数据库应接收新的 Broker 标识符。由于该数据库被视为新的 Service Broker,所以将立即删除数据库中的所有现有会话,而不生成结束对话框消息。
  • ERROR_BROKER_CONVERSATIONS
    指定在连接数据库时,数据库中的会话应接收错误消息。这样,您的应用程序即可为现有会话执行定期清理。
<date_correlation_optimization_option> ::=

控制 date_correlation_optimization 选项。

  • DATE_CORRELATION_OPTIMIZATION { ON | OFF }

    • ON
      SQL Server 维护由 FOREIGN KEY 约束链接并包含 datetime 列的数据库中的任意两个表中之间的相关统计信息。有关详细信息,请参阅优化访问相关 datetime 列的查询
    • OFF
      不维护相关统计信息。

    若要将 DATE_CORRELATION_OPTIMIZATION 设置为 ON,则除了执行 ALTER DATABASE 语句的连接以外,该数据库必须没有其他活动连接。以后会支持多个连接。

    可通过查看 sys.databases 目录视图中的 is_date_correlation_on 列确定此选项的当前设置。

<parameterization_option> ::=

控制参数化选项。

  • PARAMETERIZATION { SIMPLE | FORCED }

    • SIMPLE
      基于数据库的默认行为使查询参数化。有关详细信息,请参阅简单参数化
    • FORCED
      SQL Server 使数据库中的所有查询参数化。有关详细信息,请参阅强制参数化

    可通过查看 sys.databases 目录视图中的 is_parameterization_forced 列确定此选项的当前设置。

<snapshot_option>::=

确定事务隔离级别。

  • ALLOW_SNAPSHOT_ISOLATION { ON | OFF }

    • ON
      事务可指定 SNAPSHOT 事务隔离级别。当事务在 SNAPSHOT 隔离级别运行时,所有的语句都将数据快照视为位于事务的开头。如果在 SNAPSHOT 隔离级别运行的事务要访问多个数据库中的数据,则必须将所有数据库中的 ALLOW_SNAPSHOT_ISOLATION 都设置为 ON,或者事务中的每个语句都必须将 FROM 子句中任何引用的锁提示用于 ALLOW_SNAPSHOT_ISOLATION 设置为 OFF 的数据库中的表。
    • OFF
      事务不能指定 SNAPSHOT 事务隔离级别。

    在将 ALLOW_SNAPSHOT_ISOLATION 设置为新状态(从 ON 设置为 OFF,或从 OFF 设置为 ON)时,在数据库中的所有现有事务均已提交之前,ALTER DATABASE 不会将控制返回给调用方。如果数据库已处于 ALTER DATABASE 语句所指定的状态,则控制会立刻返回给调用方。如果 ALTER DATABASE 语句未立即返回,请使用 sys.dm_tran_active_snapshot_database_transactions 确定是否存在长期运行的事务。如果 ALTER DATABASE 语句被取消,则数据库仍保持 ALTER DATABASE 开始时所处的状态。sys.databases 目录视图指示数据库中的快照隔离事务的状态。如果 snapshot_isolation_state_desc = IN_TRANSITION_TO_ON,则 ALTER DATABASE ALLOW_SNAPSHOT_ISOLATION OFF 将暂停六秒钟,然后重试操作。

    如果数据库处于 OFFLINE 状态,则不能更改 ALLOW_SNAPSHOT_ISOLATION 的状态。

    如果在 READ_ONLY 数据库中设置 ALLOW_SNAPSHOT_ISOLATION,则以后将数据库设置为 READ_WRITE 时,仍将保留该设置。

    可以为 mastermodelmsdbtempdb 数据库更改 ALLOW_SNAPSHOT_ISOLATION 设置。如果更改 tempdb 的设置,则每次停止和重新启动数据库引擎实例时会保留该设置。如果为 model 更改该设置,则该设置将成为除 tempdb 以外的所有新建数据库的默认设置。

    默认情况下,在 mastermsdb 数据库中,该选项设置为 ON。

    可通过查看 sys.databases 目录视图中的 snapshot_isolation_state 列确定此选项的当前设置。

  • READ_COMMITTED_SNAPSHOT { ON | OFF }

    • ON
      指定已提交读隔离级别的事务使用行版本控制而不是锁定。当事务在已提交读隔离级别运行时,所有的语句都将数据快照视为位于语句的开头。
    • OFF
      指定 READ_COMMITTED 隔离级别的事务使用锁定。

    为了将 READ_COMMITTED_SNAPSHOT 设置为 ON 或 OFF,不应存在任何活动的数据库连接,执行 ALTER DATABASE 命令的连接除外。但是,数据库不必一定要处于单用户模式下。当数据库处于 OFFLINE 状态时,不能更改此选项的状态。

    如果在 READ_ONLY 数据库中设置 READ_COMMITTED_SNAPSHOT,则以后将数据库设置为 READ_WRITE 时,仍将保留该设置。

    对于 mastertempdbmsdb 系统数据库,不能将 READ_COMMITTED_SNAPSHOT 设置为 ON。如果为 model 更改该设置,则该设置将成为除 tempdb 以外的所有新建数据库的默认设置。

    可通过查看 sys.databases 目录视图中的 is_read_committed_snapshot_on 列确定此选项的当前设置。

WITH <termination>::=

指定当数据库从一种状态转换到另一种状态时,何时回滚未完成的事务。如果终止子句被忽略,则当数据库中存在任何锁时,ALTER DATABASE 语句将无限期等待。只能指定一条终止子句,而且该子句应跟在 SET 子句后面。

ms174269.note(zh-cn,SQL.90).gif注意:
并非所有数据库选项都使用 WITH <termination> 子句。有关详细信息,请参阅“备注”部分中的“设置选项”下面的表。
  • ROLLBACK AFTER integer [SECONDS] | ROLLBACK IMMEDIATE
    设定是在指定秒数之后回滚还是立即回滚。
  • NO_WAIT
    指定如果请求的数据库语句或选项更改只有等待事务自主提交或回滚才能立即完成,该请求将失败。

备注

若要删除数据库,请使用 DROP DATABASE

若要重命名数据库,请在 ALTER DATABASE 中使用 MODIFY NAME = new_database_name 选项。

若要减小数据库的大小,请使用 DBCC SHRINKDATABASE

当 BACKUP 语句正在运行时,不能添加或删除文件。

最多可以为每个数据库指定 32,767 个文件和 32,767 个文件组。

ALTER DATABASE 语句必须在自动提交模式(默认事务管理模式)下运行,且不允许用于显式或隐式事务中。有关详细信息,请参阅自动提交事务

在 SQL Server 2005 中,对数据库文件状态(例如,联机或脱机)的维护是独立于数据库状态而进行的。有关详细信息,请参阅文件状态。文件组中文件的状态决定整个文件组的可用性。文件组中的所有文件都必须联机,文件组才可用。如果文件组脱机,则使用 SQL 语句访问文件组的所有尝试都会失败并报告错误。在为 SELECT 语句生成查询计划时,查询优化器会避免驻留在离线文件组中的非聚集索引和索引视图。这样,这些语句就会成功。但是,如果离线文件组包含目标表的堆或聚集索引,SELECT 语句将失败。此外,如果 INSERT、UPDATE 或 DELETE 语句修改的表的索引包含在离线文件组中,这些语句将失败。

当数据库处于 RESTORING 状态时,多数 ALTER DATABASE 语句都将失败。设置数据库镜像选项除外。在活动还原操作期间,或者当数据库还原操作或日志文件还原操作由于备份文件损坏而失败时,数据库可以处于 RESTORING 状态。有关详细信息,请参阅应对由损坏的备份导致的 SQL Server 还原错误

设置选项

若要检索数据库选项的当前设置,请使用 sys.databases 目录视图或 DATABASEPROPERTYEX。有关最初创建数据库时所分配的默认值列表,请参阅设置数据库选项

设置数据库选项后,修改将立即生效。

若要更改所有新创建数据库的任意数据库选项的默认值,请更改 model 数据库中的适当数据库选项。

并非所有数据库选项都使用 WITH <termination> 子句,或可以结合其他选项指定。下表列出这些选项以及它们的选项和终止状态。

选项类别 可与其他选项一起指定 可使用 WITH <termination> 子句

<db_state_option>

<db_user_access_option>

db_update_option>

<external_access_option>

<cursor_option>

<auto_option>

<sql_option>

<recovery_option>

<database_mirroring_option>

ALLOW_SNAPSHOT_ISOLATION

READ_COMMITTED_SNAPSHOT

<service_broker_option>

DATE_CORRELATION_OPTIMIZATION

<parameterization_option>

通过设置以下选项之一来清除 SQL Server 实例的计划缓存:

OFFLINE

READ_WRITE

ONLINE

MODIFY FILEGROUP DEFAULT

MODIFY_NAME

MODIFY FILEGROUP READ_WRITE

COLLATE

MODIFY FILEGROUP READ_ONLY

READ_ONLY

 

清除计划缓存将导致对所有后续执行计划进行重新编译,并可能导致查询性能暂时性地突然降低。在 SQL Server 2005 Service Pack 2 中,对于计划缓存中的各个已清除的缓存存储区而言,SQL Server 错误日志将包含以下信息性消息:“由于某些数据库维护或重新配置操作,SQL Server 经历了 '%s' 缓存存储区(计划缓存的一部分)的 %d 次刷新”。只要每五分钟刷新一次缓存,此消息就将每五分钟记录一次。

移动文件

在 SQL Server 2005 中,可通过在 FILENAME 中指定新位置来移动系统或用户定义的数据和日志文件。这在下列情况下可能很有用:

  • 故障恢复。例如,数据库处于可疑模式或因硬件故障而关闭。
  • 预先安排的重定位。
  • 为预定的磁盘维护操作而进行的重定位。

有关详细信息,请参阅移动数据库文件

初始化文件

默认情况下,在执行下列操作之一时,将通过在文件中填充零来初始化数据和日志文件。

  • 创建数据库。
  • 向现有数据库添加文件。
  • 增加现有文件的大小。
  • 还原数据库或文件组。

在 SQL Server 2005 中,可以在瞬间对数据文件进行初始化。这样,可以快速执行这些文件操作。有关详细信息,请参阅数据库文件初始化

更改数据库排序规则

在对数据库应用不同排序规则之前,请确保已满足下列条件:

  1. 您是当前数据库的唯一用户。
  2. 没有依赖数据库排序规则的架构绑定对象。
    如果数据库中存在下列依赖于数据库排序规则的对象,则 ALTER DATABASE database_name COLLATE 语句将失败。SQL Server 将针对每一个阻塞 ALTER 操作的对象返回一个错误消息:
    • 通过 SCHEMABINDING 创建的用户定义函数和视图。
    • 计算列。
    • CHECK 约束。
    • 表值函数返回包含字符列的表,这些列继承了默认的数据库排序规则。
  3. 改变数据库的排序规则不会在任何数据对象的系统名称中产生重复名称。
    如果改变排序规则后出现重复的名称,则下列命名空间可能导致改变数据库排序规则的操作失败:
    • 对象名,如过程、表、触发器或视图。
    • 架构名称
    • 主体,例如组、角色或用户。
    • 标量类型名,如系统和用户定义类型。
    • 全文目录名称。
    • 对象内的列名或参数名。
    • 表范围内的索引名。
      由新的排序规则产生的重复名称将导致更改操作失败,SQL Server 将返回错误消息,指出重复名称所在的命名空间。

查看数据库信息

可以使用目录视图、系统函数和系统存储过程返回有关数据库、文件和文件组的信息。有关详细信息,请参阅查看数据库元数据

权限

需要对数据库具有 ALTER 权限。

示例

A. 向数据库中添加文件

以下示例将一个 5 MB 的数据文件添加到 AdventureWorks 数据库。

USE master;
GO
-- Get the SQL Server data path
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);
EXECUTE (
'ALTER DATABASE AdventureWorks 
ADD FILE 
(
    NAME = Test1dat2,
    FILENAME = '''+ @data_path + 't1dat2.ndf'',
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
)'
);
GO

B. 向数据库中添加由两个文件组成的文件组

以下示例在 AdventureWorks 数据库中创建文件组 Test1FG1,然后将两个 5 MB 的文件添加到该文件组。

USE master
GO
ALTER DATABASE AdventureWorks
ADD FILEGROUP Test1FG1;
GO
-- Get the SQL Server data path
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);
EXECUTE (
'ALTER DATABASE AdventureWorks 
ADD FILE 
(
    NAME = test1dat3,
    FILENAME = '''+ @data_path + 't1dat3.ndf'',
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
),
(
    NAME = test1dat4,
    FILENAME = '''+ @data_path + 't1dat4.ndf'',
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
)
TO FILEGROUP Test1FG1'
);
GO

C. 向数据库中添加两个日志文件

以下示例向 AdventureWorks 数据库中添加两个 5 MB 的日志文件。

USE master;
GO
-- Get the SQL Server data path
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);
EXECUTE (
'ALTER DATABASE AdventureWorks 
ADD LOG FILE 
(
    NAME = test1log2,
    FILENAME = '''+ @data_path + 'test2log.ldf'',
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
),
(
    NAME = test1log3,
    FILENAME = '''+ @data_path + 'test3log.ldf'',
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
)'
);
GO

D. 从数据库中删除文件

以下示例删除示例 B 中添加的一个文件。

USE master;
GO
ALTER DATABASE AdventureWorks
REMOVE FILE test1dat4;
GO

E. 修改文件

以下示例增加示例 B 中添加的一个文件的大小。

USE master;
GO
ALTER DATABASE AdventureWorks 
MODIFY FILE
    (NAME = test1dat3,
    SIZE = 20MB);
GO

F. 将文件移至新位置

以下示例将在示例 A 中创建的 Test1dat2 文件移至新目录中。

ms174269.note(zh-cn,SQL.90).gif注意:
必须先将该文件实际移至新目录中,然后才能运行此示例。然后,停止和启动 SQL Server 的实例,或使 AdventureWorks 数据库 OFFLINE 再 ONLINE,以实施更改。
USE master;
GO
ALTER DATABASE AdventureWorks
MODIFY FILE
(
    NAME = Test1dat2,
    FILENAME = N'c:\t1dat2.ndf'
);
GO

G. 将 tempdb 移至新位置

以下示例将 tempdb 从其在磁盘上的当前位置移至另一个磁盘位置。由于每次启动 MSSQLSERVER 服务时都会重新创建 tempdb,因此您不必实际移动数据和日志文件。这些文件将在步骤 3 中重新启动服务时创建。重新启动服务后,tempdb 才继续在当前位置发挥作用。

  1. 确定 tempdb 数据库的逻辑文件名称以及这些文件在磁盘上的当前位置。

    SELECT name, physical_name
    FROM sys.master_files
    WHERE database_id = DB_ID('tempdb');
    GO
    
  2. 使用 ALTER DATABASE 更改每个文件的位置。

    USE master;
    GO
    ALTER DATABASE tempdb 
    MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf');
    GO
    ALTER DATABASE  tempdb 
    MODIFY FILE (NAME = templog, FILENAME = 'E:\SQLData\templog.ldf');
    GO
    
  3. 停止再重新启动 SQL Server 的实例。

  4. 验证文件更改。

    SELECT name, physical_name
    FROM sys.master_files
    WHERE database_id = DB_ID('tempdb');
    
  5. 将 tempdb.mdf 和 templog.ldf 文件从其原始位置中删除。

H. 使文件组成为默认文件组

以下示例使示例 B 中创建的 Test1FG1 文件组成为默认文件组。然后,默认文件组被重置为 PRIMARY 文件组。请注意,必须使用括号或引号分隔 PRIMARY

USE master;
GO
ALTER DATABASE AdventureWorks 
MODIFY FILEGROUP Test1FG1 DEFAULT;
GO
ALTER DATABASE AdventureWorks 
MODIFY FILEGROUP [PRIMARY] DEFAULT;
GO

I. 设置数据库选项

以下示例设置 AdventureWorks 示例数据库的恢复模式和数据页面验证选项。

USE master;
GO
ALTER DATABASE AdventureWorks 
SET RECOVERY FULL, PAGE_VERIFY CHECKSUM;
GO

J. 将数据库设置为 READ_ONLY

将数据库或文件组的状态改为 READ_ONLY 或 READ_WRITE 需要具有数据库的独占访问权。以下示例将数据库设置为 SINGLE_USER 模式,以获得独占访问权。然后,该示例将 AdventureWorks 数据库的状态设置为 READ_ONLY,然后将对数据库的访问权返回给所有用户。

ms174269.note(zh-cn,SQL.90).gif注意:
此示例在第一个 ALTER DATABASE 语句中使用终止选项 WITH ROLLBACK IMMEDIATE。所有未完成事务都将被回滚,并将立刻断开 AdventureWorks 示例数据库的所有其他连接。
USE master;
GO
ALTER DATABASE AdventureWorks
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE AdventureWorks
SET READ_ONLY;
GO
ALTER DATABASE AdventureWorks
SET MULTI_USER;
GO

K. 在数据库上启用快照隔离

以下示例为 AdventureWorks 数据库启用快照隔离框架选项。

USE AdventureWorks;
GO
-- Check the state of the snapshot_isolation_framework
-- in the database.
SELECT name, snapshot_isolation_state,
     snapshot_isolation_state_desc AS description
FROM sys.databases
WHERE name = N'AdventureWorks';
GO
USE master;
GO
ALTER DATABASE AdventureWorks
    SET ALLOW_SNAPSHOT_ISOLATION ON;
GO
-- Check again.
SELECT name, snapshot_isolation_state,
     snapshot_isolation_state_desc AS description
FROM sys.databases
WHERE name = N'AdventureWorks';
GO

结果集显示快照隔离框架已启用。

name            snapshot_isolation_state  description
--------------- ------------------------  -----------
AdventureWorks  1                         ON

L. 创建具有见证服务器的数据库镜像会话

设置具有见证服务器的数据库镜像会话需要配置安全性并准备镜像数据库,还需要使用 ALTER DATABASE 设置合作伙伴。有关完整设置过程的示例,请参阅设置数据库镜像

M. 手动将故障转移到数据库镜像会话

可从任一数据库镜像合作伙伴启动手动故障转移。进行故障转移之前,应确认您认为是当前主体服务器的服务器确实是主体服务器。例如,对于 AdventureWorks 数据库,请在您认为是当前主体服务器的服务器上执行以下查询:

SELECT db.name, m.mirroring_role_desc 
FROM sys.database_mirroring m 
JOIN sys.databases db
ON db.database_id = m.database_id
WHERE db.name = N'AdventureWorks' 
GO

如果该服务器实例确实是主体,则 mirroring_role_desc 的值为 Principal。如果此服务器实例是镜像服务器,则 SELECT 语句将返回 Mirror

以下示例假定该服务器是当前主体。

  1. 手动将故障转移到数据库镜像合作伙伴:

    ALTER DATABASE AdventureWorks SET PARTNER FAILOVER;
    GO
    
  2. 若要在新镜像上验证故障转移结果,请执行以下查询:

    SELECT name, mirroring_role_desc 
    FROM sys.databases WHERE name = N'AdventureWorks';
    GO
    

    现在,mirroring_role_desc 的当前值为 Mirror

请参阅

参考

CREATE DATABASE (Transact-SQL)
DATABASEPROPERTYEX (Transact-SQL)
DROP DATABASE (Transact-SQL)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
EVENTDATA (Transact-SQL)
sp_configure (Transact-SQL)
sp_spaceused (Transact-SQL)
sys.databases (Transact-SQL)
sys.database_files (Transact-SQL)
sys.database_mirroring_witnesses (Transact-SQL)
sys.data_spaces (Transact-SQL)
sys.filegroups (Transact-SQL)
sys.master_files (Transact-SQL)

其他资源

启用基于行版本控制的隔离级别
系统数据库

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 12 月 12 日

新增内容:
  • 在“备注”中的“设置选项”部分添加了有关清除计划缓存的选项的信息,还添加了 AUTO_CLOSE 的定义。
  • 在 SINGLE_USER 定义中添加了关于以单用户模式使用 AUTO_UPDATE_STATISTICS_ASYNC 选项的信息。

2006 年 4 月 14 日

更改的内容:
  • 更新了 FAILOVER 选项的说明,指出它需要 master 作为数据库上下文。
  • 在“<database_mirroring_option>”部分的简介中添加了重要注释。
  • 在 ALLOW_SNAPSHOT_ISOLATION 参数下,更新了有关确定数据库中的快照隔离事务的状态的信息,以及在更改此选项时该状态如何影响 SQL Server 的行为的信息。
  • 更正了 DATE_CORRELATION_OPTIMIZATION 的定义。

2005 年 12 月 5 日

新增内容:
  • 向 ENABLE_BROKER 的定义中添加了说明。
  • 添加了在升级的数据库中修改 PAGE_VERIFY 选项的建议。
更改的内容:
  • 删除了 SUPPLEMENTAL_LOGGING 选项。
  • 更正了示例 G。
  • 更正了系统数据库中 TRUSTWORTHY 选项的相关信息。
  • 更新了 READ_COMMITTED_SNAPSHOT 的定义,指示不需要单用户模式。
  • 更新了 <db_state_option> 的定义,指示当数据库处于 RESTORING 状态时,不能设置 OFFLINE、ONLINE 和 EMERGENCY 选项。