VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > sql数据库 >
  • sql语句大全之修改数据库

修改数据库

当创建数据库之后,可能需要对原始定义进行修改,例如:
l  扩充分配给数据库的数据或事务日志空间。
l  收缩分配给数据库的数据或事务日志空间。
l  添加或删除数据和事务日志文件。
l  创建文件组。
l  创建默认文件组。
l  更改数据库的配置设置。
l  脱机放置数据库。
l  附加新数据库或分离未使用的数据库。
l  更改数据库名称。
l  更改数据库的所有者。
在更改数据库之前,有时需要使数据库退出正常操作模式。在这些情况下,需确定终止事务的适当方法。
(1)扩充数据库
SQL Server可根据在创建数据库时所定义的增长参数,自动扩充数据库。通过在现有的数据库文件上分配其它的文件空间,或者在另一个新文件上分配空间,还可以手动扩充数据库。如果现有的文件已经充满,则可能需要扩充数据或事务日志空间。如果数据库已经用完分配给它的空间而又不能自动增长,则会出现 1105 错误。
扩充数据库时,必须按至少 1 MB 增加该数据库的大小。扩充数据库的权限默认授予数据库所有者,并自动与数据库所有者身份一起传输。数据库扩充后,数据或事务日志文件立即可以使用新空间,这取决于哪个文件进行了扩充。
如果事务日志没有设置为自动扩充,则当数据库内发生某些类型的活动时,该事务日志可能会用完所有空间。备份事务日志时,或者在数据库使用简单恢复模型的每个检查点时,只清除事务日志中非活动(已提交)的部分。然后 SQL Server 可以重新使用该事务日志中被截取的、尚未使用的部分。在备份数据库时,SQL Server 不会截断事务日志。
在扩充数据库时,建议指定文件的最大允许增长的大小。这样做可以防止文件无限制地增大,以至用尽整个磁盘空间。若要指定文件的最大大小,请在使用SQL Server 企业管理器内的"属性"对话框创建数据库时,使用 CREATE DATABASE 语句的 MAXSIZE 参数或者"将文件增长限制为 (MB)"选项。
(2)收缩数据库
SQL Server允许收缩数据库中的每个文件以删除未使用的页。数据和事务日志文件都可以收缩。数据库文件可以作为组或单独地进行手工收缩。数据库也可设置为按给定的时间间隔自动收缩。该活动在后台进行,并且不影响数据库内的用户活动。
当使用 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中,DBCC SHRINKDATABASE 或 DBCC SHRINKFILE 操作试图立即将事务日志文件收缩到所要求的大小(以四舍五入的值为准)。在收缩文件之前应截断日志文件,以减小逻辑日志的大小并将其标记为不包含逻辑日志任何部分的不活动的虚拟日志。
(3)添加和删除数据和事务日志文件
可以添加数据和事务日志文件以扩充数据库,或删除它们以收缩数据库。当添加文件时,数据库可以立即使用该文件。SQL Server 在每个文件组内的所有文件上使用按比例填充的策略,根据文件中的可用空间按比例写入数据量,并允许立即开始使用新文件。通过这种方式,所有文件几乎在同一时间趋于充满。但是,事务日志文件不能作为文件组的一部分;它们是相互独立的。当事务日志增长时,使用填充后往下走的策略,而不是按比例填充策略,首先填充第一个日志文件,然后是第二个,依此类推。因此,当添加日志文件时,事务日志可能不能使用该文件,而需等到其它文件已经先填充。将文件添加到数据库时,可以根据需要指定文件的大小(默认为 1 MB)、文件可以增长的最大大小(如果文件内的空间用完)、文件每次需要增长时所增长的数量(默认是 10%),以及文件所属的文件组。
删除数据或事务日志文件将从数据库删除该文件。仅当文件上不存在已有的数据或事务日志信息时才可能从数据库删除文件;文件必须完全为空后才能删除。若要将数据从一个数据文件迁移到同一文件组中的其它文件中,请使用 DBCC SHRINKFILE 语句,并指定 EMPTYFILE 子句。SQL Server 即不再允许将数据置于文件上,从而通过使用 ALTER DATABASE 语句或 SQL Server 企业管理器内的属性页,使之能够删除。
通过将事务日志数据从一个日志文件迁移到另一个以删除事务日志文件是不可能的。若要从事务日志文件清除非活动的事务,必须截断或备份该事务日志。一旦事务日志文件不再包含任何活动或不活动的事务,该日志文件就可以从数据库中删除。
(4)创建文件组
在首次创建数据库,或者以后将更多文件添加到数据库时,可以创建文件组。但是,一旦将文件添加到数据库,就不可能再将这些文件移到其它文件组。一个文件不能是多个文件组的成员。表格、索引以及 textntextimage 数据可以与特定的文件组相关联。这意味着它们的所有页都将从该文件组的文件中分配。有三种类型的文件组:
l  主文件组,这些文件组包含主数据文件以及任何其它没有放入其它文件组的文件。系统表的所有页都从主文件组分配。
l  用户定义文件组,该文件组是用 CREATE DATABASE 或 ALTER DATABASE 语句中的 FILEGROUP 关键字,或在 SQL Server 企业管理器内的"属性"对话框上指定的任何文件组。
l  默认文件组,默认文件组包含在创建时没有指定文件组的所有表和索引的页。在每个数据库中,每次只能有一个文件组是默认文件组。如果没有指定默认文件组,则默认文件组是主文件组。
(5)更改默认文件组
更改默认文件组时,最初没有指定文件组的所有对象都被分配到新默认文件组中的数据文件。更改默认文件组可以防止不是专门在用户定义的文件组上创建的用户对象与系统对象和表竞争以获得数据空间。
(6)设置数据库选项
可以为每个数据库都设置若干个决定数据库特点的数据库级选项。只有系统管理员、数据库所有者以及 sysadmindbcreator 固定服务器角色和 db_owner 固定数据库角色的成员才能修改这些选项。这些选项对于每个数据库都是唯一的,而且不影响其它数据库。可以使用 ALTER DATABASE 语句的 SET 子句、sp_dboption 系统存储过程,或者在某些情况下使用 SQL Server 企业管理器设置数据库选项。设置了数据库选项之后,将自动发出一个检查点,它会使修改立即生效。
若要更改新创建数据库的任意数据库选项的默认值,请更改 model 数据库中的适当数据库选项。例如对于随后创建的任何新数据库,如果希望 AUTO_SHRINK 数据库选项的默认设置都为 ON,则将 model 的 AUTO_SHRINK 选项设置为 ON。
修改数据库同创建数据库类似,可以使用Transact-SQL命令ALTER DATABASE修改数据库,其语法格式如下:
ALTER DATABASE database_name
{
    ADD FILE <filespec> [ ,...n ]
        [ TO FILEGROUP { filegroup_name | DEFAULT } ]
    | ADD LOG FILE <filespec> [ ,...n ]
    | REMOVE FILE logical_file_name
    | ADD FILEGROUP filegroup_name
    | REMOVE FILEGROUP filegroup_name
    | MODIFY FILE <filespec>
    | MODIFY NAME = new_dbname
    | MODIFY FILEGROUP filegroup_name
        { <filegroup_updatability_option>
        | DEFAULT
        | NAME = new_filegroup_name
        }
    | SET { { <optionspec> [ ,...n ] [ WITH <termination> ] }
          | ALLOW_SNAPSHOT_ISOLATION {ON | OFF }
          | READ_COMMITTED_SNAPSHOT {ON | OFF } [ WITH <termination> ]
          }
    | COLLATE collation_name
}
[ ; ]
 
<filespec> ::=
(
    NAME = logical_file_name
    [ , OFFLINE ]
    [ , 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 | % ] ]
)
 
<filegroup_updatability_option> ::=
{
    { READONLY | READWRITE }
    | { READ_ONLY | READ_WRITE }
}
 
<optionspec> ::=
{
    <database_availability_option>
  | <cursor_option>
  | <auto_option>
  | <sql_option>
  | <recovery_option>
  | <database_mirroring_option>
  | <supplemental_logging_option>
  | <service_broker_option>
  | <date_correlation_optimization_option>
}
 
<database_availability_option> ::=
{ <db_state_option> | <db_user_access_option>
  | <db_update_option> | <external_access_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_STATISTCS_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
            | SUSPEND
            | RESUME
            | SAFETY { FULL | OFF }
            }
    <witness_option> ::=
    WITNESS { = 'witness_server'
            | OFF
            }
 
<supplemental_logging_option> ::=
    SUPPLEMENTAL_LOGGING { ON | OFF }
 
<service_broker_option> ::=
{
    ENABLE_BROKER  | DISABLE_BROKER  | NEW_BROKER  | ERROR_BROKER_CONVERSATIONS
}
 
<date_correlation_optimization_option> ::=
{
    DATE_CORRELATION_OPTIMIZATION { ON | OFF }
}
<termination> ::=
{
    ROLLBACK AFTER integer [ SECONDS ]
  | ROLLBACK IMMEDIATE
  | NO_WAIT
}
 
参数说明参考2.3节创建数据库Transaction-SQL CREATE DATABASE语句的相关参数说明。
在SQL Server Management Studio中执行下面的脚本,将修改企业信息平台数据库。
USE [master]
GO
EXEC [ZXXS].[dbo].[sp_fulltext_database] @action = 'enable'
GO
ALTER DATABASE [EAMS] MODIFY FILE ( NAME = N'ZXXS', SIZE = 102400KB )
GO
ALTER DATABASE [EAMS] ADD FILEGROUP [SECONDERY]
GO
ALTER DATABASE [EAMS] ADD FILE ( NAME = N' EAMS ', FILENAME = N'd:\Program Files\Microsoft SQL Server 2000\MSSQL\data\ EAMS.ndf' , SIZE = 102400KB , FILEGROWTH = 10%) TO FILEGROUP [SECONDERY]
GO
ALTER DATABASE [EAMS] MODIFY FILE ( NAME = N' EAMS_log', SIZE = 102400KB )
GO
 


相关教程