2009年4月19日 星期日

DTS的工作順序也許不是你想的那樣

之前設計DTS時,通常是每各轉換資料工作,有自己獨立的來源與目的地,然後一個轉換資料工作執行成功後,才作下一各轉換資料工作,中間用成功串連起來,結果昨天偷懶一下,試著兩個工作共用同一個來源與目的地,如下圖


原本以為執行的順序是[4002SQL1(1)]跟[4002SQL2(3)]都執行成功了,才執行[SQL2TXT3(2)]的,結果不是,如下圖

竟然[SQL2TXT3(2)]比[4002SQL(3)]早執行,要是[SQL2TXT3(2)]的工作,其中有資料是要靠[4002SQL2(3)]來傳輸的,那不就會有問題了嗎?
早知道就不要偷懶,乖乖一個一個的分開設比較安全!

後來發現,應該是我成功的工作流程屬性沒特別設定優先順序造成的,我從沒特別去設它...@@...如下圖以至於[4002SQL1(1)]完就接著作[SQL2TXT3(2)],所以那我再加入另一各步驟進來
執行後,終於跟我想的一樣了!!

2009年4月18日 星期六

列出FTP虛擬目錄

根據IIS的說明主題裡有提到
下列命令是顯示Test Downloads FTP 站台之根目錄中的虛擬目錄
iisftpdr /query "Test Downloads"
Alias Physical Root
=====================
/Scripts  C:\Libraries\Scripts

2009年4月1日 星期三

如何在 SQL Server 的執行個體之間傳送登入和密碼

不管是要移動或是複製資料庫到不同版本的Server上,登入與密碼的傳送就很重要,可參考KB246133,建立 sp_help_revlogin 預存程序後,執行下列陳述式,用以產生原始 SID 和密碼的登入指令
EXEC master..sp_help_revlogin

注意kb246133裡有寫適用於下列案例:

  • 將登入和密碼從 SQL Server 7.0 傳送至 SQL Server 7.0。
  • 將登入和密碼從 SQL Server 7.0 傳送至 SQL Server 2000。
  • 將登入和密碼從 SQL Server 7.0 傳送至 SQL Server 2005。
  • 在執行 SQL Server 2000 的伺服器之間傳送登入和密碼。
  • 將登入和密碼從 SQL Server 2000 傳送至 SQL Server 2005。
若你誤以為在SQL Server 2005 間傳送登入和密碼也是行的,那你會犯跟我一樣的錯誤,在建立sp_help_revlogin 預存程序後,執行EXEC master..sp_help_revlogin可是會收到下列錯誤的,因為2005已經沒有sysxlogins這個表囉
訊息 208,層級 16,狀態 1,程序 sp_help_revlogin,行 12
無效的物件名稱 'master..sysxlogins'。


若想要在SQL Server 2005 間傳送登入和密碼,需參考KB918992的喔,不要搞混了,其實KB246133也有提到,只是我都沒注意到...

2009年3月28日 星期六

無法取消列印

送出列印後,發現印表機沒反應,打開印表機佇列,發現有文件卡住,想取消又刪除不掉,一直停在"刪除 - 列印"狀態,通常只能重開機囉

後來發現其實有不用重開機的方法,將以下的script存del_print_Doc.bat,再執行即可,我測試過真的有效喔

@echo off
::停止印表機服務
echo 正在停止印表機服務...
Net Stop spooler
echo.
::清除所有列印的佇列
echo 正在清除所有列印佇列...
echo y del %systemroot%\system32\spool\printers\*.*
::重新啟動印表機服務
echo.
echo 正在啟動印表機服務...
Net Start Spooler
echo.
echo 您再開啟印表機將看到佇列資料已經被清空喔
echo 請 按 任 意 鍵 繼 續 ...
pause >nul

2009年3月4日 星期三

550 5.7.1 Unable to relay

使用JAVAMAIL寄信,結果出現下列錯誤
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
class javax.mail.SendFailedException: 550 5.7.1 Unable to relay

意思就是你的mail server不允許你經由它寄送外部郵件,寄送內部郵件應該沒問題啦,反正應該是驗證的問題囉,不是你程式裡沒有設定要驗證就是mail server不讓你驗證,所以請檢查發送mail的程式裡有沒有啟用驗證囉,有啟用通常會用到帳號密碼囉,不過像我的情況是,該系統被加入relay清單裡,exchange似乎強制不讓我驗證,就算程式有驗證也沒用,解決辦法就是請管理者幫你把該系統從relay清單移除,然後AP server記得重啟或AP重新部署,有時不這麼作,會有cache造成怪怪的問題喔!!

可參考javamail的FAQ,有相關說明
When I try to send a message, why do I get javax.mail.SendFailedException: 550 Unable to relay for my-address?

其實若使用JAVAMAIL寄信發生問題,我發現開啟debug模式去看與mail server通訊的細節,會比較清楚問題發生在哪喔,附上debug模式的記錄,其中綠字是我的補充說明囉

以DEBUG為開頭表示是JavaMail run-time印出來的

此次mail session所使用的Provider
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]

SMTP所使用的參數設定,這邊要注意useAuth是"true"還是"false","true"代表程式有啟用驗證,"false"代表沒有啟用,但是有例外的情況,有時程式明明有啟用,但是這裡還是顯示"false",表示mail server可能不讓你驗證喔,像exchange的話,若系統在relay清單裡,程式有設驗證也沒用喔,這時寄外部郵件會有問題,這是我自己測試很多次得來的結論
DEBUG SMTP: useEhlo true, useAuth false

這裡是顯示試圖連接mail.test.com.tw的25port
DEBUG SMTP: trying to connect to host "mailt.test.com.tw", port 25
這裡就表是已連接到囉,網路是通的
220 HCS03.mail.local Microsoft ESMTP MAIL Service ready at Fri, 20 Feb 2009 11:51:17 +0800
DEBUG SMTP: connected to host "mailt.test.com.tw", port: 25
使伺服器可以表明自己支援擴展簡單郵件傳輸協定 (ESMTP) 命令
EHLO sva511

250-HCS03.mail.local Hello [192.168.107.2]

下面就是支援哪些命令囉
250-SIZE 10485760

250-PIPELINING
250-DSN

250-ENHANCEDSTATUSCODES
250-STARTTLS
250-X-ANONYMOUSTLS

250-AUTH NTLM LOGIN

250-X-EXPS GSSAPI NTLM

250-8BITMIME

250-BINARYMIME
250-CHUNKING
250-XEXCH50
250 XRDST
DEBUG SMTP: Found extension "SIZE", arg "10485760"
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "DSN", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "X-ANONYMOUSTLS", arg ""
DEBUG SMTP: Found extension "AUTH", arg "NTLM LOGIN"
DEBUG SMTP: Found extension "X-EXPS", arg "GSSAPI NTLM"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "BINARYMIME", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "XEXCH50", arg ""
DEBUG SMTP: Found extension "XRDST", arg ""
DEBUG SMTP: use8bit false
MAIL FROM:< sender@test.com.tw >

寄件者ok
250 2.1.0 Sender OK
RCPT TO:< receiver22@yahoo.com >

無法幫你轉信給該寄件者
550 5.7.1 Unable to relay
DEBUG SMTP: Invalid Addresses
DEBUG SMTP: receiver22@yahoo.com
DEBUG SMTP: Sending failed because of invalid destination addresses
RSET
250 2.0.0 Resetting

2009年2月26日 星期四

Windows Installer並未正確安裝或windows update無法更新

公司的網管反應有台測試機win 2000 server,常常中毒,我當時用掃毒程式掃了也沒事,但是過幾天後去看,發現掃毒程式每天不定時都會反應掃到一個病毒BAT_FTPER.C,我再想是不是太久沒windows update了,於是就去更新一下,結果失敗...@@

想裝MBSA看看好了,因為MBSA也會告訴你有哪些更新沒裝,結果跳出下列訊息

無法存取Windows Installer
可能是Windows處於安全模式 或是Windows Installer並未正確安裝
請聯絡您的支援人員

解決辦法

1.若要解決windows update無法更新的問題

 a. 安裝Windows Installer 3.0 Redistributable

 b. 重新開機後,就可以正常更新了


2.若要解決Windows Installer並未正確安裝的問題

 regsvr32 %systemroot%\system32\msi.dll

2009年2月22日 星期日

刪除七天前無效的連線

最近有台SQL Server的CPU使用率常常飆高,觀察似乎是連線的數量太多了,有很多連線是程式使用完沒有close的關係,短時間人手不足,沒法修正程式,只好手動清除啦,不過一個一個清太累囉,還是寫段陳述式來清囉

DECLARE @spid int, @SQLstr nvarchar(128)

--僅針對某個登入來清理囉,所以請自行更換"使用者"
DECLARE spids_cr CURSOR FOR
SELECT sp.spid FROM master..sysprocesses sp
LEFT OUTER JOIN master..sysdatabases sd ON sd.dbid = sp.dbid
WHERE sp.loginame='使用者' AND sp.net_address<>''
and sp.last_batch <= DATEADD(dd,-7,getdate())


OPEN spids_cr

FETCH spids_cr INTO @spid

WHILE (@@FETCH_STATUS=0)

BEGIN

SET @SQLstr = 'KILL ' + CAST(@spid AS varchar)

EXEC sp_executesql @SQLstr

FETCH spids_cr INTO @spid

END

CLOSE spids_cr
DEALLOCATE spids_cr