程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> sql server的一些積累

sql server的一些積累

編輯:關於SqlServer
請問如何查詢當前數據庫連接數?
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 的用法. ==復制訂閱的問題再重新啟動代理程序
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved