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.在事務管理通訊中選“允許入站”“允許出站”“不要求進行證”

 

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