前言: 話說前陣子爸爸家陽台不斷出現米奇老鼠,立刻清理陽台所有東西,然後又跟市政部門反映問題,可是情況還沒有好轉,米老鼠來完一隻又一隻,我爸陽台在老鼠界應該是網紅打卡聖地(誤),要不然就是米奇老鼠版米奇林三星餐廳(?) 雖然我們抓到了三隻,到上兩個禮拜為止還有至少一隻一直抓不到,每天淩晨還會來吃事後煙留下老鼠屎,真_北。 這隻老鼠對傳統攻擊有抗性,有IT9朋友前陣子用Raspberry pi自製了一台electric mouse trap ,用pi的超聲波雷達放在鞋盒裡,鞋盒裡有一堆食物,底部佈了鐵網,偵測到有老鼠進去以後立即關門通9V電,通個1分鐘再放牠離開,大推我自己也造一台 (Youtube片搜尋一大堆,人類真變態啊,朋友好變態啊)。可是我覺得這樣又好像有點太殘忍,不如先偵測牠們什麼時候來,嚇嚇牠們看看有沒有效果再說吧。 目的: 用Raspberry pi及手上有的感測器弄一隻放陽台用來偵測和嚇嚇老鼠的東西,並把紀錄圖像化到雲端給老爸使用。 邏輯及設計: 當老鼠進入偵測範圍,Motion Sensor偵測到生物活動Raspberry pi 處理來自Motion Sensor的訊號,如果夠強的話開始準備作出回應 Raspberry pi在Angry cats sounds中隨機選出叫聲,再經由Speaker輸出貓叫聲 Raspberry pi指示強光元件發出強光束照射目標 把偵測計數上傳到雲端圖表 材料: Sensor 在網路上看了一些Raspberry pi wild animal camera ,很多也是用Motion Sensor先偵測動物再來,我用的是PIR Motion Sensor被動式紅外線感測器,有低耗電成本便宜的好處。[1],而且可手動調整靈敏度及反應時間。 PIR Motion Sensor就是下面這個 圖片來源: learn.adafruit.com 可手動調整敏感度還有反應時間,這個有點不好調,要試好多遍才找到最佳位置。 可以在Raspbian中輸入pinout查詢GPIO避免插錯 圖片來源: learn.adafruit.com . 一台Raspberry pi 這次使用較舊的Raspberry pi model B+ 萬一老鼠生氣被咬爛錢包也不太痛 . ...
[20140110] 新增OLE DB版本
上次提到當我們進行異質資料庫的資料轉移,使用SQL Server內建的工具經常會發生很多不明的錯誤(例如Column size太大)。那怎麼辦呢?總不可能把資料全部變成insert Statement吧?經過爬文以後小弟最後選用了SQL Server裡的Linked Server功能. 也成功轉移了超過2000萬筆資料的資料庫,雖然可能並不是好方法也希望對大家有幫助 :-)
什麼是SQL Server 的Linked Server?
Linked Server (連結的伺服器) 根據msdn的解釋, 就是 "可讓 SQL Server Database Engine 對 SQL Server 執行個體外部的 OLE DB 資料來源執行命令。" 再說白一點, 就是可用T-SQL查詢其他品牌的資料庫。
來源資料特性:
準備工作:
上次提到當我們進行異質資料庫的資料轉移,使用SQL Server內建的工具經常會發生很多不明的錯誤(例如Column size太大)。那怎麼辦呢?總不可能把資料全部變成insert Statement吧?經過爬文以後小弟最後選用了SQL Server裡的Linked Server功能. 也成功轉移了超過2000萬筆資料的資料庫,雖然可能並不是好方法也希望對大家有幫助 :-)
什麼是SQL Server 的Linked Server?
Linked Server (連結的伺服器) 根據msdn的解釋, 就是 "可讓 SQL Server Database Engine 對 SQL Server 執行個體外部的 OLE DB 資料來源執行命令。" 再說白一點, 就是可用T-SQL查詢其他品牌的資料庫。
來源資料特性:
- 資料在老舊的V5R4 AS400上.
- 很多資料表(Table)的欄位(Columns)很多,接近50個欄位以上。
- 欄位的size很大, 長度達3000或以上, 而且因為是char的關係就算改成varchar也沒用.
- 資料量大, 很多Table超過200萬筆.
準備工作:
- 由於這次使用的是AS400的ODBC或OLE DB, 所以在SQL Server端一定要先安裝IBM iSeries Client Access.
- 在SQL Server中先建立一空的資料庫
- 需要有SQL Server SA權限的帳號
動手做:
- 建立Linked Server
- 打開SQL Server Management Studio, 登入後到Server Objects->Linked Servers->按右鍵新增Linked Server
- 如果你用的是ODBC
在"Linked Server"中填入此Linked Server的名字, 任意也OK, 由於這次對象是AS400, Server type要選擇Other data source, 由於這次使用的是ODBC connection, 所以Provider一欄要選擇 "Microsoft OLE DB Provider for ODBC Drivers", Product name先填as400, Data Source選擇ODBC中的來源名稱(如AS400ODBC), Provider string跟connection string類似, 主要是加入一些連結的資訊, 例如在這個例子我要傳送使用者名稱跟密碼去登入AS400的目的地資料庫, 就要填寫uid=XXXX;Password=XXXX; Location跟Catalog可以放空不用填寫, 確定無誤後按OK.
如果你用的是OLE DB在"Linked Server"中填入此Linked Server的名字, 任意也OK, 由於這次對象是AS400, Server type要選擇Other data source, 由於這次使用的是OLE DB connection, 所以Provider一欄要選擇 "IBM DB2 UDB for iSeries IBMDA400 OLE DB Provider", Product name不用填寫, Data Source填寫AS400的IP或者DNS, Provider string跟connection string類似, 主要是加入一些連結的資訊, 例如在這個例子我要登入ABC資料庫, 就要填寫Default Collection=ABC; Location跟Catalog可以放空不用填寫, 確定無誤後按OK. - 登登~成功的話會出現這樣的畫面
- 最後, 如果你是使用OLE DB的話,
- 記得設定完以後需要進入 Linked Servers->Providers-> IBMDA400按右鍵->選擇Properties
- 不然可能會出現 "Cannot create an instance of OLE DB provider "IBMDA400" for linked server "XXX" (Microsoft SQL Server, Error:7302)" 這個錯誤.
- 建立產生Table的Create Statement
- 總結
之前我們試過很多方法(例如SSIS的import/export expert, 把Data轉為過萬筆insert Statement)也無法成功的把AS400中有超過兩千萬筆的資料庫轉移到SQL Server上去. 使用Linked Server對我們來暫時是成功的一套方案, 希望對遇到同樣問題的大大有幫助, 如果有更好的方案歡迎提出討論喔. ^_^
- 2013/09/02補充:
要批次建立資料表及insert的SQL, 我自己是iSeries Navigator內建的工具產生的, 千萬不要血汗工廠自己慢慢寫, 賠了時間又容易出錯啊 - 2014/01/15補充:
經小弟測試後OLE DB跟ODBC在速度上很接近, 不過如果要連結大量linked server的話還是使用OLE DB比較好.
Comments
Post a Comment