浅谈SQL Server系统内核管理机制

news2025/4/20 5:18:07

浅谈SQL Server系统内核管理机制

应用环境

  • Microsoft Windows 10.0.19045.5487 x64 专业工作站版 22H2
  • Microsoft SQL Server 2019 - 15.0.2130.3 (X64)
  • SQL Server Management Studio -18.6 laster

文章目录

  • 浅谈SQL Server系统内核管理机制
    • 数据库和文件
    • 服务器管理视图
    • 系统目录视图
      • AlwaysOn 可用性组目录视图
      • (错误)消息目录视图
      • 对象目录视图
        • 动态视图查询对象信息
    • 系统动态管理视图
      • 查询动态管理视图
      • 数据库对象
      • 执行的对象跟踪与监视
    • 业务连续性
      • 数据库的备份和还原
        • (1) 创建完全备份
        • (2) 差异备份
        • (3) 日志备份
        • (4) 文件或文件组备份
        • (5) 备份选项
        • (6) 数据库还原
        • (7) 收缩指定数据库的大小

数据库和文件

描述:数据库和文件目录视图

# 系统数据库实例
SELECT [name] AS dbname				--数据库名称
	,database_id					--数据库 ID
	,physical_database_name					--数据库的物理名称	
	--,owner_sid						--注册到服务器的数据库外部所有者的 SID(安全标识符)
	
	,create_date					--数据库的创建或重命名日期
	/* SQL Server 版本的整数
	 * 70 - SQL Server 7.0 到 SQL Server 2008 (10.0.x)
	 * 80 - SQL Server 2000 (8.x) 到 SQL Server 2008 R2 (10.50.x)
	 * 90 - SQL Server 2008 (10.0.x) 到 SQL Server 2012 (11.x)
	 * 100 - SQL Server 2008 (10.0.x) 及更高版本和 Azure SQL 数据库
	 * 110 - SQL Server 2012 (11.x) 及更高版本和 Azure SQL 数据库
	 * 120 - SQL Server 2014 (12.x) 及更高版本和 Azure SQL 数据库
	 * 130 - SQL Server 2016 (13.x) 及更高版本和 Azure SQL 数据库
	 * 140 - SQL Server 2017 (14.x) 及更高版本和 Azure SQL 数据库
	 * 150 - SQL Server 2019 (15.x) 及更高版本和 Azure SQL 数据库
	 * 160 - SQL Server 2022 (16.x) 及更高版本和 Azure SQL 数据库
	 */
	,compatibility_level					--对应于兼容行为的 SQL Server 版本的整数
	,collation_name							--数据库的排序规则
	--,user_access						--用户访问设置:0 = MULTI_USER 指定,1 = SINGLE_USER 指定,2 = RESTRICTED_USER
	,user_access_desc						--用户访问设置说明

	--,[state]
	,state_desc								--数据库状态的说明

	--,snapshot_isolation_state
	,snapshot_isolation_state_desc			--允许快照隔离事务的状态
	--,recovery_model
	,recovery_model_desc					--选定的恢复模式的说明
	--,page_verify_option
	,page_verify_option_desc				--PAGE_VERIFY选项设置的说明
	
	--,service_broker_guid					--数据库的服务代理标识符
	,log_reuse_wait_desc					--日志空间的重复使用正在等待最后一个检查点的描述
	,delayed_durability_desc				--延迟持续性设置(有关详细信息,请参阅控制事务持续性)
	
FROM sys.databases

# master上的库文件挂载
-- Example
DECLARE @dbasename NVARCHAR(20) ='OHYJTest'
SELECT database_id				--数据库的 ID

	,type_desc					--数据类型:rows行(mdf), log日志(ldf)
	--,data_space_id
	,[name] AS logicalName		--逻辑名
	,physical_name				--物料路径文件名
	,state_desc					--文件状态
	,[size]						--文件大小(以 8 KB 为单位的页数)
	,max_size					--最大文件大小
	,growth						--文件自动增长(以 8 KB 页为单位)

FROM sys.master_files
WHERE database_id = DB_ID(@dbasename)

服务器管理视图

描述:链接服务器目录视图

# 服务器配置视图
SELECT a.server_id					--服务器的 ID
	,a.remote_name					--连接时使用的远程用户名。 虽然也存储了密码,但并不显示在目录视图界面中
	
	,b.name AS srvlinkname			--当server_ID为0时,则指本机名,否则为链接服务器名(或别名)
	,b.product						--链接服务器的产品名,可以为空
	,b.provider						--提供程序,用于连接到链接服务器的 OLE DB 访问接口名称
	,b.data_source					--OLE DB 数据源连接属性,可以为计算机名或IP地址
	
	,b.is_linked					--是否链接服务器
	,b.is_remote_login_enabled		--是否开启远程登录(本机配置使用)
	,b.is_rpc_out_enabled			--是否启用RPC(本机配置使用)
	,b.is_data_access_enabled		--是否启用分布式查询服务
	
FROM sys.linked_logins a		--链接服务器登录视图
JOIN sys.servers b ON b.server_id = a.server_id		--链接服务器配置视图

## 附创建链接服务器Example
--创建远程链接服务器
execute sys.sp_addlinkedserver @server='otherServer',    --被访问的服务器别名
        @srvproduct='',
        @provider='SQLOLEDB',
        @datasrc='192.168.1.3,1466\SFKLPOS\MSSQL2008'    --被访问的服务器地址(IP地址,端口号\服务器名称)
--创建本地用户与远程服务器中用户之间的映射
execute sys.sp_addlinkedsrvlogin @rmtsrvname='otherServer',    --被访问的服务器别名
        @useself='false',			--是否通过模拟本地登录名或显式提交登录名和密码来连接到远程服务器
        @locallogin=null,			--本地登录
        @rmtuser='sa',				--用户名
        @rmtpassword='xxxxxx'	--密码
go
    
--建立完成之后就可以正常使用了 
select * from srv_lnkU9CTest22.OHYJTest.dbo.CBO_Person    --连接服务器别名.数据库名称.dbo.表名称
go

--删除运行本地与远程之间的用户映射
execute sys.sp_droplinkedsrvlogin @rmtsrvname='otherServer',@locallogin=null
--删除链接服务器
execute sys.sp_dropserver @server='otherServer',@droplogins='droplogins'
go

系统目录视图

SQL Server 早期版本中的许多系统表现在作为一组视图实现。 这些视图称为兼容性视图,仅用于向后兼容。 兼容性视图公开 SQL Server 2000(8.x)中可用的相同元数据。 但是,兼容性视图不会公开与 SQL Server 2005(9.x)及更高版本中引入的功能相关的任何元数据。 因此,使用新功能(如 Service Broker 或分区)时,必须切换到使用目录视图

目录视图返回由 SQL Server 数据库引擎使用的信息。 建议使用目录视图,因为它们是目录元数据的最通用界面,并提供获取、转换和呈现此信息的自定义形式的最有效方法。 所有用户可用的目录元数据都通过目录视图来显示。

备注

目录视图不包含有关复制、备份、数据库维护计划或 SQL Server 代理目录数据的信息。

某些目录视图从其他目录视图继承行。 例如,sys.tables 目录视图继承自 sys.objects 目录视图。 sys.objects 目录视图称为基本视图,而 sys.tables 视图称为派生视图。 sys.tables 目录视图返回专用于表的列,同时还返回 sys.objects 目录视图返回的所有列。 sys.objects 目录视图返回表之外的对象(例如,存储过程和视图)的行。 创建表之后,表的元数据将在两个视图中返回。 尽管两个目录视图返回有关表的不同级别的信息,但在此表的元数据中只有一个具有一个名称和一个 object_id 的项。 这可以总结如下:

  • 基本视图包含列的子集和行的超集。
  • 派生视图包含列的超集和行的子集。

重要

在 SQL Server 的未来版本中,Microsoft 可能会通过在列列表的末尾添加列来扩充任何系统目录视图的定义。 我们建议不要在生产代码中使用语法 SELECT * FROM sys.<catalog_view_name>,这是因为返回的列数可能会更改和中断应用程序。

AlwaysOn 可用性组目录视图

本部分包含与 AlwaysOn 可用性组相关的目录视图和函数。

# 为 SQL Server 实例上的每个可用性数据库都包含一行,实例在托管 Windows Server 故障转移群集 (WSFC) 中任何 AlwaysOn 可用性组的可用性副本,无论本地副本数据库是否已加入可用性组。
sys.availability_databases_cluster

# 为 Windows Server 故障转移群集 (WSFC) 中任何 AlwaysOn 可用性组侦听程序的每个关联 IP 地址都返回一行。
## 主键:listener_id + ip_address ip_sub_mask +
sys.availability_group_listener_ip_addresses

# 对于每个 AlwaysOn 可用性组,返回零行(指明没有与可用性组关联的网络名称),或为 Windows Server 故障转移群集 (WSFC) 中的每个可用性组侦听程序配置都返回一行。 此视图显示从群集中收集的实时配置。
sys.availability_group_listeners

# 为 SQL Server 的本地实例承载其可用性副本的每个可用性组返回一行。 每一行都包含可用性组元数据的缓存的副本。
sys.availability_groups

# 为 Windows Server 故障转移群集(WSFC)中的每个 AlwaysOn 可用性组返回一行。 每一行都包含 WSFC 群集的可用性组元数据。
sys.availability_groups_cluster
/* 注解
在 Windows Server 故障转移群集(WSFC)中,群集列显示 Windows 群集详细信息。 如果没有 Windows 群集(例如 读取缩放可用性组或 Linux 上的可用性组),则与群集相关的列可能会显示有关内部默认群集的数据。 这些列仅供内部使用,可以忽略。
*/

# 为 WSFC 故障转移群集中 AlwaysOn 可用性组的每个可用性副本的只读路由列表返回一行。
sys.availability_read_only_routing_lists

# 为属于 WSFC 故障转移群集中任何 AlwaysOn 可用性组的每个可用性副本都返回一行。
## 如果本地服务器实例无法与 WSFC 故障转移群集联系,例如由于群集关闭或丢失了仲裁,则仅返回本地可用性副本的行。 这些行将仅包含在元数据中本地缓存的数据列。
sys.availability_replicas

(错误)消息目录视图

对于系统定义的消息和用户定义的消息,包含系统中每个 message_idlanguage_id 的行。

# Example
SELECT message_id			--消息ID
	,language_id			--使用文本中的文本的语言ID: 1028繁体中文,2052简体中文
	,severity				--消息的严重性级别
	,is_event_logged		--出现错误时是否将消息记入事件日志:0否,1是
	,[text]					--使用的消息的文本

FROM sys.messages
WHERE language_id =2052
ORDER BY severity

将新的用户定义的错误消息存储在 SQL Server 数据库引擎实例中。 通过使用sys.messages目录视图可以查看存储sp_addmessage的消息。

# Example
/* 返回代码值: 0(成功)或 1(失败)*/
EXEC sp_addmessage
	@msgnum =null,		--消息ID,默认值为 NULL. 用户定义错误消息的@msgnum 可以是介于 50,001 和 2,147,483,647 之间的整数
	@severity =16,		--错误的严重性级别。 @severity为 smallint,默认值为 NULL. 有效级别来自0-24.
	@msgtext =N'',		--错误消息的文本。 @msgtext为 nvarchar(255),默认值为 NULL.
	@lang =null,		--此消息的语言。 @lang为 sysname,默认值为 NULL. 省略@lang时,该语言是会话的默认语言。
	
	/*
	 * 定消息是否在发生时写入 Windows 应用程序日志。 @with_log为 varchar(5),默认值为 NULL.
	 * 有关严重性的详细信息,请参阅微软官方文档-数据库引擎错误严重性。
	 */
	@with_log =N'',
	
	/*
	 * 如果指定为字符串 @replace,则会用新的消息文本和严重性级别覆盖现有错误消息。
	 * @replace为 varchar(7),默认值为 NULL.
	 * 如果 @msgnum已存在, 则必须指定此选项。如果替换美国英语消息,则会针对具有相同@msgnum的所有其他语言的所有邮件替换严重性级别。
	 */
	@replace =null

对象目录视图

它的衍生关系是从系统目录视图 ->对象目录视图,详细的对象目录视图文档,请参考对象目录视图。

# 在数据库中创建的每个对象(例如约束、默认值、日志、规则以及存储过程)都对应一行。
## sysobjects对象与sys.sysobjects视图结构是一样的,官方文档指出sysobjects是系统表(或函数),映射关系是sys.objects系统视图对象(不知道是否有误,从sp_helpt调取看均属sysViews)
SELECT [name]				--对象名
	,id						--对象标识号
	/* 对象类型
	 * AF = 聚合函数 (CLR)
	 * C = CHECK 约束
	 * D = 默认值或 DEFAULT 约束
	 * F = FOREIGN KEY 约束
	 * L = 日志
	 * FN = 标量函数
	 * FS = 程序集 (CLR) 标量函数
	 * FT = 程序集 (CLR) 表值函数
	 * IF = 内联表函数
	 * IT = 内部表
	 * P = 存储过程
	 * PC = 程序集 (CLR) 存储过程
	 * PK = PRIMARY KEY 约束(类型为 K)
	 * RF = 复制筛选存储过程
	 * S = 系统表
	 * SN = 同义词
	 * SO = 序列
	 * SQ = 服务队列
	 * TA = 程序集 (CLR) DML 触发器
	 * TF = 表函数
	 * TR = SQL DML 触发器
	 * TT = 表类型
	 * U = 用户表
	 * UQ = UNIQUE 约束(类型为 K)
	 * V = 视图
	 * X = 扩展存储过程
	 */
	,xtype						--对象类型
	,uid						--对象所有者的架构 ID
	--,crdate						--对象的创建日期
	--,type						--对象类型,同xtype一致
	--,sysstat						--标识为仅供参考
	--,version						--版本int
	,category						--用于发布、约束和标识

FROM sys.sysobjects
WHERE [type] IN ('U','V','F','PK','C','P','FN')
ORDER BY [name]
GO

# 包含在数据库中创建的每个用户定义的架构范围内的对象的行,包括本地编译的标量用户定义函数。
## sys.objects 不显示 DDL 触发器,因为它们不是架构范围的。 所有触发器(包括 DML 和 DDL)均位于 sys.triggers 中。 sys.triggers 支持对各种触发器应用混合名称范围规则。

SELECT [name]						--对象名称
	,[object_id]						--对象标识号
	--,principal_id						--
	,[schema_id]						--该对象的架构ID
	--,parent_object_id						--父对象的ID
	/* 对象类型
	 * C = CHECK 约束
	 * D = 默认值或 DEFAULT 约束
	 * F = 外键约束
	 * FN = SQL 标量函数
	 * P = 存储过程
	 * PK = 主键约束
	 * RF = 复制筛选存储过程
	 * SO = Sequence 对象
	 * U = 用户表
	 * V = 视图
	 */
	,[type]								--对象类型
	--,type_desc						--
	,create_date						--对象的创建日期
	--,modify_date						--修改对象的日期
	--,is_ms_shipped						--对象由内部 SQL Server 组件创建
	--,is_published						--对象为发布对象
	--,is_schema_published				--仅发布对象的架构

FROM sys.objects
WHERE [type] IN ('U','V','F','PK','C','P','FN')
ORDER BY [name]

# 显示所有架构范围内的用户定义对象和系统对象的 UNION。
sys.all_objects

# 对于 Microsoft SQL Server 附带的所有架构范围内的系统对象,相应地包含一行。 所有系统对象都包含在名为 sys 或 INFORMATION_SCHEMA 的架构中。
sys.system_objects

# 当前数据库中的每个索引和表各对应一行。 此视图不支持 XML 索引。 此视图中不支持已分区表和索引;请改用 sys.indexes 目录视图
## sysindexes对象与sys.sysindexes视图结构是一样的
SELECT id					--所属对象ID
	,[status]				--系统状态信息
	,[first]				--指向第一页或根页的指针
	,indid					--索引 ID
	,[root]					--对于 indid>= 1, 根 是指向根页的指针
	,minlen					--行的最小大小
	,maxlen					--行的最大大小	
	,keycnt					--键数
	,groupid				--在其上创建对象的文件组 ID
	,dpages					--使用的数据页计数
	,reserved				--对于 indid = 0 或 indid = 1, 保留 是为所有索引和表数据分配的页面计数
	,used					--对于 indid = 0 或 indid = 1, 使用的 是用于所有索引和表数据的总页数
	,rowcnt					--基于 indid = 0 和 indid = 1 的数据级行计数
	,rowmodctr				--对自上次更新表的统计信息后插入、删除或更新行的总数进行计数
	,xmaxlen				--行的最大大小
	,maxirow				--最大非叶索引行大小

	,[name]					--索引或统计信息的名称
	,[rows]					--行计数

FROM sys.sysindexes

# 每个表格对象(例如,表、视图或表值函数)的索引或堆都包含一行。
SELECT [object_id]					--对象的 ID
	,[name]							--对象名称
	,index_id						--索引的 ID
	/* 索引类型
	 * 0 = 堆
	 * 1 = 聚集行存储 (B 树)
	 * 2 = 非聚集行存储 (B 树)
	 * 3 = XML
	 * 4 = 空间
	 * 5 = 聚集列存储索引。 适用于:SQL Server 2014 (12.x) 及更高版本。
	 * 6 = 非聚集列存储索引。 适用于:SQL Server 2012 (11.x) 及更高版本。
	 * 7 = 非聚集哈希索引。 适用于:SQL Server 2014 (12.x) 及更高版本。
	 */
	,[type]							--索引类型
	--,[type_desc]
FROM sys.indexes
动态视图查询对象信息
# 查询当前数据表行数排名Example
SELECT a.name, b.[rows]
FROM sys.sysobjects a
JOIN sys.sysindexes b ON a.id = b.id
WHERE a.[type] ='U' AND b.indid IN (0,1)
ORDER BY b.[rows] DESC
GO

系统动态管理视图

动态管理视图(DMV)和动态管理功能(DMF)返回可用于监视服务器实例运行状况、诊断问题和优化性能的服务器状态信息。

动态管理视图和函数分为两种类型:

  • 服务器范围内的动态管理视图和函数。 此类型需要具有该服务器的 VIEW SERVER STATE 权限。 对于 SQL Server 2022 及更高版本,需要 VIEW SERVER 性能状态,或者需要与安全相关的几个 DMV 的 VIEW SERVER 安全状态。
  • 数据库范围内的动态管理视图和函数。 此类型需要具有该数据库的 VIEW DATABASE STATE 权限。 对于 SQL Server 2022 及更高版本,需要 VIEW DATABASE PERFORMANCE STATE,或者需要与安全相关的几个 DMV 的 VIEW DATABASE SECURITY STATE。

查询动态管理视图

通过使用两部分、三部分或四部分所组成的名称,可在 Transact-SQL 语句中引用动态管理视图。 另一方面,也可使用两部分或三部分所组成的名称在 Transact-SQL 语句中引用动态管理函数。 不能使用单部分名称在 Transact-SQL 语句中引用动态管理视图和函数。

所有动态管理视图和函数都存在于 sys 架构中,并遵循 dm_* 命名约定。 当使用动态管理视图或函数时,必须使用 sys 架构作为视图或函数名称的前缀。 例如,若要查询 dm_os_wait_stats 动态管理视图,请运行以下查询:

SELECT wait_type, wait_time_ms
FROM sys.dm_os_wait_stats;

数据库对象

描述:返回事务日志的虚拟日志文件 (VLF) 信息。 请注意,所有事务日志文件都合并在表输出中。 输出中的每行均表示事务日志中的 VLF,并提供与日志中该 VLF 相关的信息。

# 事务日志的虚拟日志文件 (VLF) 信息
DECLARE @dbaseName NVARCHAR(20) ='XXXXX'
SELECT database_id					--数据库 ID
	,[file_id]						--事务日志的文件 ID
	,vlf_begin_offset				--VLF开头的偏移位置
	,vlf_size_mb					--虚拟日志文件 (VLF)大小MB
	,vlf_sequence_number			--序列号(按已创建的顺序)。 用于唯一标识日志文件中的 VLF
	
	,vlf_active						--VLF激活: 0 - VLF 未被使用, 1 - VLF 处于活动状态
	,vlf_status						--VLF状态: 0 - VLF 处于非活动状态, 1 - VLF 已初始化,但未使用, 2 - VLF 处于活动状态
	,vlf_parity						--奇偶校验: 在内部用于确定 VLF 内的日志结尾
	,vlf_first_lsn					--第一条日志记录的日志序列号
	,vlf_create_lsn					--日志记录的日志序列号
	--,vlf_encryptor_thumbprint

FROM sys.dm_db_log_info(db_id(@dbaseName))

# 返回有关数据库的事务日志文件的摘要级别属性和信息。 使用此信息监视和诊断事务日志运行状况。
DECLARE @dbaseName NVARCHAR(20) ='zhongcaiERP'
SELECT database_id					--数据库 ID
	,recovery_model					--数据库的恢复模式
	
	,log_min_lsn					--当前开始 日志序列号(LSN)
	,log_end_lsn					--最后一条日志记录的日志序列号

	,current_vlf_sequence_number	--执行时当前的VLF序列号
	,current_vlf_size_mb			--当前VLF大小
	,total_vlf_count				--事务日志中的虚拟日志文件(VFS)总数
	,total_log_size_mb				--事务日志总大小
	,active_vlf_count				--事务日志中的活动 虚拟日志文件(VFS) 总数
	,active_log_size_mb				--活动事务日志大小总计
	
	,log_truncation_holdup_reason	--日志截断保留原因
	

FROM sys.dm_db_log_stats(db_id(@dbaseName))

执行的对象跟踪与监视

# 对计划异步(后台)执行的每个查询处理器作业返回一行。
sys.dm_exec_background_job_queue

# 对于每个为异步(后台)执行而提交的查询处理器作业,相应地返回一行,以提供聚合统计信息。
sys.dm_exec_background_job_queue_stats

# 为每个 Transact-SQL 执行计划、公共语言运行时 (CLR) 执行计划和与计划关联的游标返回一行。
sys.dm_exec_cached_plan_dependent_objects

# 返回有关与此数据库引擎实例建立的连接的信息以及每个连接的详细信息。
sys.dm_exec_connections

# *返回每个节点的工作器可用性信息。
sys.dm_exec_query_parallel_workers

# *正执行查询时监视实时查询进度。
sys.dm_exec_query_profiles

/* 返回 SQL Server 中缓存查询计划的聚合性能统计信息。 缓存计划中的每个查询语句在该视图中对应一行,并且行的生存期与计划本身相关联。 在从缓存删除计划时,也将从该视图中删除对应行。
sys.dm_exec_query_stats 的结果可能因每次执行而有所不同,因为数据仅反映已完成的查询,而不是仍在进行中的查询。
*/
sys.dm_exec_query_stats


# 返回有关在 SQL Server 中正在执行的每个请求的信息。有关请求的详细信息,请参阅 线程和任务体系结构指南。
sys.dm_exec_requests
## Example:仅查询正在请求执行的数据库备份、或恢复以及数据收缩的会话作业
SELECT session_id		--请求会话ID
	,request_id			--请求ID
	,start_time			--请求到达时间
	,[status]			--请求状态
	,command			--正在处理的命令的当前类型
	,percent_complete	--为以下命令完成的工作的百分比
	/* T-SQL command
	 * ALTER INDEX REORGANIZE: 对于行存储索引,REORGANIZE指定重新组织索引叶级别。
	 * AUTO_SHRINK 选项 ALTER DATABASE: 自动收缩数据库选项(一般为OFF)
	 * BACKUP DATABASE: 创建数据库备份
	 * DBCC CHECKDB: 检查指定数据库中所有对象的逻辑和物理完整性
	 * DBCC CHECKFILEGROUP: 检查当前数据库的指定文件组中的所有表和索引视图的分配和结构完整性
	 * DBCC CHECKTABLE: 检查组成表或索引视图的所有页和结构的完整性
	 * DBCC INDEXDEFRAG: 指定表或视图的索引碎片整理
	 * DBCC SHRINKDATABASE: 收缩指定数据库中的数据文件和日志文件的大小
	 * DBCC SHRINKFILE: 收缩当前数据库的指定数据或日志文件大小。 可以使用它将一个文件中的数据移到同一文件组中的其他文件,这会清空文件,从而允许删除数据库。 可以将文件收缩到小于创建大小,同时将最小文件大小重置为新值。 仅在必要时使用 DBCC SHRINKFILE。
	 * RECOVERY: 数据库恢复状态,类似 RESTORE DATABASE [dbaseName] WITH RECOVERY; 用法
	 * RESTORE DATABASE: 还原使用 BACKUP 命令所做的 SQL 数据库备份
	 * ROLLBACK: 将显式或隐式事务回滚到事务的开头,或回滚到事务内的保存点。 可用于 ROLLBACK TRANSACTION 清除从事务开始或保存到保存点进行的所有数据修改。 它还释放由事务控制的资源
	 * TDE ENCRYPTION: 透明数据加密 (TDE) 也称为静态数据加密,数据库文件加密在页面级执行。 已加密数据库中的页在写入磁盘之前会进行加密,在读入内存时会进行解密。 TDE 不会增加已加密数据库的大小
	 */
	--,database_id		--数据库ID
	--,[user_id]		--提交请求的用户ID
	
	,wait_type			--如果请求当前被阻塞,则此列返回等待类型
	,wait_time			--如果请求当前被阻塞,则此列返回当前等待的持续时间(ms)
	,last_wait_type		--如果此请求先前已经阻塞,则此列返回上次等待的类型
	
	,transaction_id		--在其中执行此请求的事务ID
	,cpu_time			--请求所使用的 CPU 时间(ms)
	,total_elapsed_time	--请求到达后经过的总时间(ms)
	
	,scheduler_id		--正在计划此请求的计划程序ID
	,task_address		--分配给与此请求关联的任务的内存地址
	
	,reads				--此请求执行的读取数
	,writes				--此请求执行的写入数
	,logical_reads		--此请求已经执行的逻辑读取数
	,text_size			--此请求的大小 设置

FROM sys.dm_exec_requests
WHERE command IN ('RESTORE DATABASE', 'BACKUP DATABASE','DbccSpaceReclaim')

# 返回 SQL Server 中有关当前活动的锁管理器资源的信息。 向锁管理器发出的已授予锁或正等待授予锁的每个当前活动请求分别对应一行。
## Example
DECLARE @dbaseName NVARCHAR(20) ='dbaseName'
SELECT resource_type				--表示资源类型
	/*
	 * DATABASE
	 * FILE
	 * OBJECT
	 * PAGE
	 * KEY
	 * EXTENT
	 * RID(Row ID)
	 * APPLICATION
	 * METADATA
	 * HOBT(Heap OR B-tree)
	 * ALLOCATION_UNIT
	 * XACT (事务)
	 * OIB (联机索引生成)
	 * ROW_GROUP
	 */
	--,resource_subtype				--表示资源子类型
	,resource_database_id			--数据库的 ID
	,request_mode					--请求的模式
	/* 对于已授予的请求,为已授予模式;对于等待请求,为正在请求的模式。
	 * NULL = 不授予对资源的访问权限
	 * Sch-S(架构稳定性)= 确保在任何会话持有对架构元素(例如表或索引)的架构稳定性锁时,不删除该架构元素
	 * Sch-M(架构修改)= 必须由要更改指定资源架构的任何会话持有。 确保没有其他会话正在引用所指示的对象。
	 * S(共享)= 授予持有锁的会话对资源的共享访问权限。
	 * U(更新)= 指示对最终可能更新的资源获取的更新锁。 用于防止常见形式的死锁,这类死锁在多个会话锁定资源并且稍后可能更新资源时发生。
	 * X(独占)= 授予持有锁的会话对资源的独占访问权限。
	 * IS(意向共享)= 指示有意将 S 锁放置在锁层次结构中的某个从属资源上。
	 * IU(意向更新)= 指示有意将 U 锁放置在锁层次结构中的某个从属资源上。
	 * IX(意向独占)= 指示有意将 X 锁放置在锁层次结构中的某个从属资源上。
	 * SIU(共享意向更新)= 指示对有意在锁层次结构中的从属资源上获取更新锁的资源进行共享访问。
	 * SIX(共享意向独占)= 指示对有意在锁层次结构中的从属资源上获取独占锁的资源进行共享访问。
	 * UIX(更新意向独占)= 指示对有意在锁层次结构中的从属资源上获取排他锁的资源进行更新锁保留。
	 * BU = 由批量操作使用。
	 * RangeS_S(共享键范围和共享资源锁)= 指示可序列化的范围扫描。
	 * RangeS_U(共享键范围和更新资源锁)= 指示可序列化的更新扫描。
	 * RangeI_N(插入键范围和 Null 资源锁)= 用于在索引中插入新键之前测试范围。
	 * RangeI_S = 通过 RangeI_N 和 S 锁的重叠创建的键范围转换锁。
	 * RangeI_U = 通过 RangeI_N 和 U 锁的重叠创建的键范围转换锁。
	 * RangeI_X = 通过 RangeI_N 和 X 锁的重叠创建的键范围转换锁。
	 * RangeX_S = 通过 RangeI_N 和 RangeS_S 锁的重叠创建的键范围转换锁 。
	 * RangeX_U = 通过 RangeI_N 和 RangeS_U 锁的重叠创建的键范围转换锁。
	 * RangeX_X(独占键范围和独占资源锁)= 这是在更新范围中的键时使用的转换锁。
	 */
	 ,request_type				--请求类型。 该值为 LOCK
	 ,request_status			--当前状态,可能的值有GRANTED、CONVERT、WAIT、LOW_PRIORITY_CONVERT、LOW_PRIORITY_WAIT 或 ABORT_BLOCKERS
	 
	 ,request_session_id		--请求会话ID
	 ,request_owner_type		--拥有请求的实体类型。 锁管理器请求可由各种实体所拥有
	 ,lock_owner_address		--用于跟踪该请求的内部数据结构的内存地址
FROM sys.dm_tran_locks
WHERE resource_database_id = DB_ID(@dbaseName)

# 对于 SQL Server 中每个经过身份验证的会话都返回一行。 sys.dm_exec_sessions 是服务器范围的视图,显示了有关所有活动用户连接和内部任务的信息。 此信息包含客户端版本、客户端程序名称、客户端登录时间、登录用户、当前会话设置等。 使用 sys.dm_exec_sessions,首先可以查看当前的系统负荷并标识相关会话,然后可以通过其他动态管理视图或动态管理函数了解有关该会话的详细信息。
SELECT session_id						--请求会话ID
	,login_time							--建立会话的时间
	,[host_name]						--客户端工作站名称
	,program_name						--客户端程序的名称
	,host_process_id					--客户端程序的进程 ID
	--,client_version
	,client_interface_name				--客户端用于与服务器通信的库/驱动程序的名称
	--,security_id
	,login_name							--当前会话所使用的 SQL Server 登录名
	--,nt_domain
	--,nt_user_name
	,[status]							--会话的状态,Running\Sleeping\Preconnect
	
	,reads								--请求所执行的读取次数
	,writes								--请求所执行的写入次数
	,text_size							--会话内容字节大小
	
FROM sys.dm_exec_sessions

# 返回由指定 sql_handle标识的 SQL 批处理的文本。此表值函数替换系统函数 fn_get_sql
SELECT t.*
FROM sys.dm_exec_requests a
CROSS APPLY sys.dm_exec_sql_text(a.sql_handle) AS t

# 包含有关在 SQL Server 实例上运行的进程的信息。 这些进程可以是客户端进程或系统进程。 若要访问 sysprocesses,您必须位于 master 数据库上下文中,或者必须使用由三部分构成的名称 master.dbo.sysprocesses。

-- Example:查看所有活动进程
SELECT spid							--会话ID
	,kpid							--线程ID
	,blocked						--正在阻塞请求的会话的 ID。 如果此列为 NULL,则表示请求未被阻塞,或锁定会话的会话信息不可用(或无法进行标识)
	,waittype							--
	,waittime							--当前等待时间(毫秒)
	,lastwaittype						--指示上次或当前等待类型名称的字符串
	--,waitresource							--
	,dbid							--数据库ID
	,uid							--执行命令的用户 ID。 如果用户数和角色数超过 32,767,则发生溢出或返回 NULL
	,cpu							--进程的累计 CPU 时间
	,physical_io							--进程的累计磁盘读取和写入
	,memusage							--当前为此进程分配的过程缓存中的页数。
	,login_time							--客户端进程登录到服务器的时间
	,last_batch							--客户端进程上次执行远程存储过程调用或 EXECUTE 语句的时间
	,open_tran							--进程的打开事务数
	/* 进程状态
	 *  running = 运行一个或多个批处理
	 * background = 运行后台任务
	 * rollback = 进行事务回滚
	 * pending = 等待工作线程变为可用
	 * runnable = 等待获取时间量子时处于计划程序可运行队列中
	 * spinloop = 等待旋转锁变为免费状态
	 * suspended = 等待事件(如 I/O)完成
	 */
	,status									--进程状态
	--,sid								--全局唯一标识符 (GUID)
	,hostname								--工作站的名称
	,program_name							--应用程序的名称
	,hostprocess							--工作站进程ID号
	,cmd									--当前正在执行的命令
	,nt_domain								--客户端的 Windows 域
	,nt_username							--进程的 Windows 用户名
	,loginame							--登录名
	,context_info						--使用 SET CONTEXT_INFO 语句存储在批中的数据
	,sql_handle							--表示当前正在执行的批或对象
	,stmt_start							--为指定 sql_handle 运行当前 SQL 语句的起始偏移量
	,stmt_end							--所指定 sql_handle 的当前 SQL 语句的结束偏移量
	,request_id							--请求 ID
	,page_resource							--果 waitresource 列包含页面,则为页面资源的 8 字节十六进制表示形式

FROM sys.sysprocesses

业务连续性

每个人在部署 SQL Server 时都需执行一项常见任务,即确保所有任务关键型 SQL Server 实例以及其中的数据库在业务和最终用户需要时(无论是朝九晚五还是全天候)可用。 其目标是尽量减少或杜绝中断,保持业务正常运行。 此概念也称为业务连续性。

SQL Server 2017 (14.x) 在现有功能基础上引入了许多新功能或增强功能,其中部分功能用于提高可用性。 SQL Server 2017 (14.x) 的最大变化在于在 Linux 发行版上增加了对 SQL Server 的支持。

数据库的备份和还原

SQL Server 备份和还原组件提供基本的保护措施,可以保护存储在 SQL Server 数据库中存储的关键数据。 为了尽量降低灾难性数据丢失的风险,需备份数据库,以便定期保存对数据的修改。 计划良好的备份和还原策略有助于保护数据库,使之免受各种故障导致的数据丢失的威胁。 测试策略,方法是先还原一组备份,然后恢复数据库,以便准备好对灾难进行有效的响应。

(1) 创建完全备份

完整备份将整个数据库备份到指定的备份介质(如磁盘或磁带)。

# database_name: 要备份的数据库名称
# disk: 备份文件的路径和名称
BACKUP DATABASE database_name TO disk = 'backup_device_path' [,...n]
(2) 差异备份

差异备份仅备份自上次完整备份或差异备份以来发生更改的部分数据。

BACKUP DATABASE 和 BACKUP LOG 权限默认为 sysadmin 固定服务器角色以及 db_ownerdb_backupoperator 固定数据库角色。

备份设备的物理文件的所有权和权限问题将会妨碍备份操作。 SQL Server 需要能够读取和写入设备;运行 SQL Server 服务的帐户必须具有写入权限。 但是,用于在系统表中为备份设备添加项目的 sp_addumpdevice 检查文件访问权限。 在你因尝试备份或还原而访问物理资源之前,备份设备物理文件中的权限问题并不明显。

先决条件

创建差异数据库备份需要有以前的完整数据库备份。 如果你的数据库从未进行过备份,则请在创建任何差异备份之前,先执行完整数据库备份。

建议

当差异备份的大小增大时,还原差异备份会显著延长还原数据库所需的时间。 建议按设定的间隔执行新的完整备份,以便为数据建立新的差异基准。 例如,您可以每周执行一次整个数据库的完整备份(即完整数据库备份),然后在该周内执行一系列常规的差异数据库备份。

# DIFFERENTIAL: 指定差异备份选项
BACKUP DATABASE database_name TO disk = 'backup_device_path' WITH DIFFERENTIAL
-- Example
BACKUP DATABASE AdventureWorks TO disk = 'C:\Backup\AdventureWorks_diff.bak' WITH DIFFERENTIAL

SQL Server 2008 (10.0.x) Enterprise 及更高版本支持备份压缩。 默认情况下,是否压缩备份取决于 backup-compression default 服务器配置选项的值。 但是,不管当前服务器级默认设置如何,都可以通过选中 **“压缩备份”**来压缩备份,并且可以通过选中 **“不压缩备份”**来防止压缩备份。

# 查看备份压缩默认选项
SELECT value
FROM sys.configurations
WHERE name = 'backup compression default';
GO

# 配置备份压缩默认选项
EXECUTE sp_configure 'backup compression default', 1;
RECONFIGURE;
GO
(3) 日志备份

指定仅备份事务日志。 该日志是从上一次成功执行的日志备份到当前日志的末尾。 必须创建完整备份,才能创建第一个日志备份。日志备份将数据库的事务日志备份到指定的备份介质。适用于实现点恢复或完整恢复模型的数据库。

通过在 WITH STOPAT 语句中指定 STOPATMARKSTOPBEFOREMARK 或 ,可以将日志备份还原到备份中的特定时间或事务。

BACKUP LOG database_name TO disk = 'backup_device_path'
-- Example
BACKUP LOG AdventureWorks TO disk = 'C:\Backup\AdventureWorks_log.trn'
(4) 文件或文件组备份

文件或文件组备份允许备份数据库的部分文件或文件组。

# FILE: 指定要包含在文件备份中的文件的逻辑名称。
# FILEGROUP: 指定要包含在文件备份中的文件组的逻辑名称。 在简单恢复模式下,只允许对只读文件组执行文件组备份。
BACKUP DATABASE database_name FILE = 'logical_file_name' TO disk = 'backup_device_path'
BACKUP DATABASE database_name FILEGROUP = 'filegroup_name' TO disk = 'backup_device_path'
-- Example
BACKUP DATABASE AdventureWorks 
	FILE = 'AdventureWorks_Data' 
TO disk = 'C:\Backup\AdventureWorks_Data.bak'

BACKUP DATABASE AdventureWorks 
	FILEGROUP = 'PRIMARY' 
TO disk = 'C:\Backup\AdventureWorks_Primary.bak'
(5) 备份选项

备份命令还支持一些其他选项,如备份选项、初始化选项、镜像选项和压缩选项,以优化备份过程或降低备份文件的大小。
这些命令和选项使得 SQL Server 提供了灵活和多样化的备份策略,可以根据实际需求选择适合的备份类型和参数。

备份命令中可以使用一些选项来进一步控制备份的行为和性能。
WITH INIT:初始化备份介质,覆盖现有备份集。
WITH FORMAT:使用新的媒体格式写入备份集。
WITH COPY_ONLY:在不中断现有备份链的情况下进行备份。
WITH COMPRESSION:使用压缩备份,减少备份文件大小。

-- Example
BACKUP DATABASE AdventureWorks 
TO disk = 'C:\Backup\AdventureWorks_full.bak' 
WITH INIT, FORMAT, COMPRESSION

# 可以将备份同时写入多个备份设备,以提高备份的冗余性和性能。
-- Example
BACKUP DATABASE AdventureWorks 
TO disk = 'C:\Backup\AdventureWorks_full1.bak',
   disk = 'D:\Backup\AdventureWorks_full2.bak'
WITH INIT

# 备份完成后,可以使用 WITH CHECKSUM 选项验证备份的完整性。
BACKUP DATABASE AdventureWorks 
TO disk = 'C:\Backup\AdventureWorks_full.bak' 
WITH CHECKSUM
(6) 数据库还原

在完整恢复模式或大容量日志恢复模式下,可能需要先备份活动事务日志(称为 日志尾部),然后才能还原数据库。数据库完整还原的目的是还原整个数据库。 整个数据库在还原期间处于脱机状态。 在数据库的任何部分变为联机之前,必须将所有数据恢复到同一点,即数据库的所有部分都处于同一时间点并且不存在未提交的事务。

在简单恢复模式下,数据库不能还原到特定备份中的特定时间点。

先决条件和建议

  • 若要还原已加密的数据库,您必须有权访问用于对数据库进行加密的证书或非对称密钥。 如果没有证书或非对称密钥,数据库将无法还原。 因此,只要需要该备份,就必须保留用于对数据库加密密钥进行加密的证书。
  • 出于安全性考虑,我们建议您不要从未知或不信任的源附加或还原数据库。 此类数据库可能包含恶意代码,这些代码可能会执行非预期的 Transact-SQL 代码,或者通过修改架构或物理数据库结构导致错误。 使用来自未知源或不可信源的数据库前,请在非生产服务器上针对数据库运行 DBCC CHECKDB ,然后检查数据库中的代码,例如存储过程或其他用户定义代码。
/* 数据库恢复
语法:
FROM DISK:来源设备路径文件
FILE: 文件数
MOVE: 行数据[逻辑文件名] TO 还原为[目标文件名]
MOVE: 日志[逻辑文件名] TO 还原为[目标文件名]
NORECOVERY: 不对数据库执行任何操作,不回滚未提交的事务
REPLACE: 当目标数据库存在时,表示可直接覆盖重写(目标数据库不存在时,不需要该参数)
STATS =5:每恢复进度达到5%时,则返回进度消息
*/
-- Example
USE [master]
RESTORE DATABASE [DBase] 
FROM DISK = N'F:\xxxx.bak' 
WITH FILE = 1,
	MOVE N'blank' TO N'F:\DBase\xxxxx_Data.mdf',  
	MOVE N'blank_Log' TO N'F:\DBase\xxxxx_Log.ldf', 
NORECOVERY,  NOUNLOAD,  REPLACE,  STATS = 5
GO
# 执行所有操作并提交所有事务,将RESTORE状态恢复成ONLINE状态
RESTORE DATABASE [DBase] WITH RECOVERY;

# 进度监测查询
SELECT session_id
	--,request_id
	,start_time
	,STATUS
	,command
	,percent_complete
	,estimated_completion_time
	,total_elapsed_time
	--,database_id,USER_ID
	--,connection_id
	
FROM sys.dm_exec_requests
WHERE command IN ('RESTORE DATABASE', 'BACKUP DATABASE')
GO

# 当前引擎账套实例
SELECT [name] AS database_name
	,SUSER_SNAME(owner_sid) AS database_owner
	,create_date
	,collation_name
	,state_desc
	,is_auto_close_on

FROM sys.databases
GO
(7) 收缩指定数据库的大小

收缩指定数据库中的数据文件和日志文件的大小。

备注

收缩操作不应被视为常规维护操作。 由于常规定期业务操作而增长的数据和日志文件不需要收缩操作。

# target_perent: 整型值,收缩操作完成后要留在数据库文件中的可用空间百分比。
DBCC SHRINKDATABASE(N'dbaseName', target_perent )
GO

[2025-4-16 修订]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2336242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于我的服务器

最近我买了台腾讯云服务器&#xff0c;然后新手小白只会用宝塔。。。 安装完之后默认的端口是8888&#xff0c;打开面板就会提示我有风险。然后 我改了端口之后&#xff0c;怎么都打不开。 于是 学到了几句命令可以使用&#xff1a; //查看端口是否已经修改成功 cat www/se…

vue + element-plus自定义表单验证(修改密码业务)

写一个vue组件Password.vue 没有表单验证只有3个表单项 <template><div><el-form><el-form-item label"旧密码"><el-input></el-input></el-form-item><el-form-item label"新密码"><el-input>&l…

2025年第十八届“认证杯”数学中国数学建模网络挑战赛【BC题】完整版+代码+结果

# 问题一&#xff1a;随机森林回归from sklearn.ensemble import RandomForestRegressormodel_rf RandomForestRegressor()model_rf.fit(X_train, y_train)# 问题二&#xff1a;LSTM时间序列预测from tensorflow.keras.models import Sequentialmodel_lstm Sequential()model…

一、小白如何用Pygame制作一款跑酷类游戏(成品展示+添加背景图和道路移动效果)

小白如何用Pygame制作一款跑酷类游戏 文章目录 小白如何用Pygame制作一款跑酷类游戏前言一、游戏最终效果展示二、创建项目并加载pygame模块1.创建项目2.下载pygame模块3. 项目结构安排 三、添加背景图和实现道路移动效果1.引入库2.窗口设置和资源加载3.游戏主循环和程序入口4.…

基础知识:Dify 安装

官方指南:https://docs.dify.ai/zh-hans/getting-started/install-self-hosted docker & docker-compose 安装 可参考:

JWT令牌:实现安全会话跟踪与登录认证的利器

摘要&#xff1a;本文深入探讨了JWT令牌在实现会话跟踪和登录认证方面的应用&#xff0c;详细介绍了JWT令牌的概念、组成、生成与校验方法&#xff0c;以及在实际案例中如何通过JWT令牌进行会话跟踪和登录认证的具体实现步骤&#xff0c;为系统的安全认证机制提供了全面且深入的…

springboot+tabula解析pdf中的表格数据

场景 在日常业务需求中&#xff0c;往往会遇到解析pdf数据获取文本的需求&#xff0c;常见的做法是使用 pdfbox 来做&#xff0c;但是它只适合做一些简单的段落文本解析&#xff0c;无法处理表格这种复杂类型&#xff0c;因为单元格中的文本有换行的情况&#xff0c;无法对应到…

阿里FPGA XCKU3P开箱- 25G 光纤

阿里FPGA XCKU3P开箱 - Hello-FPGA - 博客园 25G 光纤 板子有2个SFP的光纤接口&#xff0c;最大支持25G速率&#xff0c;使用ibert 进行验证&#xff0c;SFP在BANK227的GTY 接口。 ibert 配置如下&#xff1a; 测试 测试符合预期&#xff0c;确认了SFP的具体位置 和 支持的速…

.NET Core DI(依赖注入)的生命周期及应用场景

在.NET中&#xff0c;依赖注入&#xff08;DI&#xff0c;Dependency Injection&#xff09;是一种设计模式&#xff0c;它通过将依赖关系注入到类中&#xff0c;而不是让类自己创建依赖项&#xff0c;来降低类之间的耦合度。这使得代码更加模块化、灵活和易于测试。在.NET中&a…

新技术学习方法

新技术学习方法 学习新技术的路线需要结合系统性规划与实践验证&#xff0c;以下是基于行业经验和学习科学整理的高效路径框架&#xff0c;适用于编程语言、开发框架、前沿技术等领域&#xff1a; 一、明确学习目标与动机&#xff08;战略层&#xff09; 场景化需求分析 明确…

内网dns权威域名服务器搭建

目录 一、背景 二、dns简介 1、dns服务器类型 1、缓存域名服务器 2、主域名服务器 3、从域名服务器 2、dns解析过程 1、递归查询 2、迭代查询&#xff1a; 3、dns服务器类型 1、根域名服务器 2、顶级域名服务器 顶级域名可分为两类 顶级域名服务器的重要性体现在…

爱普生SG2520VGN差分晶振5G基站的时钟解决方案

在 5G 通信时代&#xff0c;数据流量呈爆发式增长&#xff0c;5G 基站作为信号的核心中转枢纽&#xff0c;承载着前所未有的数据传输与处理重任。从海量的物联网设备连接&#xff0c;到高速移动用户的数据交互&#xff0c;每一个环节都对基站的性能提出了严苛要求。而精准稳定的…

Linux中设置文件开机自启

###方法有很多&#xff0c;这里只分享一个systemd的方法 1.创建service文件 在/etc/systemd/system/下创建&#xff0c;自己命名&#xff0c;后缀是.service 创建方式有两种&#xff1a; 进入/etc/systemd/system创建&#xff0c;创建后使用sudo vim编辑使用sudo nano /etc/…

AWTK-MVVM 如何让多个View复用一个Model记录+关于app_conf的踩坑

前言 有这么一个业务&#xff0c;主界面点击应用窗口进入声纳显示界面&#xff0c;声纳显示界面再通过按钮进入菜单界面&#xff0c;菜单界面有很多关于该声纳显示界面的设置项&#xff0c;比如量程&#xff0c;增益&#xff0c;时间显示&#xff0c;亮度&#xff0c;对比度等…

kotlin音乐之自定义唱片组件(简单版本)

代码地址 import android.animation.ObjectAnimator import android.animation.ValueAnimator import android.content.Context import android.os.Binder import android.util.AttributeSet import android.view.animation.LinearInterpolator import androidx.appcompat.widg…

Redis 版本变更的变化

Redis 版本变更的变化 以下是 Redis 主要版本的清单及其核心功能变化的梳理&#xff0c;按时间顺序整理关键版本演进 8版本没有整理&#xff1a; Redis 1.0 (2009) 初始版本&#xff1a;发布首个稳定版本&#xff0c;支持基本键值存储。 核心特性&#xff1a; 支持字符串&…

文本纠错WPS插件:提升文档质量的利器

文本纠错WPS插件&#xff1a;提升文档质量的利器 引言 在数字化办公日益普及的今天&#xff0c;文档的质量直接影响到我们的工作效率和形象。一个错别字或标点错误&#xff0c;可能就会让我们的专业形象大打折扣。今天&#xff0c;我要向大家介绍一款强大的WPS插件——文本纠…

多光谱相机与高光谱相机的区别

多光谱相机与高光谱相机均属于光谱成像设备&#xff0c;但两者在‌光谱分辨率、波段数量、数据维度及应用场景‌上存在显著差异。以下是详细的对比分析&#xff1a; ‌一、核心差异对比 二、工作原理差异‌ ‌多光谱相机‌ ‌波段选择‌&#xff1a;根据目标物特性‌预设特定…

MVCC详细介绍及面试题

目录 1.什么是mvcc&#xff1f; 2.问题引入 3. MVCC实现原理&#xff1f; 3.1 隐藏字段 3.2 undo log 日志 3.2.1 undo log版本链 3.3 readview 3.3.1 当前读 ​编辑 3.3.2 快照读 3.3.3 ReadView中4个核心字段 3.3.4 版本数据链访问的规则&#xff08;了解&#x…

电商企业如何实现流程精细化?日事清「标准化+可视化+自动化」全流程管理实战解析​

电商企业在业务快速发展中&#xff0c;往往会遇到如下问题&#xff1a; 1、店铺多款产品需要上新维护&#xff0c;但工作重点往往不清晰&#xff0c;员工经常忘记&#xff0c;没做也不当回事&#xff1b; 2、员工做事经常错漏细节&#xff0c;犯低级错误&#xff1b; 3、人员…