-
sqlserver日志处理不当造成的隐患详解
事故背景:一大早还在路上,群里陆续有人反馈系统一直报错“Unknownerror258”,后来查询日志发现错误日志第一反应是不是数据库连接不够用了?导致超时?但是通过sql查询当时连接也只有40个左右,于是继续排查问题,发现dbserver机器这段时间磁盘io操作特别的高,很不正常,详见下图发现磁盘io问题,继续查看sqlserver日志,发现原因:“Autogrowoffile‘xxxx_log'indatabase‘xxxx'wascancelledbyuserortimedoutafter3398milliseconds. UseALTERDATABASEtosetasmallerFILEGROWTHvalueforthisfileortoexplicitlysetanewfilesize.”发现这种问题因为log日志文件太大了一直没有压缩过,并且创建数据库的时候默认选择了10%的增量来扩大log增量文件,这样日志文件的10%会越来越大从而产生超时高io操作解决方案:1、定期清理log文件,防止log文件越来越大USE[master]GOALTERDATABASE数据库...
数据库操作教程 2022-09-23 17:58:05 -
SQLServer2008数据库导入导出兼容性处理方案
使用场景:SQLServer的高版本数据库恢复到低版本则可能会有兼容性问题,为了解决此类问题进行数据库脚本模式处理,数据库结构,及数据存储更换版本等。1、选择要导出的数据库,右键任务,生成脚本...
数据库操作教程 2022-09-23 17:57:27 -
MSSQL附加数据库拒绝访问提示5120错误的处理方法
MSSQL附加数据库时提示以下错误:无法打开物理文件“***.mdf”。操作系统错误5:“5(拒绝访问...
数据库操作教程 2022-09-23 17:57:22 -
使用SqlServerCTE递归查询处理树、图和层次结构
CTE(CommonTableExpressions)是从SQLServer2005以后版本才有的。指定的临时命名结果集,这些结果集称为CTE...
数据库操作教程 2022-09-23 17:54:19 -
SqlServer异常处理常用步骤
SQLServer常见的问题主要是SQL问题造成,常见的主要是CPU过高和阻塞。一、CPU过高的问题1、查询系统动态视图查询执行时间长的sql语句WITHProcessCTE(blocked)AS(SELECTspidFROMsys.sysprocessesWHEREcpu>500)SELECTdistincta.*FROM(SELECTTEXT,AA.*FROMsys.sysprocessesAACROSSAPPLYsys.dm_exec_sql_text(AA.sql_handle))aJOINProcessCTEbucteWITH(NOLOCK)ONbucte.blocked=a.spid--whereloginame='TCScenery'ORDERBYa.CPU二、阻塞问题1、查询系统动态视图查询阻塞的sql语句WITHProcessCTE(blocked)AS(SELECTblockedFROMsys.sysprocessesWHEREblocked>0unionSELECTblockedFROMsys.sysprocessesWHEREblocked>0...
数据库操作教程 2022-09-23 17:47:03 -
SQLServer使用游标处理Tempdb究极竞争-DBA问题-程序员必知
SQLServertempdb分配竞争算是DBA老生常谈的问题了,几乎现在所有的DBA都知道多建几个文件来解决/缓解问题.但是深层次的的竞争依旧不可避免.这里给大家剖析下游标在tempdb中的特点使其在一定场景下替代临时表/表变量对象,解决深层次的tempdb竞争问题.在抛出这个不可避免的问题之前我们先简要看下什么是tempdb竞争.我们拿SQLServer创建一个临时表的过程来描述1在系统表中创建表的条目(系统数据页中)2分配一个IAM页并找到一个混合区在PFS页中标记3分配一个数据页(查看SGAM页,查看PFS页后并更新,更新IAM页)4表记录记录到系统表中从上述过程可以看出创建一个简单临时表需要查找,更新一系列的系统表/系统数据页,且当使用完删除临时表时上述操作逆向进行.索引相应的创建/销毁一旦大量并发,内部竞争也就产生了.虽然tempdb的缓存策略一定程度可以缓解相应创建过程的IAM,数据页分配,SqlServertempdb原理-缓存机制解析实践,但竞争依旧.可以看到SGAM,PFS等系统页是表创建过程的必经之路,他的分配竞争也就十分明显了.这也就是为什么采用多个数据文件,让...
数据库操作教程 2022-09-23 17:45:42 -
通过Windows批处理命令执行SQLServer数据库备份
建立mybackup.bat,输入以下内容直接运行该脚本,即可开始自动备份数据库也可把该脚本加入windows任务计划里执行。@echooffsetpath=%path%;C:ProgramFilesMicrosoftSQLServer80ToolsBinnecho数据库备份开始>>E:DataBaseBAK任务计划完成记录.txtdate/t>>E:DataBaseBAK任务计划完成记录.txttime/t>>E:DataBaseBAK任务计划完成记录.txtisql.exe-S127.0.0.1-Usa-Psa-imybackup.sqlecho数据库备份完成>>E:DataBaseBAK任务计划完成记录.txtdate/t>>E:DataBaseBAK任务计划完成记录.txttime/t>>E:DataBaseBAK任务计划完成记录.txtecho.echo.echo.数据库备份完成echo.echo.rempause在同一个文件夹里,建立一个sql脚本:mybackup.sql内容如下:----------...
数据库操作教程 2022-09-23 17:44:51 -
自增长键列统计信息的处理方法
这篇文章通过文字代码的形式讲解了如何处理用自增长键列的统计信息。我们都知道,在SQLServer里每个统计信息对象都有关联的直方图...
数据库操作教程 2022-09-23 17:40:01 -
SQLServer存储过程中编写事务处理的方法小结
本文实例讲述了SQLServer存储过程中编写事务处理的方法。分享给大家供大家参考,具体如下:SQLServer中数据库事务处理是相当有用的,鉴于很多SQL初学者编写的事务处理代码存往往存在漏洞,本文我们介绍了三种不同的方法,举例说明了如何在存储过程事务处理中编写正确的代码...
数据库操作教程 2022-09-23 17:39:34 -
sql中循环处理当前行数据和上一行数据相加减
以下事例,使用游标循环表#temptable中数据,然后让当前行和上一行中的argument1相加存放到当前行的argument2中,比较简单。--droptable#temptablecreatetable#temptable(argument1int,argument2int,argument3datetime)declare@rowcountint,@argument1int,@argument2nvarchar(50),@argument3datetimeset@rowcount=1set@argument1=1set@argument2=0set@argument3=GETDATE()while(@rowcount<100)begininsertinto#temptable(argument1,argument2,argument3)values(@argument1,@argument2,@argument3)set@argument1=@argument1+datepart(day,@argument3)set@argument3=@argument3-1set...
数据库操作教程 2022-09-23 17:38:36 -
SqlServer使用cursor处理重复数据过程详解
/*************************************************************Codeformattedbysetyg*Time:2014/7/2910:04:44************************************************************/CREATEPROCHandleEmailRepeatASDECLAREemailCURSORFORSELECTe.email,e...
数据库操作教程 2022-09-23 17:37:54 -
SqlServer如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息
在SQLSERVER中如何通过SQL语句获取服务器硬件和系统信息呢?下面介绍一下如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息。如有不足和遗漏,敬请补充...
数据库操作教程 2022-09-23 17:37:39