|
||||||||
|
创建数据库后,可以对其原始定义进行更改。更改包括: 扩充分配给数据库的数据或事务日志空间。 收缩分配给数据库的数据或事务日志空间。 添加或删除数据和事务日志文件。 创建文件组。 创建默认文件组。 更改数据库的配置设置。 脱机放置数据库。 附加新数据库或分离未使用的数据库。 更改数据库名称。 更改数据库的所有者。 1、扩充数据库 Microsoft® SQL Server™ 2000 可根据在创建数据库时所定义的增长参数,自动扩充数据库。通过在现有的数据库文件上分配其它的文件空间,或者在另一个新文件上分配空间,还可以手动扩充数据库。如果现有的文件已经充满,则可能需要扩充数据或事务日志空间。如果数据库已经用完分配给它的空间而又不能自动增长,则会出现 1105 错误。 扩充数据库时,必须按至少 1 MB 增加该数据库的大小。扩充数据库的权限默认授予数据库所有者,并自动与数据库所有者身份一起传输。数据库扩充后,数据或事务日志文件立即可以使用新空间,这取决于哪个文件进行了扩充。 如果事务日志没有设置为自动扩充,则当数据库内发生某些类型的活动时,该事务日志可能会用完所有空间。备份事务日志时,或者在数据库使用简单恢复模型的每个检查点时,只清除事务日志中非活动(已提交)的部分。然后 SQL Server 可以重新使用该事务日志中被截取的、尚未使用的部分。有关截断事务日志的更多信息,请参见截断事务日志。 在备份数据库时,SQL Server 不会截断事务日志。 在扩充数据库时,建议指定文件的最大允许增长的大小。这样做可以防止文件无限制地增大,以至用尽整个磁盘空间。若要指定文件的最大大小,请在使用SQL Server 企业管理器内的"属性"对话框创建数据库时,使用 CREATE DATABASE 语句的 MAXSIZE 参数或者"将文件增长限制为 (MB)"选项。 扩充数据库以增大数据或事务日志空间的过程完全相同。 扩充 tempdb 默认情况下,在需要空间时 tempdb 数据库会自动增长,因为文件的 MAXSIZE 设置为 UNLIMITED。因此,tempdb 可以一直增长,直至用完包含 tempdb 的磁盘上的所有空间。若要防止 tempdb 无限制地增长,请使用 ALTER DATABASE 语句或 SQL Server 企业管理器为 tempdb 设置 MAXSIZE。 相反,如果 tempdb 已经设置了 MAXSIZE,而又需要增加 tempdb 的大小,则必须执行以下操作之一: 增加 tempdb 当前使用的默认文件组中文件的大小。 将新文件添加到默认文件组。 允许 tempdb 使用的文件自动增长。 重要 用户定义的文件组不能与 tempdb 一起使用。它们只能与默认文件组一起使用。 移动 tempdb 更改 tempdb 数据库的物理位置: 使用 ALTER DATABASE 语句和 MODIFY FILE 子句更改 tempdb 数据库,以更改 tempdb 中每个文件的物理文件名,使之引用新的物理位置(例如新磁盘)。 停止并重新启动 SQL Server。 从原始位置删除旧的 tempdb 数据库文件。 增加数据库的大小 Transact-SQL(点击这里) 如何增加数据库的大小(企业管理器) 展开服务器组,然后展开服务器。 展开"数据库"文件夹,右击要增加大小的数据库,然后单击"属性"命令。 若要增加数据空间,单击"常规"选项卡。若要增加事务日志空间,单击"事务日志"选项卡。 若要添加新文件,单击下一个空行,在"文件名"列中输入将容纳附加空间的文件名。 文件位置是自动生成的,数据库文件名的后缀名为 .ndf,事务日志文件名的后缀为 .ldf。 若要更改"文件名"、"位置"、"分配的空间 (MB)"和"文件组"(不适用于事务日志)等列的默认值,单击要更改的单元格,再输入新值。 对于现有的文件,只能更改"分配的空间 (MB)"值,并且新值必须大于现有的值。 要指定文件如何增长,请从以下选项中选择: 当需要更多的数据空间时,若要允许当前选定的文件增长,选择"文件自动增长"命令。 要指定文件按固定步长增长,选择"按兆字节"命令并指定一个值。 若要指定文件按当前大小的百分比增长,选择"按百分比"命令,并且指定一个值。 若要指定文件大小的限制,请从以下选项中选择: 若要允许文件按需求增长,选择"文件增长不受限制"命令。 若要指定允许文件增长到的最大值,选择"将文件增长限制为 (MB)"命令。 说明 数据库大小的最大值是由可用磁盘空间量决定,许可限制由正在使用的 SQL Server 版本决定。 更改数据库的物理位置 Transact-SQL(点击这里) 2、收缩数据库 Microsoft® SQL Server™ 2000 允许收缩数据库中的每个文件以删除未使用的页。数据和事务日志文件都可以收缩。数据库文件可以作为组或单独地进行手工收缩。数据库也可设置为按给定的时间间隔自动收缩。该活动在后台进行,并且不影响数据库内的用户活动。 当使用 ALTER DATABASE AUTO_SHRINK 选项(或 sp_dboption 系统存储过程)将数据库设置为自动收缩,且数据库中有足够的可用空间时,则会发生收缩。但是,如果不能配置要删除的可用空间的百分比,则将删除尽可能多的可用空间。若要配置将删除的可用空间量,例如只删除数据库中当前可用空间的 50%,请使用SQL Server 企业管理器内的"属性"对话框进行数据库收缩。 不能将整个数据库收缩到比其原始大小还要小。因此,如果数据库创建时的大小为 10 MB,后来增长到 100 MB,则该数据库最小能够收缩到 10 MB(假定已经删除该数据库中所有数据)。 但是,使用 DBCC SHRINKFILE 语句,可以将单个数据库文件收缩到比其初始创建大小还要小。必须分别收缩每个文件,而不要试图收缩整个数据库。 事务日志文件可在固定的边界内收缩。虚拟日志的大小决定可能减小的大小。因此,不能将日志文件收缩到比虚拟日志文件还小。另外,日志文件可以按与虚拟日志文件的大小相等的增量收缩。例如,一个初始大小为 1 GB 的较大事务日志文件可以包括五个虚拟日志文件(每个文件大小为 200 MB)。收缩事务日志文件将删除未使用的虚拟日志文件,但会留下至少一个虚拟日志文件。因为此示例中的每个虚拟日志文件都是 200 MB,所以事务日志最小只能收缩到 200 MB,且每次只能以 200 MB的大小收缩。若要让事务日志文件收缩得更小,可以创建一个更小的事务日志,并允许它自动增长,而不要创建一个较大的事务日志文件。 在 SQL Server 2000 中,DBCC SHRINKDATABASE 或 DBCC SHRINKFILE 操作试图立即将事务日志文件收缩到所要求的大小(以四舍五入的值为准)。在收缩文件之前应截断日志文件,以减小逻辑日志的大小并将其标记为不包含逻辑日志任何部分的不活动的虚拟日志。 说明 不可能在备份数据库或事务日志时收缩数据库或事务日志。反之,也不可能在收缩数据库或事务日志时创建数据库或事务日志备份。 收缩数据库 Transact-SQL: DBCC SHRINKDATABASE 收缩指定数据库中的数据文件大小。 语法 DBCC SHRINKDATABASE ( database_name [ , target_percent ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ) 参数 database_name 是要收缩的数据库名称。数据库名称必须符合标识符的规则。 target_percent 是数据库收缩后的数据库文件中所要的剩余可用空间百分比。 NOTRUNCATE 导致在数据库文件中保留所释放的文件空间。如果未指定,将所释放的文件空间释放给操作系统。 TRUNCATEONLY 导致将数据文件中的任何未使用的空间释放给操作系统,并将文件收缩到上一次所分配的大小,从而减少文件大小,而不移动任何数据。不试图重新定位未分配页的行。使用 TRUNCATEONLY 时,忽略 target_percentis。 注释 Microsoft® SQL Server™ 可收缩: 特定数据库的所有数据和日志文件。执行 DBCC SHRINKDATABASE。 一次一个特定数据库中的数据或日志文件。执行 DBCC SHRINKFILE。 DBCC SHRINKDATABASE 以每个文件为单位对数据文件进行收缩。然而,DBCC SHRINKDATABASE 在对日志文件进行收缩时,看起来好像所有的日志文件都存在于一个连续的日志池中。 假设名为 mydb 的数据库有两个数据文件和两个日志文件。这些数据文件和日志文件大小都为 10 MB。第一个数据文件包含 6 MB 数据。 对于每个文件,SQL Server 计算目标大小,即要收缩文件到的大小。当用 target_percent 指定 DBCC SHRINKDATABASE 时,SQL Server 计算的目标大小是收缩后文件中的 target_percent 可用空间大小。例如,如果指定按 target_percent 为 25 收缩 mydb。SQL Server 计算的该文件的目标大小为 8 MB(6 MB 数据加上 2 MB 可用空间)。因此,SQL Server 将任何数据从数据文件的最后 2 MB 中移动到数据文件前 8 MB 的可用空间中,然后对该文件进行收缩。 假设 mydb 的第一个数据文件包含 7 MB 的数据。若将 target_percent 指定为 30,则允许将该数据文件收缩到所要的可用百分比 30。然而,若将 target_percent 指定为 40,就不会收缩该数据文件,因为 SQL Server 不能将文件收缩到比数据当前占有的空间还小的程度。也可以从另一个角度考虑这个问题:40% 要求的可用空间 + 70% 完整的数据文件(10 MB 中的 7 MB)大于 100%。因为所要求的可用百分比加上数据文件占用的当前百分比大于 100%(多出 10%),所以任何大于 30 的 target_size 都不会收缩该数据文件。 对于日志文件,SQL Server 使用 target_percent 以对整个日志的目标大小进行计算;因此,target_percent 是收缩操作后日志中的可用空间大小。之后,整个日志的目标大小可以解释为每个日志文件的目标大小。DBCC SHRINKDATABASE 尝试立即将每个物理日志文件收缩到其目标大小。如果虚拟日志中的所有逻辑日志部分都没有超出日志文件的目标大小,则该文件将成功截断,DBCC SHRINKDATABASE 完成且不显示任何消息。然而,如果虚拟日志中的逻辑日志部分超出其目标大小,则 SQL Server 释放尽可能多的空间并发出一条消息。该消息告诉您需要执行什么操作来移动文件末尾超出虚拟日志的逻辑日志部分。执行完该操作后,可以重新发出 DBCC SHRINKDATABASE 命令以释放剩余的空间。 因为日志文件只能收缩到虚拟日志文件边界,所以不可能将日志文件收缩到比虚拟日志文件更小(即使现在没有使用该文件)。例如,可以将数据库的 1 GB 日志文件收缩到只有 128 MB。 由 DBCC SHRINKDATABASE 计算的数据和日志文件的目标大小始终不小于文件的最小大小。文件的最小大小是在文件最初创建时指定的大小,或是上一次用更改文件大小的操作(如用带有 MODIFY FILE 选项的 ALTER DATABASE 或 DBCC SHRINKFILE)显式设置的大小。例如,如果在执行 CREATE DATABASE 时,将 mydb 的所有数据和日志文件大小都指定为 10 MB,则每个文件的最小大小都为 10 MB。DBCC SHRINKDATABASE 不能收缩任何小于 10 MB 的文件。如果使用带有 MODIFY FILE 选项的 ALTER DATABASE 将其中的一个文件显示增长到 20 MB,则该文件新的最小大小为 20 MB。若要将文件大小收缩到小于其最小大小,请使用 DBCC SHRINKFILE 并指定新大小。执行 DBCC SHRINKFILE 会将文件的最小大小更改为所指定的新大小。 在使用数据文件时,DBCC SHRINKDATABASE 有 NOTRUNCATE 和 TRUNCATEONLY 选项。如果为日志文件指定这两个选项,则将忽略这两个选项。DBCC SHRINKDATABASE 不带任何选项等价于 DBCC SHRINKDATABASE 带有 NOTRUNCATE 选项,后面还要跟着带有 TRUNCATEONLY 选项的 DBCC SHRINKDATABASE。 不论是否指定 target_percent,NOTRUNCATE 选项都执行 DBCC SHRINKDATABASE 的实际数据移动操作(包括将分配页从文件的末尾移动到文件前面的未分配页)。然而,文件末尾的可用空间不会返回给操作系统,文件的物理大小也不会更改。因此,如果指定 NOTRUNCATE 选项,数据文件好像没有收缩。例如,假设再次使用 mydb 数据库,该 mydb 有两个数据文件和两个日志文件。第二个数据文件和第二个日志文件的大小都为 10 MB。执行 DBCC SHRINKDATABASE mydb NOTRUNCATE 时,Microsoft SQL Server 将数据从数据文件的后面几页移动到前面几页中。而文件的大小仍然为 10 MB。 TRUNCATEONLY 选项将文件末尾的所有可用空间收回给操作系统。然而,TRUNCATEONLY 在文件内不执行任何页移动操作。指定的文件只能收缩到上一次分配的大小。如果使用 TRUNCATEONLY 选项指定 target_percent,则忽略后者。 所生成的数据库不能比 model 数据库更小。 要收缩的数据库不必在单用户模式下;其他的用户仍可以在数据库收缩时对其进行工作。这也包括系统数据库。 结果集 下表描述结果集内的列。
说明 SQL Server 并不显示未收缩的文件的行。 权限 DBCC SHRINKDATABASE 权限默认授予 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员且不可转让。 示例 下例将 UserDB 用户数据库中的文件减小,以使 UserDB 中的文件有 10% 的可用空间。 DBCC SHRINKDATABASE (UserDB, 10) GO 收缩数据库(企业管理器) 展开服务器组,然后展开服务器。 展开"数据库"文件夹,右击要收缩的数据库,指向"所有任务",然后单击"收缩数据库"命令。 要指定数据库的收缩量,请从以下选项中选择: 在"收缩后文件中的最大可用空间"中输入收缩后数据库中剩余的可用空间量。以"数据库大小,可用空间"值作为依据。 选择"在收缩前将页移到文件起始位置",使释放的文件空间保留在数据库文件中,并使包含数据的页移到数据库文件的起始位置。 单击"调度"命令创建或更改自动收缩数据库的频率和时间。 如果要收缩个别的数据库文件,请单击"收缩文件"。 说明 不能将数据库的大小收缩到小于 model 数据库的大小。 将数据库设置为自动收缩 Transact-SQL : sp_dboption 显示或更改数据库选项。不能在 master 或 tempdb 数据库上使用 sp_dboption。向后兼容性支持 sp_dboption。使用 ALTER DATABASE 设置数据库选项。 语法 sp_dboption [ [ @dbname = ] 'database' ] [ , [ @optname = ] 'option_name' ] [ , [ @optvalue = ] 'value' ] 参数 [@dbname =] 'database' 在其中设置指定选项的数据库的名称。database 的数据类型为 sysname,默认值为 NULL。 [@optname =] 'option_name' 要设置的选项的名称。没有必要输入完整的选项名称。Microsoft® SQL Server™ 可识别名称中任何独有的部分。如果选项名称包含空格或者关键字,请将选项名称用引号引起来。如果省略此参数,sp_dboption 将列出处于打开状态的选项。option_name 的数据类型为 varchar(35),默认值为 NULL。 [@value =] 'value' option_name 的新设置。如果省略此参数,sp_dboption 将返回当前设置。value 可以是 true、false、on 或 off。value 的数据类型为 varchar(10),默认值为 NULL。 返回代码值 0(成功)或 1(失败) 结果集 如果没有提供参数,则结果集如下。
注释 下面是由 sp_dboption 设置的选项。有关每个选项的更多信息,请参见设置数据库选项。
通过在 model 数据库上执行 sp_dboption,数据库所有者或系统管理员可以设置或关闭所有新建数据库的特定数据库选项。 执行 sp_dboption 后,将在为之更改选项的数据库中执行检查点。这将使更改立即生效。 sp_dboption 更改数据库设置。使用 sp_configure 更改服务器级别设置,使用 SET 语句更改仅影响当前会话的设置。 权限 显示可能的数据库选项列表、数据库中当前设置的选项列表以及选项在数据库中的当前值(使用 sp_dboption 和 0、1 或 2 个参数)的执行权限默认授予所有用户。 更改选项(使用 sp_dboption 及全部参数)的执行权限默认授予 sysadmin、dbcreator 固定服务器角色成员以及 db_owner 固定数据库角色成员。这些权限是不可传递的。 示例 A. 将数据库设置为只读 下面的示例将 pubs 数据库设置为只读。 USE master EXEC sp_dboption 'pubs', 'read only', 'TRUE' 下面是结果集: CHECKPOINTing database that was changed. B. 关闭选项 下面的示例将 pubs 数据库重新设置为可写。 USE master EXEC sp_dboption 'pubs', 'read only', 'FALSE' 下面是结果集: CHECKPOINTing database that was changed. C. 使数据库脱机 下面的示例使数据库 sales 在没有用户访问时进入脱机状态。 USE master EXEC sp_dboption 'sales', 'offline', 'TRUE' 下面是结果集: CHECKPOINTing database that was changed. 更改数据库的配置设置(企业管理器) 展开服务器组,然后展开服务器。 展开"数据库"文件夹,右击要更改的数据库,然后单击"属性"命令。 单击"选项"选项卡,再选择或清除要更改的配置设置。 收缩数据库文件 Transact-SQL(见收缩数据库) |
浙公网安备 33010602011771号