笔记41 SQL 数据库快照与实验步骤 sql2005 2013-1-31
笔记41 SQL 数据库快照与实验步骤 sql2005 2013-1-31
1 --SQL 数据库快照与实验步骤 sql2005 2013-1-31 2 --近日再次讲到SQL Server 2005中的数据库快照功能。 3 --这里做一个总结 4 --使用场景:只读的报表查询(可以有多个版本) 5 --优点: 分担源数据库压力 将数据静止在某个时间 对于人为失误问题的灾难恢复 6 --主要限制:要求企业版,数据库快照与源数据库必须在一个服务器实例,如果存在多个快照的话, 7 --就不可以使用其中某一个进行还原了 8 9 ---------------------------------------------------------------------------------- 10 -- 实验步骤: 11 --http://msdn.microsoft.com/zh-cn/library/ms175876.aspx 12 --1、创建数据库快照 13 --对 AdventureWorks 数据库创建快照 14 CREATE DATABASE AdventureWorks_dbss1800 ON 15 ( NAME = AdventureWorks_Data, FILENAME = 16 'C:\AdventureWorks_data_1800.ss' ) 17 AS SNAPSHOT OF AdventureWorks; 18 GO 19 20 21 --2、查看数据库快照 22 --1. 23 --在对象资源管理器中,连接到 SQL Server 数据库引擎实例,然后展开该实例。 24 -- 25 --2. 26 --展开“数据库”。 27 -- 28 --3. 29 --展开“数据库快照”,然后选择要查看的快照 30 31 --若要列出 SQL Server 实例的数据库快照,对于非 NULL 值请查询 sys.databases 目录视图的 source_database_id 列 32 33 SELECT * FROM sys.[databases] WHERE [source_database_id]=OBJECT_ID('AdventureWorks') 34 35 36 --3、查询数据库快照 37 USE AdventureWorks_dbss1800 38 GO 39 SELECT * FROM [Person].[Address] 40 41 --4、删除数据库快照 42 43 DROP DATABASE AdventureWorks_dbss1800 ; 44 45 46 47 ---------------------------------语法------------------------------------- 48 CREATE DATABASE database_name 49 [ CONTAINMENT = { NONE | PARTIAL } ] 50 [ ON 51 [ PRIMARY ] <filespec> [ ,...n ] 52 [ , <filegroup> [ ,...n ] ] 53 [ LOG ON <filespec> [ ,...n ] ] 54 ] 55 [ COLLATE collation_name ] 56 [ WITH <option> [,...n ] ] 57 [;] 58 59 <option> ::= 60 { 61 FILESTREAM ( <filestream_option> [,...n ] ) 62 | DEFAULT_FULLTEXT_LANGUAGE = { lcid | language_name | language_alias } 63 | DEFAULT_LANGUAGE = { lcid | language_name | language_alias } 64 | NESTED_TRIGGERS = { OFF | ON } 65 | TRANSFORM_NOISE_WORDS = { OFF | ON} 66 | TWO_DIGIT_YEAR_CUTOFF = <two_digit_year_cutoff> 67 | DB_CHAINING { OFF | ON } 68 | TRUSTWORTHY { OFF | ON } 69 } 70 71 <filestream_option> ::= 72 { 73 NON_TRANSACTED_ACCESS = { OFF | READ_ONLY | FULL } 74 | DIRECTORY_NAME = 'directory_name' 75 } 76 77 To attach a database 78 CREATE DATABASE database_name 79 ON <filespec> [ ,...n ] 80 FOR { { ATTACH [ WITH <attach_database_option> [ , ...n ] ] } 81 | ATTACH_REBUILD_LOG } 82 [;] 83 84 <filespec> ::= 85 { 86 ( 87 NAME = logical_file_name , 88 FILENAME = { 'os_file_name' | 'filestream_path' } 89 [ , SIZE = size [ KB | MB | GB | TB ] ] 90 [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] 91 [ , FILEGROWTH = growth_increment [ KB | MB | GB | TB | % ] ] 92 ) 93 } 94 95 <filegroup> ::= 96 { 97 FILEGROUP filegroup_name [ CONTAINS FILESTREAM ] [ DEFAULT ] 98 <filespec> [ ,...n ] 99 } 100 101 <attach_database_option> ::= 102 { 103 <service_broker_option> 104 | RESTRICTED_USER 105 | FILESTREAM ( DIRECTORY_NAME = { 'directory_name' | NULL } ) 106 } 107 108 <service_broker_option> ::= 109 { 110 ENABLE_BROKER 111 | NEW_BROKER 112 | ERROR_BROKER_CONVERSATIONS 113 } 114 115 --Create a database snapshot 116 CREATE DATABASE database_snapshot_name 117 ON 118 ( 119 NAME = logical_file_name, 120 FILENAME = 'os_file_name' 121 ) [ ,...n ] 122 AS SNAPSHOT OF source_database_name 123 [;] 124 125 126 127 注释 128 129 -------------------------------------------------------------------------------- 130 131 132 133 创建、修改或删除用户数据库后,应备份 master 数据库。 134 135 CREATE DATABASE 语句必须以自动提交模式(默认事务管理模式)运行,不允许在显式或隐式事务中使用。 136 137 使用一条 CREATE DATABASE 语句即可创建数据库以及存储该数据库的文件。SQL Server 通过使用以下步骤实现 CREATE DATABASE 语句: 138 1. 139 SQL Server 使用 model 数据库的副本初始化该数据库及其元数据。 140 141 2. 142 为数据库分配 Service Broker GUID。 143 144 3. 145 然后,数据库引擎使用空页填充数据库的剩余部分,包含记录数据库中空间使用情况的内部数据页除外。 146 147 148 在一个 SQL Server 的实例中最多可以指定 32,767 个数据库。 149 150 每个数据库都有一个所有者,它可以在数据库中执行特殊操作。所有者是创建数据库的用户。可以使用 sp_changedbowner 更改数据库所有者。 151 152 153 每个数据库至少有两个文件(一个“主文件”和一个“事务日志文件”)和一个文件组。可以为每个数据库指定最多 32,767 个文件和 32,767 个文件组。 154 155 在创建数据库时,请根据数据库中预期的最大数据量,创建尽可能大的数据文件。 156 157 建议使用存储区域网络 (SAN)、基于 iSCSI 的网络或本地附加的磁盘来存储 SQL Server 数据库文件,因为该配置使 SQL Server 的性能和可靠性得到了优化 158 159 --重点 160 数据库快照 161 162 163 可以使用 CREATE DATABASE 语句创建“源数据库”的只读静态视图(“数据库快照”)。当创建快照时,源数据库已存在,所以数据库快照在事务上与源数据库一致。源数据库可以具有多个快照。 164 165 166 如果创建数据库快照失败,快照便成为可疑快照,必须将其删除。有关详细信息,请参阅 DROP DATABASE (Transact-SQL)。 167 168 每个快照都将一直存在,直到使用 DROP DATABASE 将其删除为止。 169 170 由于数据库快照是只读的,所以不能指定日志文件 171 -------------------------------------------------------------------------------- 172 173 174 175 176 177 178 179 180 181 182 --理解数据库快照查询的依赖关系 183 --我们都知道数据库快照这个功能最主要的一个特性就是所谓的"写入时复制",也就是说快照数据库最开始的时候并没有包含数据, 只有在源数据库的数据页发生变化的情况下,才会发生数据复制. 184 --但是不管数据有没有从源数据库复制到快照数据库,查询快照数据库都要求源数据库是在线的 185 --为了做这个测试,此时,如果设置源数据库的状态为脱机,则就无法完成查询 186 ALTER DATABASE [AdventureWorks] SET OFFLINE 187 188 189 190 191 --报以下错误信息: 192 193 --正在回滚不合法事务。估计回滚已完成: 100%。 194 --消息 615,级别 21,状态 1,第 1 行 195 --找不到数据库 ID 24,名称 'AdventureWorks_dbss1800'。该数据库可能处于离线状态。请等候几分钟,然后重试。 196 --数据库 ID 24是AdventureWorks_dbss1800