侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

解析SQL Server 视图、数据库快照

数据库  /  管理员 发布于 6年前   190

简介数据库快照

      数据库快照,正如其名称所示那样,是数据库在某一时间点的视图。是SQL Server在2005之后的版本引入的特性。快照的应用场景比较多,但快照设计最开始的目的是为了报表服务。比如我需要出2011的资产负债表,这需要数据保持在2011年12月31日零点时的状态,则利用快照可以实现这一点。快照还可以和镜像结合来达到读写分离的目的。下面我们来看什么是快照。

什么是快照

    数据库快照是 SQL Server 数据库(源数据库)的只读静态视图。换句话说,快照可以理解为一个只读的数据库。利用快照,可以提供如下好处:

    提供了一个静态的视图来为报表提供服务

    可以利用数据库快照来恢复数据库,相比备份恢复来说,这个速度会大大提高(在下面我会解释为什么)

    和数据库镜像结合使用,提供读写分离

    作为测试环境或数据变更前的备份,比如我要大批导入或删除数据前,或是将数据提供给测试人员进行测试前,做一个快照,如果出现问题,则可以利用快照恢复到快照建立时的状态

SQL Server 视图

什么是视图?

视图是一个虚拟的表,内容源于查询的结果集。只有当视图上建立了索引后,才会具体化。

视图可以筛选和处理数据,而不是直接访问基础表。如:创建一个视图,只展示源表中的几列数据,无需授予用户访问基础表的权限,取而代之的是授予视图访问权限。

为什么用视图?

1、如果是比较复杂的多表联查,可以将这些复杂的语句放在视图中完成,而我们只需要使用简单的语句查询视图即可。

2、保护基础表,敏感列无法被检索出。

3、对视图添加索引,可以提高效率。

创建视图

1、可以使用SSMS工具创建, 视图->新建视图->选表 选列 ->输入名字保存即可。

2、使用T-SQL创建

if exists(select * from sysobjects where name = 'newView') --如果存在删除  drop view newViewgocreate view newView --创建视图asselect 学号=id,姓名=name,年龄=age from studentgoselect * from newView

关于order by

if exists(select * from sysobjects where name = 'newView') --如果存在删除  drop view newViewgocreate view newView --创建视图asselect top 10 学号=id,姓名=name,年龄=age from studentorder by id desc --如果使用order关键字 则必须指定topgoselect * from newView

修改视图

alter view newViewasselect top 20 * from studentorder by id desc --如果使用order关键字 则必须指定topgo

更新架构

--刚刚修改的视图用的是 * 查询的是全部列--此时修改基础表架构alter table student add mail varchar(20)--这时源表已经更新架构,但是视图并没有改变 需要调用系统存储过程更新一下EXEC sp_refreshview studentView--这时 新的列才会被加进来

更新视图

对视图进行增、删、改操作,其实就是修改源表。但是由于诸多限制(如由多表联查出的视图,只检索出个别字段,但是插入的时候有些源表上的值是非空的就会出问题),一般不修改视图。

所以更新源表即可更新视图。

数据库快照

数据库快照是某一时间点的源数据库的只读静态视图,可以用来恢复数据库。

使用数据库快照必须与源数据库在相同的服务器实例,并且不能对源数据库进行删除、分离、或还原操作。

使用数据库快照

--源表中数据use webDBgoselect * from student

if exists(select * from sys.databases where name = 'webDB_DBSS')drop database webDB_DBSS --存在则删除gocreate database webDB_DBSS --创建数据库快照on(  name = webDB,  filename='d:\webDB_DBSS.ss' --注意后缀.ss) --如果有多个文件需要一一指出as snapshot of webDBgo

--修改源数据库数据use webDBgoupdate student set name='伟大' where id = 10 --查询源数据库数据select * from student where id = 10 --查询快照数据use webDB_DBSSgoselect * from student where id = 10 

 

修改源数据库,快照数据库并未发生改变。

--修改student表架构alter table webDB.dbo.student add [address] varchar(20)select * from webDB.dbo.student--快照中依然没有select * from webDB_DBSS.dbo.student --删除源数据库student表drop table webDB.dbo.newTable --查询数据库快照该表 依然存在select * from webDB_DBSS.dbo.newTable

从快照恢复数据到快照创建时刻

restore database webDBfrom database_snapshot='webDB_DBSS'goselect * from webDB.dbo.student --修改的值被改回select * from webDb.dbo.newTable --被删除的表 改回

以上得知:任何创建快照之后的修改数据都将被改回!


  • 上一条:
    MYSQL 创建函数出错的解决方案
    下一条:
    MySQL备份与恢复之保证数据一致性(5)
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 分库分表的目的、优缺点及具体实现方式介绍(0个评论)
    • DevDB - 在 VS 代码中直接访问数据库(0个评论)
    • 在ubuntu系统中实现mysql数据存储目录迁移流程步骤(0个评论)
    • 在mysql中使用存储过程批量新增测试数据流程步骤(0个评论)
    • php+mysql数据库批量根据条件快速更新、连表更新sql实现(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2017-06
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-05
    • 2018-10
    • 2018-11
    • 2020-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2021-02
    • 2021-04
    • 2021-07
    • 2021-08
    • 2021-11
    • 2021-12
    • 2022-02
    • 2022-03
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-07
    • 2023-08
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客