請問如何查詢當前數據庫連接數?
select * from master..sysprocesses 查詢sqlserver允許最大的同時連接數目
SELECT @@MAX_CONNECTIONS
32767
也可以在
sqlserver服務器屬性裡面自己設置最大連接數目,服務器會在達到這個連接數後自動清理大概一半的現有連接。然後連接又會自動增長到最大連接。 2007年8月27日
觀察sqlserver的版本
select @@version
用select serverproperty('productlevel')命令看 2007年6月21日
sqlserver 的數據庫it_products 有一個表數據被刪除很多行,需要把備份的數據庫(it_products.bak)裡面的這個表給還原回來。
為保險起見,把備份的數據庫it_products.bak拷貝到另外一台機器,在另外一台機器裡面建立了it_products 數據庫並且選擇恢復問題:如果建立一個數據庫test,想用it_products.bak這個備份文件恢復到test上,那麼需要選擇強制還原,
但是在“將現有數據庫上強制還原”項, “邏輯文件名”只能保留原來的名字(it_Products_Data,it_Products_Log),“移至物理文件名”可以改成本機數據庫的存放路徑文件(E:\sqldata\MSSQL\DATA\test1_Data.MDF ,E:\sqldata\MSSQL\DATA\test1_Data.LOG )。
2007年6月15日
sqlserver創建發布的時候sqlagent不能用system用戶啟動,需要手工建立一個users組的用戶。
並保證此用戶有權限訪問sqlserver的數據庫。 2007年5月29日安全性->登陸->新建立一個用戶
用戶屬性,數據庫訪問選項卡,選定一個可以被訪問的數據庫,在數據庫角色中允許 public,db_owner
不能選後面的db_denydatareader,db_denydatawrite
否則就不能對數據庫操作。 2007年5月8日
關於復制的問題,在發布的服務器155上對幾個表增加了幾個字段和視圖,導致不能同步到訂閱服務器
解決:在復制監視器->發布服務器-> 選擇一個發布,選屬性,篩選列,選上改動過的表增加的字段,然後啟動快照代理,然後啟動分發代理。 2007年5月重新啟動數據庫,結束ASPnet_wp.exe進程 1.出現這種情況,一般是數據庫服務器的性能瓶頸導致,可以通過升級內存,調高數據庫內存使用限制,等方法,如還不行,可以考慮升級數據庫服務器
2.我看你最好還是用sql profiler查看一下堵塞原因.
3.sp_configure locks 顯示
sp_configure locks,20000 改為20000,改後要重啟服務。
4.make sure you don't have things like dbcc running.
don't use serializable transaction isolation
make sure you don't have lock hints in the application code. (select xxx from t (updlock) can also lead to blocking)
most most most important, find out what table is the blocking resource. you should be able to see the blocker. then look at the blocker code.
by the way, how do you know it is blocking? 5.retrIEve 也要 ,也可把lock設為RU,降低鎖級別,可在開頭連接時鍵入"ru"參數,解決大部分的問題
6.試試在查詢中用NO LOCK參數看看:SELECT * FROM TABLE NO LOCK
7.作了兩件工作解決問題,不知道具體有何引起 1、安裝了SQLServer2000 Service Pack2 2、在所有select之後增加了commit語句
8. 一個是數據庫機制的問題,明白了怎麼回事就知道了
不考慮UPDATE,INSERT,在SELECT之後也有這個堵塞(占表的的問題,不是死鎖) 在RETRIEVE之後加個COMMIT;或者ROLLBACK;就可以解決,你們可以試試,這也是隔離級別的問題,在SQLSERVER或PB中都可以設置 程序是用ASP編寫的. 提示錯誤:sp_cursoropen;1
sp_provider_types_rowset;1 -- exec P_lockInfo 0,1
Create Proc P_lockInfo
@kill_lock_spid bit =1 , ---是否kill死鎖的進程 1 kill 0 顯示
@show_spid_if_nolock bit=1 --如果沒有死鎖的進程,是否顯示正常進程信息,1 顯示,0 不顯示
as
set nocount on
declare @count int,@s nvarchar(1000),@i int
select id=identity(int,1,1),標志,
進程ID=spid,線程ID=kpid,塊進程ID=blocked,數據庫ID=dbid,
數據庫名=db_name(dbid),用戶ID=uid,用戶名=loginame,累計CPU時間=cpu,
登陸時間=login_time,打開事務數=open_tran, 進程狀態=status,
工作站名=hostname,應用程序名=program_name,工作站進程ID=hostprocess,
域名=nt_domain,網卡地址=net_address
into #t from(
select 標志='死鎖的進程',
spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=a.spid,s2=0
from master..sysprocesses a join (
select blocked from master..sysprocesses group by blocked
)b on a.spid=b.blocked where a.blocked=0
union all
select '|_犧牲品_>',
spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=blocked,s2=1
from master..sysprocesses a where blocked<>0
)a order by s1,s2
select @count=@@rowcount,@i=1
if @count=0 and @show_spid_if_nolock=1
begin
insert #t
select 標志='正常的進程',
spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,
open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address
from master..sysprocesses
set @count=@@rowcount
end
if @count>0
begin
create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(255))
if @kill_lock_spid=1
begin
declare @spid varchar(10),@標志 varchar(10)
while @i<=@count
begin
select @spid=進程ID,@標志=標志 from #t where id=@i
insert #t1 exec('dbcc inputbuffer('+@spid+')')
if @@rowcount=0 insert #t1(a) values(null)
if @標志='死鎖的進程' exec('kill '+@spid)
set @i=@i+1
end
end
else
while @i<=@count
begin
select @s='dbcc inputbuffer('+cast(進程ID as varchar)+')' from #t where id=@i
insert #t1 exec(@s)
if @@rowcount=0 insert #t1(a) values(null)
set @i=@i+1
end
select a.*,進程的SQL語句=b.EventInfo
from #t a join #t1 b on a.id=b.id
order by 進程ID
end
set nocount off
GO
Top 2 樓aw511(點點星燈)回復於 2005-11-07 08:57:40 得分 0 1. 使用sp_lock進行察看,如果 輸出信息 locktype 中包含 -blk 字符,說明當前表 table_id 的 page 上的鎖對其他進程造成了阻塞
2. 通過察看 master..syslocks 系統表 id dbid page type spid class fid context row loid 512004855 6 0 3 13 Non Cursor Lock 0 0 0 26
512004855 6 0 4 12 Non Cursor Lock 0 0 0 24
512004855 6 0 3 10 Non Cursor Lock 0 0 0 20
512004855 6 793 261 13 Non Cursor Lock 0 8 0 26 從spid可知道當前阻塞及被阻塞的進程,並且從type字段可以知道鎖的類型,見下表:
1 0x1 排它表鎖
2 0x2 共享表鎖
3 0x3 排它意圖鎖
4 0x4 共享意圖鎖
5 0x5 排它頁鎖
6 0x6 共享頁鎖
7 0x7 更新頁鎖
8 0x8 排它行鎖
9 0x9 共享行鎖
10 0xA 更新行鎖
11 0xB 共享下一鍵鎖
256 0x100 鎖在阻塞另一個進程
512 0x200 請求鎖 所以你可以通過下面的查詢獲得阻塞表信息
select b.name as dbname,a.id as table_id,page,spid from syslocks a,sysdatabases b
where b.dbid = a.dbid
and a.type & 256 = 256 看了好多對日志文件處理的貼子,都是很用dump,清空日志,再用backup log。截斷日志,
可看sql2000的說明,說dump transaction只是為了和以前兼容,用backup l來代替了 dump transaction 庫名 with no_log 是Sybase 的用法,SQL Server 的核心原來就是Sybase的.
因此 SQL Server 也能用 dump transaction .
back log 庫名 with no_log 是 SQL Server 的用法. ==復制訂閱的問題再重新啟動代理程序