12 2011 档案
摘要:锁的概述一.为什么要引入锁多个用户同时对数据库的并发操作时会带来以下数据不一致的问题:丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统脏读A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对数据的修改,数据恢复原值,此时B得到的数据就与数据库内的数据产生了不一致不可重复读A用户读取数据,随后B用户读出该数据并修改,此时A用户再读取数据时发现前后两次的值不一致并发控制的主要方法是封锁,锁就是在一段时间内禁止用户做某些操作以避免产生数据不一致二锁的分类锁的类别有两种分法:1.从数据库系统的角度来看:分为独占锁(即排它锁),共享
阅读全文
摘要:无论是有意无意,如果事务在数据库中保持打开,则它会阻塞其他进程对修改后的数据进行操作。同样,对事务日志进行备份也只会截断不活动事务的那部分事务日志,所以打开的事务会导致日志变多(甚至达到物理限制),直到事务被提交或回滚。要找到最早的活动事务,可以使用DBCCOPENTRAN命令。详细用法见MSDN:http://msdn.microsoft.com/zh-cn/library/ms182792.aspx给出一个示例:CREATETABLET_Product(PKIDint,PNameNvarchar(50));GOBEGINTRANINSERTINTOT_ProductVALUES(101,&
阅读全文
摘要:SQL Server2008提供了一个增强的SQL命令Merge,用法参看MSDN:http://msdn.microsoft.com/zh-cn/library/bb510625.aspx功能:根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。我们看一个例子,假如,有一总产品列表,一个分店产品列表,需要从分店添加产品时更新总产品列表。总产品表,分店产品表结构完全一致:ifOBJECT_ID('Demo_AllProducts')isnotnulldroptableDemo_AllProd
阅读全文
摘要:SQLServer2008中新增功能:可以使用单个Insert命令插入多行。CreatetableDemo_Values(PKIDintnotnullidentity(1,1)primarykey,DNameNvarchar(20)null,DCodeNVarchar(30)null,DDatedatetimenull)go--thisSQLisonlyforSQLServer2008InsertintoDemo_Values(DName,DCode,DDate)values('DemoA','AAA',GETDATE()),('DemoB',&
阅读全文
摘要:1.正常启动SQLSERVER 2008服务net start mssql$sql20082.使用SQL Server Management Studio 登陆SQL SERVER 20083.SQLSERVER 2008服务停止了4.查看windows事件,日志如下a.在文件 'D:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\templog.ldf' 中、偏移量为 0000000000000000 的位置执行 读取 期间,操作系统已经向 SQL Server 返回了错误 38(已到文件结尾。)。
阅读全文
摘要:步骤:I.创建基本的Service Broker对象: 在ServerA的DatabaseA里,让我们执行下面的操作:1)创建消息类型Create Message Type SenderMessageType validation=NONE Create Message Type ReceiverMessageType validation=NONE2)在上面的消息类型上创建约定Create Contract SampleContract( SenderMessageType SENT BY INITIATOR, ReceiverMessageType SENT BY TARGET)3)创建一
阅读全文
摘要:有时,我们需要获得某张表所有的元数据,我们可能想到的是通过查询系统表获得,但是这比较繁琐,而在SQL Server2005(包含)以后,提供了一个比较简单的操作,只返回表的所有元数据,而没有行数据,它就是SET FMONLY {ON|OFF}命令。如图: 如果执行的时候打开执行计划(CTRL+M),也不会返回带有执行计划的标签(如上图)。
阅读全文
摘要:网址: http://www.g-productions.nl/index.php?name=sysdatabasesSQL Server在版本切换时,经常会有新的命令,或系统视图替代旧版本的视图和存储过程,或命令。同时老的还保留几个版本.如: sysdatabases系统视图是sql2000的系统视图,但在2005和2008上,已经修改为了sys.databases和sys.master_files两个对应的视图.如下图(查询系统存储过程 sp_addlinkedsrvlogin存储过程):
阅读全文
摘要:如果用附加或者恢复备份的方法把数据库从一个电脑移动到另外一个电脑,数据库的用户和SQL的登录会冲突,登录没有办法和用户关联,造成孤立用户. 为了解决这个问题,首先在目标SQL系统上建立与用户同名的登录,然后在数据库上执行下面指令把用户和登录关联use 数据库sp_change_users_login 'update_one', 'my_dbuser', 'my_sqllogin'(数据库用户my_dbuser 和 "SQL Server登陆名"my_sqllogin 关联)如果数据库预先设置了大量的用户权限,可以用这个方法方便
阅读全文
摘要:SQL Server注:以下指标取自SQL Server自身提供的性能计数器。指标名称指标描述指标范围指标单位1.SQL Server中访问方法(Access Methods)对象包含的性能计数器全表扫描/秒(Full Scans/sec)指每秒全表扫描的数量。全表扫描可以是基本表扫描或全索引扫描。由于全表扫描需要耗费大量时间,因此全表扫描的频率过高的话,会影响性能。如果该指标的值比1或2高,应该分析设计的查询以确定是否确实需要全表扫描,以及SQL查询是否可以被优化。次数/秒2.SQL Server中缓冲器管理器(Buffer Manager)对象包含的性能计数器缓冲区高速缓存命中率 (Buf
阅读全文
摘要:Master 系统账号,角色; 实例参数 用户db位置 dmv 系统扩展spTempDB用户对象 .全局临时表 (##) .本地临时表 (#) .表变量内部对象 .工作表 (游标, 假脱机(eagel spool, lazy spool:http://www.scarydba.com/2009/09/09/spools-in-execution-plans/) .工作文件 (哈希联接) .排序结果(使用了sort_in_tempdb选项创建/重建索引, Group By,…)版本存储 .行版本 .MARS (多个活劢结果集) .在线索引操作 .触发器 .快照隔离级别model 用户db的模板,
阅读全文
摘要:select a.name 'Job名称',case when (c.freq_type=4 and c.freq_subday_type=4) then ('每'+convert(varchar,c.freq_subday_interval)+'分钟') when (c.freq_type=4 and c.freq_subday_type=8) then ('每'+convert(varchar,c.freq_subday_interval)+'小时') when (c.freq_type=4 and c.fre
阅读全文
摘要:--提取数字IF OBJECT_ID('DBO.GET_NUMBER') IS NOT NULLDROP FUNCTION DBO.GET_NUMBERGOCREATE FUNCTION DBO.GET_NUMBER(@S VARCHAR(100))RETURNS VARCHAR(100)ASBEGINWHILE PATINDEX('%[^0-9]%',@S) > 0BEGINset @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')ENDRETURN @SENDGO--测试PRINT DBO
阅读全文
摘要:大容量日志恢复模式的工作原理与完整恢复模式(完全记录所有事务)相比,大容量日志恢复模式只对大容量操作进行最小记录(尽管会完全记录其他事务)。大容量日志恢复模式保护大容量操作不受媒体故障的危害,提供最佳性能并占用最小日志空间。但是,大容量日志恢复模式会增加这些大容量复制操作丢失数据的风险,因为大容量日志操作阻止再次捕获对每个事务逐一所做的更改。如果日志备份包含大容量日志操作,则无法还原到该日志备份中的时点,而只能还原整个日志备份。在大容量日志恢复模式下,如果日志备份覆盖了任何大容量操作,则日志备份包含由大容量操作所更改的日志记录和数据页。这对于捕获大容量日志操作的结果至关重要。合并的数据区可使日
阅读全文
摘要:suspect_pages 表位于 msdb 数据库中,是在 SQL Server 2005 中引入的。用于维护有关可疑页的信息的 suspect_pages数据库管理员负责管理表(主要通过删除旧的行实现)。suspect_pages 表有大小限制,如果此表已满,则不会记录新的错误。若要防止此表填满,数据库管理员或系统管理员必须通过删除行来手动清除此表中的旧条目。因此,我们建议您定期删除或存档 event_type 为已还原或已修复的行或具有旧 last_update 值的行。若要监视对 suspect_pages 表执行的操作,可使用 Database Suspect Data Page 事
阅读全文
摘要:在非域环境下,配置SQL Server 2008 数据库镜像服务的时候,在最后一步(即下图中,点击"开始镜像"按钮之后),遇到报错1418错误,1418: 服务器网络地址 "tcp://xiaoxu:5022" 无法访问或不存在。请检查网络地址名称,并检查本地和远程端点的端口是否正常运行。在“镜像服务器”的日志中有如下错误:Database Mirroring login attempt failed with error: 'Connection handshake failed. An OS call failed: (8009030c) 0
阅读全文
摘要:-- 数据库文件性能,文件io性能统计(必须重启sql server服务,才能清零该计数器),SELECT DB_NAME(vfs.DbId) DatabaseName, mf.name,mf.physical_name, vfs.BytesRead, vfs.BytesWritten,vfs.IoStallMS, vfs.IoStallReadMS, vfs.IoStallWriteMS,vfs.NumberReads, vfs.NumberWrites,(Size*8)/1024 Size_MBFROM ::fn_virtualfilestats(NULL,NULL) vfsINNER J
阅读全文
摘要:-- 查看性能记数器SELECT * FROM sys.dm_os_performance_counters-- 执行过的线程所遇到的所有等待(不是当前正在运行的线程, 为自上次重置统计信息或启动服务器以来累积的数据),可分析靠前的几个等待较高的事件。select * from sys.dm_os_wait_stats order by wait_time_ms desc该动态视图的细节,请查看帮助文档.-- 重置该动态视图DBCC SQLPERF ('sys.dm_os_wait_stats', CLEAR);GO-- 正在等待某些资源的任务的等待队列select * fro
阅读全文
摘要:本文描述: 主数据文件损坏(或丢失), 而事务日志文件未损坏的情况下, 如何备份尾部事务日志(自上次备份日志,至发生损坏这段时间的事务日志). (当然,这么做的目的,是可以恢复数据库至损坏前的最近状态)。转自:http://sudeeptaganguly.wordpress.com/2011/04/15/taillogbackupwithoutdatafile//* Create Tail-log backup after a crash, if the primary data file is missing------------------------------------------
阅读全文
摘要:在涉及到SQL Server编程或是管理时一定会用到数据的导入与导出, 导入导出的方法有多种,结合我在做项目时的经历做一下汇总:1. SQL Server导入导出向导,这种方式是最方便的.导入向导,微软提供了多种数据源驱动,包括SQL Server Native Cliant, OLE DB For Oracle,Flat File Source,Access,Excel,XML等,基本上可以满足系统开发的需求.同样导出向导也有同样多的目的源驱动,可以把数据导入到不同的目的源.对数据库管理人员来说这种方式简单容易操作,导入时SQL Server也会帮你建立相同结构的Table.2. 用.NET
阅读全文
摘要:锁兼容性控制多个事务能否同时获取同一资源上的锁。如果资源已被另一事务锁定,则仅当请求锁的模式与现有锁的模式相兼容时,才会授予新的锁请求。如果请求锁的模式与现有锁的模式不兼容,则请求新锁的事务将等待释放现有锁或等待锁超时间隔过期。例如,没有与排他锁兼容的锁模式。如果具有排他锁(X 锁),则在释放排他锁(X 锁)之前,其他事务均无法获取该资源的任何类型(共享、更新或排他)的锁。另一种情况是,如果共享锁(S 锁)已应用到资源,则即使第一个事务尚未完成,其他事务也可以获取该项的共享锁或更新锁(U 锁)。但是,在释放共享锁之前,其他事务无法获取排他锁。下表显示了最常见的锁模式的兼容性。现有授予模式请求模
阅读全文
摘要:在SQL Server 2005/2008安装后,即记录了计算机名做为 "sql server服务器名".当修改计算机名时, 需要修改sql server中对应的服务器名, 否则将影响“发布/订阅”,“镜像集群”等功能。-- 检查SQL Server中的“服务器名[/命名实例名]”, 和当前真实的“计算机名[/命名实例名]”。如果修改了计算机名,则这两者即会不一致。select @@serverName, serverproperty('serverName')-- 将"服务器名", 修改为正确的计算机名EXEC sp_dropserve
阅读全文
摘要:USE masterGOIF OBJECT_ID ('sp_hexadecimal') IS NOT NULL DROP PROCEDURE sp_hexadecimalGOCREATE PROCEDURE sp_hexadecimal @binvalue varbinary(256), @hexvalue varchar (514) OUTPUTASDECLARE @charvalue varchar (514)DECLARE @i intDECLARE @length intDECLARE @hexstring char(16)SELECT @charvalue =
阅读全文
摘要:1、现象、问题描述 客户反映某客户端登陆不了,客户端程序日志显示“连接数据库超时”;检查对应的数据库服务器,日志显示“Autogrow of file '某数据库日志文件' in database '某数据库' was cancelled by user or timed out after 2391 milliseconds. Use ALTER DATABASE to set a smaller FILEGROWTH value for this file or to explicitly set a new file size.”2、关键过程分析 根据数据
阅读全文
摘要:前言本文通过一个Bug的分析、解决,概述了使用Lumigent Log Explorer对SQL Server的事务日志进行分析的方法,以及常见的数据库误操作后的恢复、撤销方法Bug描述网站的文章模块有一个评分的功能:用户选择1-5分,点击提交后,文章的评分次数(Stars) + 1、总分(StarTotal) + 分数、平均分(StarAvg) = 新总分 / 新评分次数文章页面显示用户的平均分以及评分次数评分功能中用户最多打5分,最少打1分,某日忽然发现有的文章平均分竟然大于5,很不可思议。出现这个问题,大致的原因大不过有:实现评分逻辑的页面没有验证传入的分数是否合法、有些用户直接提交他们
阅读全文
摘要:快速修复:DBCCCHECKDB('test',REPAIR_FAST)重建索引并修复:DBCCCHECKDB('test',REPAIR_REBUILD)如果必要允许丢失数据修复:DBCCCHECKDB('test',REPAIR_ALLOW_DATA_LOSS)DBCCCHECKALLOC(Transact-SQL)检查指定数据库的磁盘空间分配结构的一致性。http://msdn.microsoft.com/zh-cn/library/ms188422.aspxDBCCCHECKDB(Transact-SQL)通过执行下列操作检查指定数据库中
阅读全文
摘要:方法一:在配置数据同步的时候,要求相互同步的两台机器的数据库必须通过默认实例名称进行连接。如果你的默认实例已经删掉了,在当前实例上进行新建发布操作时候,会提示你: “由于未在SqlServer的此实例上安装复制组件,Microsoft SQL server 无法访问这些组件,请参阅SQL Server……”注意下面还有一个附加的提示,它的意思就是说默认实例名和当前的实例名称不一致。其实这个才是导致不能复制的主要原因。把它解决了,你就可以进行复制了。 产生的原因是因为安装完SqlServer之后,又修改了计算机的名称。 解决“SqlServer复制需要有实际的服务器名称才能连接到服务器。不支持通
阅读全文
摘要:UNIQUEIDENTIFIER做主键(Primary Key)是一件很方便的事情,在数据合并等操作中有不可替代的优势但是由于普通的GUID的分散性使得如果主键加上聚集索引(Clustered Index)会导致在插入记录时效率大大降低SQL SERVER 2005中新增了一个NEWSEQUENTIALID的函数,MSDN的解释是:在指定计算机上创建大于先前通过该函数生成的任何 GUID 的 GUID。NEWSEQUENTIALID() 不能在查询中引用。注:即只能做为数据库列的DEFAULT VALUE,不能执行类似SELECT NEWSEQUENTIALID()的语句只有当计算机没有网卡时
阅读全文
摘要:--一个字符串abc_dcdds_ds_dsggg,需要按下划线将其截取成四段 declare @col varchar(30) set @col='abc_dcdds_ds_dsggg' set @col=replace(@col,'_','.')select parsename(@col,4), parsename(@col,3), parsename(@col,2), parsename(@col,1) /*parsename ('object_name',object_piece )'object_name'
阅读全文