SQL Server常见问题解析

前言

项目开发使用的数据库是sql server,以下是工作中经常出现一些问题点:

一、处理 SQL Server 事务日志满的问题

1. 确认事务日志已满

  • 错误提示:通常出现 9002 错误(日志空间不足)。
  • 检查日志使用情况
    DBCC SQLPERF(LOGSPACE);
    
    查看 Log Space Used (%) 是否接近 100%。

2. 立即释放日志空间

情况 1:数据库为完整/大容量日志恢复模式
  • 执行事务日志备份

    BACKUP LOG [数据库名] TO DISK = N'路径\日志备份文件.trn';
    

    备份后,日志空间会被标记为可重用。

  • 若备份失败

    • 检查备份设备(磁盘空间、权限等)。
    • 若紧急情况下需强制释放空间,可切换为简单恢复模式(谨慎操作,会打断日志链):
      ALTER DATABASE [数据库名] SET RECOVERY SIMPLE;
      DBCC SHRINKFILE (N'日志逻辑文件名', 1); -- 收缩日志文件
      ALTER DATABASE [数据库名] SET RECOVERY FULL; -- 恢复原模式
      
情况 2:数据库为简单恢复模式
  • 触发检查点,使日志自动截断:
    CHECKPOINT;
    

3. 收缩事务日志文件

  • 收缩日志文件(仅在紧急时使用,避免频繁操作):
    USE [数据库名];
    DBCC SHRINKFILE (N'日志逻辑文件名', 目标大小_MB); -- 如 DBCC SHRINKFILE (N'MyDB_Log', 1024);
    
    若收缩失败,需检查是否有活动事务占用日志空间。

4. 检查并终止长时间运行的事务

  • 查看未提交事务
    DBCC OPENTRAN;
    
    若存在长时间未提交的事务,需联系相关人员提交或终止:
    KILL [会话ID]; -- 谨慎操作
    

5. 优化日志文件配置

  • 调整日志初始大小和增长策略
    ALTER DATABASE [数据库名] MODIFY FILE (NAME = N'日志逻辑文件名',SIZE = 初始大小_MB,  -- 如 4096MBFILEGROWTH = 增长量_MB  -- 如 1024MB,避免百分比增长
    );
    
  • 检查虚拟日志文件(VLF)碎片
    DBCC LOGINFO;
    
    若存在大量 VLFs,需通过备份后收缩日志并调整增长量优化。

6. 预防措施

  • 定期备份事务日志:确保完整/大容量模式下的日志备份计划。
  • 监控日志增长:设置警报监控日志使用率。
  • 避免自动收缩:禁用自动收缩(AUTO_SHRINK),手动维护更可控。
  • 优化事务设计:减少大事务,拆分批量操作。

紧急情况处理

  • 磁盘空间不足
    • 扩展磁盘空间或移动日志文件到新磁盘:
      ALTER DATABASE [数据库名] MODIFY FILE (NAME = N'日志逻辑文件名',FILENAME = N'新路径\日志文件.ldf'
      );
      
      需重启 SQL Server 服务生效。

总结步骤

  1. 备份日志 → 2. 终止阻塞事务 → 3. 收缩日志 → 4. 调整日志配置 → 5. 设置监控与维护计划

通过合理配置日志文件、定期备份及优化事务,可有效避免事务日志满的问题。


二、处理 System.Data.SqlClient版本太低

1.背景

使用sqlsugar的事务时,提示:

English Message : Connection open error . Enlisting in Ambient transactions is not supported.
Chinese Message :  连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,实在找不到原因请先Google错误信息:
Enlisting in Ambient transactions is not supported..

2.原因分析

默认的System.Data.SqlClient版本太低,导致Queryable查询的时候正常,插入Insertable的时候异常。
execute sp_lock;

3.解决办法

选择适合项目版本的System.Data.SqlClient进行升级即可。

三、处理 System.Data.SqlClient版本太低

1.背景

由于在设计时.备注总会在下方,需要下拉框才能看到字段的备注;

2.解决办法

1、关掉SQL server Management Studio,否则会被覆盖;
2、打开注册表路径: \HKEY_CURRENT_USER\Software\Microsoft\SQL Server Management Studio\18.0_IsoShell\DataProject;
3、把SSVPropViewColumnsSQL80和SSVPropViewColumnsSQL70的值修改为:"1,2,3,4,6,7,17;"

2.其他数值

1:Column Mame
2:Data Type
3:Length
4:Precision
5:Scale
6:Allow Nulls
7:Default value
11:Row GuID
12:Nullable
13:Condensed Type
14:Not for Replication
15:Formula
16:Collation
17:Description

四、Sqlserver高级语法

1.SQL INSERT INTO SELECT 语句

通过 SQL,您可以从一个表复制信息到另一个表。
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。SQL INSERT INTO SELECT 语句
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。SQL INSERT INTO SELECT 语法
我们可以从一个表中复制所有的列插入到另一个已存在的表中:
INSERT INTO table2
SELECT * FROM table1;或者我们可以只复制希望的列插入到另一个已存在的表中:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;

2.SQL SELECT INTO 语句

通过 SQL,您可以从一个表复制信息到另一个表。
SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。SQL SELECT INTO 语句
SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。注意:
MySQL 数据库不支持 SELECT ... INTO 语句,但支持 INSERT INTO ... SELECT 。
当然你可以使用以下语句来拷贝表结构及数据:
CREATE TABLE 新表
AS
SELECT * FROM 旧表 SQL SELECT INTO 语法
我们可以复制所有的列插入到新表中:SELECT *
INTO newtable [IN externaldb]
FROM table1;或者只复制希望的列插入到新表中:
SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;

3.场景模拟一

原始数据库设计UserID为字符串类型,后续改完bigint,需做数据升级处理

----根据用户表更新结算主体的用户ID
update t set t.UserID=isnull(u.NewUserId,0) from ZJ_SettleAccount t 
left join Base_Users u on u.UserID=t.UserID where t.UserID like 'uid%';

4.场景模拟二

数据库存在的2张表进行数据同步

----将明细信息同步到主表
insert into    
Order_InsuranceMain(InsuranceMainID, Orderprice, InsurancPrice, OrderServiceID, InsuranceStatus, Description,MasterID, MerchantID, PolicyNo
,CreateID,CreateTime,ModifyID,ModifyTime,InsuranceType,OrderID
)
select InsuranceID,Orderprice, InsurancPrice, OrderServiceID, InsuranceStatus, Description,MasterID, MerchantID, PolicyNo,CreateID,
CreateTime,ModifyID,ModifyTime,InsuranceType,(select OrderID from Orders_Service where OrderServiceID=Order_Insurance.OrderServiceID) as OrderID
from 
Order_Insurance  where PolicyNo in(select  distinct PolicyNo from Order_Insurance ) and  Project='accidentinsurance_signin'

5.查看数据库中所有的视图

查看数据库中所有的视图

select  
Name,--视图名字
Definition --视图内容
from  sys.sql_modules AS m 
inner  join  sys.all_objects as  o on  m.object_id = o.object_id
where  o.[type] = 'v'

欢迎大家评论和留言! 🚀

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Solr-搜索引擎-入门到精通

以下是对 Apache Solr 的简介及其常用语法的快速入门指南: 一、Solr 是什么? • 核心定位:Apache Solr 是一个基于 Lucene 的高性能、开源的搜索平台,支持全文检索、分词、高亮、聚合统计等功能。 • 核心功能: • 全…

Ajax与Axios,以及Apifox的入门使用

Ajax与Axios,以及Apifox的入门使用 作者:blue 时间:2025.3.20 文章目录 Ajax与Axios,以及Apifox的入门使用1.Ajax2.Axios3.Apifox的基本使用内容Path 参数定义语法用途 Query 参数定义语法用途 1.Ajax 概念:Asynchr…

Spring MVC拦截器

一、什么是拦截器 拦截器是 SpringMVC 提供的一种可以在请求处理过程中对请求进行预处理或后处理的机制。简单来说,拦截器就像是一位“守门员”,它拦住所有进来的请求,根据设定的规则决定是否放行或者进行某些操作。 拦截器可以&#xff1a…

mysql语句 聚合+分组+内外链接

1.聚合函数 1.count 记数 2.sum 求和 3.avg *语法:select avg(列名) from 表名; 4.max 求最大值 5.min 求最小值 求一个班级数学平均分? select avg(ifnull(math,0&#x…

WPF 与 C# 融合开发:从基础到高级应用(一)

WPF 与 C# 融合开发:从基础到高级应用 一、C# 语言基础回顾 1.1 C# 语言概述 C# 是微软开发的一种现代、面向对象的编程语言,它融合了 C、C 和 Java 等语言的优点,具有简洁、安全、高效等特点。C# 广泛应用于 Windows 平台的应用开发&…

【Linux】IP协议

目录 一、IP协议的概念 二、IP协议的报头 (一)IP协议报文的封装、解包和分用 (二)8位生存时间 (三)IP分片 三、IP协议的网段划分 (一)为什么需要网段划分 (二&am…

如何快速下载并安装 Postman?

从下载、安装、启动 Postman 这三个方面为大家详细讲解下载安装 Postman 每一步操作,帮助初学者快速上手。 Postman 下载及安装教程(2025最新)

计算机网络高频(三)UDP基础

计算机网络高频(三)UDP基础 1.UDP的头部格式是什么样的?⭐ UDP 头部具有以下字段: 源端口(Source Port):16 位字段,表示发送方的端口号。目标端口(Destination Port):16 位字段,表示接收方的端口号。长度(Length):16 位字段,表示 UDP 数据报(包括头部和数据部…

2024年MathorCup数学建模B题甲骨文智能识别中原始拓片单字自动分割与识别研究解题全过程文档加程序

2024年第十四届MathorCup高校数学建模挑战赛 B题 甲骨文智能识别中原始拓片单字自动分割与识别研究 原题再现: 甲骨文是我国目前已知的最早成熟的文字系统,它是一种刻在龟甲或兽骨上的古老文字。甲骨文具有极其重要的研究价值,不仅对中国文…

【深度学习的数学】导数

导数的定义。好像是从极限开始的。比如说,函数f(x)在点xa处的导数,就是当h趋近于0时,[f(ah) - f(a)]除以h的极限,对吧?公式应该是这样的:f’(a) lim_{h→0} [f(ah) - f(a)] / h。这个极限如果存在的话&…

word文件转换为Markdown格式

目录 一、前言1.1、poi-ooxml、docx4j、aspose-words对比二、poi-ooxml技术实现一、前言 顺应时代技术的变更及高效协同理念的影响,非结构化信息展示、存储、应用等也由传统文档向在线协同文档的演变,类似腾讯在线文档。   目前大多数在线文档支持的是Markdown格式,因此这…

【Hugging Face 开源库】Diffusers 库 —— 扩散模型

Diffusers 的三个主要组件1. DiffusionPipeline:端到端推理工具__call__ 函数callback_on_step_end 管道回调函数 2. 预训练模型架构和模块UNetVAE(Variational AutoEncoder)图像尺寸与 UNet 和 VAE 的关系EMA(Exponential Moving…

langserve搭建方法

文章目录 安装 langserver安装 langchain-cli创建langserve脚手架使用poetry管理包 安装 langserver pip install langserve安装 langchain-cli pip install langchain-cli创建langserve脚手架 langchain app new 项目名后续交互界面全回车,接着cd到 项目名 目录…

网络基础-路由器和交换机工作配置

三、路由器和交换机的工作原理配置以及华为体系下的小型网络的搭建 3.1路由基础 3.1.1数据转发 通过链路层交换机和网络层路由器进行数据转发 交换机(链路层)mac地址表的数据转发路由器(网络层) ip路由表的数据转发 隔离广播域…

mysql高级,mysql体系结构,mysql引擎,存储过程,索引,锁

1.mysql体系结构 1) 连接层 主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作…

Unity高清渲染管线

Unity高清渲染管线——1 unity高清渲染管线是渲染管线的一种,在看完《创造高清3D虚拟世界》这本书的前两章以及第三张第二小节后终于对unity的高清渲染管线也是有了一个初步的认知,以下是我个人理解仅作参考: unity高清渲染管线项目模板比起…

Python基础语法元素(学习笔记)

实例1:温度转换 # TempConvert.py #为单行注释 多行注释为: 这里写内容 TempStr input("请输入带有符号的温度值:") if TempStr[-1] in [F,f] :C (eval(TempStr[0:-1])-32)/1.8print("转换后的温度是{:.2f}C".format(C)) e…

C++20 中的std::c8rtomb和 std::mbrtoc8

文章目录 1. 引言2. std::c8rtomb 函数详解3. std::mbrtoc8 函数详解4. 使用示例5. 注意事项6. 总结 1. 引言 C20 标准引入了对 UTF-8 编码的更好支持,其中包括两个重要的函数:std::c8rtomb 和 std::mbrtoc8。这两个函数分别用于将 UTF-8 编码的字符转换…

数据可视化TensorboardX和tensorBoard安装及使用

tensorBoard 和TensorboardX 安装及使用指南 tensorBoard 和 TensorBoardX 是用于可视化机器学习实验和模型训练过程的工具。TensorBoard 是 TensorFlow 官方提供的可视化工具,而 TensorBoardX 是其社区驱动的替代品,支持 PyTorch 等其他框架。以下是它…

flutter-实现瀑布流布局及下拉刷新上拉加载更多

文章目录 1. 效果预览2. 结构分析3. 完整代码4. 总结 1. 效果预览 在 Flutter 应用开发中,瀑布流布局常用于展示图片、商品列表等需要以不规则但整齐排列的内容。同时,下拉刷新和上拉加载更多功能,能够极大提升用户体验,让用户方…