Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
SQLSERVER数据库快照的工作方式_创想鸟

SQLSERVER数据库快照的工作方式

SQLSERVER数据库快照工作方式 翻译自:how database snapshots work 最近有一个帖子《errorlog中的异常信息rolled forward 和rolled back》 里面说到: 每周六凌晨1点会出现以下信息,服务器及数据库未出现重启,节点未切换,filestream access level =0,

SQLSERVER数据库快照的工作方式

翻译自:how database snapshots work

最近有一个帖子《errorlog中的异常信息rolled forward 和rolled back》

里面说到:

每周六凌晨1点会出现以下信息,服务器及数据库未出现重启,节点未切换,filestream access level =0,请各位高手帮忙解释,是什么原因导致的。

Configuration option ‘user options’ changed from 0 to 0. Run the RECONFIGURE statement to install.

FILESTREAM: effective level = 0, configured level = 0, file system access share name = ‘MSSQLSERVER’.

148 transactions rolled forward in database ‘XX_DB’ (12). This is an informational message only. No user action is required.

1 transactions rolled back in database ‘XX_DB’ (12). This is an informational message only. No user action is required.

Recovery completed for database XX_DB (database ID 12) in 21 second(s) (analysis 22 ms, redo 15062 ms, undo 3293 ms.) This is an informational message only. No user action is required.

 为什麽会有rolled back和rolled forward?

回复者给出了下面答案:

是DBCC CHECKDB造成的,由于DBCC CHECKDB在执行时要先创建一个数据库快照,所以才会有这些提示。

这些提示并不是针对当前数据库,而是针对快照库,所以当前数据库不会有rolled forward和 rolled back。

如果还有伴有其它error信息,才可能是真的遇到问题了。

参考:

但是回复者还没有回复一个问题:

Configuration option ‘user options’ changed from 0 to 0. Run the RECONFIGURE statement to install.

FILESTREAM: effective level = 0, configured level = 0, file system access share name = ‘MSSQLSERVER’.

为什麽会出现FILESTREAM??LZ说他们的系统没有使用到FILESTREAM的相关功能

今晚又看了一篇文章《》

里面说到:

正常情况下,CHECKDB/CHECKTABLE的运行不会对数据库使用排它锁,而是使用内部数据库快照(internal database snapshot)。

这个内部数据库快照实质就是Sparse Filestream, 它使用sparse file,COPY-ON-WRITE技术。详细的工作原理可以参考如下的文档:
 
数据库快照的工作方式
(v=SQL.105).aspx

 

我决定翻译一下这篇文章,看文章里是否有说到FILESTREAM

正文

数据库快照提供了一个在源数据库创建快照的时候只读的静态视图,这个静态视图会把还没有提交的事务去除掉

没有提交的事务会在新创建的数据库快照里被回滚,因为数据库引擎会在数据库快照创建完之后运行修复检查程序

但是,源数据库中的事务不会受到任何影响

 

数据库快照是独立于源数据库的。快照数据库会作为一个数据库存在于同一数据库服务器实例中

此外,无论什么原因,当数据库变为不可用的状态的时候,快照数据库也一样变为不可用

快照数据库不单只可以用来做报表之用,当在源数据库发生一个用户错误的时候,你可以修复源数据库到数据库快照被创建的那个时刻

自从数据库快照被创建之后,数据丢失仅仅限于快照创建之后的那些数据库数据更新的丢失

而且,创建数据库快照对于在一个大的数据库更新操作之前特别有用,例如改变数据库的架构或者表结构

对于更多数据库快照的用途,大家可以看一下数据库快照的典型应用

 

理解数据库快照的工作方式是很有帮助的,虽然不一定要使用数据库快照。数据库快照操作的级别是“页面级别”

在源数据库的一个页面被第一次修改之前,源数据页面会从源数据库复制到数据库快照。这个过程叫做:“COPY-ON-WRITE”操作

 

数据库快照存储了源数据页面,保留当快照被创建时已经存在的数据记录。后来的数据页面修改不会影响到快照里的页面内容。

对于每一个第一次被修改的页面会重复上面的COPY-ON-WRITE操作。用这种方法,快照会保存保留了所有已经被修改的数据记录的原始页面

当快照被创建的时候。

 

为了存储这些复制的原始页面,快照使用一个或者多个稀疏文件。最初,一个稀疏文件实际上是一个没有用户数据和还没有分配磁盘空间的空白的文件

当源数据库里越来越多的数据页面被更新,数据文件的size会增长。当快照建立之后,稀疏文件只会占用一点磁盘空间,当源数据库不断更新,

启科网络PHP商城系统 启科网络PHP商城系统

启科网络商城系统由启科网络技术开发团队完全自主开发,使用国内最流行高效的PHP程序语言,并用小巧的MySql作为数据库服务器,并且使用Smarty引擎来分离网站程序与前端设计代码,让建立的网站可以自由制作个性化的页面。 系统使用标签作为数据调用格式,网站前台开发人员只要简单学习系统标签功能和使用方法,将标签设置在制作的HTML模板中进行对网站数据、内容、信息等的调用,即可建设出美观、个性的网站。

启科网络PHP商城系统 0 查看详情 启科网络PHP商城系统

一个稀疏文件会增长成为一个大文件

想知道稀疏文件的更多信息,可以参阅:Understanding Sparse File Sizes in Database Snapshots

 

下面的图片描述了一个”copy-on-write”操作。在下面的快照图里灰白色的方块表示一个稀疏文件里还没有被分配的空间

当接收到第一个源数据库的第一个数据页面更新,数据库引擎会将页面写入到稀疏文件,并且操作系统会在快照的稀疏文件里分配

空间然后复制原始数据页。然后数据库引擎会更新源数据库的数据页面。

 

SQLSERVER数据库快照的工作方式

 

注意:因为数据库快照不是数据库存储冗余,快照不会防止磁盘错误或者其他类型的数据库损坏。如果你必须还原源数据库到某一个

时间点,这个时间点是数据库快照创建的时刻,那么你就要执行一个备份策略,从数据库备份中还原,而不是从数据库快照中还原

 

数据库快照的读操作

对于用户来讲,数据库快照从来不会发生改变,因为在数据库快照上的读操作总是访问原始数据页面无论这些数据页面来自哪里

如果在源数据库的数据页面从来没有被更新过,快照上的读操作会读取源数据库的源数据页面。下面的图片显示了一个在刚刚新建的快照上

的读操作,对应的稀疏文件并没有包含任何数据页面。这个读操作只会读取源数据库的数据

 

SQLSERVER数据库快照的工作方式

 

当有一个数据页面被更新之后,快照上的读操作就会访问存储在稀疏文件里原始数据页面,下面的图片描述了一个快照上的读操作

访问一个在源数据库被更新了的数据页面。读操作读取快照稀疏文件里的原始页面。

SQLSERVER数据库快照的工作方式

 

数据库快照增长对于更新模式的影响

如果你的源数据库相当大并且你正在关注磁盘空间的使用率,在某一时刻你应该用新的数据库快照替换旧的快照。

理想的数据库快照生存期依据于快照的增长速率和磁盘的可用空间。所需的磁盘空间取决于快照期间源数据库有多少的数据页面被更新了

因此,如果大部分的更新只是一小部分页面的重复更新,快照增长速率会比较慢,快照所需空间也会保持相对比较小的空间

相反,当所有原始页面至少最终被更新,快照会增长到与源数据库大小一样。如果磁盘开始填满,快照和磁盘会进行相互竞争对于磁盘空间

如果磁盘已经没有空间,对于快照的写操作会失败

 

记录:关于实际和潜在的快照大小的更多信息可以参阅:Understanding Sparse File Sizes in Database Snapshots

 

因此,当计划要多少磁盘空间在快照期间知道典型的数据库更新模式是很有用的。对于某些数据库,更新的频率是固定的,

例如:一个库存数据库有可能有很多每日都需要更新的页面,每日或每个星期替换旧的数据库快照是很有用的。对于其他数据库,

页面更新的比例有可能有很大的不同在业务运作期间;例如,一个目录数据库有可能只在季度更新,在其他时间只会偶尔更新

在季度的交替前和后创建数据库快照是一种业务策略。季度交替前的数据库快照允许修复重要的更新错误

而季度交替后的快照能够被用来做报表写入一直到下一个季度

 

下面的图片描述了两种更新模式的数据库快照的size的影响。

更新模式A影响只有30%原始页面被更新的快照环境

更新模式B影响80%原始页面被更新的快照环境

SQLSERVER数据库快照的工作方式

 

数据库快照的元数据

对于数据库快照,数据库元数据包括源数据库ID属性,ID属性存储在sys.databases目录视图里的某一列里

更多关于ID属性的信息,,可以查看sys.databases (Transact-SQL).

通常,一个数据库快照不会显示元数据信息(就是说你查不到快照数据库里面的一些元数据),不过你可以从源数据库那里查询这些元数据。

这些元数据包括,下面的SQL语句返回的数据

database_snapshotsys.database_files

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1083542.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
7-Zip怎么设置压缩分卷大小 7-Zip自定义分割文件容量指南
上一篇 2025年12月2日 21:34:57
​体验爽快射击 二次元像素肉鸽《新月纪元》试玩版发布
下一篇 2025年12月2日 21:35:00

相关推荐

  • mysql数据库和表的关系是怎样

    数据库是表的集合,一个MySQL数据库可包含多个表,表依赖数据库存在,需先创建数据库才能建表,如CREATE DATABASE school;USE school;CREATE TABLE students;数据库实现数据隔离与管理,不同项目使用不同数据库,便于组织与权限控制。 MySQL数据库和表…

    2026年9月21日
    000
  • 数据库增删改查基本语句是什么?

    数据库中增删改查基本语句:“INSERT INTO 表名 字段列表 VALUES (值列表)”,“DELETE FROM 表名 WHERE子句”,“UPDATE 表名 SET 列=值 WHERE子句”,“SELECT * FROM 表名”。 (推荐教程:mysql视频教程) 数据库增删改查基本语句 …

    2026年9月7日
    000
  • WebMan技术在电子商务网站中的应用

    WebMan技术在电子商务网站中的应用 随着互联网的快速发展,电子商务成为了商业活动的主要形式之一。通过电子商务网站,商家能够方便地展示和销售他们的产品或服务。为了提供用户友好的界面和高效的交互体验,WebMan技术成为了不可或缺的组成部分。本文将介绍WebMan技术在电子商务网站中的应用,并提供相…

    2026年9月7日
    1200
  • 如何使用ThinkPHP6实现数据库分页

    随着web技术的发展和普及,越来越多的网站采用数据库分页技术,以便更好地展示大量数据。thinkphp作为一种常用的php框架,自然也推出了相应的数据库分页扩展。本篇文章将介绍如何使用thinkphp6实现数据库分页。 一、ThinkPHP的Paginator类 首先,我们需要了解一下ThinkPH…

    用户投稿 2026年9月7日
    000
  • 介绍 Mysql-InnoDB 事物学习

    介绍 Mysql-InnoDB 事物学习介绍 Mysql-InnoDB 事物学习介绍 Mysql-InnoDB 事物学习介绍 Mysql-InnoDB 事物学习

    mysql视频教程栏目介绍innodb的事物学习 推荐(免费):mysql视频教程 事物基本概念 事物的特性(ACID) 立即进入“豆包AI人工智官网入口”; 立即学习“豆包AI人工智能在线问答入口”; 原子性 atomicity 一致性 consistency 隔离性 isolation 持久性 …

    2026年9月6日 用户投稿
    200
  • 数据备份可分为哪些类型

    数据备份可分为:热备份、冷备份和温备份。热备份可以在数据库运行中直接备份,对正在运行的数据库操作没有任何的影响。冷备份必须在数据库停止的情况下进行备份,数据库的读写操作不能执行。温备份在数据库运行中进行,备份时仅支持读操作,不支持写操作。 本教程操作环境:Windows7系统、Dell G3电脑。 …

    2026年9月6日
    000
  • Yii框架中的DBAR:更简单地使用数据库

    yii框架是一套优秀的php框架,已经成为许多web开发人员的首选之一。其中,数据库对于web应用来说是非常重要的组成部分之一。在yii框架中,dbar就是一个封装了数据库查询操作的组件,通过它,我们可以更简单地使用数据库。 DBAR是指“Database Access Object”,首先它是一个…

    用户投稿 2026年9月6日
    000
  • MySQL中怎么删除数据库

    方法:可以使用“DROP DATABASE”语句来删除已创建的数据库;具体语法为“DROP DATABASE [IF EXISTS] ;”。 本教程操作环境:windows7系统、mysql8.0.22版、Dell G3电脑。 (推荐教程:mysql视频教程) 在 MySQL 中,当需要删除已创建的…

    2026年9月6日
    100
  • 删除字段的sql语句是什么

    删除字段的sql语句是“ALTER TABLE”,具体语法格式为“ALTER TABLE DROP ;”;其中,“字段名”指定需要从表中删除的字段的名称。 本教程操作环境:windows7系统、mysql5.8版、Dell G3电脑。 删除字段 删除字段是将数据表中的某个字段从表中移除,语法格式如下…

    2026年9月6日
    100
  • 表示修改一个数据库对象的SQL关键字是什么

    表示修改一个数据库对象的SQL关键字是:ALTER。在数据库中,可以使用“ALTER TABLE”语句来改变原有表的结构,可以在已有的表中添加、删除或修改列。 本教程操作环境:windows7系统、mysql8版、Dell G3电脑。 表示修改一个数据库对象的SQL关键字是:alte。 SQL AL…

    2026年9月6日
    000
  • 数据库怎么删除表

    在数据库中,可以使用“DROP TABLE”语句来删除一个或多个数据表,具体语法“DROP TABLE [IF EXISTS] 表名1 [ ,表名2, 表名3 …]”,其中“IF EXISTS”是用于在删除数据表之前判断该表是否存在。 本教程操作环境:windows7系统、mysql8版…

    2026年9月5日
    100
  • 数据库怎么增加表中字段

    增加表中字段的方法:1、使用“ALTER TABLE 表名 ADD 新字段名 数据类型;”语句在末尾添加字段;2、使用“ALTER TABLE 表名 ADD 新字段名 数据类型 FIRST;”语句在开头添加字段;3、使用“ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件] AFT…

    2026年9月5日
    100
  • 数据库三级模式体系结构的划分,有利于保持数据库的什么

    数据库三级模式体系结构的划分,有利于保持数据库的“数据独立性”。数据库三级模式包括外模式、模式、内模式;三级模式的两级映像是外模式/模式的映像、模式/内模式的映像。而外模式/模式的映像保证逻辑独立性,模式/内模式的映像则保证物理独立性。 本教程操作环境:windows7系统、mysql8版本、Del…

    2026年9月5日
    100
  • 利用python把shp文件写入PostgresSQL数据库

    利用python把shp文件写入PostgresSQL数据库利用python把shp文件写入PostgresSQL数据库利用python把shp文件写入PostgresSQL数据库利用python把shp文件写入PostgresSQL数据库

    一个有趣的灵魂w 目的: 把shp文件写入pg数据库。注意:shp文件含点、线、面(‘POINT’,’LINESTRING’,’POLYGON’)~这是重点。 材料: PG数据库(postgreSQL),python,postgis(重点) 立即学习“…

    2026年9月5日 用户投稿
    300
  • 数据库具有的三个基本特点是什么

    数据库具有的三个基本特点是:1、数据结构化,数据结构化是数据库与文件系统的根本区别;2、数据的共享性高,冗余度低,易扩充;3、数据的独立性高,包括数据的物理独立性和数据的逻辑独立性。 本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。 数据结构化 数据结构化是数据库与文件系…

    2026年9月5日
    000
  • 如何设计数据库及授予权限?

    在数据库中,我们可以做许许多多的事情,比如给用户授予权限,设计数据库等等。今天我们就来介绍一下设计数据库及授予权限的方法。 权限及设计数据库 用户管理 使用SQLyog 创建用户,并授予权限演示 基本命令 /* 用户和权限管理 */ ——————用户信息表:mysql.use…

    2026年9月5日
    100
  • 分析MySQL用户中的百分号%是否包含localhost?

    MySQL用户中的%到底包不包括localhost? 1 前言 操作mysql的时候发现,有时只建了%的账号,可以通过localhost连接,有时候却不可以,网上搜索也找不到满意的答案,干脆手动测试一波 推荐学习:《mysql视频教程》 2 两种连接方法 这里说的两种连接方法指是执行mysql命令时…

    用户投稿 2026年9月4日
    000
  • 在Mac下进行MySQL环境搭建的两种方法

    Mac 下 MySQL 环境搭建 mac 下安装 mysql 还是很方便的, 总结来看有2个方法。 方法一:用dmg镜像安装 1、安装 官网下载好 MySQL Mac 版安装包,常规步骤安装,安装过程中会出现如下提示: 2019-03-24T18:27:31.043133Z 1 [Note] A t…

    用户投稿 2026年9月4日
    100
  • MySQL Scheduler Events带来的风险

    MySQL Scheduler Events带来的风险MySQL Scheduler Events带来的风险MySQL Scheduler Events带来的风险MySQL Scheduler Events带来的风险

    定时任务是开发和运维人员常用的工具,例如cron、job、schedule、events scheduler等,这些工具旨在自动化重复执行某些任务。在这里,我们将探讨mysql数据库内置的定时任务——events scheduler带来的风险案例。 一、现象描述 从库出现了数据不同步现象,具体错误如…

    2026年9月4日 用户投稿
    1300
  • mysql数据库的查询语句是什么

    mysql数据库的查询语句是什么mysql数据库的查询语句是什么mysql数据库的查询语句是什么mysql数据库的查询语句是什么

    查询语句:1、“select * from 表名;”,可查询表中全部数据;2、“select 字段名 from 表名;”,可查询表中指定字段的数据;3、“select distinct 字段名 from 表名”,可对表中数据进行去重查询。 本教程操作环境:windows7系统、mysql8版本、De…

    2026年9月2日 用户投稿
    200

发表回复

登录后才能评论
关注微信