SQL Server管理
文章平均质量分 60
KevinLiu
SQL Server MVP
展开
-
Transaction replication只对新增的Article产生Snapshot
默认情况下在日志复制中如果新增加Article那么需要产生一个包含所有Article的Snapshot。由于产生Snapshot会加锁,同时会产生IO操作,所以对于大的数据库性能影响是很大的。 可以通过下面的办法让SQL Server针对增加的Article产生Snapshot。 1. Disable 'immediate_sync' 'allow_anonymous'原创 2013-03-01 16:21:03 · 1129 阅读 · 0 评论 -
删除整张表但是空间没有减少
首先看一个例子: --创建测试表CREATE TABLE testfreespace( column1 INT,column2 CHAR(20),column3 VARCHAR(8000)) --插入数据DECLARE @count INT;SET @count = 0;WHILE @count 3000BEGINSELECT@count原创 2012-08-10 14:55:24 · 7319 阅读 · 0 评论 -
Error: 701 内存不足时使用DAC连接
前一段时间测试SQL Server 2014内存数据库的时候发现如果数据库大小超过了设置的最大内存,SQL Server出现Error: 701错误。 错误信息: Error: 701, Severity: 17, State: 123.There is insufficient system memory in resource pool 'internal' to runt原创 2013-07-23 14:40:28 · 1641 阅读 · 0 评论 -
丢失或损坏NDF文件如何附加数据库
在论坛看到有人遇到 NDF文件丢失并且没有备份,所以无法成功附加数据库。在网上也看到过很多回答是如果没有NDF就无法附加成功。 其实我自己测试下来即使没有NDF也是可以成功附加的。但是有条件,丢失的NDF文件不属于Primary file group并且SQL Server为企业版 下面是我做的测试: 1. --创建数据库 CREATE DATA原创 2013-08-07 14:04:26 · 3361 阅读 · 0 评论 -
SQL Server 事务执行一半出错是否自动回滚整个事务
大家都知道SQL Server事务是单个的工作单元。如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。 所以是不是说事务出错一定会回滚整个事物呢? 先看几个个例子: --createtable create table testrollback(idintprimary ke原创 2013-08-08 16:48:01 · 3420 阅读 · 0 评论 -
Error: 17053 LogWriter: Operating system error 21(The device is not ready.)
今天在Detach数据库的时候出现错误,运行DBCC CHECKDB从SQL Server error log中看到下面的信息: Error: 17053, Severity: 16, State: 1.LogWriter: Operating system error 21(The device is not ready.)encountered.Write error duri原创 2013-09-09 11:40:22 · 3418 阅读 · 1 评论 -
查询谁修改了数据库的恢复模式
在QQ群里面有人说自己的数据库恢复模式自动被修改了,但是没有JOB也没有人修改,问我是否查出到底发生了什么。 其实在SQL Server Error Log里面会记录数据库恢复模式被更改的信息。比如我运行下面的脚本: alter database sql2008set recovery simplegoalter database sql2008set reco翻译 2013-09-13 10:23:28 · 1929 阅读 · 0 评论 -
SQL Profiler Application Name栏位避免显示Net SqlClient Data Provider
相信很多人用ProfilerTrace之类的工具抓Trace的时候都看到过ApplicationName栏位显示“.Net SqlClient Data Provider“而不是真实的应用程序名称。如果一个数据库被多个应用程序共享使用,其中一个应用导致的性能问题时,如果只是看到一个” .Net SqlClient Data Provider“对于DBA就比较痛苦。 其实可以在DBC原创 2013-10-21 11:01:21 · 2579 阅读 · 0 评论 -
SQL Server快速部署作业到多台服务器
问题: 需要在很多的SQL Server服务器上创建相同的作业。我们可以一台一台的运行相同的脚本创建作业,但是有没有什么简便的做法呢? 解决方法: 可能很多人都没有注意到可以用多服务器环境管理SQL Agent job和维护计划。如果需要在非常多的SQL实例上面创建相同的作业,多服务管理就非常有用。下面我们来一步一步的介绍如何创建多服务器环境。 我的机器上面安装了P翻译 2013-10-30 15:50:50 · 2415 阅读 · 3 评论 -
事务复制问题排查
看到微软亚太区数据库技术支持组官方博客发布的5篇针对于事物复制问题排查的博客,感觉非常有用,这里引用过来跟大家分享一下。 当对事务复制性能问题进行故障排除时,我们可以将数据流分为四段同步的会话,测试每段会话的性能,将有助于确认应该从哪里开始瓶颈调查。 1) 日志读取器(LogReader)的读者线程通过存储过程sp_replcmds(xp_replcmds的包装转载 2013-03-20 09:55:09 · 1774 阅读 · 0 评论 -
使用 sys.sp_testlinkedserver 测试Linked Server 连接是否正常
在论坛看到有人提问是否可以用T-SQL测试LinkedServer的连接是否正常,这样访问多个Linked Server的时候如果其中的一个连接失败就可以跳过不去处理。 在SQLServer 2005和之后的版本中提供了一个系统存储过程 "sp_testlinkedserver"可以用来测试LinkedServer是否连通。这个存储过程以Linked Server的名称作为输入参数,原创 2013-07-22 17:26:48 · 2735 阅读 · 0 评论 -
Cannot drop the database ‘XXX’ because it is being used for replication.
删除订阅数据库的时候出现下面的错误: Cannot drop the database ‘XXX’ because it is being used for replication. 数据库的状态为Recovery Pending,试了几个办法都解决不了。最后实用下面的办法解决: 将数据库Offline然后再删除就可以了。原创 2013-07-19 11:19:37 · 3951 阅读 · 0 评论 -
使用ApexSQL Log 分析数据库在线日志及数据库备份
今天遇到一个问题,数据库有几张表的数据被清除了。因为数据是昨天晚上被删除的,当时没有用户访问,所以根据日志备份就可以将数据还原,没有数据损失。但是是谁删除了数据呢? 在2008之前有很多工具都可以分析数据库的在线日志和备份文件,但是支持2008以及更高版本的不是很多。这里我是用了ApexSQL Log 2011,关于ApexSQL Log 2011的功能: ApexSQL Log原创 2012-12-25 17:22:57 · 15197 阅读 · 11 评论 -
如何判断游标是否存在?
有两个方法可以查看Cursor是否Open: 1.查询syscursors系统表: Select * from MASTER.dbo.syscursors 2. 使用CURSOR_STATUS函数: 比如:CREATE TABLE#TMP( ii int)GO INSERT INTO#TMP(ii)VALUES(1)INSER原创 2013-06-03 11:10:28 · 2076 阅读 · 0 评论 -
SQL Server不同版本之间发布订阅的主意事项
I was asked recently about Replication with different versions of SQL Server i.e. Multiple versions of SQL Server in a Replication topology. Generally, Microsoft supports replication back to two previ转载 2013-04-19 09:29:59 · 2191 阅读 · 0 评论 -
为什么SQL Server使用很少的内存?
昨天论坛里边看到一个帖子,说SQL Server的内存一直上不去。从Task Schedule中看到SQL Server只使用了88MB内存,实际这台机器有12GB的内存,可用内存有超过8GB。 当时我以为是开启了AWE导致的,所以连接到他的服务器看了一下。但是数据库为2005企业版64位,所以不用开启AWE。而且即使开启了,也会被忽略。 使用下面的脚本查询了一下SQL Serve原创 2013-02-28 15:31:17 · 2640 阅读 · 0 评论 -
是否可以在网络共享磁盘上创建数据库?
在网上看到有人遇到数据库空间不够用,问是否可以创建数据库到网络共享磁盘? 答案是可以的。但是这种做法是不推荐的,性能可能会受到影响。 1. 2005/2008 在网络共享磁盘上创建数据库 在2005和2008上默认是不可以在网络共享磁盘上创建数据库的,因为可能会因为网络原因导致数据库的完整性出现问题,同时伴随着IO性能损失导致数据库出现问题。Microsoft KB #3原创 2013-02-26 12:04:05 · 1667 阅读 · 0 评论 -
数据库损坏如何处理?
By Gail Shaw, 2010/04/23 (first published: 2009/02/16) A corrupt database is probably one of most DBA's worst nightmares. It results in downtime, managers shouting and all other sorts of unpleas转载 2013-07-07 20:07:10 · 2410 阅读 · 0 评论 -
拥抱大数据之——HDInsight安装篇
大数据是如此的真实,离我们越来越近,你不再需要繁复的Linux操作,拥抱Windows上的Hadoop——HDInsight吧。HDInsight是一个Windows平台上,100%兼容Apache Hadoop的实现。并且微软为其提供完全的技术支持,还等什么,我们一起来进入大数据的世界吧。目前提供的HDInsight分两种版本:On-Premises版,即HDInsight Server转载 2013-07-11 09:47:34 · 1643 阅读 · 0 评论 -
如何查看数据文件或者Log文件是否增长过?
在论坛看到一个帖子,说数据库变慢了一段时间,发现这段时间数据库文件的最后修改时间跟变慢的世界一致,想知道这段时间是否文件确实增长了。 其实SQL Server提供了数据增长的Event,而且Default Trace里面就记录了。 下面我们做个测试,我创建了一个新的数据库,创建表然后插入数据: create tabletest(testvarchar(100))原创 2013-06-28 13:40:03 · 2185 阅读 · 0 评论 -
VB Script判断文件夹下文件的数量并发MAIL预警
最近用户有个需求,需要监控文件夹下面文件的数量。如果超过一定的阀值需要发MAIL预警。从网上找了些VB Script的代码然后自己修改了一下就可以了。 源代码如下: strMessage = "File number more than10, please check"strTo= "sample@home.cn"strFrom="sample@home.cn"strS原创 2013-07-18 10:13:44 · 1343 阅读 · 0 评论 -
如何收缩2005 Mirror数据库
在论坛看到收缩主数据库在Mirror上没有效果的问题。以前我也认为在主数据库上执行的DBCC Shirnkfile命令会在Mirror数据库上重做,所以收缩主数据库可以导致Mirror数据库跟着收缩。事实不是。从MS网站找到的资料: When you use databasemirroring in Microsoft SQL Server 2005, SQL Server automat原创 2013-07-18 14:27:03 · 1412 阅读 · 0 评论 -
SQL Server 2012 新DMV查询日志路径
遇到问题的时候,我们经常会让用户查看SQL Server错误日志,但是很多用户会问日志到底在哪里啊? 在2012之前有几个办法可以查看日志的位置: 1. 使用sp_readerrorlog或者xp_readerrorlog,之后查找”Loging SQL Server messages in”之类的语句,后面紧跟的就是错误日志的地址。 2. 在SQL原创 2013-11-11 09:47:14 · 2247 阅读 · 0 评论 -
使用SSIS WMI Data Reader 通过WMI收集数据库维护信息
作为DBA来讲,不光要关注SQL Server本身的信息,还需要关注Windows的信息比如磁盘,性能,硬件信息等等。通过SQL Server提供的一些选项比如xp_cmdshell,OLE automation或者CLR都可以实现,但是可能对SQL Server有一些影响比如安全性方面。 比较常用的办法是使用WMI。通过WMI,可以通过Network查询远程机器上的硬件,软件配置等信原创 2013-11-11 12:09:22 · 1708 阅读 · 0 评论 -
使用DBCC SHRINKFILE EMPTYFILE 选项迁移数据
对于DBCC SHRINKFILE EMPTYFILE的解释: 将指定文件中的所有数据迁移到同一文件组中的其他文件。由于数据库引擎不再允许将数据放在空文件内,因此可以使用ALTERDATABASE语句来删除该文件。 假设说我现在想将数据从一个磁盘移动到另外一个磁盘,在移动过程中不想数据库Offline,我们可以使用这个选项。下面是一个例子: --create原创 2014-03-06 14:18:41 · 3080 阅读 · 0 评论 -
网上Unused Index Script 脚本的问题
以前使用过网上下载的脚本查询没有使用过的Index比如SQL SERVER – 2008 – Unused Index Script – Download,其实现在看起来这个脚本是有一些问题。 脚本如下:-- UnusedIndex Script -- Original Author:Pinal Dave (C) 2011SELECT TOP 25 o.name A原创 2014-04-18 14:35:12 · 1438 阅读 · 0 评论 -
Lock pages in memory now available for 64 bit Standard Edition of SQL Server
在2005,2008,2008 R2标准版启用Lock pages需要启动Trae转载 2014-08-19 11:17:09 · 1371 阅读 · 0 评论 -
SQL Serverj监控检查清单
检查一下你的SQLServer是不是很好的被翻译 2014-07-10 15:51:35 · 1227 阅读 · 0 评论 -
SQL Server统计信息:问题和解决方案
在网上看到一篇介绍使用统计信息出现的问题已经解决方案,感觉写的非常全面。在自己看的过程中顺便做了翻译。由于本人英文水平有限,可能中间有一些错误。如果有哪里有问题欢迎大家批评指正。建议英文好的直接看原文:SQL Server Statistics: Problems and Solutions 正文: SQL Server统计信息协助查询优化器计算运行查询的最优方式. Holge翻译 2014-08-04 14:13:59 · 3061 阅读 · 0 评论 -
使用默认system_health分析死锁(Deadlock)
在2008之前我们分析死锁需要用profiler trace或者trace flag 1222,1204.在2008中引入了一个新功能:Extended Events(扩展事件),可以监控Deadlock事件,并且性能更好。 而且2008自带了一个默认扩展事件会话system_health,如果你运行在2008或者之上版本可以执行下面查询: select * from原创 2014-08-07 14:17:18 · 2106 阅读 · 0 评论 -
小技巧:如何以另外的Windows用户运行SSMS
可能会碰到这样的问题,你需要在一台机器上面使用不同的Windows账户连接到SQL Server做测试。默认情况下,你需要用不同的Windows账户登录然后测试。实际上不需要每个windows登陆,就可以作为不同的用户访问。 1. 用RUNAS命令调用SSMS,写起来相对麻烦。 2. 只需要按住Shift键,使用“Run as different user”。首先找到S原创 2014-08-08 13:05:53 · 2227 阅读 · 0 评论 -
How It Works: What are the RING_BUFFER_RESOURCE_MONITOR telling me?
对于查询时Insternal 或者External 内存压力很有帮助。 The ring buffer records (which can be sent to XEvent) for Resource Monitor and Memory Broker are the key aspects to understanding RM. The record is produced wh转载 2014-08-19 11:19:08 · 1212 阅读 · 0 评论 -
使用Extended Events收集错误信息
扩展事件提供了一个轻量级的平台可以用来收集错误信息,方便DBA查看最近的数据库错误配合开发人员一起解决问题。 下面的例子我们创建extended event会话来获取错误208, 2812,and 4121。这三个错误分别对应:Invalid object name, Could not find stored procedure, and Cannotfind either co翻译 2014-02-25 15:20:16 · 1200 阅读 · 0 评论 -
SQL Server SA 密码丢失无法连接数据库怎么办?
如果Windows账户无法连接并且SA密码也丢失了,那么如何可以连接到数据库呢? 答案是: 在单用户模式下启动SQL Server然后用本地管理员权限连接。登陆之后就可以修改SA密码了。 步骤: 1. 打开SQL Server配置管理器2. 停掉SQL Server服务 3. 修改启动参数增加-m(单用户模式启动)原创 2014-02-25 10:05:02 · 1715 阅读 · 0 评论 -
Msg 15151 Cannot find the certificate
早上执行加密的存储过程出现下面的错误: Msg 15151, Level 16, State 1, Line 23Cannot find the certificate 'EncryptCert', because it does not exist or you donot have permission. 查了一下发现访问的账户只是赋予了执行存储过程的权限,如果不是用加密是原创 2013-11-26 11:47:52 · 1732 阅读 · 0 评论 -
Msg 15581 Please create a master key in the database or open the master key in the session
今天测试将加密的数据库还原到另外一台服务器,执行解密代码的时候出现下面的错误信息: Msg 15581, Level 16, State 3, Line 1Please create a master key in the database or open themaster key in the session before performing this operation.原创 2013-11-27 16:01:00 · 2776 阅读 · 0 评论 -
Column store index 列数据如何匹配成行数据?
那你SQL Server 2012引入了列存储索引,对每列的数据进行分组和存储,然后联接所有列以完成整个索引。这不同于传统索引,传统索引对每行的数据进行分组和存储,然后联接所有行以完成整个索引。 在访问基于行存储的索引时,如果要查询一个字段需要将整个Page读入内存,所以默认会读到所有行的数据:通过上面的图片可以看出,如果一个查询只想查询字段A的值,代价是读取所有的页面,包括了不需原创 2013-07-19 15:13:26 · 1782 阅读 · 0 评论 -
SQL Server job突然不工作了
朋友负责的一个系统突然不工作了,让我帮忙查一下原因。结果我抓了一个Profiler Trace发现根本没有找到要执行的语句,后来从SQL Server job中发现了这个功能是在Job完成的。 这个Job本来是2分钟运行一次,但是发现已经很久没运行了,手动运行了一下是正常的,为什么突然不工作了?而且发现所有的JOB都没有正常工作。我查了一下JOB的History发现记录竟然停在“1月4号”原创 2014-01-02 21:15:25 · 2661 阅读 · 0 评论 -
使用DBCC DBINFO查询数据库信息
在使用 DBCC DBINFO之前我们先看你下面几个问题: 1. SQL Server是否升级过?安装时的版本是多少?2. SQL Server当前的内部版本号是多少?3. SQL Server上次成功运行DBCC CHECKDB的时间是多少?4. 日志是否被重建过5. 。。。。。。 上面所需要的信息只需要一个命令就可以了DBCC DBINFO(这个是Un原创 2013-12-20 09:58:18 · 2053 阅读 · 0 评论 -
删除Management Data Warehouse (MDW) job失败
最近在清理一些不用的Job,发现几个跟MDW有关的。虽然Job已经被Disable,但是没有被删除。尝试删除出现下面的错误: The DELETE statement conflicted with the REFERENCE constraint"FK_syscollector_collection_sets_collection_sysjobs". The conflictoccu原创 2014-01-08 10:34:26 · 1523 阅读 · 0 评论