2012年8月25日 星期六

[綜合] NUMA 非統一記憶體存取

NUMA - 來自百度

NUMA架構

了解非統一記憶體存取 - 來自微軟MSDN

多核心計算環境—NUMA與CPUSET簡介

NUMA在SQL Server上的應用(一)

NUMA在SQL Server上的應用(二 )

設定 SQL Server 使用軟體 NUMA

2012年8月15日 星期三

[SQL Server]SQL Profilter 因空間不足而停止Trace

      突然接到AP說有User反應系統不能用了,因為這套系統DB Lock很嚴重,直覺就是又發生Lock了,不過沒想到一登入系統就跳出C磁碟空間已滿,雖然這台DB有開TRACE但是Log是在E磁碟,加上DB都在D磁碟,沒理由會爆啊,查了一下後發現在C:\Documents and Settings\[USERName]\Local Settings\Temp\下有兩個Prf*.tmp,這兩個就佔了16GB,發現兇手就是他了,但是這檔案室哪來的呢?
         查了一下發現開SQL Trace除了Log檔之外,還會再TEMP目錄下產生兩個暫存檔,解決此問題的的方法就是把TEMP目錄放到足夠的磁碟空間去。
以下為移動TEMP的程序

1. 點選[開始]->[控制台]->[系統]
2. 在[系統內容]視窗中點選[進階]->[環境變數]
3. 在[使用者變數]中找到[變數]名稱為[TEMP]後點選編輯
4. 將[變數值]改到擁有足夠空間的磁碟後按下[確定]

參考文件:http://msdn.microsoft.com/en-us/library/ms174203.aspx

2012年8月14日 星期二

[SQL SERVER] 刪除資料庫帳號出現"無法卸除所選取的使用者因為該使用者擁有物件"的錯誤訊息

        今天在做備援演練,需要將正式環境的資料庫還原到測試機給User驗證,原本想說這應該是再輕鬆不過的事情,沒想到還原一個31GB的DB可以搞一個上午@@"
        
        從一開始將檔案壓縮 -> 複製到測試機 -> 解壓縮 -> 還原DB 四個小時就不見了,之所以會搞這麼久的原因如下
一 網路品質很糟,COPY 31GB的檔案怎麼COPY怎麼失敗,問網路組也說不出原因,只好先把它給壓縮在COPY
二 機器老舊造成壓縮及解壓縮速度都很慢,當然還原速度就更慢。

        雖然如此還是把DB還原完成,完成後很開心地交給AP測試,想說終於可以去吃飯了,沒想到AP竟然說帳號無想登入,噢~對吼~因為是還原正式套的DB,所以雖然帳號名稱一樣但是SID不同也就沒輒,所以想說很快把DB中帳號砍了,再將測試套中的帳號給權限就OK了,不過再砍的時候出現了一個錯誤訊息



查了一下原來是該帳號下有物件存在所以無法刪除,必須將物件的擁有者改調就可以了,解決程序如下:
一 找出該帳號擁有的物件,在SSMS中執行以下指令
     USE 資料庫名稱
     GO
     SELECT U.name '資料庫帳號',O.name '物件名稱',O.xtype '物件類型'
     FROM dbo.sysobjects O INNER JOIN dbo.sysusers U
     ON O.uid=U.uid
     WHERE U.name='該資料庫帳號的名稱'



二  再透過 sp_changeobjectowner 變更物件的擁有者,在SSMS中執行以下指令。P.S. 在前述步驟中,如果出現多個物件名稱,則必須要每一個都要修改到喔。
      USE 資料庫名稱
      GO
      EXEC sp_changeobjectowner '資料庫帳號.物件名稱', 'dbo'



三 刪除該資料庫帳號,,在SSMS中執行以下指令
     EXEC sp_revokedbaccess '資料庫帳號'


2012年8月8日 星期三

[VBSCRIPT]使用CDO物件來寄EMail

Set objCDO = CreateObject("CDO.Message")
  strCfg = "http://schemas.microsoft.com/cdo/configuration/"
 With objCDO

 .Sender = "此處為寄件者的顯示名稱,ex:賈斯汀"

 .From = "賈斯汀@gmail.com"
  .To = "瑪麗亞@gmail.com"
 .Fields("urn:schemas:mailheader:X-Priority") = 1 ' Priority = PriorityUrgent 高優先順序
  .Fields("urn:schemas:mailheader:return-receipt-to") = "誰是寄件者@NoOneKnows.com" ' 要求讀取回條
  ' .Fields("urn:schemas:httpmail:importance") = 2 ' Importance = High
  ' .Fields("urn:schemas:httpmail:priority") = 1 ' Priority = PriorityUrgent
  .Fields.Update ' 更新欄位
  .Subject = "沒有主旨(放主題啦)"
 ' Text 文字格式信件內容
  .TextBody = "ORZ"
  ' 或 HTML 網頁格式信件內容
  .HTMLBody = "<HTML>" & _
         "<BODY>" & _
           "<table border=""1"" width=""100%"">" & _
             "<tr><td>I</td><td>am</td><td>Hammer</td><td>!</td></tr>" & _
             "<tr><td>Who</td><td>r</td><td>u</td><td>?</td></tr>" & _
           "</table>" & _
         "</BODY>" & _
       "</HTML>"
  .AddAttachment "C:\AttFile.zip" ' 附加檔案
  .CC = "Xman@yahoo.com.tw"   ' 副本
 .BCC = "SpiderMan@hotmail.com.tw" ' 密件副本
  .Configuration(strCfg & "sendusing") = 2 ' Sendusing = SendUsingPort
  .Configuration(strCfg & "smtpserver") = "msa.hinet.net" ' SMTP Server
  ' .Configuration(strCfg & "smtpserverport") = 25 ' SMTP Server Port ( 預設即為 25 )
  ' SMTP Server 如需登錄 , 則需設定 UserName / Password
  ' .Configuration(strCfg & "sendusername") = "UserName" ' Send User Name
  ' .Configuration(strCfg & "sendpassword") = "Password" ' Send Password
  .Configuration.Fields.Update ' 更新 (欄位) 組態
  ' .DSNOptions = 4 ' 回傳信件傳送狀態
  '  cdoDSNDefault = 0 , DSN commands are issued.
  '  cdoDSNDelay = 8 , Return a DSN if delivery is delayed.
  '  cdoDSNFailure = 2 , Return a DSN if delivery fails.
  '  cdoDSNNever = 1 , No DSNs are issued.
  '  cdoDSNSuccess = 4 , Return a DSN if delivery succeeds.
  '  cdoDSNSuccessFailOrDelay = 14 ,Return a DSN if delivery succeeds, fails, or is delayed.
  .Send ' 傳送
End With
Set objCDO = Nothing

[VBSCRIPT ] 取得所有磁碟可用率並判斷是否超過80%

'建立WMI Namespace物件root\CIMV2
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")

'取得Namespace的Class物件Win32_LogicalDisk
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk")

'取出屬性DriveType為3的磁碟機代號(2是軟碟,5是光碟)並計算剩餘空間使用率
For Each objItem in colItems
    IF objItem.DriveType=3 Then
       freeDiskSize = round(objItem.FreeSpace/objItem.Size*100,2)
          IF freeDiskSize > 80 THEN
             WSCRIPT.ECHO objItem.Caption & freeDiskSize & " -- 可用空間大於80%"
          ELSE
             WSCRIPT.ECHO objItem.Caption & freeDiskSize & " -- 可用空間小於80%"
          End IF
    End IF
Next