2009年1月18日 星期日

AS400如何透過DTS轉入SQL Server2000

剛好同事問有沒有文件,想說順便寫一下設定步驟好囉!

1.請確定在你執行的那台server上已裝好Client Access囉,如果你想在Client端也能用,那Client端也要裝!
2-1.裝好後我通常是先設定ODBC啦,再[開始][執行]那邊輸入odbcad32,這邊之後再設也行


2-2. 然後在[ODBC資料來源管理員]畫面的[系統資料來名稱]頁籤,按下[新增]
2-3.在[建立新資料來源]畫面,選取[iSeries Access ODBC Driver],按下[完成 ]

2-4.在[iSeries Access for Windows ODBC設定]畫面的[一般]頁籤,設定[資料來源名稱],名稱看你想設定什都可,與[系統]的ip位址,也就是AS400的位置2-5. 切換到[伺服器]頁籤,設定[SQL的預設檔案庫],也就是AS400的Library囉,如果有多個的話,是設在下面的[檔案庫清單],然後按下[確定],ODBC的設定就完成囉!
3.這邊我就假設你已在DTS裡拉好一個[其他連線] ,然後你就在[連線屬性]的設定畫面裡,在下方的[使用者/系統DSN]那各下拉選單,選取你剛設好的資料來源,然後再設定與AS400連線的使用者名稱與密碼,就可以按下[確定]囉,我剛在第2步也說,ODBC也是可以這時候再設的,按下[新增]就可以在設定其他的囉,步驟與第2步差不多
4.若你之前的設定都正確的話,當你拉一個[轉換資料工作]時,在[來源]的屬性設定頁籤裡,[資料表/檢視表]下拉選單是可以看到那些在AS400的table的喔

2009年1月16日 星期五

批次檔的執行條件處理IF

IF在批次檔中大概有3種格式,我配合我用過的例子作說明,如下:

1. IF [NOT] 參數==字串 command
參數如果等於指定的字串,則條件成立,就會運行命令
例子1:我有一個批次檔,每天排程執行,當遇到週日我想執行不一樣的命令, 內容要怎麼寫?


::取日期與星期幾
for /f "tokens=1,2" %%i in ('date /T') do set vard=%%i&& set vare=%%j
::判斷是否週日,如果是週日跳到另一段落
if %vare%==星期日 goto addsun
::下面執行非週日的命令
echo 執行非週日命令

exit
::下面執行週日的另令
:addsun
echo 執行週日命令


例子2:各位都知道windows排定的工作是可以細到每分鐘的執行一次的,那如果我排定一個批次檔是每天的九點開始執行,每小時執行一次,直到下午五點,批次檔會寫記錄到Log中,這樣排定,批次檔每隔一小時就執行一次,但是我想在這批次檔中作到第一次執行時,先把Log檔清空,怎麼作呢?


if %time:~0,2% EQU 9 echo. >c:\test.log
答案是利用時間囉,因為排程是時間是9點開始,那我判斷時間是9點才執行清檔就可以,簡單吧,系統時間%time%是20:29:11.04囉

2. IF [NOT] EXIST filename command

如果有指定的檔,則條件成立,就運行命令,通常用來測試檔案是否存在
例子:我把一個註冊表的機碼匯到暫存區的一個檔,那我希望在批次檔中判斷當此檔存在時,就無聲執行它,怎麼作?
if exist %temp%\addreg.reg regedit /s %temp%\addreg.reg
3. IF [NOT] ERRORLEVEL number command
DOS程式執行完都會傳回一個數字,稱為錯誤碼errorlevel或回傳碼,如果回傳碼等於指定的數字,則條件成立,就運行命令囉
例子:如果檔案複製成功,我希望LOG.txt就會顯示"成功複製檔案",否則就會顯示"檔案複製失敗"


XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 1 ECHO 成功複製檔案 >c:\LOG.txt
IF ERRORLEVEL 0 ECHO 檔案複製失敗 >c:\LOG.txt
IF ERRORLEVEL 是用來測試它的上一個DOS命令的回傳值的,注意只是上一個命令的回傳值喔,而且回傳值必須依照從大到小次序順序判斷,否則會出錯喔。


2009年1月13日 星期二

自動刪除七日前的檔案

最近剛好需要,上網有找到例子,可是沒法直接用,會出錯,只好再參考指令碼存放庫的sample,改了後終於可以用了,分享給大家囉!

下面這個例子是會刪除在c:\Downloads下7天前所建立,然後副檔名為txt文字檔囉,請複製後存成vbs的檔案就可以了,也可以用在DTS裡的ActiveX Script喔

執行sp_helpdb發生錯誤

最近遇到一個問題,就是在Query Analyzer執行sp_helpdb出現下列錯誤

伺服器: 消息 515,級別 16,狀態 2,過程 sp_helpdb,行 53
無法將 NULL 值插入列 'owner',表 'tempdb.dbo.#spdbdesc___________________________________________________________________________________________________________00010000001F';該列不允許空值。INSERT 失敗。


然後執行第二次時又出現

伺服器: 消息 515,級別 16,狀態 2,過程 sp_helpdb,行 53
無法將 NULL 值插入列 '',表 '';該列不允許空值。INSERT 失敗。


當時想說,這不是系統內建的嗎?怎麼會出錯呢?
怪的是,若我用"sp_helpdb 資料庫名字"又沒問題
只好上網Goggle一下囉
原來是某個資料庫的擁有者遺失或不正確所造成

一一去查看資料庫的擁有者,還真的有資料庫擁有者那邊是空白的耶,真是見鬼了

解決辦法:執行sp_changedbowner 'sa'去指定擁有者囉

2009年1月11日 星期日

使用[查閱]轉換的注意事項

SQL Server 2005線上叢書說:"依預設,查閱轉換會將整個參考資料表放在記憶體的快取中,以提供最佳的效能。如果您未選取 [進階] 索引標籤上的任何選項,查閱轉換就會使用此預設行為。如果有記憶體限制,[進階] 索引標籤上的選項可讓您只設定部份快取。"

2009年1月10日 星期六

[OLE DB來源]請使用"SQL 命令"來取得資料



最近在參考一些SSIS效能調教的文章,有提到說在使用[OLE DB來源]時,資料存取模式使用[SQL 命令]的效能會比使用[資料表或檢視]來的好

2009年1月9日 星期五

[SQL server目的地]的逾時時間

這好像是個bug,逾時預設是30秒,如果不更改為0,也就是不限制時間的話,有時執行會遇到莫名的錯誤說,我更改為0後,就正常很多了,給各位參考一下