公元兩千年年序危機處理經驗談
洪鴻洲、許凱平
台灣大學計算機中心
隨著公元兩千年的逼近,有越來多公元兩千年年序危機(簡稱Y2K)相關消息見報。一顆美國衛星Galaxy四號出了狀況﹐造成4,500萬個呼叫器無法收訊﹐許多電台與電視訊號的中斷(Detroit Free Press 1998.5.22)。瑞典可能在千禧年的除夕夜暫時關閉它的核電廠﹐如果電腦Y2K問題不能及時解決的話(路透社1998.7.24)。生產旁氏冷霜、立頓紅茶等產品聞名的聯合利華台灣分公司於測試Y2K問題時發生當機(自由時報87/09/16)。美賓州核電廠做Y2K測試,結果當機使系統停擺七小時(自由時報88/03/04)。證交所將執行Y2K列為上市公司應揭露項目 (中國時報88/02/27) 。工業局邀業界喝「Y2K咖啡」 (自由時報88/03/01)。財政部發佈企業Y2K減稅措施 (經濟日報88/03/02) 。美國參議院點名指稱我國處理公元二千年資訊年序錯亂危機(Y2K)準備工作進度落後(自由時報88/03/05)。
這個問題的來源是,部份的電腦軟硬體及控制系統為節省儲存空間及提供輸入便利,在日期年份部分只用兩位數,如1986年只記錄了86,假設前兩位為19。當年份的為00時﹔系統會將年份視為1900而非2000,除此之外還有許多相關問題,如閏年、挪用及無效。即使系統的年份順利進入2000年,仍然可能會因閏年的問題使系統少了一天。這個問題出自於閏年的計算公式:公元年若能被4整除但不為100整除者為閏年,但若能被400整除者仍為閏年。由此推算,公元兩千年應為閏年。如果程式師沒有考慮到能被400整除者為閏年這項規則的話,就會造成系統沒有2000年2月29日這一天,直接跳到3月1日。若這個程式是用在檢查使用者輸入的日期的部分,系統會將使用者輸入的日期視為不存在的日期而拒絕接受。此外,許多系統開發之初,程式師認為他的程式不會用太久,就將00或99挪用代表其他意義,如極大極小或系統發生錯誤﹔有一些程式則將00或99視為無效的年份,造成整個系統當住。
Y2K及其相關問題在公元2000前後都會發生,即使使用的是民國年;單把電腦設備換新並不能完全解決這個問題,這個問題的範圍也不僅僅限於電腦。1993年在明尼蘇達一位104歲的老人Mary Bandar接獲幼稚園入學通知﹐事實上她出生於1888年。我國目前使用民國年紀年,一般普遍認為到民國一百年才會出現問題。部分軟體不會有問題,但是別忘了有一些軟體的民國年由公元年轉換,需檢查執行環境是否有Y2K的問題一併解決。關於Y2K的處理上,許多人都會以為把電腦設備換新就沒問題了。就近年出廠(一九九五年下半年後)的電腦來說,在硬體上大部分沒有問題;但作業系統及應用軟體卻非如此,即使是近年發行的也可能會有問題。例如 NT4.0 + Service Pack 3,仍然有一些閏年處理的小問題。NT使用者管理員以為2000年不是閏年,拒絕接受以2月29日為帳戶到期日。Y2K危機不只是電腦問題,許多電器設備內嵌時間晶片。從金融到航管,電話、電力到自來水,甚至核彈控制程式,都可能會有問題。就連辦公室內的交換機、電梯、 門禁系統、傳真機及電話也都逃不出Y2K的魔掌。
從技術的觀點來分析Y2K並不複雜,但是因為Y2K牽涉的層面太廣,要完全解決這個問題並不容易。Y2K的問題可以粗略分為五個層次,由下而上分別是硬體時鐘(Real-time Clock,RTC),基本輸入/輸出系統(BIOS) ,作業系統(OS),函式庫(Library,如C語言的函式庫)與應用程式(Application),如圖一所示。
在PC的主機板有上一Real-time Clock (RTC),這是一個硬體裝置,也是系統時間的根源,當PC關機時,會由主機板上的電池供應電源給RTC,所以RTC可以正確記錄時間。早期RTC是用一個byte切成兩個BCD(Binary Coded Decimal)欄位來記錄年份,所以年份表示的範圍為00到99,因此PC上Y2K的問題在1980 年IBM PC誕生時就已經存在,20年後也就是公元2000年時開始引爆。到了公元2000年的時候,RTC的兩個BCD欄位的年份會由99變成00,這時隨著系統的不同,可能會把RTC的00數字解釋成1900年或1980年或 2000年或其它年份。
很不幸的,Y2K的問題並不只發生在RTC身上,BIOS、OS、Library、Application同樣也有Y2K問題,圖一中的每一階層對於時間的計算經常是依據下一層來處理,而且對於時間每一階層也可能有自己的計算與解釋方法。例如民國年與西元年的轉換,對於兩位數00年的解釋到底是西元1900年還是2000年?有些系統對於兩位數年份00與99代表有特殊的意義,例如極小與極大,這會使得程式進一步解讀為「取消」或「刪除」,進而殺掉重要的電腦檔案或記錄。圖二顯示Y2K千禧蟲可能出現的日期,在這些日期我們須特別留意Y2K問題的檢測。
日 期 |
須 檢 查 之 理 由 |
1999.4.9 |
9999在「羅馬日誌」中為1999年的第99日,而在許多電腦程式中9999代表極大值,有特別意義,這會使得系統作特別的處理動作,使得系統發生異常現像。 |
1999.9.9 |
同上。許多電腦程式將日期代碼9999在「希臘日誌」中代表極大值,解讀為「取消」或「刪除」,進而殺掉重要的電腦檔案或記錄。 |
1999.12.31 |
跨越Y2K的前一天 |
2000.1.1 |
跨越Y2K後的第一天 |
2000.1.3 |
西元2000年的第一個營業日 |
2000.1.10 |
欄位第一次出現七位數的日期 |
2000.1.31 |
西元2000年的第一個月的最後一日 |
2000.2.29 |
測試閏年 |
2000.3.31 |
西元2000年第一季的最後一日 |
2000.10.10 |
欄位第一次出現八位數的日期 |
2000.12.31 |
西元2001年的最後一日 |
2001.1.1 |
西元2001年的第一天 |
2001.12.31 |
檢查365天 |
圖二 Y2K千禧蟲可能出現的日期
在圖一中,程式亦有可能由上面的某一個階層直接跳到其下的任一階層來讀取系統時間,例如OS可能不經由BIOS而直接跳到下兩層(即RTC)去讀取系統時間。因此會使得我們要解決這個問題變得很零亂。
更不幸的是電腦產品日新月異,廠牌眾多,圖一中的每一階層有各式各樣的軟硬體產品,即使是同一家廠商的產品,又有型號、版本等之區分,每一種產品的Y2K解決方法不盡相同,有些電腦廠商對於較為老舊的軟硬體已不提供Y2K服務,因此想解決目前所有使用中的電腦的Y2K問題變得很困難。Y2K最難解決的部分可能是應用程式部分,因為應用程式如何處理時間,只有程式師知道,而有些程式師沒有寫程式說明文件的習慣而且離職多年,有些程式連原始檔都沒有,只有執行檔,因此要解決Y2K問題變得困難。又到目前為止銀行的資訊系統的程式是大部分使用COBOL程式語言,目前除了少數資管或商業類科系有教授外,大學的資訊科系大都不再教授COBOL程式語言,所以短期內也難找到適合的人來解決Y2K問題。
雖然要解決目前所有使用中的電腦之Y2K問題是幾乎不可能的事。但個人認為Y2K問題只要我們有心去做,總是可以將損害降至最低。下面是一些Y2K原則性的處理方法:
一、評估問題的重要性及急迫性
雖然有很多系統有Y2K問題,但事情總是有輕重緩急之分,就以本校為例,本校附設醫院裡的一些醫用電腦、醫療儀器、及緊急機電設備等是必須優先與予解決的。理由很簡單,生命是無價的。有許多系統雖然有Y2K問題,但問題的嚴重性很低,甚至可以不予處理(不予處理也是一種處理Y2K的方法),例如電腦只是用來作簡易的文書處理。當然我們只是提出原則性的建議,很多事情都有例外,各個單位宜按照本身的實際情形多加考量,作出對自己最有利的處置方式。
二、重新評估電腦作業或人工作業
Y2K雖然是一個企業的資訊危機,但也是一個轉機。使用電腦的目的就是要節省費用並提高工作效率與生產力,如果使用電腦處理的費用比人工作業處理費用還高,則就要加以評估是否要解決電腦Y2K問題或是採用人工作業,當然做這項決策亦須將非經濟因素納入考量。
三、選定處理方法
以台大計中為例,本中心的電話交換機被發現有Y2K的問題,但是解決Y2K問題的費用與購買新的電話機交換機差不多。所以我們還在評估經濟因素與非經濟因素,選擇一個對我們最有利的方式。
四、訂定改善時程
作任何事情總是要訂定時程,Y2K的改善工作自然也不例外,有了時程以便敦促自己什麼時間完成什麼工作。
五、選定備援方案
假如Y2K問題沒有辦法適時解決,則必須考慮備援方案,例如考慮採用人工作業或其它方案因應。
談完了Y2K原則性的處理方法,讓我們再來談談Y2K較為具體的處理方法,圖三為筆者整理的簡易Y2K處理方法,圖四為一些有用Y2K網站以供各位參考:
Y2K問題點 |
測 試 方 法 |
備 註 |
硬體時鐘(RTC) |
2000.exe |
美國NSTL(National Software testing laboratories) 發表一公用軟體 YMARK2000 (2000.exe)供各界免費測試PC上RTC與BIOS的Y2K問題,有興趣者可從本校Y2K網站http://y2k.ntu.edu.tw下載該軟體。注意使用該軟體必須由MS-DOS開機。 |
基本輸入/輸出系統(BIOS) |
2000.exe |
同上 |
作業系統(OS) |
看廠商對於該作業系統之測試報告或自行測試 |
本校「計算機及資訊網路中心」已收集許多著名的作業系統與著名的程式語言的測試報告。有興趣者,請洽23627734轉210洪鴻州技士。 |
程式語言函式庫( library) |
看廠商對於該程式語言之測試報告或自行測試 |
同上 |
應用程式(Application) |
Fdv2.exe (fd.exe) 或程式師自行測試。 |
美國NIST(National Institute of Standards and Technology) (NIST) 發表一公用軟體 FINDDATE (fdv2.exe)供各界免費測試Y2K問題,FINDDATE可以輔助程式師找出程式中與日期相關的變數,有興趣者可從本校Y2K網站http://y2k.ntu.edu.tw下載該軟體(fd.exe自解壓縮檔) 。 |
圖三 簡易Y2K問題處理
主計處電算中心Y2K網站 |
|
教育部Y2K網站 |
|
經濟部Y2K網站 |
|
台大計中Y2K網站 |
|
國內外Y2K相關網站 |
|
Microsoft Y2K網站(中文) |
|
Inprise(Borland) Y2K網站 |
|
IBM Y2K網站 |
|
Sun Y2K網站 |
|
HP Y2K網站 |
|
DEC Y2K網站 |
|
Oracle Y2K網站 |
|
CDC Y2K網站 |
|
Lotus Y2K網站 |
|
Symantec Y2K網站 |
|
Cray Y2K網站 |
圖四 Y2K相關網站
以國內而言,台灣大學在許多方面都可以說是國內最大的大學。相對於台大人員及單位之多,如果要以計中有限的人力處理所有校內Y2K相關事務,幾乎可以說是不可能的任務。因此,我們只能將人力放在跟全校有關的校務系統,對於各單位則提供有限的諮詢及教育訓練,並將各系所及各單位的問題彙整,共謀解決之道。並將計中蒐集到的相關資料放在台大Y2K網站(Y2K.ntu.edu.tw)上,以供各單位參考。
台大計中目前系統Y2K概況如下:
系統名稱 |
檢查方式 |
結果 |
處置方式 |
計中電梯 |
向廠商求證 (永大電機) |
無Y2K的問題 |
索取保證函 |
計中交換機 |
向廠商求證 (歐科電訊) |
多項重要功能會受影響 |
升級或新購 |
計中傳真機 |
自行測試 |
無法設定日期為2000/2/29,但會自動由2000/2/28跳至2000/2/29 |
可繼續使用 |
計中門禁系統 |
向廠商求證,測試 |
刷卡機無Y2K問題,但連線電腦有 |
換新連線電腦 |
台大校總區薪資系統 |
向廠商求證 (HP) |
不保證沒有Y2K問題 |
由計中程式師開發新系統 |
台大校總區動產管理系統 |
向廠商求證 (HP) |
不保證沒有Y2K問題 |
由計中程式師開發新系統 |
計中Sun 工作站 |
Sun的相容設備清單 |
Solaris 2.6 前的會有Y2K問題 |
升級至2.6或安裝patch |
Cray |
向廠商求證 (克雷電腦) |
無Y2K問題 |
|
PC硬體 |
測試軟體NSTL YMARK2000 及軟硬體廠商之相容清單 |
部分PC會有問題 |
硬體:依系統狀況換新或更換組件。
|
委外開發之系統 |
向工程師或開發該軟體之公司求證 |
||
作業系統及套裝軟體 |
軟體公司查證,如微軟的相容清單及寶蘭的相容狀況表 |
WIN98, WIN95, WinNT Novel 3.12及MS Office, IE3.x等都有些小問題 |
軟體:升級或安裝新版。 |
其他自行開發的校務行政系統 |
由計中程式師自行認證 |
部分的程式與外部交換資料時是以兩位數記載民國年。 |
程式修改或重新開發 |
雖然Y2K的影響層面相當廣泛,我們除了照一般的Y2K處理方式去做外,仍需回到原點,亦即使用者的使用行為,才能將這個問題妥善解決。例如買一台宣稱通過Y2K測試的電腦,是不是就沒有問題?或是一台無法通過Y2K的舊電腦就註定要淘汰?這些都必須從使用者開始做各個層面的考量。如果一台僅僅是做文書處理或是當作終端機的電腦,有沒有通過Y2K可能就沒有什麼重要。但若是作為財務處理或門禁管制的電腦,就不但要要求電腦本身通過Y2K測試,更要要求應用程式及與其連接的系統也應沒有問題,才能解決整個問題。
雖然我們建議以軟硬體廠商的相容清單確認自己的軟硬體。但令人困擾的是,許多軟硬體的狀況都會變化,例如Win98在發行時宣稱沒有Y2K的問題,後來仍然不得不出修補程式。因此,我們建議您仍需隨時注意最新的資訊。並且無論您的檢查多麼仔細,最後仍然要有災後復原的準備。
另外要強調的一點是,距離公元兩千年只剩不到三百天的日子了,寶貴的時間一定要花費在將最重要的幾個系統上。還有系統的備份也是相當的重要。不但在測試前一定要備份,平日也要有備份的習慣,才能真正地有備無患。
【書報雜誌資料】
[1] 自由時報。
[2] 中國時報。
[3] Jim Seymour/風玉 譯,微電腦傳真雜誌 (PC Magazine) 中文版,
"你要如何面對千禧年",民國88年2月,頁154。
[4] 洪鴻洲,台大校訊,"Y2K 簡介",民國88年3月。
【網站資料】
[5] 經濟部Y2K網站,http://www.year2000.gov.tw。
[6] 教育部Y2K網站,http://www.edu.tw/2000/2000.html。
[7] 台大計中Y2K網站,http://y2k.ntu.edu.tw。