2015年12月15日 星期二

無法開啟SQL Server Error Log

        今天在檢查某台SQL Server,在本機上透過SSMS要開啟Error Log,等了好久居然打不開?出現如下錯誤

An exception occurred while executing a Transect-SQL statement or batch.
(Microsoft.SqlServer.ConnectionInfo)
A severe error occurred on the currentcommand. The results, if any, should be discarded


2015年8月27日 星期四

[SSIS][Error]ADO NET Source: Object reference not set to an instance of an object.

Description: System.NullReferenceException: Object reference not set to an instance of an object.  
Description: ADO NET Source failed the pre-execute phase and returned error code 0x80004003.


        突然有天,運行數月的SSIS排程失敗了,這SSIS主要是從MySQL匯入資料到SQL Server上,錯誤訊息如上,用的是MySQL ODBC Provider

        為什會有NullReferenceException的異常讓我百思不解?最後研究發現應該是網路的問題,詢問網管後才得知,公司前一天有被DDOS攻擊,防火牆有做調整,造成大資料量的傳輸會被封鎖,小資料量的傳輸就都沒有問題,DB間使用的網段加入白名單就解了,很瞎吧

     

2015年7月25日 星期六

[SSAS]Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host

        原本運作正常的Cube,突然間連線時出現下面這個錯誤
Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host
        查了半天,想說我什都沒動啊,到底哪出了錯,該不會遇到什bug吧,因為用2014的,結果是個愚蠢的錯,windows account忘了勾永不過期,預設45天就過期了XD


2015年6月30日 星期二

[Oracle優化]CPU使用率突然飆高了!

        某天管理的Oracle,它的CPU使用率突然飆高了一倍,平常使用率很低的,所以飆高了一倍還好。對一個穩定的系統來講,CCU沒有多一倍,CPU卻飆高一倍是很奇怪的,而且接下公司有辦活動,要是CCU暴增就不敢保證不會有問題了,所以要想辦法找出什麼原因造成CPU飆高

        首先看飆高當天的AWR,下圖是Top 5 Timed Foreground Events,第一名的DB CPU約佔73%,第二名的library cache: mutex X只佔10%左右,這還算正常

2015年6月22日 星期一

[SSIS][PostgreSQL]Error code:0x80040E21 Description: Multiple-step OLE DB operation generated errors.

        在SSIS Project裡,我打算從PostgreSQL匯入資料到SQL Server上,然後執行時出現如下錯誤,從錯誤訊息裡得知好像是欄位型態轉換的問題

[OLE DB Destination [29]] Error: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80040E21.
An OLE DB record is available.  Source: "Microsoft SQL Server Native Client 11.0"  Hresult: 0x80040E21
Description: "Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.".

[OLE DB Destination [29]] Error: An error occurred while setting up a binding for the "name" column. The binding status was "DT_NTEXT".
The data flow column type is "DBBINDSTATUS_UNSUPPORTEDCONVERSION".
The conversion from the OLE DB type of "DBTYPE_IUNKNOWN" to the destination column type of "DBTYPE_WVARCHAR" might not be supported by this provider.

        PostgreSQL該欄位上是TEXT,而SQL端對應欄位是NVARCHAR,我中間沒有加入資料轉換元件,對於異質資料轉換,我習慣在來源端就先轉掉好了,比較不容易出問題,所以直接在PostgreSQL來源端用cast轉換就好,例子如下
select id,cast(name as varchar(32)) as name from accounts
         這樣就沒再出錯囉

2015年6月17日 星期三

[SSIS]如何連到PostgreSQL

        首先去下載psqlodbc,因Server是64 bit的,用Visual Studio開發SSIS Project得用32 bit,而我開發佈署都在同一台Server上,所以兩種Driver都得裝喔

        安裝完Driver後,設定ODBC Data Source Administrator,也是32 bit與64 bit都要設,記得名稱要設一樣的,下面會講一下設定


2015年6月6日 星期六

[SQL Server]Linked Server到Oracle時,出現'To_Date' is not a recognized built-in function name的解法

       用連結伺服器連到Oracle要取資料,因為有日期時間的過濾條件,在Oracle需要用To_Date函數,但此函數無法通過SQL Server語法剖析的檢查,會出如下的錯誤
Select * From LK_ORA..HR.EMPLOYEES Where  Login_Date >= To_Date('2015-05-01 00:00:00','yyyy-mm-dd hh24:mi:ss') And Login_Date < TO_DATE('2015-05-02 00:00:00','yyyy-mm-dd hh24:mi:ss');


       解法一:在Oracle建View,在SQL端直接讀View,但多了道建View的手續

       解法二:在SQL端改用Exec,比較簡單,範例如下
EXEC ('Select * From HR.EMPLOYEES Where  Login_Date >= To_Date(''2015-05-01 00:00:00'',''yyyy-mm-dd hh24:mi:ss'') And Login_Date < TO_DATE(''2015-05-02 00:00:00'',''yyyy-mm-dd hh24:mi:ss'')') at LK_ORA;


2015年5月28日 星期四

[SSMS][SSIS]Connecting to the Integration Services service on the computer "localhost" failed with the following error: "Access is denied."

        環境是Win 2012 R2與SQL 2014,以管理者身分登入Local端後,用SSMS連SSIS時發生如下錯誤

        Grant Permissions to Integration Services Servic這篇沒用,因為已經是管理者了
     
        結果又是用右鍵Run as administrator執行SSMS就可以解了,UAC好麻煩

2015年5月15日 星期五

[SSAS]不錯用的MDX Designer工具

        Open Source的,有商用版本,測試的用開源的就夠了,載點在MDX Parser,Builder,DOM and OLAP visual controls with Writeback for Silverlight,下載Ranet.UILibrary.Olap-3.5.927.0.msi喔

        怎麼安裝使用?可參考下面的簡單說明,雖然產生的MDX也是不乾淨,但可以讓你用UI拉ROWS與COLUMNS,幫你快速產生MDX範例來改,對我們這種MDX沒有很熟悉的DBA來說,就很夠用了

2015年5月10日 星期日

[Oracle]分批刪除資料

        一次取得所有待刪除資料的ROWID,然後分批小量刪除資料

Set Serveroutput On;
DECLARE
  V_DATE DATE;
  Type V_Rowid Is Table Of Varchar2(100) Index By Binary_Integer;
  Var_Rowid V_Rowid;        
  Cursor V_Cur Is Select /*+parallel(a,2)*/Rowid From Hr.Employee Where LoginDate <= V_Date;

Begin
  V_Date := To_Date(To_Char(Trunc(Sysdate-60),'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS');

  Open V_Cur ;

  Loop
  Fetch V_Cur Bulk Collect
          Into Var_Rowid Limit 10000;
  Forall I In 1 .. Var_Rowid.Count
  Delete From Hr.Employee  Where  Rowid =Var_Rowid(I);
  Commit;
Exit When V_Cur%Notfound Or V_Cur%Notfound Is Null;
End Loop;

Close V_Cur;

End;

2015年4月17日 星期五

[Oracle]如何在SQLPlus格式化輸出成CSV

        SQLPlus預設環境下有很多System Variable,如果沒特別去設定,用SPOOL輸出到文字檔時,可能會看到一些不乾淨資料,像是表頭、回傳筆數及統計時間等等的

        如下圖,配合一些System Variable設定就可以不顯示了

2015年3月26日 星期四

[Power Map]地圖信賴度的問題

        用city來當作Power Map的地理資訊時,發現有各地圖信賴度,只能辨識出49%的資料,想說怎麼那麼低,報告建議再增加更多的地理欄可提升信賴度,於是又加了country code進去,馬上提升至89%

2015年3月23日 星期一

[SSIS][MySQL Data Provider]Error: The value was too large to fit in the ADO NET Source.

        因為得從MySQL匯入資料到SQL Server上,參考Connecting to MySQL from SSIS此篇,設好ADO NET Source後,測試一下出現如下錯誤

2015年3月5日 星期四

[SSIS]Warning: Could not open global shared memory to communicate with performance DLL; data flow performance counters are not available.

Warning: 0x80049304 at Data Flow Task, SSIS.Pipeline: Warning: Could not open global shared memory to communicate with performance DLL; data flow performance counters are not available.  To resolve, run this package as an administrator, or on the system's console.

        印象中以前用BIDS或SSDT沒看過這警示訊息,但用VS 2013設計SSIS專案時就看到這個警示,解法就如訊息中說的右鍵[以系統管理員的身分]執行,就不會出現囉


[SSIS]OLE DB Source連Oracle的錯誤Cannot retrieve the column code page info from the OLE DB provider.

Cannot retrieve the column code page info from the OLE DB provider. If the component supports the "DefaultCodePage" property, the code page from that property will be used. Change the value of the property if the current string code page values are incorrect. If the component does not support the property, the code page from the component's locale ID will be used.

        就在我按下Preview或是Columns時

2015年2月5日 星期四

[T-SQL]如何判斷IP是否落在某段IP範圍內?

        最近要測試Excel的Power Map,一般系統不會記錄使用者的地理資訊,頂多記IP吧,稍微查了Get and prep your data for Power Map,裡面提到Power Map的地理資訊支援下列幾種
Latitude/Longitude pair, City, Country/Region, Zip code/Postal code, State/Province, or Address
        用經緯度分析資料除非資料量非常大,要不然量小看起來沒什意義,那收斂到City感覺比較合理,所以找了一下如何用IP轉City,當然網上一堆服務可以用,但我不想讓DB層對外,想看有沒有現成的對應表可用,結果DB-IP - IP Geolocation and Network Intelligence有現成的DB可下載,免費版的可就可對應到city耶,五百萬筆資料應該也夠測試了 ,於是就下載來試試

        下載回來的資料是csv,我一開始轉入DB時發現一些問題,資料會有亂碼,用Unicode轉進去會剖析不了,發現編碼好像怪怪的,所以調成下圖那樣就可以匯入了