2014年6月24日 星期二

[MySQL]Order By Null

        第一次看到MySQL可以用Order By Null時很訝異,而且這樣用並不是要將Null排在最前還是最後,而是不需要排序的意思,但要配合Group By使用

        像SQL Server不支援這樣寫;Oracle可以這樣寫Order By Null First或Order By Null Last,看是Null值要放前放後而已

        MySQL的Group By有隱含排序的效果,意思就是會花額外的資源去做排序,這會有效能的疑慮,我自己測試在Group By Table1.Col, Table2.Col這種情況下,最為明顯,在執行計畫Extra欄位可以看到Using filesort,這就表示有額外去作排序喔,可參考下面的例子

2014年6月23日 星期一

使用sp_testlinkedserver檢查Linked Servers是否正常

        有個需求要建Data Mart,然後我打算用PowerPivot讓User可以自己取得最新資料來分析,那驗證這端怎麼弄,因為有AD就簡單很多,可是來源DB在MySQL上耶,那就想辦法把Data Mart建在SQL Server上囉,因為資料量目前不過百萬筆,預估三年內應該不會破千萬,目前容量也不到1G,使用SQL 2014 Express應該足夠

        因為要ETL到SQL Server上,才發現Express不支援SQL Server Agent,只好用工作排程器加SQLCMD來解決

        在SQL Server上建Linked Server到MySQL很簡單,但在ETL的過程中有時會遇到錯誤


        怪的是時好時壞,才想說有沒有測試Linked Server的工具呢,原來微軟早就提供sp_testlinkedserver啦,怎麼用?如下

BEGIN TRY
    
     EXEC sp_testlinkedserver  N'LK_MEM';

     TRUNCATE TABLE [dbo].[test];
     INSERT INTO [dbo].[test]
     SELECT * FROM OPENQUERY(LK_MEM,'SELECT id FROM test.t1;');

END TRY
BEGIN CATCH
     PRINT ERROR_NUMBER()
     PRINT ERROR_MESSAGE()

END CATCH

        很簡單

2014年6月16日 星期一

[MySQL][ODBC]reading authorization packet, system error 2

        我想在SQL Server上打算建Link Server到MySQL去,要連兩台MySQL,所以建兩個Link Server,測試時先在兩台上建同一組帳密,然後開始在SQL上設ODBC,第一台順利建立完成,但第二台設ODBC時就出現如下錯誤


        看起來像驗證的問題,我原以為密碼錯誤,但是我SQL上用mysql cmd連是OK,MySQL Workbench也OK,也確認ODBC輸入的帳密沒問題

        我想該不會是帳號怪怪的有問題吧,我又建立另一組帳號,只是帳號名稱不同,密碼權限相同,結果另一組帳號可行

        總結一下,在同一台MySQL上,建兩組帳號,除帳號名稱不同外,密碼權限皆相同,在遠端用mysql cmd與Workbench兩個帳號都通過驗證,但odbc卻有一組帳號會出現上面那個錯誤,我以為是帳號名稱太長,但另一台同樣的帳密卻OK,真是活見鬼

        在網上搜尋一下,Bug #28359:Intermitted lost connection at 'reading authorization packet' errors,我覺得應該是Bug

2014年6月8日 星期日

在SQL Server上建立連結伺服器到Oracle

        方法超簡單,首先要SQL Server上安裝ODAC,裝完後記得重開機



        然後展開Linked Servers的Providers,應該要有OraOLEDB.Oracle喔,如上圖

2014年6月4日 星期三

[SSRS][Oracle]Memory Usage Report

        接著分享Memory Usage Report