SQL Server使用与维护杂篇

 

我们的项目在前端展示时用到了Sql Server数据库,这篇文章整理了一下日常使用和维护中用到的一些命令和方法。

 

1.重建表索引,提升访问速度

数据量比较大的表,如果进行了较多的插入修改等操作,则需要重建索引。

alter index all on st_kpi_day reorganize;   --不影响在线用户的访问,但很慢

alter index all on st_kpi_day rebuild;         --要锁表!!!

 

2.查看数据库有多少连接

exec sp_who

exec sp_who2

--sql server 2000 保留从 1 到 50 的 spid 值以便内部使用,而 51 或更大的 spid 值则代表用户会话。    

--那个status里的sleeping是连接的用户没有操作数据,但保持连接,无活动状态

 

3.清除日志及收缩数据库,释放磁盘空间

  backup log DataBaseName with NO_LOG

  backup log DataBaseName with TRUNCATE_ONLY

  DBCC SHRINKDATABASE(DataBaseName)

 

  解析:

  NO_LOG | TRUNCATE_ONLY

     无须备份复制日志即删除不活动的日志部分,并且截断日志。该选项会释放空间。因为并不保存日志备份,所以没有必要指定备份设备。NO_LOG 和 TRUNCATE_ONLY 是同义的

  NO_TRUNCATE

     允许在数据库损坏时备份日志

 

  第一步: 

  backup log database_name with no_log 

  或者 backup log database_name with truncate_only --no_log和truncate_only是在这里是同义的,随便执行哪一句都可以 

  第二步: 

  1.收缩特定数据库的所有数据和日志文件,执行 dbcc shrinkdatabase (database_name,[,target_percent])--database_name是要收缩的数据库名称;target_percent是数据库收缩后的数据库文件中所要的剩余可用空间百分比 

  2.收缩一次一个特定数据库中的数据或日志文件,执行 dbcc shrinkfile(file_id,[,target_size]) --file_id是要收缩的文件的标识 (ID) 号,若要获得文件 ID,请使用 FILE_ID 函数或在当前数据库中搜索 sysfiles;target_size是用兆字节表示的所要的文件大小(用整数表示)。如果没有指定,dbcc shrinkfile 将文件大小减少到默认文件大小 

 

  两个dbcc都可以带上参数notruncate或truncateonly,具体意思看帮助。

 

4.恢复可疑数据库

USE MASTER

GO

SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE

GO

ALTER DATABASE cqcrm20 SET EMERGENCY

GO

sp_dboption 'cqcrm20', 'single user', 'true'

GO

DBCC CHECKDB('cqcrm20','REPAIR_ALLOW_DATA_LOSS')

GO

ALTER DATABASE cqcrm20 SET ONLINE

GO

sp_configure 'allow updates', 0 reconfigure with override

GO

sp_dboption 'cqcrm20', 'single user', 'false'

GO

 

5、链接服务器

exec sp_addlinkedserver 'link123','','SQLOLEDB','10.191.123.123,14123' 

exec sp_addlinkedsrvlogin 'link123','false',null,'账号','密码' 

Select count(*) From link123.cqcrm20.dbo.st_kpi_day where op_time='2009-09-02'

上述三行语句分别是连接服务器的创建、登录和使用示例。

 

6、简单统计SQLSERVER用户数据表大小(包括记录总数和空间占用情况)

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

 

7、使用游标

declare @roleid int;

declare @menuid int;

declare mycursor cursor for select role_id,resource_id from bqy_roleright where role_id in (52092,52093,52094,52095,52096,52097,52098);

OPEN mycursor

FETCH NEXT FROM mycursor INTO @roleid,@menuid

WHILE @@fetch_status = 0

BEGIN

IF @@fetch_status = -2

CONTINUE

begin transaction

...

commit transaction

FETCH NEXT FROM mycursor INTO @roleid,@menuid

END

DEALLOCATE mycursor

 

 

8、分布式事务的配置(MSDTC设置)

管理工具―组件服务―计算机―我的电脑(右键)―MSDTC―安全配置

在安全配置窗口中做如下设置:

a.选中“网络DTC访问”

b.在客户端管理中选中“允许远程客户端”“允许远程管理”

c.在事务管理通讯中选“允许入站”“允许出站”“不要求进行证”

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章