1 /******创建数据库********/ 2 3 /****** 4 数据库存储文件 5 1.主数据文件 6 主数据文件主要存储数据库的启动信息,并指向其他数据文件,另外,用户数据和对象也可以存储在此文件中,一个数据库只能有一个主数据文件,默认扩展名为.mdf 7 2.辅助数据文件 8 用户可以根据需求建立辅助数据文件,辅助数据文件主要存储用户数据,它可以将数据分散到不同磁盘中,辅助数据文件默认扩展名为.ndf 9 10 技巧:如果数据库超过了单个windows稳健得最大限制,可以使用辅助数据文件,这样数据库就还能增长。 11 12 3.事务日志文件 13 事务日志主要用于恢复数据库日志信息,每个数据库至少应该包含一个事务日志文件,默认得文件扩展名为.log 14 15 注意: 16 虽然SQL server 2008 不强制这三种类型2文件必须使用带mdf、ndf、ldf扩展名,但使用它们指出文件类型是个好习惯 17 一个SQL server 2008 数据库服务器最多可以创建32767个数据库 18 ******/ 19 20 CREATE DATABASE sqltest /*不区别大小写*/ 21 ON /*ON关键字用来创建数据文件*/ 22 PRIMARY /*PRIMARY表示创建的是主数据文件*/ 23 /*如果不通过PRIMARY来指定哪个文件是主数据文件,默认情况下,第一个文件为主文件*/ 24 ( 25 NAME = "sqltest_data", /*逻辑名称*/ 26 FILENAME = "d:\test\sqltest_data.mdf", /*确保存储路径存在,否则报错*/ 27 SIZE = 10MB, /*文件初始大小*/ 28 FILEGROWTH = 10%, /* == FILEGROWTH = 1 MB, 文件增长值*/ 29 30 /*如果数据库的大小不断增长,则可以指定其增长方式. 31 如果数据的大小基本不变,为了提高数据的使用效率,通常不指定其具有自动增长方式*/ 32 MAXSIZE = 50MB /*文件的最大容量;括号内最后一行不需要逗号来分隔*/ 33 ) 34 , 35 /*******通过FILEGROUP关键字来创建次文件组,文件组名称在数据库中必须唯一********/ 36 FILEGROUP filegroup1 37 /****** 38 文件组是用于分配和管理数据文件的集合,是根据数据文件而创建的,通过创建文件组,可以将不同的数据文件存储在不同的文件组中, 39 这样不仅可以优化数据存储,而且也提高了数据的I/O读写性能。但使用文件组时需要注意以下几点: 40 1.只有数据文件具有文件组,日志文件不存在文件组. 41 2.主数据文件一定存放在主文件组中 42 3.与系统相关的教据信息一定存放在主文件组中 43 4.一个数据文件只能存放于一个文件组中,不能同时存放于多个文件组中 44 ******/ 45 46 /*创建辅助数据文件*/ 47 ( 48 NAME = "sqltest_data1", 49 FILENAME = "d:\test\sqltest_data1.ndf", 50 SIZE = 15MB, 51 FILEGROWTH = 5MB, 52 MAXSIZE = 50MB 53 ) 54 /*创建事务日志文件*/ 55 LOG ON 56 /****** 57 在创建大型数据库的时候,尽量把主数据文件和事务文件存放在不同的文件路径下,这样在数据库被损坏时可以利用事务日志文件进行恢复,同时也能提高数据读取的效率 58 ******/ 59 ( 60 NAME = "sqltest_log", 61 FILENAME = "d:\test\sqltest_log.ldf", 62 SIZE = 5MB, 63 FILEGROWTH = 10%, 64 MAXSIZE = 25MB 65 ), 66 ( 67 NAME = "sqltest_data1_log", 68 FILENAME = "d:\test\sqltest_data1_log.ldf", 69 SIZE = 5MB, 70 FILEGROWTH = 10%, 71 MAXSIZE = 25MB 72 ) 73 /* 注意: 74 A filegroup cannot be used with log files. */ 75 76 77 78 79 /**********查看数据库状态**************/ 80 SP_HELPDB sqltest /*使用系统存储过程中的sp_helpdb可以查看所有数据库的基本信息*/ 81 SP_SPACEUSED /*使用系统存储过程中的sp_spaceused可以显示数据库使用和保留的空间*/ 82 83 /****** 84 使用目录视图查看: 85 1.使用sys.database_files查看有关数据库文件的信息 86 2.使用sys.filegroups查看有关数据库组的信息 87 3.使用sys.master_files查看数据库文件的基本信息和状态信息 88 4.使用sys.databases数据库和文件目录视图查看有关数据库的基本信息 89 ******/ 90 91 /*使用函数查看*/ 92 /* 93 当需要查看指定数据库中的指定选项信息时,可以使用DATABASEPROPERTYEX()函数,此函数一次只能返回一个选项的信息。 94 95 DATABASBPROPERTYEX()数的第1个参数表示要为其返回属性信息的数据库名称, 96 第2个参数则表示要返回的数据库属性的表达式 97 */ 98 USE sqltest 99 GO 100 SELECT DATABASEPROPERTYEX(‘sqltest‘,‘status‘) 101 AS ‘当前数据库状态‘ 102 /*print: 当前数据库状态:ONLINE*/ 103 104 105 106 107 108 /**************修改数据库****************/ 109 /******* 110 在一个ALTER DATAPASE语句中,一次操作可增多个数据文件或日志文件, 111 多个丈件之间使用英文状态下的逗号分隔开,同创建多个数据文件的数据库相同. 112 *******/ 113 ALTER DATABASE sqltest 114 /******修改数据库数据文件配置******/ 115 MODIFY FILE 116 ( 117 NAME = sqltest_data, 118 SIZE = 20MB, 119 FILEGROWTH = 5% 120 ) 121 122 123 /******为数据库sqltest增加一个日志文件******/ 124 ALTER DATABASE sqltest 125 ADD LOG FILE 126 ( 127 NAME = DBtestLog, 128 FILENAME = "D:\test\DBtestLog.ldf", 129 SIZE = 2MB, 130 MAXSIZE = 50MB, 131 FILEGROWTH = 10% 132 ) 133 /****** 134 TO FILEGROUP filegroup2 135 如果加上上面这句就会报错,因为添加的文件为log日志文件 136 ******/ 137 138 139 /************修改文件组名称************/ 140 ALTER DATABASE sqltest 141 MODIFY FILEGROUP filegroup2 142 NAME = filegroup3 143 144 /************修改数据库名称************/ 145 ALTER DATABASE sqltest1 146 MODIFY NAME = SQLtest 147 /****** 148 修改数据库的名称,除了使用ALTER DATABASE以外,还可以使用系统存储过程中的sp_renamedb 149 ******/ 150 /*exec sp_dboption ‘sqltest‘,‘single‘,True*/ 151 exec sp_renamedb ‘SQLtest‘,‘sqltest‘ 152 /*exex sp_dboption ‘sqltest‘,‘single‘,False*/ 153 154 155 156 157 158 /************增加文件组************/ 159 ALTER DATABASE sqltest 160 ADD FILEGROUP filegroup2 161 162 163 ALTER DATABASE sqltest 164 /*添加数据文件*/ 165 ADD FILE 166 ( 167 NAME = sqltest_data2, 168 FILENAME = "D:\test\sqltest_data.ntf", 169 SIZE = 15MB, 170 MAXSIZE = 50MB, 171 FILEGROWTH = 5MB 172 ) 173 /******增加数据文件进文件组******/ 174 TO FILEGROUP filegroup2 175 176 177 178 179 180 /************删除数据库***************/ 181 ----DROP DATABASE sqltest /*可一次删除多个数据库,只要在语句后加上数据库名,中间用英文逗号隔开即可*/ 182 /****** 183 注意: 184 使用DROP DATABASE删除数据库不会出现确认信息,所以使用用这种方法时要小心谨慎, 185 此外:千万不能删除系统数据库,否则会导致SQL Server 2008服务器无法使用 186 ******/ 187 188 189 ALTER DATABASE sqltest 190 REMOVE FILE DBtestLog 191 192 /******删除组******/ 193 ALTER DATABASE sqltest 194 REMOVE FILEGROUP filegroup2 195 /********************************************** 196 注意:当数据组不为空时无法删除 197 The filegroup ‘filegroup1‘ cannot be removed because it is not empty. 198 ***********************************************/ 199 200 201 202 203 /************分离数据库************/ 204 /* 205 分离数据库是指将数据库从SQL Server 2008实例中删除, 206 但是对于该数据库文件和事务,日志文件保持不变。此时可以将该数据库附加到其他实例中 207 若要分离数据库,则不允许存在下列任何情况之一: 208 1.该数据库中已经存在快照 209 2.该数据库已经复制并发布 210 3.数据库处于未知状态 211 */ 212 EXEC SP_DETACH_DB sqltest 213 /* 214 分离数据库的方法有很多种,可以用存储过程进行分离,也可以用图形界面进行分离 215 */ 216 217 218 219 220 /************附加数据库************/ 221 /****** 222 附加数据库是指将分离的数据库重新定位到相同的服务器或不同的服务器的数据库中。 223 附加数据库时.所有数据库文件(mdf和ndf文件)都必须可用。 224 如果任何数据文件的路径与创建数据库或上次附加数据库时的路径不同,则必须指定文件的当前路径。 225 附加数据库可以使用FOR ATTACH语句,也可以使用图形化界面. 226 FOR ATTACH语句至少指定主文件路径 227 ******/ 228 CREATE DATABASE sqltest 229 ON 230 ( 231 FILENAME = ‘d:\test\sqltest_data.mdf‘ 232 ) 233 FOR ATTACH 234 235 236 237 /************复制和移动数据库************/ 238 /****** 239 使用SQL Server 2008的【复制数据库向导】工具可以复制或移动数据库, 240 可以在不同数据库实例之间进行复制或移动数据库,也可以在同一实例中,通过复制数据库创建数据库副本 241 在SQL Server 2ooa中,除model, msdb.Ftlmaster系统数据库外的所有数据库都可以复制或移动。 242 SQL Server 2008使用两种方法来进行复制和移动操作 243 244 1.附加和分离 245 前面讲过分离与附加数据库,但是使用该方法时, 246 用户必须是源服务器和目标服务器sysadmin固定服务器角色的成员。 247 而且在开始复制操作前,用户应该把数据库设为单用户模式,以确保没有活动的会话 248 249 2.使用SQL管理对象 250 相对于分离与附加方法,此方法执行的速度比较慢。而且用户必须是源数据库的所有者 251 并且必须有CREATE DATABASE的权限,或者在目标服务器上是固定dbcreator服务器角色的成员。 252 但是在开始复制/移动操作之前,不用把数据库设置为单用户模式。 253 而且由于数据库没有脱机,在操作期间也允许活动的连接。 254 255 ******/