01 2012 档案
摘要:SQL2008,SQL2005存储过程解密第一步操作步骤:'程序'->'Sql Server2005'-> '配置工具'-> 'Sql Server 外围应用配置器'-> '功能的外围应用配置器'-> 'DataBase Engine'-> 'DAC' -> '启用远程DAC'第二步:启动SQL Server Browser 服务第三部使用DAC模式登陆(关键就在这个地方)1 登陆SQL Server Management S
阅读全文
摘要:--主体USE master;--DROP MASTER KEY;--统一主密钥CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'JiuBang_ZB_2008@3g.cn';GO--统一的登录密码CREATE LOGIN MIR_M_LOGIN WITH PASSWORD = 'JiuBang_JB_2008@3g.cn';GO--统一的登录用户名CREATE USER MIR_M_USER FOR LOGIN MIR_M_LOGIN;GO---------------------------USE master;CREA
阅读全文
摘要:--主体USE master ;GO --创建主密钥 DROP ENDPOINT Endpoint_do DROP CERTIFICATE MASTER_Cert DROP MASTER KEYCREATE MASTER KEY ENCRYPTION BY PASSWORD = '123456' ;GO --创建证书 CREATE CERTIFICATE MASTER_Cert WITH SUBJECT = 'MASTER_Certificate', START_DATE = '01/01/2011' ; GO --创建端点 CREATE END
阅读全文
摘要:众所周知SqlServerExpress2005 属于简装版,安装程序五六十兆,在客户的服务器上部署时很畅快。但该数据库无Agent这样对我们进行定时备份保护数据安全带来了麻烦。为了定时备Express2005数据库,可以采取以下方案: 1.编写WindowsService,在服务内调用备份数据库方法。 2.使用Windows自带的计划任务。(推荐使用)。 下面就由我来介绍一下如何用计划任务实现数据库备份的,操作步骤如下: 1. 首先建立一个windows任务计划,打开任务计划向导,选择指定的的exe文件,该文件名为SQLCMD.EXE,位于x:\Program Files\Micro...
阅读全文
摘要:SQL Server中,经常会用到Identity标识列,这种自增长的字段操作起来的确是比较方便。但它有时还会带来一些麻烦。示例一:当表中被删除了某些数据的时候,自增长列的编号就不再是一个连线的数列。这种时候我们可以用以下方案来解决。SET IDENTITY_INSERT [TABLE] [ON|OFF]允许将显式值插入表的标识列中,当设置为ON时,这时可能在INSERT操作时手工指定插入到标识列中的编号,同时必须在操作完成后,将IDENTITY_INSERT还原成OFF,否则下次插入的时候必须指定编号,那不然就无法完成INSERT操作。示例二:当表中的记录被全部删除,但此时标识列的值越来越大
阅读全文
摘要:isnumeric,isdate,patindex,newid,collate,sp_executesql,checksum遂记下,以备日后查询。不敢独享,与君共之。有用且看,无用略过。1> isnumeric( expression )-- 返回值 1 | 0,判断是否是数字类型。数值类型包括(int、bigint、smallint、tinyint、numeric、money、smallmoney、float、decimal、real)示例:select * from tablenamewhere isnumeric(columnname)<> 1;go以上示例使用 isn
阅读全文
摘要:master库对于SQLServer来说,是很重要的系统数据库,保存着所有Sqlserver的用户信息、数据库信息等,当数据库崩溃时,master数据库的恢复成功与否起着重要的作用。这就跟Oracle的System表空间一样,非常的重要。备份数据前期准备:(1)在备用机准备好和生产机器一样的sql2005数据库环境(注意数据库版本要一致) (2)准备好备份恢复所需的数据,将生产机bak文件全部copy到备用机d:\dbbak文件夹下恢复步骤:1,停止MSSQLSERVER服务;2,cmd下,输入以下代码,进入单用户模式sc start MSSQLServer -m –f -c3,打开Manag
阅读全文
摘要:MSSQL 分页方式说明:目前我所知的有以下几种方式临时表表变量in, not inSET ROWCOUNTCTEid >, id <优缺点分析: 性能最低, 可操作性差第一种方式和第二种方实际上是比较类似的.优点: 排序方式比较随意缺点:第一种方式 有大量的 IO 开销.第二种方式则会开销内存, 但当表数据量比较大的时候性能会直线下降.所以这两种方式都不适合做大数据量的分页.第三种方式: 性能次之, 可操作较差优点: 排序方式比较随意缺点: 资源开销比较大, 数据库会承担不小的运算压力, 所以也不适合做大表分页.第四种方式: 性能平均, 可操作性尚可优点: 排序相对比较随意, 各
阅读全文
摘要:有关分页 SQL 的资料很多,有的使用存储过程,有的使用游标。本人不喜欢使用游标,我觉得它耗资、效率低;使用存储过程是个不错的选择,因为存储过程是经过预编译的,执行效率高,也更灵活。先看看单条 SQL 语句的分页 SQL 吧。方法1:适用于 SQL Server 2000/2005SELECTTOP页大小*FROMtable1WHEREidNOTIN(SELECTTOP页大小*(页数-1) idFROMtable1ORDERBYid)ORDERBYid方法2:适用于 SQL Server 2000/2005SELECTTOP页大小*FROMtable1WHEREid>(SELECTISN
阅读全文
摘要:SELECTOBJECT_NAME(i.object_id)ASTableName,data_pages*8ASDataSize--这里返回的是数据页个数,1页是8K,所以乘以8FROMsys.indexesasiJOINsys.partitionsaspONp.object_id=i.object_idandp.index_id=i.index_idJOINsys.allocation_unitsasaONa.container_id=p.partition_idwherei.object_id=OBJECT_ID('tablename')
阅读全文
摘要:主数据库代码:CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->USE[master]--创建数据库主密钥。IFEXISTS(SELECT*FROMsys.databasesWHEREname='master'andis_master_key_encrypted_by_server=1)--dropmasterkey;OPENMASTERKEYDECRYPTIONBYPASSWORD='123456789'
阅读全文
摘要:准备工作createtabledbo.ta(idvarchar(10),cchar(10))goinsertdbo.taselectROW_NUMBER()over(orderbyc1.name)id,'x'fromsys.columnsc1crossjoinsys.columnsc2gocreateindexindex1ondbo.ta(id)godbccfreeproccachego接下来要用select *from ta where id='1'的方式执行两次,看看是否重用了存储过程dbccfreeproccachegoDECLARE@valuevarch
阅读全文
摘要:Instant Initialization是NTFS文件系统的特性,可以让文件快速的初始化,显著提高SQLSERVER的数据文件扩张和RESTORE的速度。SQL Server内部无法控制Instant Initialization特性,如果想使用,需要授权SQL Server启动账户Perform Volume Maintenance Tasks的权限(本地管理员默认拥有此权限)。如果SQL Server服务处于运行状态,则需要重启后才能生效。我们可以通过trace flag 3004, 3605查看SQLSERVER是否使用了这个特性。代码如下:dbcctraceon(3004,3605
阅读全文
摘要:An extended stored procedure (xp) is a dynamic link library that runs directly in the address space of SQL Server and is programmed using the SQL Server Open Data Services API. You can run extended stored procedures from the Query Analyzer, for example, just as you would normal stored procedures. Ex
阅读全文
摘要:SCOPE_IDENTITY、IDENT_CURRENT和@@IDENTITY是相似的函数,因为它们都返回插入到标识列中的值。IDENT_CURRENT不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT返回为任何会话和作用域中的特定表所生成的值。有关详细信息,请参阅IDENT_CURRENT(Transact-SQL)。SCOPE_IDENTITY和@@IDENTITY返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY只返回插入到当前作用域中的值;@@IDENTITY不受限于特定的作用域。例如,有两个表T1和T2,并且在T1上定义了INSER
阅读全文
摘要:SQLServer2000提供了一个读取数据页结构的命令DBCC Page。该命令为非文档化的命令,具体如下:DBCC Page ({dbid|dbname},filenum,pagenum[,printopt])具体参数描述如下:dbid 包含页面的数据库IDdbname 包含页面的数据库的名称filenum 包含页面的文件编号pagenum 文件内的页面printopt 可选的输出选项;选用其中一个值: 0:默认值,输出缓冲区的标题和页面标题 1:输出缓冲区的标题、页面标题(分别输出每一行),以及行偏移量表 2:输出缓冲区的标...
阅读全文
摘要:sys.fn_dblog返回当前数据库日志的活动部分的内容usedb1goifexists(select1fromsys.tableswherename='t')droptabletgocreatetablet(colint)godbcctraceon(3505,-1)---disable automatic checkpoint behaviorhttp://support.microsoft.com/kb/815436/en-usgocheckpointgoselect[CurrentLSN],[PreviousLSN],[PreviousPageLSN],Partitio
阅读全文
摘要:DROPTABLET_TESTCREATETABLET_TEST(IDINTIDENTITYPRIMARYKEY,STATUSBIT)INSERTINTOT_TESTSELECT0GO100000INSERTINTOT_TESTSELECT1CREATEINDEXIXF_T_TEST_STATUSONT_TEST(STATUS)WHERESTATUS=1UPDATESTATISTICST_TESTwithfullscanDBCCFREEPROCCACHE--正常查询SELECT*FROMT_TESTWHERESTATUS=1--参数化查询SP_EXECUTESQLN'SELECT*FR
阅读全文
摘要:1 找出效率低的语句SELECTTOP10qs.total_worker_time,qs.total_logical_reads,qs.last_logical_writes,qs.plan_handle,qs.execution_count,(SELECTSUBSTRING(text,qs.statement_start_offset/2+1,(CASEWHENqs.statement_end_offset=-1THENLEN(CONVERT(nvarchar(max),text))*2ELSEqs.statement_end_offsetEND-qs.statement_start_off
阅读全文
摘要:SELECT CASE df.database_id WHEN DB_ID('distribution') THEN 'distDB' WHEN DB_ID('tempdb') THEN 'tempdb' --add other needed database ELSE 'otherDBs' END AS dbName , CASE df.type WHEN 0 THEN 'datafile' WHEN 1 THEN 'logfile' ELSE 'otherfile'
阅读全文
摘要:CREATETRIGGER[ddl_trig_database]ONALLSERVERFORDROP_DATABASEASDECLARE@dbVARCHAR(209)SET@db=(SELECT'DatabaseDropped:'+EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','VARCHAR(229)'))RAISERROR(@db,16,1)WITHLOG
阅读全文
摘要:CREATETABLETEST(c1INTIDENTITY,c2CHAR(4000)DEFAULT'a');GOINSERTINTOTESTDEFAULTVALUES;INSERTINTOTESTDEFAULTVALUES;INSERTINTOTESTDEFAULTVALUES;GOcreateindexindex1ontest(c1)SELECTsys.fn_PhysLocFormatter(%%physloc%%)AS[PhysicalRID],*FROMTEST;GOSELECTsys.fn_PhysLocFormatter(%%physloc%%)AS[Physical
阅读全文
摘要:一、Tempdb简介 tempdb是SQLServer的系统数据库一直都是SQLServer的重要组成部分,用来存储临时对象。可以简单理解tempdb是SQLServer的速写板。应用程序与数据库都可以使用tempdb作为临时的数据存储区。一个实例的所有用户都共享一个Tempdb。很明显,这样的设计不是很好。当多个应用程序的数据库部署在同一台服务器上的时候,应用程序共享tempdb,如果开发人员不注意对Tempdb的使用就会造成这些数据库相互影响从而影响应用程序。二 、Tempdb的特性1、tempdb中的任何数据在系统重新启动之后都不会持久存在。因为实际上每次SQLServer启动的时候..
阅读全文
摘要:'SQLServer:Buffer Manager\Page writes/sec' :Number of physical database page writes issued per second我们可以通过这个性能计数器(下文中简称PW)来观察SQLSERVER何时会将脏页(这里不包含日志)写回磁盘。文中讨论的脏页均为数据页,不包含脏日志(虽然SQLSERVER认为日志也是脏的…)Checkpoint: Checkpoint发生是,SQLSERVER会将脏页(包含了未提交事务脏页和已提交事务的脏页)写回磁盘。 Checkpoint的作用是缩短数据库恢复(recovery
阅读全文
摘要:这篇文章主要和大家讨论几乎所有人都熟悉,但不少人又陌生的一条select语句。不知道大家有没有想过到底是什么东西让SQLServer能理解我们写的select。这中间到底发生了什么,是不是有过冲动想去了解。至少我曾经冲动想去了解,但当时主要在研究CLR以及webform相关知识。后来主要精力放在研究SQLserver内部机制,今天就给大家介绍下这条语句。 一、范例数据库脚本 create database Test go alter database Test set recovery simple go use Test go create table Test ( ID int...
阅读全文
摘要:本来是打算先写SQLServer历史的,不过感觉写那部分内容比较难还需要多查些资料。于是调整了下顺序写下简单的Insert语句。数据库结构还是采用上一篇的结构。具体查看上一篇文章擦亮自己的眼睛去看SQLServer之简单Select。今天讨论的语句也比较简单,Insert语句。 一、Insert脚本 insert into Test([Name]) values('xiaojun') 没什么好说的,因为想写这样的语句太简单。 二、 语句分析 这条语句到底发生了什么呢?假设读者已经知道了SQLServer整体架构或者已经阅读过这个系列第一篇文章。当这条语句被可靠的传递到关...
阅读全文
摘要:这几天看了下范伟主演的<<跟踪孔令学>>,再一次欣赏了范伟精湛的演技特别是那种憨厚的表情。看完后,让我想起了SQLServer中的跟踪与反跟踪技术。觉得这部分内容值得写一篇文章和大家分享分享。了解SQLServer跟踪技术能让我们比较简单的在运行时实时的获取SQLServer的内部运作。这种获取方式比我们去使用跟踪标志、动态管理视图等来的方便简单的多。说到跟踪,很多人会想起SQL Profiler。SQL Profiler仅仅是一个GUI,SQL Trace才是本质。SQL Trace是构建服务器跟踪和Profiler的基础。如果你了解到这点,那你就会毫不犹豫的在生产环
阅读全文
摘要:在谈谈SQLServer的锁机制之前,来思考以下这个场景:当你在酷暑的时候骑着自己的小车往目的地行走时,路上连续遇到几个时间很长的红灯,是不是很郁闷?有时候你可能实在受不了闯了个红灯,其实在大部分情况下问题不大,如果通行的汽车很多那就不好说了。因为不遵守规则的人太多,都为了达到目的去走捷径,不愿意等待。这样才有了交警。交警的作用就是维护这些红绿灯的规则。这些红绿灯就像锁一样,锁住或延长你去目的地的时间。但是如果没有交警大家又不自由遵守红绿灯规则会导致什么呢?大家想想都知道。 这个系列的一篇文章中提供的事务管理器中有个锁管理器就是这里的交警。它维护着SQLServer中的锁。前段提到的大部分情.
阅读全文
摘要:跟踪标志说明260打印有关扩展存储过程动态链接库 (DLL) 的版本控制信息。有关__GetXpVersion()的详细信息,请参阅创建扩展存储过程。作用域:全局或会话1204返回参与死锁的锁的资源和类型,以及受影响的当前命令。作用域:仅全局1211基于内存不足或基于锁数禁用锁升级。SQL Server 数据库引擎不会将行锁或页锁升级到表锁。使用此跟踪标志可生成过多的锁数目。这样会降低数据库引擎的性能,或因为内存不足而导致 1204 错误(无法分配锁资源)。有关详细信息,请参阅锁升级(数据库引擎)。如果同时设置了跟踪标志 1211 和 1224,则 1211 优先于 1224。但是,由于在所有
阅读全文
摘要:例子:SET TRANSACTION ISOLATION LEVEL READ COMMITTED;BEGIN TRANSACTION; SELECT * FROM User2行版本控制隔离:优势使用行版本控制的隔离级别具有以下优点:· 读取操作检索一致的数据库快照。· SELECT 语句在读取操作过程中不锁定数据(读取器不阻塞编写器,编写器也不阻塞读取器)。· SELECT 语句可以在其他事务更新行时访问最后提交的行值,而不阻塞应用程序。· 死锁的数量减少。· 事务所需的锁的数量减少,这减少了管理锁所需的系统开销。· 锁升级的次数减
阅读全文
摘要:--认清SQL_Server_2005的基于行版本控制的两种隔离级别--By:zc_0101 Date:2010-03-31--快照隔离级别(snapshot)和已提交读快照隔离级别(readcommittedsnapshot)--特点:在这两种隔离级别下,读取数据时不再请求共享锁,而且永远不会与修改进程的数据发生冲突,如果请求的--行被锁定(例如正在被更新),SQL_Server会从行版本存储区返回最早的关于该行的记录(SQL_server会在--更新时将之前的行数据在tempdb库中形成一个链接列表,当然目前我没有搞清楚之前的数据到底存到了那里)--这两个快照提供了乐观的并发模型--说明:
阅读全文
摘要:对象①锁:每条SQL语句②隔离:事务锁①并发问题丢失更新未确认的读取(脏读)不一致的分析(非重复读):多次读取相同的数据(行)不一致(其他用户更改update)幻像读:多次读取有不存在和新增的数据(其他用户插入insert或删除delete)隔离级别隔离级别脏读不可重复读取幻像说明未提交读(readuncommitted)是是是如果其他事务更新,不管是否提交,立即执行提交读(readcommitted默认)否是是读取提交过的数据。如果其他事务更新没提交,则等待可重复读(repeatableread)否否是查询期间,不允许其他事务update可串行读(serializable)否否否查询期间,不
阅读全文
摘要:存储过程:SET Transaction Isolation Level Read语法的四种情况这几天一直在弄存储过程,现在在这里跟大伙共享下资料:SET Transaction Isolation Level Read UNCOMMITTED使用这句东东呢可以分为四种情况,现在就在这里逐一介绍:第一种情况:READ COMMITTED这句的作用是:指定在读取数据时控制共享锁以避免脏读,但数据可在事务结束前更改,从而产生不可重复读取或幻像数据。该选项是 SQL Server 的默认值。第二种情况:READ UNCOMMITTED 这句的作用是:执行脏读或0级隔离锁定,这表示不发出共享...
阅读全文
摘要:数据库是要被广大客户所共享访问的,那么在数据库操作过程中很可能出现以下几种不确定情况。更新丢失(Lost update) 两个事务都同时更新一行数据,但是第二个事务却中途失败退出,导致对数据的两个修改都失效了。这是因为系统没有执行任何的锁操作,因此并发事务并没有被隔离开来。脏读(Dirty Reads) 一个事务开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够及时提交。这是相当危险的,因为很可能所有的操作都被回滚。不可重复读(Non-repeatable Reads) 一个事务对同一行数据重复读取两次,但是却得到了不同的结果。它包括以下情况: (1) 事务T1读取某一数据...
阅读全文