收缩数据库的SQL脚本比较好用
作者:airzen 日期:2010-03-29
一个72G的大库,针对许多大容量的表进行了清除,手动truncate talbe 表 之后,用所有任务->收缩数据库,会发现根本没有收缩多少,还有70多个G,
直接运行 dbcc shrinkdatabase(cmsdb) 发现还有20多个G,其它的表只有个位数记录,不应该有这么大呀.
下面在网上搜索了一下,以下三条sql脚本一起执行,哇,收缩的相当彻底,哈哈.
SQL2000 列出当前库中的所有用户表
作者:airzen 日期:2009-09-02
–列出当前库中的所有用户表
select 表名=name
from sysobjects
where xtype='U' and status>=0
–列出当前库中的所有系统表
select 表名=name
from sysobjects
where xtype='S'
–列出当前库中的所有视图
select 表名=name
from sysobjects
where xtype='V'
–列出当前库中的所有用户视图
select 表名=name
from sysobjects
where xtype='V' and status>=0
简单统计SQLSERVER用户数据表大小(包括记录总数和空间占用情况)
作者:airzen 日期:2009-06-02
在SQLSERVER,简单的组合sp_spaceused和sp_MSforeachtable这两个存储过程,可以方便的统计出用户数据表的大小,包括记录总数和空间占用情况,非常实用,在SqlServer2K和SqlServer2005中都测试通过。
/*
1. exec sp_spaceused '表名' (SQL统计数据,大量事务操作后可能不准)
2. exec sp_spaceused '表名', true (更新表的空间大小,准确的表空大小,但可能会花些统计时间)
3. exec sp_spaceused (数据库大小查询)
4. exec sp_MSforeachtable "exec sp_spaceused '?'" (所有用户表空间表小,SQL统计数据,,大量事务操作后可能不准)
5. exec sp_MSforeachtable "exec sp_spaceused '?',true" (所有用户表空间表小,大数据库慎用)
*/

create table #t(name varchar(255), rows bigint, reserved varchar(20), data varchar(20), index_size varchar(20), unused varchar(20))
exec sp_MSforeachtable "insert into #t exec sp_spaceused '?'"
select * from #t
drop table #t
另外还有sp_MSforeachdb可以遍历所有数据库,使用方法详见SQL帮助。
字段名称有:
NAME,ROWS RESERED DATA,INDEX_SIZE UNUSED
彻底解决 sql 2005 不能通过ip地址远程访问
作者:airzen 日期:2009-05-05
翻译:动态SQL与静态SQL-安全(第二部分)
作者:bigholy 日期:2009-04-22
原文地址:http://www.sqlservercentral.com/articles/Performance+Tuning/dynamicvsstatic2/623/
在前一篇文章:动态SQL与静态SQL的第一部分中,我简要地介绍了有关使用动态SQL涉及到的安全问题。在这篇文章我打算介绍一些方法,既使有静态SQL的解决方法,但是还存在诱使你使用动态SQL的情况。
许多人之所以选择使用动态SQL,其原因在于开发和部署不需要太多的考虑,代码少。换言之,相对于静态SQL来说,动态SQL不需要太多的维护。本文将就上述原因一一验证其正确性。
和先前介绍的文章一样,首先举一些动态SQL的代码片断,然后介绍使用静态SQL完成同样的功能的方法,以及静态SQL实在不能使用时,动态SQL才迫以使用的情况。
注意:示例采用Pubs数据库
案例1:搜索条件
第一种情况就是我见到过最多的、也是说明动态SQL为什么说它需要较少的考虑和实现代码的地方。这里使用Pubs数据库的authors表。我想实现的是根据传入一个参数变量来搜索满足条件的某一个author的信息。下面在查询分析器中要执行的代码:
动态SQL与静态SQL-安全(第一部分)
作者:bigholy 日期:2009-04-19
翻译:原文地址:http://www.sqlservercentral.com/articles/Security/dynamicsqlversusstaticsqlp1/617/
概述
熟悉MS SQL Server的每一个人都应该意识到避免使用动态SQL的代价是较佳的。由于与静态SQL相比而言,动态SQL赋予了更多的权限。正因为你使用了动态SQL,所以会执行一些意想不到的代码。动态SQL通常需要较少的代码,与静态SQL相比,似乎不需要太多的维护。
本文将对SQL Server是如何处理动态SQL和静态SQL的原理作一介绍,在本部分,主要讨论一些安全问题,在后续部分将讨论使用动态SQL和静态SQL的适用环境。
在本系列,我计划要对以上不使用或使用动态SQL的原因通过一些范例来说明来避免。许多静态SQL需要的代码要比动态SQL多,这无疑给我们一种使用动态SQL的诱惑,不过请暂时忍耐一下,静态SQL的使用对于日后所产生的问题降低许多。
Tags: sql
查询执行
作者:airzen 日期:2008-11-12
真正理解查询计划和发现与计划有关的问题,需要对构成这些计划的查询运算符有深入的了解.总而言之,有许多运算符值得探讨.
扫描与查找
扫描与查找操作均是SQL Server从表或索引中读取数据采用的迭代器,这些也是SQL Server支持的最基本的运算.几乎在每一个查询计划中都可以找到,因此理解它们的不同是很重要的,扫描是在整张表上进行处理,而索引是在整个页级上进行处理,而查找则返回特定谓词上一个或多个范围内的数据行.
不使用临时表、表变量的MS SQL Server存储过程分页:
作者:bigholy 日期:2008-06-12
(
@TableNames VARCHAR(200), --表名,可以是多个表,但不能用别名
@PrimaryKey VARCHAR(100), --主键,可以为空,但@Order为空时该值不能为空
@Fields VARCHAR(200) = '*', --要取出的字段,可以是多个表的字段,可以为空,为空表示select *






