2012年3月4日 星期日

DIME 通訊協定錯誤: 不支援 '9' DIME 版本。只支援第 1 版

今天突然發現OLAP Server無法連結, 出現以下錯誤訊息.


Microsoft.AnalysisServices.Xmla.ResponseFormatException: DIME 通訊協定錯誤: 不支援 '9' DIME 版本。只支援第 1 版。   Microsoft.AnalysisServices.Xmla.DimeRecord.ReadHeader()   Microsoft.AnalysisServices.Xmla.DimeReader.ReadRecord()   Microsoft.AnalysisServices.Xmla.TcpStream.GetResponseDataType()   Microsoft.AnalysisServices.Xmla.CompressedStream.GetResponseDataType()   Microsoft.AnalysisServices.Xmla.XmlaClient.EndRequest()   Microsoft.AnalysisServices.Xmla.XmlaClient.Authenticate(ConnectionInfo connectionInfo, DateTime startTime)   Microsoft.AnalysisServices.Xmla.XmlaClient.OpenTcpConnection(ConnectionInfo connectionInfo)   Microsoft.AnalysisServices.Xmla.XmlaClient.Connect(ConnectionInfo connectionInfo, Boolean beginSession)   Microsoft.SqlServer.Management.Smo.Olap.SoapClient.Connect()   OlapEvent(SCH_STEP* pStep, SUBSYSTEM* pSubSystem, SUBSYSTEMPARAMS* pSubSystemParams, Boolean fQueryFlag).  步驟失敗。

 想了一下,日前把OLAP Port由預設的2383 改成了999, 所以連線時,在Server name要改成 servername:999.

只是這個錯誤真讓人摸不著頭緒,還以為是不是版本更新造成的呢!

HTTP OLAP 連線的安全性


原則上使用HTTP OLAP是採匿名使用者連線,可能有安全性的考量。
即使用者只要知道了HTTP OLAP的網址,即可透過OLAP BROWSER來連結OLAP.最簡單的工具像EXCEL本身就具有連線到Analysis Server的功能.


但如果走原先的OLAP連線,則使用者又必須是網域中的成員.才能連結OLAP Server.

在方便性的考量下, 我們採取了 HTTP OLAP + Custom Web Services + IIS IP 限制的做法.
即在WEB 專案建立一個OLAP Server資料讀取的的web services,依登入使用者配合客戶希望的權限控管原則進行角色權限的管制

然後在HTTP OLAP IIS 目錄,僅針對固定AP Server開放IP連線.


如此一來便可享受WEB 專案讀取OLAP Server的安全與便利.

這種做法應也適用OLAP Server與AP Server 或DB Server皆在同一台機器上,因為只需將IIS IP限定為本機即可避免外部機器使用HTTP OLAP連線.


以上做法實做後,運行一段時間,看來是可行的.

另一種做法則是保持使用原來的OLAP Server連線, 在WEB 專案建立一個Web Services,依登入使用者動態impersonate 已計劃好的網域帳戶權限來進行連線.

2012年3月1日 星期四

IGNORE_DUP_KEY = ON

含primary key資料表中,當有新增具重覆鍵資料時,都會有錯誤訊息,因而中斷了整批的交易

若想要自動忽略重覆鍵錯誤.可使用IGNORE_DUP_KEY = ON,如此仍可繼續寫入其餘交易資料忽略此錯誤

用到的情境不多,多虧同事無意間的測試看到這個參數...


--重建資料表
CREATE TABLE dbo.PurchaseOrderDetail
(
    PurchaseOrderID int NOT NULL
        REFERENCES Purchasing.PurchaseOrderHeader(PurchaseOrderID),
    LineNumber smallint NOT NULL,
    ProductID int NULL 
        REFERENCES Production.Product(ProductID),
    UnitPrice money NULL,
    OrderQty smallint NULL,
    ReceivedQty float NULL,
    RejectedQty float NULL,
    DueDate datetime NULL,
    rowguid uniqueidentifier ROWGUIDCOL  NOT NULL
        CONSTRAINT DF_PurchaseOrderDetail_rowguid DEFAULT (newid()),
    ModifiedDate datetime NOT NULL 
        CONSTRAINT DF_PurchaseOrderDetail_ModifiedDate DEFAULT (getdate()),
    LineTotal  AS ((UnitPrice*OrderQty)),
    StockedQty  AS ((ReceivedQty-RejectedQty)),
    CONSTRAINT PK_PurchaseOrderDetail_PurchaseOrderID_LineNumber
               PRIMARY KEY CLUSTERED (PurchaseOrderID, LineNumber)
               WITH (IGNORE_DUP_KEY = OFF)
) 
ON PRIMARY;



--修改索引
USE AdventureWorks2008R2;
GO
ALTER INDEX AK_SalesOrderHeader_SalesOrderNumber ON
    Sales.SalesOrderHeader
SET (
    STATISTICS_NORECOMPUTE = ON,
    IGNORE_DUP_KEY = ON,
    ALLOW_PAGE_LOCKS = ON
    ) ;
GO


參考MSDN上的說明
create table
alter index

2012年1月17日 星期二

呼叫 LoadLibraryEx失敗

因為一個舊系統的需要安裝.net 1.1,所以我在windows 7 enterprise 64X上安裝了.net framework 1.1
 結果造成原本可以瀏覽的.net 4的web site都無法瀏覽了.
出現了這個錯誤

呼叫 LoadLibraryEx (於 ISAPI 篩選器 "c:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.dll" 上) 失敗

Calling LoadLibraryEx on ISAPI filter “C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll” failed

尋找一番後, 進行了二件事
1. 在dos 模式下, 切換到C:\Windows\Microsoft.NET\Framework\v4.0.30319 及C:\Windows\Microsoft.NET\Framework64\v4.0.30319 執行 aspnet_regiis -r
2.在iis應用程式集區下,在.net 4.0的應用程式集區下,進到進階設定下,將啟用32位元應用程式設為True

2012年1月16日 星期一

select from sp_help_job

--查看job目前執行狀況
select 
 name
,last_run_date as lastdt
,last_run_time as lasttm
,case last_run_outcome
 when 0 then 'Failed.'
 when 1 then 'Succeeded.'
 when 3 then 'Canceled.'
 when 5 then 'Unknown'
 else 'others' end as lastOutcome
,case current_execution_status
 when 1 then 'Executing.'
 when 2 then 'Waiting for thread.'
 when 3 then 'Between retries.'
 when 4 then 'Idle.'
 when 5 then 'Suspended'
 when 7 then 'Performing completion actions.'
 else 'others.' end as currentStatus
from openrowset ('SQLNCLI', 'Database=msdb;Uid=sa;Pwd=xxxx;','set fmtonly off;exec sp_help_job')
where name like '%yourJobName%'




參考database journal 文章Detecting The State of a SQL Server Agent Job的欄位說明

2012年1月10日 星期二

XXXXX.xls已被修改,你是否要儲存檔案?

每次開啟一個EXCEL檔時,沒做任何修改,關閉這個檔案時,都會提示一個詢問視窗
 XXXXX.xls已被修改,你是否要儲存檔案?

可是明明就沒改啊....

後來採用逐一刪去法, 看看到底是哪個cell在搞怪

原來是有一個cell使用了TODAY()的函數, 造成每次開啟EXCEL時,這個cell都會被重新計算一次.

找到兇手了!

2011年12月22日 星期四

批次刪除檔案

想要在某一目錄包含其子目錄下,快速刪除.xls的檔案
其中,想要排除某一子目錄 不要處理

REM 先將保留的目錄下所有檔案屬性設為唯讀
attrib /s .\reserved\*.xls +r +a > NUL 
REM /s刪除檔案(含子目錄)
del /s .\*.xls 
REM  再將保留的目錄下所有檔案屬性還原
attrib /s .\reserved\*.xls -r -h -s > NUL

離線安裝SSMS 22 launched extracted application exiting with result code 0x138b

SSMS 22 安裝器下載頁面 https://learn.microsoft.com/zh-tw/ssms/install/install https://aka.ms/ssms/22/release/vs_SSMS.exe 將安裝檔下載到本機,檔案好大2.5G  https:...