2010年7月30日 星期五

http 方式連結 analysis server 之再測試

上次可以用網頁owc方式採http方式連結analysis server後.

現在人客說, 想要依不同的登入使用過濾OWC FILTER AREA中的機關list,

真是天殺的需求.

爬了許多文後.....整理如下,有二種做法

第一種, 透過網頁OWC 的屬性設定
1.先到MS KB上去COPY範例
2.在window_onload事件中,找到這一行, aStates = Array("Cleared", "Checked", "Gray"), 把他給刪掉
3.然後加上這三行
   oView.FilterAxis.FieldSets("Product").AllIncludeExclude = c.plAllExclude
   oView.FilterAxis.Fieldsets("Product").fields("Product Family").includedmembers = Split("Food",",")
   PTable.AllowFiltering = false
4.測試網頁, 進入後,你會看到在filter area的product 維度,只有Food被勾起來了,而且,你再也不能對這個維度做任何的修改, 因為 PTable.AllowFiltering = false

這個方法對人客不太實用, 因為會連同其他放在filter area的維度也跟著無法修改了.... 沒屁用,但測出了如何coding filter memers

第二種, 利用as本身的角色授權功能
1.先在http olap虛擬目錄的認證方式改成 基本驗證,
2.在網頁owc 連結as的connection string , 要加入使用者及密碼,  如下
"Data Source=http://SQL2000/OLAP/;Initial Catalog=TEST;Provider=MSOLAP.2;User Id=normaluser;Password=123456;"
按照這篇文章Basic authentication 那段的說明 , 必需使用基本驗證 加上connection string 中的使用者及密碼,才能透過http方式模擬連線使用者.
所以, 既然是走明碼傳輸, 文章也建議你要採用SSL方式,加密傳輸.
3.依需求, 在as中去定義不同的角色, 把維度資料的瀏覽做權限控管
4.最後,想辦法在網頁上動態依登入的使用者去替換connection string 中的使用者及密碼

這個方法人客應該比較尬意, 但測試後, 在AS 2000 OK,可以隨著使用者的切換顯示維度資料
但AS 2005 的角色雖然設定了.(方法和AS2000大同小異)...但網頁卻沒有隨著使用者切換而顯示維度資料

比較二者的差異
1.AS 2000那台主機不在AD中, AS2005那台主機則在AD Domain中
2.網頁測試機本身雖不在AD網域中,但其登入本機的帳號及密碼與AD上一組帳號及密碼相同 所以OWC 連線可以正常, 也可以順利看到預設的維度.

3.但在其他台測試機器開相同網頁,則出現以下錯誤
---------------------------
Microsoft Office 樞紐分析表清單
---------------------------
發生錯誤 0x80004005。沒有進一步的資訊。

JS錯誤內容為 " ActiveX元件,無法產生物件.."

4.相同的測試網頁, 放在windows 7 + IE8 的環境下,且符合上述2的環境下時, oView.FilterAxis.Fieldsets("Product").fields("Product Family").includedmembers = Split("Food",",")
這一段程式碼, 竟然出現, JS錯誤訊息:" 陣列索引超出範圍"

原來, IE8 + SSAS2005  ,  Split有問題哩.. 改成以下 就OK囉..
oView.FilterAxis.Fieldsets("Product").fields("Product Family").includedmembers = Array ( "Food", "Drink" )

然後, 整個OWC的速度超級無敵慢的.....為什麼連到SA2000的CUBE就很快呢....

亂亂亂.....

在網域環境中 , SSAS 2005 的權限設定 , OWC的顯示,  這款代誌金不係呆人想得卡哩啊簡單啦.....


待續

2010年7月28日 星期三

C# extend 方法

透過extension方式,可以擴充System.DateTime的方法,
coding時, 直接輸入DateTime類型物件,intelligence就會自動出現這個自訂義的方法囉..

//將西元日期轉換為帶format的國曆日期
public static class Datetime
{
     public static string ConvertToCDate( this DateTime dt)
     {
         return string.Format("{1}{0}{2:D2}{0}{3:D2}", new object[] { @"/" (dt.Year - 1911), dt.Month, dt.Day });}
     }
}

使用方法:
return DateTime.Now.ConvertToCDate();

回傳99/07/28

2010年7月25日 星期日

VMWare安裝x64作業系統

在Lenovo T400 , host是win 7 profession x64, 想要在VMWare 7.0 安裝 X64的作業系統,得要做幾件事
1.先將BIOS 的CPU VT開啟, 在T400上有二個VT選項
  開啟後記得要用關機後再開機... 如果只是重新啟動設定是沒用的..
  我的英文很差.... 一直看不懂VMWare的提示, 說我的機器有支援VT但VT目前為diabled
  啊我明明就有改了BIOS的設定啊....
  提示可能原因中,其中有 一項...power-cycle your computer....原來是要關機再開機...(汗.....)

2.安裝VM Machine時,要選擇windoes server 2008 X64, 我也很白吃....一直選windoes server 2008

3.當然啦, 你的安裝光碟片必需也要是windoes server 2008 X64 版啦......這不是廢話...

2010年7月23日 星期五

Informix onstat

-u 列出session id


-g ntt 查看各session開始時間,及最後活動時間

-g ses sessionID  , 查看session SQL SYNTAX

-g sql sessionID , 查看session SQL 目前處理狀況(SELECT,INSERT, DELETE ...?)

-uk 查看鎖定狀況, 看有IX(exclusive lock)的, 而且為0者, 找到其tabID ,再去systab查tablename

-p 看系統狀況

2010年7月14日 星期三

identity欄位的資料轉入

tabTest 和tabBackup有相同的欄位結構, primary key皆設為identity
insert into tabTest select * from tabBackup
執行時,會有如下錯誤

XXX的識別資料行其外顯值只有當使用了資料行清單且 IDENTITY_INSERT 為 ON 時才能指定。

常遇的問題,但每次都會忘了要怎麼做.

set IDENTITY_INSERT tabBackup on
Go

insert into tabBackup ( col1, col2, col3)
select * from tabTest
Go


所以SQL Server 的訊息寫的挺清楚
當使用了資料行清單
IDENTITY_INSERT 為 ON 時
這讓我想起,人客有時跟我哭夭說, 系統很爛,我只是按個BUTTON資料怎麼會不見咧..

可是明明按下BUTTON時,系統都有confirm 警告說會刪除資料,

你要按下確定, 我有什麼辦法啊..... 機車咧....

所以訊息要好好看啦

2010年7月11日 星期日

Dos Command , systeminfo

在DOS Command下, 利用 systeminfo來查看系統資訊 
以我的機器測試,結果輸出如下, 挺詳細的咧, 還列出曾上過的hotfix

主機名稱:             XXX
作業系統名稱:         Microsoft Windows 7 專業版
作業系統版本:         6.1.7600 不適用 組建 7600
作業系統製造商:       Microsoft Corporation
作業系統設定:         獨立工作站
作業系統組建類型:     Multiprocessor Free
註冊的擁有者:         XXXXX
註冊公司:            
產品識別碼:           55041-OEM-8992671-00437
原始安裝日期:         2010/1/30, 下午 07:58:54
系統開機時間:         2010/7/12, 上午 08:40:10
系統製造商:           LENOVO
系統型號:             2767PM1
系統類型:             x64-based PC
處理器:               已安裝 1 處理器。
                      [01]: Intel64 Family 6 Model 23 Stepping 10 GenuineIntel ~2801 Mhz
BIOS 版本:            LENOVO 7UET79WW (3.09 ), 2009/10/13
Windows 目錄:         C:\Windows
系統目錄:             C:\Windows\system32
開機裝置:             \Device\HarddiskVolume2
系統地區設定:         zh-tw;中文 (台灣)
輸入法地區設定:       zh-tw;中文 (台灣)
時區:                 (UTC+08:00) 台北
實體記憶體總計:       3,992 MB
可用實體記憶體:       868 MB
虛擬記憶體: 大小上限: 7,982 MB
虛擬記憶體: 可用:     3,888 MB
虛擬記憶體: 使用中:   4,094 MB
分頁檔位置:           C:\pagefile.sys
網域:                 WORKGROUP
登入伺服器:           \\XXX
Hotfix:               已安裝 47 Hotfix。
                      [01]: KB971033
                      [02]: KB958488
                      [03]: KB971468
                      [04]: KB972270
                      [05]: KB973525
                      [06]: KB974332
                      [07]: KB974431
                      [08]: KB974476
                      [09]: KB974571
                      [10]: KB975467
                      [11]: KB975496
                      [12]: KB975560
                      [13]: KB976098
                      [14]: KB976264
                      [15]: KB976422
                      [16]: KB976662
                      [17]: KB977074
                      [18]: KB977863
                      [19]: KB978207
                      [20]: KB978251
                      [21]: KB978262
                      [22]: KB978506
                      [23]: KB978542
                      [24]: KB978601
                      [25]: KB978637
                      [26]: KB979099
                      [27]: KB979306
                      [28]: KB979309
                      [29]: KB979482
                      [30]: KB979559
                      [31]: KB979683
                      [32]: KB979900
                      [33]: KB979916
                      [34]: KB980182
                      [35]: KB980195
                      [36]: KB980218
                      [37]: KB980232
                      [38]: KB980302
                      [39]: KB980408
                      [40]: KB980846
                      [41]: KB981078
                      [42]: KB981332
                      [43]: KB981793
                      [44]: KB982381
                      [45]: KB982519
                      [46]: KB982632
                      [47]: KB982666
網路卡:               已安裝 6 NIC。
                      [01]: Intel(R) 82567LM Gigabit Network Connection
                            連線名稱:           區域連線
                            DHCP 已啟用:          是
                            DHCP 伺服器:        192.168.0.1
                            IP 位址
                            [01]: 192.168.0.111
                            [02]:XXXXXXXXXXXXXXXXXXXXX
                      [02]: Intel(R) WiFi Link 5300 AGN
                            連線名稱:           無線網路連線
                            狀態:               媒體已中斷連線
                      [03]: VMware Virtual Ethernet Adapter for VMnet1
                            連線名稱:           VMware Network Adapter VMnet1
                            DHCP 已啟用:          否
                            IP 位址
                            [01]: 192.168.232.1
                            [02]: fXXXXXXXXXXXXXXX
                      [04]: Bluetooth Device (Personal Area Network)
                            連線名稱:           Bluetooth 網路連線
                            狀態:               媒體已中斷連線
                      [05]: Microsoft Virtual WiFi Miniport Adapter
                            連線名稱:           無線網路連線 2
                            狀態:               媒體已中斷連線
                      [06]: VMware Virtual Ethernet Adapter for VMnet8
                            連線名稱:           VMware Network Adapter VMnet8
                            DHCP 已啟用:          否
                            IP 位址
                            [01]: 192.168.59.1
                            [02]:XXXXXXXXXXXXXXX

temp table and table variables

temp table 包含local (#tmpTest, by sessionid) 以及global (##tmpTest) 都是 physical tables, 用法就像一般的table一樣,
1.可以alter,drop
2.可以create index, pk
3.transaction logs也會記錄其變動
4.loacal temp table 在此session內都可使用


table variables
1.可以建立 pk
2.無法create non-clustered Indexes
3.transaction logs不會記錄其變動 ,不管 table variables 是否有包含在transaction中, 自已都是獨立的
4.沒有統計資訊
5.一執行完畢馬上消失
6.使用時機為適用在較小資料且不考慮index 時的暫存處理

什麼叫較小的資料處理? 見人見智吧,自已要實測. 我自已大都用在user defined function 回傳table,或者執行Stored procedure 回傳資料集 , 例如, insert into @tmp exec zspMyProcedure

不同欄位順序的index差異?

最近同事一直在做SQL Server 2000的效能測試...看他很HIGH的樣子, 我一直在想 "代誌是不是搵想A卡哩啊簡單" ?.

所以我也花了時間,來看看他給我的測試
這個測試是有關index 欄位順序調整或合併, 是否有助於效能提昇
他給的測試方法是觀察Logical Reads 和Physical Reads
由這二個值的觀察,可洐生出了SQL Server:Buffer Manager - Buffer Cache Hit Ratio
按照他給的公式定義 SQL Server:Buffer Manager - Buffer Cache Hit Ratio= logical reads – physical reads)/logical read * 100%
所以數值愈大,代表資料直接由data buffer 也就是記憶體的比例愈大, 相對減少對DISK 的讀取.

問題是什麼情況下, Buffer Cache Hit Ratio 會變大?
要嗎是Logical Reads變大, 要嗎是Physical Reads變小.
但如果以同一個查詢語法來看,在不清除buffer的情況下, 理論上 Logical Reads應該是要相同才對, 而且Physical Reads應該在第一次查詢時, 會變成0. 當然, 假設的前提是, 只有一個測試連線, 以上結論才會成立吧.而且,這個counter也需在一段時間的記錄後才能取得到較正確的值, 所以在測試階段,只先針對一個使用者一個相同的SQL來測試, 這個數值一點幫助也沒有.

google了一些資訊,還是做了一下測試, 在只有我一個使用者的情況下...
1.先設定SET STATISTICS IO ON 及SET STATISTICS TIME ON, 以返回每個查詢的統計資料和執行時間
2.每個查詢前,皆先清除buffer , 包含dirty buffer也須清除(可看MSDN說明)
CHECKPOINTGo
DBCC DROPCLEANBUFFERS
Go
DBCC FREEPROCCACHE
Go

依不同的index建立進行測試,分別select 所有欄位及部份欄位來查看Logical Reads 和Physical Reads

為什麼要重建index並整合index?
原本有二個index, 其中一組是由7個欄位組成的index, 另一組則是3個欄位組成的index.
index1 = (col1, col2, col3,col4,col5,col6,col7)
index2 = (col7, col1, col3 )
當初建立這二個index的用意在於, 第一組為unique index, 第二組則為常用的insert/delete/select條件. 當時是覺得(只是自已理論上的推測,也沒有經過實測和實證....)建立index時的欄位順序應該會差別,所以就建了二組
同事測試後,覺得應該只要建一組就好, 所以最後將index改為index3 (col7, col1,col3, col2, col3,col4,col5,col6,col7) 想要看看有沒有改善.

所以, 這次的重點就在測試index調整後到底有沒有改善 Logical Reads了
因為相同的查詢,所傳回的Logical Reads應該要相同, 所以在改變了index後,觀察Logical Reads是否有降低應該就可以知道改善的程度.
測試SQL除返回欄位數不一外,其WHERE條件皆相同, 皆使用到 col7, col1, col3
不同的返回欄位數也有差, 端看其是否符合covering index的使用,可參考這篇文章Tips on Optimizing Covering Indexes

結果如下:
返回所有欄位時,
index3:
資料表 'xxxx_tab'。掃描次數 2,邏輯讀入 7842,實體讀取 3,先讀讀入 4252。
伺服器執行次數: CPU時間 = 375 ms,經過時間 = 109339 ms。

index1+index2
資料表 'xxxx_tab'。掃描次數 2,邏輯讀入 7804,實體讀取 3,先讀讀入 4258。
伺服器執行次數: CPU時間 = 422 ms,經過時間 = 109294 ms。

返回部份較少欄位(含index 部份欄位col1 + 無index的欄位)
index3
資料表 'xxxx_tab'。掃描次數 2,邏輯讀入 7842,實體讀取 2,先讀讀入 4296。
伺服器執行次數: CPU時間 = 172 ms,經過時間 = 8443 ms。

index1+index2
資料表 'xxxx_tab'。掃描次數 2,邏輯讀入 7804,實體讀取 3,先讀讀入 4258。
伺服器執行次數: CPU時間 = 219 ms,經過時間 = 3570 ms。

返回部份較多欄位(含index 部份欄位col7, col1,col3+ 無index的欄位)
index3:
資料表 'xxxx_tab'。掃描次數 2,邏輯讀入 7842,實體讀取 2,先讀讀入 4296。
伺服器執行次數: CPU時間 = 203 ms,經過時間 = 5573 ms。

index1+index2
資料表 'xxxx_tab'。掃描次數 2,邏輯讀入 7804,實體讀取 3,先讀讀入 4258。
伺服器執行次數: CPU時間 = 219 ms,經過時間 = 3570 ms。

很粗糙的測試,得到的結論是, 在記憶體配置不變的情況下,合併成一個index 會讓Logical Reads變大,Physical Reads變小....所以合併成一個index應是有幫助的
哈哈...看錯記錄, 合併成一個index會讓Logical Reads變大


最後個人的感想是,...這樣的測試資訊,十分不足,很片面, 所以tuning這款代誌金正不是笨人想A卡里啊簡單
因為我們忽略了許多因素, 光是自已一個人做測試時, 就有很多的假設前提, 更何況是尖峰刻,user可是殺紅了眼在搶resource啊.

效能調校真的很花時間, 沒有意志力就甭做DBA了, 拿來做飯後閒餘時的興趣研究,真的可以打發不少時間..

2010年7月8日 星期四

RDLC 匯出PDF中文問題

同事給了一個在windows 2003 IIS6 rdlc 匯出的pdf檔
在windows 7 的環境下開啟....中文字全部都變成了亂碼.

以前遇到的亂碼通常都是字型未設成細明體(MingLiU)所致
但這次的狀況倒還是第一次遇到. 而且只有細明體才會有這個問題,設成標楷體的rdlc匯出時,看來正常.

後來也反向測試了一下, windows 7 IIS7 rdlc匯出的pdf檔, 拿到windows 2003 或xp 也都會變成亂碼
如果用acrobat 5.0開啟時還會有"無法找到或建立字型『MingLiU』‧某些字元法正確顯示或列印"的訊息出現, 用acrobat 9.3 則無此提示訊息.

大家反覆測了一整天, GOOGLE了半會,也沒啥solution...

今天就反應給微軟, 且待結果囉..

2010/07/14: 微軟回覆說.....這是已知的BUG, 在VS2010已解決, 建議改用VS2010.... 或等待VS2008的BUG FIX
測了一下, VS2010的RDLC, 部署到win2003 IIS 6或win7 IIS7環境,所匯出的PDF在win2003,xp,win7細明體中文皆可正常顯示.

唉, vs2008沒用多久,馬上又進入vs2010了, 技術更新的周期愈來愈短, 我跑得愈來愈慢...哈.

2010/07/15, 微軟說, 這是已知BUG, 細明體glyph ID在win 7已和之前不相同,所以會有對照上的問題, 但標楷體的glyph ID在win 7則維持不變, 所以要嗎上vs2010,要嗎改用標楷體.....vs2008會不會在下版sp fix bug? 可能不會吧......結案.
最後的解決方法是, 安裝virtual  pdf printer, 用列印的方式轉出PDF檔, 這樣連之前造字無法正常顯示的問題也一併解決.

2010/08/12, 看到路人甲的留言,照著這篇文章的說明,
1.先去下載Microsoft Report Viewer 2010 Redistributable Package
2.在dos command下, cd c:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\10.0.*
3.copy Microsoft.ReportViewer.WebForms.dll c:\temp\
4. cd c:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.Common\10.0*
5.copy Microsoft.ReportViewer.Common.dll c:\temp\
6.open your web  project, add refreance 上述二個dll檔
7.接著, 連程式碼都不用改喔, 只要在web.config檔置換下列幾個設置,然後重新build project
system.web 下的assemblies tag, 找到add assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0,.....及add assembly="Microsoft.ReportViewer.Common, Version=9.0.0.0

system.web 下的pages tag下的controls tag, 找到add assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0

system.web 下的httpHandlers tag,找到add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0,....
以上都把9.0.0.0改成10.0.0.0

system.web 下的buildProviders tag, 找到 add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.Common, Version=9.0.0.0,  ...

移除掉這行

如果是要部署到IIS7.0,
在system.webServer 下的handlers tag, 找到add name="Reserved-ReportViewerWebControl-axd" path="Reserved.ReportViewerWebControl.axd" precondition="integratedMode" resourcetype="Unspecified" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" verb="*"

把這行改成
add name="ReportViewerWebControlHandler" path="Reserved.ReportViewerWebControl.axd" precondition="integratedMode" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" verb="*"

8.測試一下你的報表囉......

原則上如果原本的rdlc是在SSRS 2005 base下開發, reportviewer 10.0也可以很順利的呈現,同時仍可以vs2008的report designer 進行設計

同時,我也順便測了一下, 用SSRS 2008 先設計出.rdl的報表(主要是有tablix), 然後放到vs2008的專案中,把副檔名改成.rdlc,一樣也可以正常的呈現.(我喜歡用這種方法來設計rdl,一旦報表完成後,只要把.rdl改成.rdlc就可以了, 很方便進行報表的開發及測試)

比較美中不足的是, 在vs2008的report designer中,無法順利開啟SSRS 2008 base的rdlc檔

不知vs2008上的report designer是否也能夠使用10.0的版本?

總之, 路人提供的解決方法, 真是太棒了, 真是一舉二得. 解決了之前PDF的問題, 又可使用SSRS 2008的報表新功能.

2010年7月5日 星期一

Dos Command , DIR

想要整理出專案中某一時間後有異動過的 .cs和.aspx檔清單.

不知道windows 7有沒有這個功能. 只好先用一點撇步.

先打開winrar, 在時間頁籤下,有個選項叫 要處理的檔案, 在包含時間選擇修改時間晚於...



把某段時間後的檔案找出來壓縮成 .rar

接著解壓縮到一個新的目錄, 利用 dos command

dir /S *.cs *.aspx > a.txt

如此.就可以快速產出含目錄說明及包含檔案數的異動程式清單了

如果不想要包含目錄結構可以下

dir /S / B *.cs *.aspx > a.txt

這樣就只會列出包含完整路徑的清單 了

解了燃眉之急

錢就是要這樣流通

 轉貼....朋友寄來的MAIL.... 真有意思...


太陽高掛,街道無人,時機歹歹,每個人都債臺高築,靠信用度日。
這天,從外地來了一位有錢的旅客,正開車通過鎮上。他在一家汽車旅館前停車,進去後,拿出一張 1000 元鈔票放在櫃台,說他想先看看樓上的房間,挑一間合適的過夜。
就在該名先生上樓的時候,店主抓了這張 1000 元鈔,跑到隔壁屠戶那裡付了他欠的錢。屠夫有了 1000 元,橫過馬路付清了欠豬農的錢。
豬農拿了 1000 元,奔向飼料和燃料供應商,也付清了他欠的錢。那個在農會做事的老兄,拿到 1000 元,趕忙去付清他召妓的錢(經濟不景氣的時候,當地的服務業也不得不提供信用服務)。有了 1000 元,這名妓女衝到旅館付了她所欠的房間錢。旅館店主把這 1000 元放到櫃檯上,以免旅客下樓時起疑。

此時這位旅客下樓來,拿起 1000 元鈔票,聲稱客房沒一間滿意的,他把錢收回,塞進口袋,走了。
這一天,表面看起來,沒有人生產了什麼東西,也沒有人得到任何東西。但是現在全鎮的債務都清了,而且以更樂觀的態度面對未來。
各位女士先生們,錢就是要這樣流通。

自動記錄滑鼠點選操作

為了一個需求,需要人工去點選幾個滑鼠的點選行為,找了幾種工具,覺得GS Auto Clicker最實用,極符合我的需求,尤其是多個固定位置的button點擊,解決了一個很耗時間的工作。 最後設定完預設hotkey F8為啟用鍵,就可以開始自動做工了。再按F8結束工作。 GS Au...