利用datatable讀取及異動資料.
結果exception message為
ERROR [HY000] [Informix][Informix ODBC Driver][Informix]Could not update a row in the table.
錯在哪一筆也看不出來?
是資料被lock?
查了半天毫無頭緒.
最後只好一筆一筆loop逐筆檢查看是哪一筆寫不進去
結果這個錯誤緣自於unique index duplicate 造成的.
昏+暈....................................
2013年1月22日 星期二
2012年12月23日 星期日
需要執行物件,才能進行這項操作
人客的環境最近更新的informix ODBC的版本,由原來的3.11換成3.70 TC4。
在做DTS資料轉入時出現了以下的錯誤
步驟錯誤來源: Microsoft Data Transformation Services (DTS) Package
步驟錯誤描述:需要執行物件,才能進行這項操作
(Microsoft Data Transformation Services (DTS) Package (80040005): 提供者產生的程式碼發生執行例外: EXCEPTION_ACCESS_VIOLATION)
步驟錯誤碼: 80040005
Step Error Source: Microsoft Data Transformation Services (DTS) Package
Step Error Description:Need to run the object to perform this operation
(Microsoft Data Transformation Services (DTS) Package (80040005): Need to run the object to perform this operation
) (Microsoft Data Transformation Services (DTS) Data Pump (80040005): Code execution exception: EXCEPTION_ACCESS_VIOLATION)
Step Error code: 80040005
一如往常,這個錯誤訊息令人丈二金剛摸不著頭腦,用中文google半天,找不出什麼蛛絲馬跡可以測。換成英文去查,也都和遇到的狀況不太相同。
後來直接VNC過去,看到ODBC的設定才發現原來他的機器中,相同名稱的DSN,一個放在【使用者資料來源名稱】下使用的是舊版的DRIVER,另一個放在【系統資料來源名稱】下使用的是新版的DRIVER。
新舊版本同時存在沒什麼問題,但DSN名稱相同,我想這就讓DTS搞混了吧。
移除掉舊版的DSN,DTS就正常囉。
在做DTS資料轉入時出現了以下的錯誤
步驟錯誤來源: Microsoft Data Transformation Services (DTS) Package
步驟錯誤描述:需要執行物件,才能進行這項操作
(Microsoft Data Transformation Services (DTS) Package (80040005): 提供者產生的程式碼發生執行例外: EXCEPTION_ACCESS_VIOLATION)
步驟錯誤碼: 80040005
Step Error Source: Microsoft Data Transformation Services (DTS) Package
Step Error Description:Need to run the object to perform this operation
(Microsoft Data Transformation Services (DTS) Package (80040005): Need to run the object to perform this operation
) (Microsoft Data Transformation Services (DTS) Data Pump (80040005): Code execution exception: EXCEPTION_ACCESS_VIOLATION)
Step Error code: 80040005
一如往常,這個錯誤訊息令人丈二金剛摸不著頭腦,用中文google半天,找不出什麼蛛絲馬跡可以測。換成英文去查,也都和遇到的狀況不太相同。
後來直接VNC過去,看到ODBC的設定才發現原來他的機器中,相同名稱的DSN,一個放在【使用者資料來源名稱】下使用的是舊版的DRIVER,另一個放在【系統資料來源名稱】下使用的是新版的DRIVER。
新舊版本同時存在沒什麼問題,但DSN名稱相同,我想這就讓DTS搞混了吧。
移除掉舊版的DSN,DTS就正常囉。
2012年12月15日 星期六
AS2000, Cannot connect to the repository.
在人客的主機上,做了幾件事
1.更改了sa 的密碼
2.更改DTS封裝檔中,動態屬性工件使用\\127.0.0.1\myWork$ 隱藏目錄 (因為資安限制,要把Server服務關掉了,所以無法再使用網芳)
好不容易把DTS都改完了, 接著要進入分析伺服器進行維護時,
哇列,剉屎....
分析管理員竟然無法連線...出現了以下這個錯誤
Cannot connect to the repository.
OLAP server: MYAS2000
Error:
[Microsoft][ODBC 驅動程式管理員] 找不到資料來源名稱且未指定預設的驅動程式
[Microsoft][ODBC Driver Manager] Data source name not found and no
default driver specified
什麼跟什麼啊...
根本還沒動到AS的任何東西啊.
而且關ODBC什麼事啊. AS repository 也不是用sa的帳號進行連線.
另外也測試了一下系統中,讀取MDX的功能, 明明連到AS就很正常..
但要進行partition process或者連線到分析伺服主機時, 就是有錯.
前前後後花了近3個小時GOOGLE...反覆關機開機測試..也把sa密碼改回來..
就是一直出錯.
最後心想,那重裝一下sql sever AS sp4看看好了, 結果竟然就OK了.
TMD. 這是我最後的結論. 但那3個小時實在是讓我嚇了一身冷汗啊。
2013/01/08 後記:
今天在公司的測試環境上,也出現了一樣的狀況,但訊息顯示為
[Microsoft][ODBC 驅動程式管理員] 資料來源名稱太
幸好有之前的經驗,先重裝AS SP4,馬上就解決了.
2012年11月10日 星期六
informix 11.5 charindex
informix 11.5(含)版本以前沒有提供charindex功能.
因為想要依傳入的尋找 字元組合來取得符合的position,所以為了方便,自已寫了一個湊合著用
以下function是區分大小寫尋找的..
--DOP FUNCTION uf_charindex;
/*
in_str:被搜尋的字元
in_delimiter;尋找字元
in_occurence:被找到的次數
in_exact:是否依in_delimiter逐字尋找
*/
CREATE FUNCTION uf_charindex
(in_str VARCHAR(255),in_delimiter VARCHAR(255)
,in_occurence INTEGER, in_exact CHAR(1) )
RETURNING INTEGER ;
DEFINE q_pos INTEGER;
DEFINE i INTEGER;
DEFINE q_len INTEGER;
DEFINE q_time INTEGER;
DEFINE j INTEGER;
DEFINE q_len_del INTEGER;
DEFINE q_found CHAR(1);
DEFINE q_str VARCHAR(255);
DEFINE q_step INTEGER;
IF nvl(in_occurence,1) <=1 THEN
LET in_occurence = 1;
END IF;
LET q_time=0;
LET i = 1;
LET q_pos = 0;
LET j = 1;
LET q_found = '0';
LET q_step = 1;
LET q_len = char_length(in_str);
LET q_len_del = char_length(in_delimiter);
--是否依in_delimiter逐字尋找符合字
IF in_exact = '1' THEN --完全符合
LET q_step = q_len_del;--先記下完整字長度
LET q_len_del = 1; --最外層只跑一次即可
END IF ;
FOR j = 1 TO q_len_del STEP 1
LET i = 1;
LET q_time = 0;
LET q_pos = 0;
LET q_found = '0';
--取比較字(若in_exact='1'則全部符合)
IF in_exact = '1' THEN
LET q_str = in_delimiter;
ELSE --否則逐字找直到找到in_occurence為止
LET q_str = substr(in_delimiter,j,1);
END IF;
FOR i = 1 TO q_len STEP 1
IF substr(in_str,i,q_step) = q_str THEN
LET q_pos = i;
LET q_time = q_time +1;
--找到後若與指定出現次數相符則結束
IF q_time = in_occurence THEN
LET q_found = '1';
EXIT FOR;
END IF;
END IF;
END FOR;
IF q_found = '1' THEN
EXIT FOR;
END iF;
END FOR;
RETURN q_pos;
END FUNCTION;
測試一下
SELECT FIRST 1 uf_charindex("臺東縣臺東市","縣市",1,'0') FROM systables;
傳回3
SELECT FIRST 1 uf_charindex("臺北市信義區","縣市",1,'0') FROM systables;
傳回3
SELECT FIRST 1 uf_charindex("臺東縣臺東市","市縣",1,'0') FROM systables;
傳回6
SELECT FIRST 1 uf_charindex("This is a book","book",1,'1') FROM systables;
傳回11
SELECT FIRST 1 uf_charindex("This are a lot of bOOks","O",2,'1') FROM systables;
傳回21
因為想要依傳入的尋找 字元組合來取得符合的position,所以為了方便,自已寫了一個湊合著用
以下function是區分大小寫尋找的..
--DOP FUNCTION uf_charindex;
/*
in_str:被搜尋的字元
in_delimiter;尋找字元
in_occurence:被找到的次數
in_exact:是否依in_delimiter逐字尋找
*/
CREATE FUNCTION uf_charindex
(in_str VARCHAR(255),in_delimiter VARCHAR(255)
,in_occurence INTEGER, in_exact CHAR(1) )
RETURNING INTEGER ;
DEFINE q_pos INTEGER;
DEFINE i INTEGER;
DEFINE q_len INTEGER;
DEFINE q_time INTEGER;
DEFINE j INTEGER;
DEFINE q_len_del INTEGER;
DEFINE q_found CHAR(1);
DEFINE q_str VARCHAR(255);
DEFINE q_step INTEGER;
IF nvl(in_occurence,1) <=1 THEN
LET in_occurence = 1;
END IF;
LET q_time=0;
LET i = 1;
LET q_pos = 0;
LET j = 1;
LET q_found = '0';
LET q_step = 1;
LET q_len = char_length(in_str);
LET q_len_del = char_length(in_delimiter);
--是否依in_delimiter逐字尋找符合字
IF in_exact = '1' THEN --完全符合
LET q_step = q_len_del;--先記下完整字長度
LET q_len_del = 1; --最外層只跑一次即可
END IF ;
FOR j = 1 TO q_len_del STEP 1
LET i = 1;
LET q_time = 0;
LET q_pos = 0;
LET q_found = '0';
--取比較字(若in_exact='1'則全部符合)
IF in_exact = '1' THEN
LET q_str = in_delimiter;
ELSE --否則逐字找直到找到in_occurence為止
LET q_str = substr(in_delimiter,j,1);
END IF;
FOR i = 1 TO q_len STEP 1
IF substr(in_str,i,q_step) = q_str THEN
LET q_pos = i;
LET q_time = q_time +1;
--找到後若與指定出現次數相符則結束
IF q_time = in_occurence THEN
LET q_found = '1';
EXIT FOR;
END IF;
END IF;
END FOR;
IF q_found = '1' THEN
EXIT FOR;
END iF;
END FOR;
RETURN q_pos;
END FUNCTION;
測試一下
SELECT FIRST 1 uf_charindex("臺東縣臺東市","縣市",1,'0') FROM systables;
傳回3
SELECT FIRST 1 uf_charindex("臺北市信義區","縣市",1,'0') FROM systables;
傳回3
SELECT FIRST 1 uf_charindex("臺東縣臺東市","市縣",1,'0') FROM systables;
傳回6
SELECT FIRST 1 uf_charindex("This is a book","book",1,'1') FROM systables;
傳回11
SELECT FIRST 1 uf_charindex("This are a lot of bOOks","O",2,'1') FROM systables;
傳回21
SSRS 2008 R2 網站很慢
下載了Report Builder 3.0進行測試
安裝過程中,需要設定report server
結果在進入 http://servername/reportserver 網頁的過程中,好慢好慢.
試了半天,以為是自已的SSRS 2008 R2安裝有問題.
結果竟是因為防毒軟體NOD32 Web存取防護中,HTTP、HTTPS掃描設定中啟用了HTTP檢查.
雖然試著位址管理想要排除本機HTTP的掃描. 但似乎都無效??
只好先關閉啟用了HTTP檢查的功能.
關閉後,Report Server變得飛快..當然Report Builder Preview也變快了
另外, 在http://localhost/reports/ 下, 按下報表產生器後, 出現了以下訊息
安裝過程中,需要設定report server
結果在進入 http://servername/reportserver 網頁的過程中,好慢好慢.
試了半天,以為是自已的SSRS 2008 R2安裝有問題.
結果竟是因為防毒軟體NOD32 Web存取防護中,HTTP、HTTPS掃描設定中啟用了HTTP檢查.
雖然試著位址管理想要排除本機HTTP的掃描. 但似乎都無效??
只好先關閉啟用了HTTP檢查的功能.
關閉後,Report Server變得飛快..當然Report Builder Preview也變快了
另外, 在http://localhost/reports/ 下, 按下報表產生器後, 出現了以下訊息
若使用報表產生器,您必須在此電腦上安裝.Net Framework 3.5
但本機的.net framework明明就是上到了4.0
結果在切換成相容性檢視後,就正常了.
雖然我之前sql server 2008 r2安裝的是英文版,
但report manger web site的介面是跟著IE的語言設定而定的,所以介面就出現了中文
如果想要變回英文,則在IE網際網路選項中, 一般頁籤最下方的語言鍵,新增英文[en]語言,並調整序順到第一位
即可切換為英文介面.
另外,由 http://localhost/reports/ 下安裝報表產生器會自動安裝中文版report builder 3.0
若要使用英文版介面,則需再下載安裝英文版report builder後,再自行開啟即可.
2012年10月31日 星期三
informix dateadd
informix 11.5模擬sql server dateadd, 但傳入及傳出皆為國曆日期數字
CREATE FUNCTION ifx_f_dateadd
(in_type varchar(5),in_date integer, in_diff integer )
RETURNING integer ;
DEFINE p_date date;
DEFINE p_day integer;
--轉為西元日期
--改成以下方式來轉換
--因為上述方式會隨著DB版本或onconfig中日期格式指定而變,可能會有錯誤.
SELECT (TO_DATE((in_date+19110000)::char(8),'%Y%m%d'))
INTO p_date FROM empty;
IF UPPER(in_type) IN ('DAY','D') THEN
SELECT p_date + in_diff into p_date from empty;
ELSE IF UPPER(in_type) in ('MONTH','M') THEN
--改成以下方式,因為1011031 取下月時會有The result of a datetime computation is out of range.的錯誤,
--以下方法閏年也適用
SELECT add_months(p_date,in_diff ) into p_date from empty;
ELSE IF UPPER(in_type) IN ('YEAR','Y' ) THEN
--以下方法閏年也適用
SELECT add_months(p_date,in_diff*12) into p_date from empty;
END IF; END IF; END IF; --這一串END IF; 搞了我一個小時才知道要這樣寫....
SELECT TO_CHAR(p_date ,'%Y%m%d')::INTEGER - 19110000
INTO p_day
FROM empty;
END FUNCTION;
測試,
CREATE TABLE empty (col1 INT);
INSERT into empty VALUES(0);
INSERT into empty VALUES(0);
select ifx_f_dateadd('y',1010814,-1) FROM empty;
回傳1000814
select sr_f_dateadd('m',1011031,1) FROM empty
回傳1011130
select sr_f_dateadd('y',1010229,-1) FROM empty
回傳1000228
ps.2012/08/14寫第一版,3個月後,知識長進,大改一番.
sql cluster firewall應開哪些port?
人客的資安開始規定,所有主機都要開啟Windows 防火牆,所有輸入都要以例外的方式來設定.
雖然網管已有一層防火牆,但敵人就在你身邊,自已人也不可靠啊...
主機間有二台主機做sql server cluster (db server name = sql-cluster) , 在開啟了防火牆後, 另一台主機無法以sql-cluster進行連線.
但使用IP連線卻是可以的
試了半天,除了在二台sql cluster db主機要開1434,1433的port之外
還得要加開137,138,139,445 四個port 才能使用server name 來連線
這些port在例外中已有定義,為檔案及印表機共用,只要勾選即可
另外,應在變更領域中加入IP自訂清單比較保險.
雖然網管已有一層防火牆,但敵人就在你身邊,自已人也不可靠啊...
主機間有二台主機做sql server cluster (db server name = sql-cluster) , 在開啟了防火牆後, 另一台主機無法以sql-cluster進行連線.
但使用IP連線卻是可以的
試了半天,除了在二台sql cluster db主機要開1434,1433的port之外
還得要加開137,138,139,445 四個port 才能使用server name 來連線
這些port在例外中已有定義,為檔案及印表機共用,只要勾選即可
另外,應在變更領域中加入IP自訂清單比較保險.
訂閱:
文章 (Atom)
pdf.js 無法顯示部份字
有個檔案在pdf viewer套件中無法顯示內容,但下載檔案後使用工具又可以正常顯示。 本來以為是套件版本太舊的原因,於是去下載pdf viewer套件 https://github.com/mozilla/pdf.js 更新後還是一樣。 覺得應是字型缺漏的問題,於是用PDF-X...
-
上網找了免費的白箱檢測工具,找到了 puma scan 因為支援OWASP TOP 10的檢測,所以這是一個符合客戶需求又能與Visual studio結合的工具(白話說...交差了事矣....) 更重要的是這不用錢....檢測工具都貴森森的,尤其是源碼檢測工具。 ht...
-
建了一個工作排程,定時執行batch檔。 batch中寫了一段xcopy,主要針對有異動較新檔案時才複製。 echo off for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find...
-
改用SQL Server Management Studio 2017有一段時間了。 在執行一段之前寫的SQL要組出一段語法時,里頭包含了使用CHAR(10)當作換行符號的文字,在輸出結果中,使用複製貼上的方式要進行執行時,發現換行符號都失效了。 但如果使用Results...