笔记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

 

posted @ 2013-08-02 22:15 桦仔 阅读(...) 评论(...)  编辑 收藏