我們的項目在前端展示時用到了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.在事務管理通訊中選“允許入站”“允許出站”“不要求進行證”