2013-02-08

Tags: 程式語言 , olap

<前言>

這陣子因為外力因素,接手了「SSAS(SQL Server Analysis Services) access Oracle DB 」的怪異Solution。這東西簡單來說就是用Microsft SQLServer內建的 OLAP功能,但是不拿它來分析MSSQL DB的資料卻拿它來分析Oracle DB的資料。

在江湖上走唱多年的Software Engineer都很清楚這樣的組合會有不少風險。因為M社產品的特徵向來是跟自家產品整合最OK,如果不幸自家東西串不起來,只要有付維護合約的費用 (保護費) ,M社大多都會想辦法幫你解決。當然啦,M社產品就是只能.Net平台,想要M社支援Java或其它語言,那可能要等太陽從西邊出來才辦的到囉。至於O社產品呀,它是蠻多跨平台的各類產品跟元件啦,不過每個都要錢,而且很貴 (如果你用了卻少付錢或不付錢偷用,O社強大的律師群會告的你哭爹喊娘)

二家公司都這麼有個性,卻硬要把二家的產品串在一起用,我直覺就是種玩火的行為。在接手這個怪異的玩意兒後,我只能說這是個「shit solution」或是「big bomb」,如果你剛好正在考慮OLAP Solution,然後又不是全部都走.Net base,最好還是三思而後行呀...=3=
===========================================================================
<安裝環境>

1.Win7 64bit(或Win 200X Server 64bit)
2.SQL Server 2008 R2 64bit standard version
3.Oracle 10g(或11g) DB 64bit
===========================================================================
<名詞解說>

SSAS: SQL Server Analysis Services。簡單來說就是M社在SQLServer內提供的OLAP跟BI功能。
BIDS:SQL Server Business Intelligence Development Studio。OLAP跟BI的開發工具。
SSMS:SQL Server Management Studio。SQLServer的管理工具。
===========================================================================
<安裝流程>

1.安裝 SQLServer 2008 R2
安裝時建議全部功能都裝,只是我們主要是使用SSAS功能。

2.安裝 SQLServer 2008 R2 的SP2 patch
更新了一堆有的沒的東西,如果是剛開始裝一個全新的系統,還是乖乖的patch一下 這個 SP2(SQLServer2008R2SP2-KB2630458-x64-CHT.exe)吧。裝完後開啟SSMS後可以看到版本號是10.50.4000


3.安裝 Oracle Database 11g Release 2 Client (11.2.0.1.0) for Microsoft Windows (32bit)
step1.選擇自訂安裝

step2.安裝的位置設在「C:\oracle_32bit\11.2.0\client_1」
step3.只要安裝紅框選的那三個元件

step4.先決條件的判斷會出錯,直接忽略它強制安裝


4.安裝 Oracle Database 11g Release 2 Client (11.2.0.1.0) for Microsoft Windows (x64)
安裝方式跟上一個流程一樣,但是安裝位置要分開,改放在「C:\oracle_64bit\11.2.0\client_1」不可以相同。

5.撰寫 tnsnames.ora 設定檔
手工建立「C:\oracle_32bit\11.2.0\client_1\network\admin」目錄與「C:\oracle_64bit\11.2.0\client_1\network\admin」目錄。在這二個目錄中都建立一個「相同」內容的「tnsnames.ora」檔案。該檔的內容長的像下列範例

TEST_DB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.1.1)(PORT = 1521))
)
(CONNECT_DATA =
(SID = testdb)
(SERVER = DEDICATED)
)
)

6.改環境變數的Path參數
作業系統裡環境變數的Path參數在裝完32bit與64bit的Oracle client後會長的類似下面這樣,把紅色刪除線部份的Path從設定中給移掉。
C:\oracle_64bit\11.2.0\client_1\bin; C:\oracle_32bit\11.2.0\client_1\bin; %JAVA_HOME%\bin;%GRADLE_HOME%\bin;...etc

7.在SQLServer相關的UserGroup成員清單裡加入administrator使用者
下圖紅框所示的都要改。我直接將我的帳號(這帳號具有本機admin權限)加入SQLServer相關的UserGroup。如果是PRD系統,最好不要這樣做,而是開個SQLServer專用的admin帳號再把它加進去。


8.將Service的啟動者身份改成administrator使用者
下圖紅框所示的都要改。我直接拿我的帳號(這帳號具有本機admin權限)來啟動服務,如果是PRD系統,最好不要這樣做,而是開個SQLServer專用的admin帳號,再用它來啟動服務。


9.撰寫 LaunchBIDS.bat (這步驟非必需,不過建議還是設定一下)
在桌面上寫個LaunchBIDS.bat,以後都用它來啟動BIDS。參考範例如下。
@echo on

set path=C:\oracle_32bit\11.2.0\client_1\bin;%path%
c:
cd\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE
start devenv.exe
exit

10.重新開機
超重要,一定要重開,免的有一些奇怪的靈異現象!
===========================================================================
<安裝如此怪異的原因>

上述安裝說明在M社官方文件是完全不提的(大概也不想提吧,因為O社也有BI的產品在搶市場),只有forum上有零星的討論。目前看到最切中要害的解說是這篇「 Solution: Can edit, but can’t process, an Analysis Server Cube using ORACLE data」,有興趣的可以看看,該篇的重點解說如下。

SSAS可以分成二部份,「開發環境」跟「Runtime」。當你啟動BIDS在上面進行開發時,所有的動作都是在BIDS這個開發環境上運作。當開發結束進行deploy後,你的程式就放到SSAS service這個Runtime上運行。也就是說BIDS是開發環境、SSAS service是個Runtime。

但是SQLServer 2008 R2有個很怪異的地方,那就是 BIDS只有32bit的版本,所以在64bit作業系統上啟動BIDS時,它是以32bit相容模式在執行。BIDS在開發時是直接跟SSAS與OracleDB溝通(下圖粉紅色線條所示)
本圖取自 http://blogs.msdn.com/b/davidlean
正因為BIDS只有32bit,所以一定要裝32bit版的Oracle Client,這樣你在開發時在設定「資料來源」時,才可以看到下圖所示的Oracle driver。如果沒看到這玩意兒,恭喜你在第一關就卡住了,因為你連資料連線都建不起來了,後續什麼建dimension、cube啦都玩不下去了...XD



但是累,我們的SSAS service跟OracleDB是64bit的,再外加deploy後是由SSAS跟Oracle進行溝通(下圖淺藍色線條所示),所以一定要裝64bit版的Oracle Client。
本圖取自 http://blogs.msdn.com/b/davidlean
如果有成功安裝64bit的Oracle Client,開啟SSMS可以看到下圖紅框所示的Oracle driver。如果沒看到這玩意兒,那包準在每次的deploy永遠都會噴ora開頭的錯誤,Oracle DB永遠也連不上...XD



那...裝完32bit跟64bit的Oracle Client後就一切天下太平不再發生怪事了嗎?當然沒那麼好,別忘了我們可是同時裝了32bit跟64bit的Oracle Client呀!所以 一定要在環境變數的Path參數中設定64bit Oracle Client的路徑,不然SSAS一旦開始跟Oracle DB抓資料時整個SSAS就整個死當,而且完全不會告訴你原因為何!

那...設好環境變數的Path參數之後,SSAS總該就不會死當了吧?可惜呀,它還是當給你看!SSAS的服務在執行時,預設是用「Network Service」帳號在執行。這個帳號可是沒有權限直接讀取tnsnames.ora設定檔的呀。當它無法讀到設定檔內容時會怎樣?沒錯!你猜對了,SSAS又整個死當,而且完全不會告訴你原因為何!這也是為何在安裝步驟裡要去設定那些角色權限跟Service權限改用admin帳號的原因...囧rz


===========================================================================
<後記>

這個混蛋系統,裝完後就可以一路happy的使用嗎?我的答案是No,它在開發上其實有個很重要的地方沒完整實作,會讓維護的人遇到時很頭大。不過這是另個故事了,改天等講到[開發篇]時我再來說吧。這系統光是安裝,就花了我二週多才完全搞定,整個就是讓人覺的悲劇一場呀。

什麼?你問我最大的心得是什麼?我的心得只有......



我是不知道SQL Server 2012裡的SSAS是否有把這些鳥問題都解決了 (M社有這麼佛心來著?) ,不管怎樣,如果你剛好正打算用M社產品串其它公司的產品,最好先想想或試一試需要的所有功能是不是都正常。免的哪天不小心掉到這種大糞坑時,讓你唉唉叫呀...=3=