2010年10月27日 星期三

T-SQL和PL/SQL?

T-SQL怎麼寫?
哇哩咧~我最怕的問題之一,終於來了~
居然有人找我教SQL SERVER?
唉~總是這樣……會了一種技術,結果其他相關的技術,也變得要多少涉獵一些。
不然,做為一個DBA,卻不了解兩家以上的資料庫產品,也好像有點說不過去吧。

http://zh.wikipedia.org/zh-tw/SQL

以 SQL 為基礎的其他延伸語言

微軟 MS SQL-Server,以及 Sybase Adaptive Server 系列資料庫所用的 SQL
Oracle 資料庫所使用的 SQL


補充:
常用的Select啦,Insert into,Delete,Update等DDL語法。被以用SIDU來通稱!
但在維基上卻看到另一說法?!CRUD(Create/Retrieve/Update/Delete) ?
都是指資料的新增/擷取/修改/刪除四個功能,也就是都在指Select,Insert into,Delete,Update同樣的動作!

2010年10月12日 星期二

關於記憶體上限的迷思!

http://www.mobile01.com/topicdetail.php?f=300&t=939023&p=2#10337281

http://www.shopping01.com/topicdetail.php?f=300&t=939023&m=f&r=6&p=29

以上兩篇,作者 ycweng 很用心的提醒大家。指正出目前大家對記憶體的迷思!
剛好上篇文章,我個人也寫了相關議題的文章,而且也是引用到錯誤的觀念。
MOBILE01有類似的討論文章 --> Here
所以,擷取了 ycweng 的文件,筆記起來好糾正自己的錯誤。
發送私人訊息 引用連結 載入圖片
這個問題...說真的...即使是正在念資訊 科系的,搞不清相關理論跟實務背景資訊的,所在多有,絕對不要用2^N次方這種計概所學的基本二進位算數來解釋N位元作業系統能夠管理的實體記憶體的問 題...廿幾年前的16位元DOS為何能夠管理1MB(2^20)的空間,而不是只有2^16=64KB?最早版本、基於(也是16位元)80286處理 器的OS/2作業系統,為何能夠管理16MB(2^24)的實體記憶體?同樣是16位元處理器,為何在8086/8088之後,還要推出80286?

一些最常見關於32位元處理器/作業系統的誤解一定要先破除,錯誤觀念才不會一傳再傳:

32位元處理器並非一定只能有32條位址線
例:Pentium Pro(36條)、Motorola/Freescale PowerPC e500(36條)

32位元處理器並非一定只能有32條資料線
例:Pentium(64條)、80386SX(16條)、Motorola 68000(16條)

32位元作業系統並非一定只能管理2^32=4GB的實體記憶體/實體定址位址
例:32-bit的Linux、FreeBSD、Solaris、Win Server 2003/2008 Enterprise、移除封印後的Vista/Win7(都可到64GB)

32位元處理器/作業系統所提供的定址模式,並非一定只能讓32位元程式存取2^32=4GB的定址空間
例:透過IA-32的Selector:Offset定址模式,能提供予每個程式的虛擬定址空間上限是2*8192*4GB=64TB

2^32=4GB是IA-32作業系統在Flat定址模式每個執行中的process所能擁有的虛擬定址空間上限,拿來解釋IA-32作業系統能夠管理的實體記 憶體總量?一整個張冠李戴....32位元Linux、FreeBSD、Solaris、Windows Server 2003/2008 enterprise版這些身心健全的IA-32作業系統,都可以管理到遠超過4GB、最高到64GB的實體記憶體,這些並非全部都是伺服器作業系統。

32-bit WinXP SP1雖然安全性極差,但純就能管理的記憶體來說,在啟動PAE以及Memory re-mapping的情形下,絕對可以管理超過4GB以上的實體定址位址,不信的人弄一版親自裝裝看作個實驗吧!從32位元WinXP SP2之後一直到最新的Win 7,才都被微軟加上了一道只能管理4GB實體位址的封印。

這是之前回給audiofan兄解釋類似問題的一些資料:

http://www.mobile01.com/topicdetail.php?f=174&t=926985&p=9#10202809
=============================================================
我想問題來自於您似乎把PAE視為伺服器作業系統專用的模式,跟IA-32架構是分開來看的,但是從PAE作為IA-32架構的重要延伸被定義出來後一直 到今天,早已經比從IA-32誕生到PAE被定義還來得久了(沒有PAE的386、486、Pentium、Pentium MMX,有PAE的Pentium Pro、Pentium II、Pentium !!!、Pentium M、Pentium 4、Pentium D、Core Duo、Core 2 Duo、Core 2 Quad、i7、i5、Celeron、Xeon家族、Pentium Dual-Core),另外從AMD Athlon處理器也早早就提供了PAE模式,所以今天幾乎都不特別強調是"Intel" PAE mode了。

另外您似乎認為今天的作業系統大多還預設處在IA-32最原始的32條位址線實體定址、而啟用PAE模式是很稀有的事。事實上PAE模式的運用也比您認為 的來得普及,在今天最普遍、絕大多數人在用的主流32位元XP/Vista系統上,PAE模式都已經預設被啟用了,這是因為目前所有的處理器幾乎都支援 eXecute Disable(XD, Intel)/No eXecute(NX, AMD)功能,配合從XP SP2開始提供的Data Execution Prevention(DEP),提供軟硬體協同的防止緩衝溢位攻擊安全防護。

但是對於處理器來說,在IA-32模式下要提供硬體XD/NX支援,處理器本身必須先被設定處於PAE模式。而從XP SP2以後到Vista SP2,預設值都是啟動軟硬體協同DEP(安全性功能應該沒人不要吧!),因此除非您刻意從BIOS關閉處理器的XD功能(沒事不建議這樣玩,地球的網路 是很危險的),不然作業系統都會預設先啟用PAE模式。您去看絕大多數人的Windows XP系統基本資訊那一頁,就算只有512MB記憶體,也幾乎都會看到"實體位置延伸"字樣,這表示XP已經處於PAE模式了,如果是Vista/Win 7,可以用Everest這個工具去確認。

問題來了:既然PAE已經被預設啟動了,為何32位元XP/Vista/Win7還是定址不到4GB以上的 實體位址?這是微軟自己本身刻意的技術性市場區隔,事實上處理器跟晶片組都已經被XP/Vista/Win7設定為能夠處理36條位址線實體定址的狀態 (PAE啟動),只是XP/Vista/Win7卻又很彆扭的拒絕去處理任何定址在4GB以上的實體定址位址,前面才會有網友提到利用Gavotte RAMdisk這種自力救濟方案:既然處理器跟晶片組已經處於能夠處理36條位址線定址的狀態,但是XP/Vista鬧彆扭,那就讓Gavotte去存取 那些XP/Vista/Win7拒絕承認、被定址在4GB以上實體位址的記憶體做成RAMdisk,以物盡其用。

Gavotte已經有很多網友快樂的使用中了,因此不用懷疑在32位元模式下絕對是可以存取到超過4GB的實體記憶體的。另一個範例是微軟幾乎刻意絕口不 再提起的XP SP1,啟動PAE後,也是可以定址到4GB以上的實體位址。您想想看,XP SP1是哪一年推出的?另一個知名的商業軟體SuperSpeed RAMdisk Plus,也已經提供類似Gavotte的功能了。


因此問題出在微軟對於已經預設啟動PAE模式的消費性32位元XP/Vista/Win7、卻又加上一道額外的封印,並非PAE本身是什麼奇怪、非正規的 模式。即使是64位元的Vista、理論上可以管理多到目前主機板上插不下的記憶體,其Basic版也被限制在"只能"用8GB的實體記憶體。而同樣充分 支援PAE的32位元Windows Server作業系統,低階版本能夠管理的記憶體也被微軟刻意限制在4GB,而中高階版可以管理到64GB的實體記憶體。

綜合上述,PAE早就是IA-32架構以及IA-32作業系統密不可分的一部份了,因此不用將IA-32跟PAE刻意分開來看

關於PAE啟動後的效能損失,也不用刻意去放大它,因為如前面所提,PAE預設幾乎都是會被Windows啟動的,不需要去改什麼 boot.ini(XP)、或用bcdedit強制啟動(Vista/Win7),就算PAE有效能損失,微軟也已經幫你預設打開了。但是有所失必有所 得,啟動PAE後存取多一層分頁表的效能損失(啟動PAE後,分頁表的查詢由兩層變三層,而64位元Vista/Win7的分頁表的查詢,原本便是三層, 如果要講效能損失,32/64一樣都是三層),透過如Gavotte Ramdisk這種應用方式,由於能夠被充分運用的記憶體變多了、因而少去存取硬碟這種相對慢很大的儲存媒體,絕對能夠將其彌補回來。已經很多網友將 Page file、Temp folder、Internet temp files...指向Gavotte作出的RAMdisk,用過的人絕大多數對效能改進都是滿意的。

同理,如果32位元XP/Vista沒有被封印,能夠自力管理的記憶體因預設開啟PAE變多了、 因而能少去硬碟存取page file、多將程式保持在記憶體中不swap出去到硬碟、多一些記憶體作為SuperFetch的快取,也是能夠將多存取一層分頁表的效能損失彌補回 來。(3月更新:最近還真的有將32-bit Vista/Win 7的封印解除的方法出現,詳見257樓、219樓,XP不適用)

今天問題根源在於微軟的心態,而非PAE有何原罪....

64位元電腦時代真的來了嗎?

幾天前,和一些對電腦有興趣的愛好者談到一個問題。
到底現在的電腦用多少記憶體比較「好」?

我答到:「當然是愈多愈好啊!」
有人也回應了。
「不一定哦,像XP是有上限的,插太多也沒用。」

這問題看似簡單,但也能稍微測出一個人的機概能力底子。
基礎知識,假設大家應該都知道,電腦的運作,就是利用電流的有電沒電的切換,去產生運算的結果。
而有電沒電,對應成的計算模式,就是二位元進位制的數學運算。
1+1=10

而為了能更有效能處理二進位制運算,電腦工程師們,變形了二進位制。
改進成了8進位制運算,於是有了組合語言的設計,算是一種兼顧了易判讀,電腦也能直接處理的程式語言。
最初的個人PC,一開始就是8位元的電腦。
然後一路演進,CPU不斷改進製做技術,出現了16位元,32位元的電腦。
(補充一)

而現在2010開始流行的電腦,已經是64位元的運算能力了。
其實64位元的電腦,很早就出現,現在才推出64位元的產品,是普及化的潮流所漸漸推演趨化出來的。
維基百科--64位元

而記憶體的使用上限,和「多少」位元的電腦架構,有者不可分割的相依性。
目前還算普遍被使用的 windows XP 作業系統,基本上都還配合使用的是32位元架構的電腦。(也有64位元的XP哦!)
而由於32位元運算架構,記憶體的定址能力,被設限在2的32次方。
換算一下,大約是4G的大小。
也就是說,你若使用XP,基本上,不會用到超過4G的記憶體。
所以插太多條記憶體也沒有用,這句話是有道理的!
有不少網友分享實測結果,32位元的XP,只能用到3.25G。
(補充二)

不過,隨著M$推出windows 7!
64位元電腦成為潮流所趨是早晚的事,64位元架構的PC可以使用到128GB的記憶體耶。
印象中,剛開始玩電腦時,能有個128MB,就覺得這台電腦等級真是讚!
沒想到,才幾年時間,資訊科技的發展,居然成長變化這麼的快速。
只是,64位元電腦時代真的來了嗎?
我看週遭的人,都只想停留在XP的作業環境而已~

補充一:
16位元和32位元的區隔,大致上,可以用386電腦的推出時間來做區分。
由386架構的電腦,開始32位元PC的時代。

補充二:
1.有PAE和一些HACK技術,能使XP突破限制。使用超過4G以上的記憶體。
2.32位元的應用程式,據說只能定址到2G左右,所以像outlook express這種應用程式,若讀取超2G的 XXX.dbx 檔,會出問題,原因在此。
3.FAT32的檔案系統,上限為4G,NTFS才能突破此限!
4.XP SP1據聞並沒有4G的限制,在SP2之後才「封印」上去。M$的陰謀?

補充三:
微軟技術文件 -->Memory Limits for Windows

補充四:
此篇有觀念上的錯誤!
記憶體限制,不能以位元數來判定。而是要以CPU的ADDRESS BUS定址總線的數量來決定。
ADDRESS BUS位數決定了CPU可直接運用的記憶體大小,
比如8位元電腦的地址總線是16位,則其最大可尋址空間為2^16=64KB,
而16位元電腦的地址總線是20位,所以其可尋址空間可到2^20=1MB。
間單來說,若定址總線為n位,则可運用的記憶體大小是2的n次方。

指正文章在此 --> Here

2010年10月7日 星期四

別再傻傻聽M$的提示做動作了!



每次聽到USER求救!
說他看到電腦跳出的提示,就很乖的按下「是/YES」。
「結果檔案怎麼就怎麼……!@#$%」
「能不能幫幫我…!@#$%…恢復~嗎~?」

唉!
這回的狀況,是USER乖乖做了 Outlook Express 6的壓縮動作。
後遺症就是不見了一年份的信!

查了一下google,發現受害者還真不少!
所以也有網友們提出一些不錯的反制和復原的方法啦。
不過,我處理的這個CASE比較麻煩些,因為在壓縮過程中,因為「好像」有錯誤之類的狀況。
於是他壓縮了「兩次」?
哇哩咧~一錯再錯!
連資源回收筒的還原也沒用了!(驚~)

請注意,第一次壓縮的結果。會把Outlook Express 6 的原檔案放到資源回收筒裡。
所以,第一次壓縮的結果,若是想反悔,是可以復原的。
But……若是手賤,又再一次壓縮的後果?!
請先做節哀順變的心理建設吧。有點難以挽回了!你那些老情書們。

最後的手段,就是利用資料救援軟體,進行類似掃硬碟磁軌的動作,去抓看看有沒有舊檔案的「遺跡」了。
但是,若是再手賤,又在硬碟上做了「些許」的存取動作。造成「案發現場」的破壞!

那……那……我只能……提供衛生紙了。
請哭小聲點!謝謝!

搜尋此網誌

本站大事記

這個部落格(網站)內容以分享LINUX和延伸出的技術文章為主!
特別是為了工作和進修需要,搜集了不少網站連結。
希望對來這裡觀文的朋友們,有提供一些有用的資訊或文章。
但這裡的文章中,也包含個人的心情扎記和隨興言談……
若是當中沒有對上你的口味,請多包涵!

原「琳娜絲與希斯寇的邂逅」,改名為「愛上琳娜絲」!

原「琳娜絲與希斯寇的邂逅」,改名為「愛上琳娜絲」!
--原序文--
就是當LINUX遇上CISCO啦!他們的結合還能作什麼事…不就是讓這個世界的網路,串…串起來啊…不然你們那能上這網站看部落格!