2008年12月4日 星期四

SQL Server 2005電腦名稱改變導致無法作複寫Replication(新增發行集時)

發生原因:最近要測試SQL Server 2005的複寫功能(發行與訂閱),以解決公司現行環境中有多台SQL Server間要排程作SSIS轉檔的問題,但是在當我要在發行端的主機上要作新增發行集的工作時,錯誤訊息出現了。

錯誤訊息:
SQL Server無法連接到伺服器'NewServerName'
其他資訊:
SQL Server 複寫需要有實際的伺服器名稱才能連接到伺服器。不支援透過伺服器別名、IP 位址或任何其他替代名稱來進行連接。請指定實際的伺服器名稱,'OldServerName'。 (Replication.Utilities)

問題追查:錯誤訊息中的'NewServerName'是現在這台主機的電腦名稱,'OldServerName'是我沒見過的電腦名稱,剛看到錯誤息時,我以為是我在hosts檔中設的主機名稱有誤,但是檢查過都沒錯呀!我印象中好像之前的同事有跟我問過要幫這裡SQL Server改主機名稱的事(我之前是待SI公司,後來公司倒了,我就輾轉轉到以前的客戶公司上班),經詢問後才知道,的確當初這台主機在灌完SQL Server後有改過電腦名稱。我下了以下SQL的指令確認:
Select @@ServerName
出來的結果確實是OldServerName


解決方法:我印象中SQL Server 2000要改電腦名稱的步驟是很複雜的,不然改完後SQL Server會無法啟動,SQL Server 2005我就不確定了,我想是不是以前的同事漏了那個步驟,導致現在的問題,所以就上微軟找KB囉!結果發現SQL Server 2005要改電腦名稱超簡單,3個步驟搞定:
1.直接先改電腦名稱,改完重開(其實重開完SQL Server就可以用了,當初前同事就只作到這)
2.下SQL指令  sp_DropServer OldServerName
3.一樣下SQL  sp_AddServer NewServerName,Local
搞定結案!

PS.寫這篇花的時間比我解決這個問題的時間還長耶!怎麼會這樣,打字太慢了嗎?

2008年10月31日 星期五

我是北極熊嗎?

今天在能力雜誌電子報看到以下的一段文字,看到北極熊不支倒地,忽然一陣毛骨悚然,心有所感遂記之:

無知與貪婪讓經濟大失血,也讓危機擴大到幾乎無法控制的地步。這種現象令人不禁想起愛斯基摩人捕捉北極熊的故事:他們將海豹血裝在水桶裡,然後插上刀子,等到凍結為血冰棒後,將之置放於野地,北極熊會尋著血跡而來,然後開心地猛舔血冰棒,直至鋒利的刀劃破北極熊的舌頭,溫熱的血液讓北極熊更加瘋狂,渾然不知自己舔的就是自己的血。最後北極熊因為失血過多而不支倒地,此時獵人會悄然現身,不費吹灰之力帶走囊中物。

2008年10月30日 星期四

我又換工作了

又是好一段時間沒有更新了!因為最近真的很忙.....

七月報到的那一家上櫃公司工作量比之前的公司多(應該說之前的公司太閒了),又作Coding又作PM的,事情雖然多,但還是滿有成就感的,只是老婆會唸,再加上老婆懷孕,想要多陪陪他,所以就想要換工作.

說也真神奇,才想沒多久,就聽以前同事說,問我知不知道某家老客戶的MIS主管要離職,我一聽馬上就投履歷過去,也很幸運的被錄取了~~

其實到上櫃公司之前,我也一直在找MIS主管的工作,可是一直都沒機會,最主要的就是沒有製造業的Domain KnowHow及ERP相關經驗,這次能錄取我想真的是勝在之前工作累積的人脈,台中作資訊的真的圈子很小,不停的努力工作讓人留下好印象真的很重要!

算是從10月開始上班,這邊的MIS人員比技術當然是比我差一截,但我的Domain KnowHow則是嚴重不足,要好好進修三次加工製造業的相關流程,還好這部份我也有朋友可以幫忙,總之希望快些進入狀況!

2008年7月25日 星期五

VS2005為什麼沒有ASP .Net Web應用程式專案可選

在這個月中旬到新竹總公司報到時 ,公司就發了一台新的ASUS W7 Notebook給我,所以這次報表開發的工作就是在新的NB上作的。

昨天把報表程式改成C#版寄出去後我就下班了,我老闆Call我說,專案的窗口發mail問怎麼沒看到.designer.cs的檔案,這個問題我遇過,知道好像是Web應用程式才會有*.designer.*的檔案,可是我在我的VS2005中要新建專案都沒看到Web應用程式的專案類型可選,所以就先回mail說我的程式裡沒有這些檔案。

早上專案的窗口回mail說是website專案不會有*.designer.cs的檔案,他已經檔案轉成WebApplication就OK了。

所以我又去拜Google大神了,原來是我週一才灌的VS2005還沒上Service Pack,上了SP1,ASP .Net Web應用程式專案範本就出現囉!

C#如何轉換VB.NET的ReDim Preserve

之前一直是用VB.NET作開發,最近換公司老闆的第一個交付的任務就是叫我寫報表,寫好後交出去,專案經理才說要用C#...

那就只好改囉!自己改嗎?我C#又不熟,當然是用工具。下面這個網站可以提供VB.NET和C#程式碼雙向轉換。http://labs.developerfusion.co.uk/convert/vb-to-csharp.aspx

前幾支報表轉的還都順利,只有在取出DataTable內資料時要手動改一下,如:
dtResult.Rows(i).("Item") 要改成 dtResult.Rows[i]["Item"]
但是轉到後面幾支比較複雜的報表,要計算表格的RowSpan,我的程式中有用到ReDim的地方就出現訊息
    // ERROR: Not supported in C#: ReDimStatement

所以就參考網路資料寫了一個Function ReDim:
參考網址:http://www.cnblogs.com/skyiv/archive/2005/09/19/ReDim.html
static int[] ReDim(int[] array, int newLength)
{
    if (array == null)
    {
        throw new ArgumentNullException("array");
    }
    if (array.Rank != 1)
    {
        throw new ArgumentException("只允許一維陣列", "array");
    }
    if (newLength < 0)
    {
        throw new ArgumentOutOfRangeException("newLength", "newLength需大於0");
    }
    if (newLength == array.Length) return array;

    int[] newArray = new int[newLength];
    Array.Copy(array, 0, newArray, 0, Math.Min(array.Length, newLength));
    return newArray;
}

因為我用到的是整數陣列,所以我就將範例中原本宣告為Array的部份都直接改成int[],不然我還要找要怎麼作型別轉換,將傳回的Array轉回int[],我C#還不熟,趕專案先,以後再研究。

2008年7月22日 星期二

又是停用服務惹的禍!

環境:
Win XP SP2+Office 2007

問題:
1.開啟Word檔時會出現"此文件無法註冊,無法在其他文件建立與此文件的連結。"錯誤訊息
2.Windows Live Writer程式無法開啟
3.Outlook選項內的"建立簽名"及"信箋和字形"等按鈕,按下無反應

解決方式:
原來又是我亂停用服務的毛病所致,啟動DCOM Server Process Launcher就好了!

2008年5月29日 星期四

SQL 2000 如何關閉 xp_cmdshell

有個客戶最近他們公司網站被駭客入侵,懷疑駭客是用xp_cmdshell寫木馬到主機,發mail問我要如何關閉SQL 2000 的xp_cmdshell 指令。

 

這個FAQ的解答如下:
Use Master
Exec sp_dropextendedproc N'xp_cmdshell'

2008年5月27日 星期二

書摘及心得-千萬年薪的房仲高手

看這本書不是我要去賣房子了,而是我想買房子很久了,一直下不決心,和仲介也打過不少次交道,感覺都不是很好,在PTT上聽說,這本書是某些新進仲介指定教材,特地去圖書館借來看看,了解仲介們在想些什麼!

==========以下為本書摘要===========
開發為業績之父,議價為業績之母,銷售為業績之子

委託:
拉五同:同好、同姓、同鄉、同校、同事
沒有賣不掉的房子,只有賣不掉的價格

議價:
議價比調價容易-請屋主調價總比要買方加價容易
沒有賣不掉的房子,只有賣不掉的價格

銷售:
天龍八部:了解、試探、出價、堅持、調價、接近、要約、成交
了解-買方及賣方買屋賣屋的原因、了解案源、異議處理
試探-買屋的急迫性、促銷手段以顯示案子搶手
出價-請買方表示意見(嫌厝的人就是買厝的人)、問買方認為的合理價(回報屋主)
堅持-卡價位
調價-買方不加我不降,買方有加我少降
接近-出價接近底價要找台階下,不要讓買方誤以為差距過大
要約-要有一定要收斡的決心,否則將淪為帶看導遊
成交-如屋主不願再降價,買方也加價到極限,可衡量利潤以服務費折讓方式讓買賣雙方成交

=============我的心得=============
沒有賣不掉的房子,只有賣不掉的價格,書中重覆提了好幾次,絕對是重點,知易行難吧!
這就是為什麼不是每個房仲業務都能千萬年薪的原因吧!

2008年3月24日 星期一

關於WebService開發的個人經驗

去年幫客戶和某超商作欠費的即時查詢及代收的整合,剛開始試寫了幾種方法,但是超商都說我回的Message他們驗證不過吃不進去,最後是超商提供的一個C#範例程式,我拿來改成VB.Net,所以當時有一些Attribute的語法被不明就裡的拿來套用,剛好最近兩天有空就拿來研究,終於都搞通了,以下就是這兩天的研究成果

以VS2005開發Web Service來傳遞自訂物件時,如下例
Public Class Service1
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function Operation(ByVal obj As MyObj) As MyObj
.....
End Function
End Class

Public Class MyObj
.....
End Class


預設Request和Response的SOAP Message會長的像這樣:
=======Request=======
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope ...>
<soap:Body>
<obj>
....
</obj>
</soap:Body>
</soap:Envelope>

=======Response=======
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope ...>
<soap:Body>
<OperationResult>
....
</OperationResult>
</soap:Body>
</soap:Envelope>

但超商希望的是無論在Request和Response的訊息都是在SOAP BODY內包一個<OLTP>...</OLTP>就好,長的像這樣:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope ...>
<soap:Body>
<OLTP>
....
</OLTP>
</soap:Body>
</soap:Envelope>

要怎麼作呢?
要修改Request時的Message容易!
Public Class Service1
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function Operation(ByVal objOLTP As MyObj) As MyObj
.....
End Function
End Class

要改Response時的Message就要在我們的自訂物件上多加一些Attribute的東西
Imports System.Xml.Serialization
<XmlRootAttribute(ElementName:="OLTP")> _
Public Class MyObj
.....
End Class

不過這樣(加上Attribute)改過之後,如果您是在VS2005直接用加入Web參考的方式,去呼叫這個Web Service會發現收不到傳回值,而且您的測試專案可能就會有一個運算式沒有產生值的錯誤訊息,去看Reference.vb(在專案的.\Web References\Web參考資料夾名稱下)會發現您呼叫的是一個Sub而不是Function,當然您可以直接修改這隻程式,不過我強烈建議絶對不要這樣作,因為那一天您不小心去更新Web參考時就毀了,VS2005會重新產生這個檔案,您所作的修改就不見了。所以我建議如果會有要自己修改Reference.vb這個檔案的人,請照這樣作!

  1. 先移去剛剛加的<XmlRootAttribute(ElementName:="OLTP")> _,存檔並重新建置(重建一定要作,不然後面就白作了)
  2. 先開啟VS2005命令提示字元
  3. 輸入 WSDL /l:VB http://伺服器IP/WebService名稱.asmx
  4. 在現行資料夾下會產生一個 WebService名稱.vb 的檔案
  5. 將這個.vb的檔案複製到測試專案資料夾下並加入到測試專案中
  6. 修改測試專案程式碼,將原本程式碼中的 Web參考資料夾名稱.ServiceName 改成 ServiceName,Web參考資料夾名稱.MyObj 改成 MyObj
  7. 作到這裡,看起來已經沒有錯誤訊息了,但是實際執行時,您會發現雖然是Function但傳回值卻永遠是Nothing,那是因為VS2005只會去讀SOAP BODY內的<XXXXResult>...</XXXXResult>內容當作傳回值(XXXX就是您WebMethod的Function名稱)
  8. 打開 WebService名稱.vb ,修改Function宣告式的傳回值部份,在XmlElementAttribute中加入ElementName:="OLTP" 讓VS2005會去讀SOAP BODY中的<OLTP>...</OLTP>內容當作傳回值即可

Public Function Operation( <System.Xml.Serialization.XmlElementAttribute( _
[Namespace]:="http://tempuri.org/")> ByVal OLTP As MyObj) _
As <System.Xml.Serialization.XmlElementAttribute([Namespace]:="http://tempuri.org/", ElementName:="OLTP")> MyObj
Dim results() As Object = Me.Invoke("Operation", New Object() {OLTP})
Return CType(results(0),MyObj)
End Function


2008年3月2日 星期日

如何自動開啟Oracle資料庫

在Windows環境下只要設定服務:Oracle_SID的啟動類型為自動即可,在UNIX環境下則是修改/var/opt/ovacle/oratab,將SID那一行的N改為Y即可

Oracle OCP證書申請發證流程

今天收到一封e-mail,是去年一起上Oracle教育訓練課程的同學寄來的,原來他也考過OCP了,但不知道要怎樣才能拿到證書,去年我剛考過時也是搞不清楚,問了已經考過OCP的同事,他也只記得要上要去prometric網站上登錄,所以我就只好去拜Google大神,那時想說只會用這一次所以也沒有保留資料,所以剛剛又再幫同學找了一遍,還真不好找,既然會有人問,就把他記在我的bolg囉!

以下資料引用自:http://www.hxre.org/post/50.html

引用網址為: http://www.hxre.org/cmd.asp?act=tb&id=50&key=83854

============傳說中的分隔線=====================

如果您已经完成ORACLE一门原厂培训和顺利通过了OCP(042,043)考试后,请在7天后登录如下网址:
http://oracle.prometric.com,并按照如下步骤进行填写。
1) 如果您已经注册,请点击Secure Sign-in;如果未注册,请点击First-time Registration建立新帐户
(无论注册与否,请务必使用已有的Prometric ID,否则不能确保证书拿到);
2) 请填写用户名和密码,并点击“继续continue”
3) 选择“进行考试Take Test”
4) 在中间栏框“Private Tests”处,请9i考生输入“9icourse”,而10g考生输入“10gcourse”,并“提交submit”
5) 点击“take test”或“resume test”后,再点击“begin survey”,正式进入调查问卷一
6) 请按步骤逐一填写各项,请勿空项、漏项。请务必填清“registration ID”
7) 完成问卷一后,请填写您的建议或空项,点击“下一步”
8) 出现个人信息界面后,点击“继续”,开始进入调查问卷二
9) 点击“begin Test”,并回答问题,之后“结束问答End Test”
10)确认“结束考试”。请填写您的建议或空项,点击“下一步”
11)出现个人信息界面后,点击“继续”
12)确认无误后,“sign-out”退出
Oracle将以此调查问卷一和二做为发放证书的依据,一旦收到问卷,将尽快受理。
-------------------------------------------------------------
关于Hands On Course的填写提示及补救方法
Hands On Course 的填写注意点
1、链接www.oracle.prometric.com网址,填写Prometric ID and password 进入页面。第一次进入的话,
请进入Creat an Account进行密码等设置。
2、Keycodes for the Hands On Course Requirement. For example:
Oracle Datebase 10g Administrator Certified Professional------------10gcourse
Oracle Datebase 10g Administrator Certified Master------------------ocmcourses
Oracle 9i Datebase Administrator Certified Professional--------------9icourse
Oracle Application Server 10g Adiministrator: Certified Professional-------Available Soon
Oracle 9i Database Adiministrator Certified Master-------Available Soon
3、按要求完成选择题目。
其中有一题是需要填写你的Enrollment ID,即Registration Number。这个在考试结果上有写明。
4、在完成所有的选项后,确认无误,请选择提交。等待信息认证的确认结果。
------------------------------------------------------------------------------------------------
hands on (50-60天)后还没有收到证书,或者还有其他疑问,请拨打甲骨文大学的热线电话:800-810-9931转62548
--------------------------------------------------------------------------------------------------
Hands On Course 填写错误后的补救方式
1、如果在提交前就发现自己有地方填写错误,那么还好,请耐心等待30天。30天后请更正信息重新提交。
2、如果提交后发现自己填写错误,那么也还好,不是无法挽回的。就是比较麻烦:~
第一、请耐心等待7-30天,在此期间您将会收到Prometric与Oracle发出来的邮件;
第二、再收到邮件后,请更加耐心地写封邮件至:OCPREQ_ww@oracle.com(如果您参加的 是OCP的考试的话);
第三、邮件的Title为:9i/10g ocp certificate successful kits request;
第四、就是邮件的内容啦,必须包含个人信息+考试时间(最后一门考试结束的时间) +培训课程名称
+Enrollment ID+培训开始的时间+培训地点+培训机构
第五、发送邮件,继续等待。:Z
基本上就是这样一个步骤,如果还有什么问题,
也可以打甲骨文大学的热线电话“800-810-9931”去咨询啊!

2008年1月26日 星期六

Windows 2003 Server無法啟用休眠的問題

最近裝了一台桌機打算用來跑VM,有4G的RAM(RAM好便宜喔!!2G只要1200,正在考慮要不要加到8G),因為看到網上有人在討論32bit的XP或Vista無論您有多少RAM,系統只會顯示有3.2G~3.4G的記憶體的問題,64bit OS的支援現在又還不夠好,所以這台新的桌機當然是裝Windows server 2003 Enterprise Edition囉!!

一樣是Windows server 2003 Enterprise Edition,我手上有好幾個版本,都是之前公司有訂閱MSDN Subscription時抓的,所以當然是灌手上最新的R2版本,灌完後居然看不到啟用休眠的選項.....

上網用2003 休眠 關鍵字去找,可是都找不到符合我狀況的訊息,看到有人說可能是硬體支援的問題,我想應該不可能吧!但是還是灌XP試看看,剛灌好也是沒看到休眠選項,但驅動程式裝完就出現了,這時我也動搖是不是要改用XP,但看到那少了800M的2G的記憶體實在很不爽,所以又拿了最早版本的2003來重灌,結果咧,才剛灌完驅動程式都還沒裝的情形下,休眠選項居然出現了,真是感動呀!!

高興沒有很久,因為去看系統的記憶體只有3.2G,不過這個好解決,之前作過功課,在boot.ini加個/PAE的參數就可以解決,加上後重開,休眠選項又不見了。這時我就很確定問題出在那裡了,當初第一次裝2003 R2版本時,SP2會自動幫您在 boot.ini 中加上 /noexecute=optin 選項,也就等同啟動PAE模式,相關訊息請搜尋 PAE 4GB關鍵字就可以找到。

知道原因後,要找答案就簡單了!搜尋 PAE 休眠 讓我絕望的答案就出現了!

關於使用PAE模式就不能啟用休眠的詳細說明,請看以下的微軟連結:
http://support.microsoft.com/kb/316538/zh-tw

為什麼我那麼執著要用休眠....因為真的很好用,尤其是當您程式灌很多,開關機都會很慢的時候真的超好用。

其實今天在寫這篇blog前我已經放棄要在新機器上使用休眠了,在寫的過程中想到,64bit OS我還沒試耶!說不定可以喔!

2008年1月25日 星期五

VB6專案出現 "找不到檔案 'C:\WINDOWS\system32\IEFRAME.dll\1'"錯誤訊息

最近接手一個VB6的維護案,拿到Source後,一開.vbp檔案就給我出現"找不到檔案 'C:\WINDOWS\system32\IEFRAME.dll\1'"的錯誤訊息,哇哩咧是怎樣!!

拜過Google大神後得到結論,就是IE7惹的禍,解決方法就是自己作一個.reg的檔案並執行,將IE7刪掉的IE6機碼再註冊到系統中。

以下是檔案內容:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\TypeLib\{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}]

[HKEY_CLASSES_ROOT\TypeLib\{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}\1.1]
@="Microsoft Internet Controls"

[HKEY_CLASSES_ROOT\TypeLib\{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}\1.1\0]

[HKEY_CLASSES_ROOT\TypeLib\{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}\1.1\0\win32]
@="C:\\WINDOWS\\system32\\ieframe.dll"

 

據網友慘痛經驗,有時候IE7更新,這個問題就會發作,所以....這個檔案留著不要刪吧!用到的機會不只一次!!

2008年1月12日 星期六

在XP裡找不到之前建的VPN連線,也無法建立VPN連線

問題:

昨天要用VPN連線到客戶那裡時,發現為什麼我之前建的VPN連線不見了,而且當我想新增VPN連線時,卻發現選項都反白的,讓我束手無措,拜Goole大神也都無用,好像全天下只有我發生這狀況。

無法建立VPN連線

 

解決方法:
原本想要重灌.....其實前陣子本來就有點想重灌,因為大概也三年沒重灌我的電腦了,只是每次想到要裝那一堆開發工具我就打退堂鼓了....

還好後來想到前陣子我因為光開機起來,還沒跑任何程式記憶體就用了350MB的問題,停用了很多服務的事,就去找找看是不是那個服務沒開的關係。

最後找到了!!
"Remote Access Connection Manager"就是它,描述是"建立網路連線。",啟用後就看到之前建的VPN連線了,當然要再新建連線也沒問題囉!

2008年1月11日 星期五

安全性例外狀況

問題:
當我們在IIS下建立一個位於unc路徑下的虛擬目錄,而這個目錄下放的是ASP.NET的程式,這時候就會出現以下的錯誤訊息。

安全性例外狀況

描述: 應用程式嘗試執行安全原則不允許的作業。如果要授與這個應用程式所需的權限,請聯繫您的系統管理員,或在組態檔中變更這個應用程式的信任層級。
例外詳細資訊: System.Security.SecurityException: 型別 'System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 的使用權限要求失敗。
原始程式錯誤:

在執行目前 Web 要求期間,產生未處理的例外狀況。如需有關例外狀況來源與位置的資訊,可以使用下列的例外狀況堆疊追蹤取得。

Try to delete all assembly that referenced in this web project and
recompile them. This error may occur when there is some assembly builded
in previous version of ASP.NET.

原因:
在.NET Framework的程式碼存取安全性上預設是不允許執行任何非本機上的程式(組件), 如果有需要執行非本機上的.NET應用程式,則必須在Runtime安全性原則內加入信任這些程式的安全性原則。

解決方法:
1.[開始]->[控制台]->[系統管理工具]->[Microsoft .NET Framework 1.1 設定]
2.選擇透過[Runtime 安全性原則]
3.設定"增加組件的信任"
4.選[對這部電腦進行變更]
5.選取所要套用的組件(Code-Behide或其他非.NET Framework組件)
6.將組件的信任層級設定為[完全信任]
7.重覆此動作將所要新增的組件一一加入

2008年1月10日 星期四

AIX 效能監控

今天請教同事sung學到的指令

topas  -->就是一般unix上的top指令

vmstat 3 10  -->每3秒顯示1次系統狀態,共顯示10次

sar

2008年1月4日 星期五

Oracle Redo、Undo及Rollback Segment觀念

記得剛接觸Oracle時,只是把他當作應用程式儲存資料的地方,所以那時候和DBA溝通時,聽他們在講什麼Redo、Undo、Rollback Segment也是常常搞混,最近有朋友剛開始玩Oracle,環境中有7.x~10g都有,所以被搞的頭昏腦脹,只好打電話問我..我是這樣回答的:

Redo就是重作,當我們使用DML指令(Update、Delete、Insert)對資料進行修改後,Oracle會將我們對資料修改的操作及資料本身寫入Redo Log Buffer,Oracle會找適當的時機(*註1)將Redo Log Buffer內的東西寫入Redo Log Files,由於Redo Log Files是循環寫入的,所以在異動頻繁的狀態下會很快被蓋掉,如果想要將這些異動的記錄保留下來,就請開啟Oracle Archiving Mode,這樣Oracle作Log Switch時,就會將Redo Log Files內容另存一份成為Archive Log Files

Undo就是取消之前作的,8i以前(含8i)的Rollback Segment,在9i改叫Undo Segment;當我們進行交易時,Oracle會利用Undo Segment來存放異動前後的資料,在交易未Commit前,其他使用者可以在這裡查詢舊資料,如果交易失敗或取消,Oracle就可以很快的將由回復原先的資料,在9i提供了Flashback Query可以讓我們查詢交易Commit以前的資料(能查多久以前的資料?看Undo Tablespace有多大、UNDO_RETENTION設多少),到了10g,我們甚至可以回復已經Commit的交易(利用Flashback Query中的Undo SQL指令)。

註1.所謂適當時機就是:

  • 交易確認時
  • Redo Log Buffer的資料異動量放超過整個Buffer的1/3
  • Redo Log Buffer的資料異動量超過1MB
  • 當DBWR將異動的Data Block從Data Buffer Cache寫入Data Files之前