升級(jí)到SQL Server 2005的常見(jiàn)問(wèn)題解答
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
從SQL Server 2000升級(jí)到SQL Server 2005意味著進(jìn)入一個(gè)完全嶄新的數(shù)據(jù)庫(kù)管理世界。我們已經(jīng)編制了一個(gè)經(jīng)常會(huì)被問(wèn)到的問(wèn)題列表來(lái)解決你的SQL Server 2005升級(jí)問(wèn)題,包括使用DTS包、復(fù)制數(shù)據(jù)庫(kù)、創(chuàng)建密碼和在同一臺(tái)機(jī)器上安裝不同的SQL Server版本。 經(jīng)常被問(wèn)到的問(wèn)題: 升級(jí)到SQL Server 2005 1. SQL Server 2000 DTS包可以用在SQL Server 2005中嗎? 2. 當(dāng)升級(jí)到SQL Server 2005時(shí)遇到了加密失敗我應(yīng)該怎樣解決? 3. 為SQL Server 2005升級(jí)而復(fù)制數(shù)據(jù)庫(kù)的最好方法是什么? 4. 在升級(jí)之后我怎么調(diào)整SQL Server查詢性能? 5. 故障轉(zhuǎn)移集群在SQL 2005中是怎么工作的? 6. 可以在同一臺(tái)機(jī)器上安裝不同的SQL Server版本嗎? 7. 在SQL Server 2005中可以調(diào)用一個(gè)擴(kuò)展存儲(chǔ)過(guò)程嗎? 8. 我怎么為一個(gè)SQL Server數(shù)據(jù)庫(kù)創(chuàng)建用戶名和密碼? 9. 我可以同時(shí)運(yùn)行SQL 2000和SQL 2005實(shí)例嗎? 10. 你能提供一些SQL Server 2005升級(jí)問(wèn)題的例子嗎? 11. 在SQL Server 2005中會(huì)出現(xiàn)什么存儲(chǔ)過(guò)程并發(fā)問(wèn)題? 12. SQL Server 2005數(shù)據(jù)庫(kù)可以移植回SQL Server 2000嗎? 1. SQL Server 2000 DTS包可以用在SQL Server 2005中嗎? DTS不在SQL Server 2005中使用了,它由一個(gè)嶄新的被稱作SQL Server集成服務(wù)(SSIS)的抽取、轉(zhuǎn)換和裝載(ETL)引擎所替代。SSIS為構(gòu)建ETL解決方案提供了一個(gè)比DTS更加強(qiáng)大、靈活和具有更好性能的基礎(chǔ),但是這可能使許多數(shù)據(jù)庫(kù)管理員不知道該拿他們的DTS包怎么辦。 好消息是,盡管他們不能再在SQL Server 2005中編輯,但是在SQL Server 2000中創(chuàng)建的DTS包仍然可以運(yùn)行。為了緩和這個(gè)過(guò)渡,SQL Server 2005提供了一個(gè)升級(jí)向?qū)椭鷶?shù)據(jù)庫(kù)管理員將包轉(zhuǎn)換到SSIS框架中。然而,不是所有的組件都可以升級(jí)。例如,ActiveX的轉(zhuǎn)換對(duì)于升級(jí)向?qū)?lái)說(shuō)就是個(gè)挑戰(zhàn),而且它可能并不能移植。 而這意味著數(shù)據(jù)庫(kù)管理員將最終要使用SSIS重寫這些包,由于有了SSIS提供的功能,這么做可能會(huì)比使用DTS簡(jiǎn)單得多。 2.當(dāng)升級(jí)到SQL Server 2005時(shí)遇到了加密失敗我應(yīng)該怎樣解決? 我們最近在WINDOWS 2003上從SQL 2000升級(jí)到了SQL 2005。整個(gè)升級(jí)過(guò)程都進(jìn)行得很順利,除了加密。我們有連接到一個(gè)內(nèi)部服務(wù)器的ASP.NET 1.x應(yīng)用,但是加密的時(shí)候失敗了。我們?cè)贛S KB上嘗試了所有可用的步驟,但仍然不能解決這一問(wèn)題。 在微軟的“怎么:加密連接到數(shù)據(jù)庫(kù)引擎”文章中,我們發(fā)現(xiàn)下面的話:要配置服務(wù)器接受加密連接: 1. SQL Server配置管理器中,擴(kuò)展SQL Server 2005網(wǎng)絡(luò)配置,右鍵單擊“協(xié)議”,然后選擇“選擇屬性”。 2. 在協(xié)議的屬性對(duì)話框中,在“證書”標(biāo)簽中,在證書的下拉列表框中選擇想要的證書,然后點(diǎn)擊OK。 3. 在“標(biāo)記”標(biāo)簽中,在強(qiáng)制加密選擇框中選擇“是的”,然后點(diǎn)擊OK來(lái)關(guān)閉這個(gè)對(duì)話框。 4. 重啟SQL Server服務(wù)。 問(wèn)題是,當(dāng)我們到達(dá)第二步時(shí),在下拉列表框中沒(méi)有可用的證書。這個(gè)問(wèn)題純粹是由于安裝SQL Server 2005所產(chǎn)生的。這些應(yīng)用在安裝之前可以成功的將數(shù)據(jù)連接加密。所有的內(nèi)部和非加密的連接都工作正常。我應(yīng)該怎么做可以讓證書出現(xiàn)在屬性對(duì)話框中的證書標(biāo)簽中? SQL Server協(xié)議小組的Xinwei Hong所貼的博客SQL協(xié)議應(yīng)該可以幫助你解決這一問(wèn)題。這篇文章列出了SQL Server 2005正確加載協(xié)議所要求的幾個(gè)標(biāo)準(zhǔn)。 —Adam Machanic,SQL Server 2005專家 3. 為SQL Server 2005升級(jí)而復(fù)制數(shù)據(jù)庫(kù)的最好方法是什么? 我在試著將有著近300個(gè)數(shù)據(jù)庫(kù)的SQL Server 2000 32位移植到SQL Server 2000 64位。我嘗試用“復(fù)制數(shù)據(jù)庫(kù)”的特性,但是它不能成功的復(fù)制任何數(shù)據(jù)庫(kù)。我還需要將所有的登錄移植過(guò)去。歡迎任何建議。 我發(fā)現(xiàn)一般情況下復(fù)制數(shù)據(jù)庫(kù)向?qū)渌囊苿?dòng)數(shù)據(jù)方法相比要慢而且低效。它最好用于當(dāng)你需要在兩個(gè)服務(wù)器之間做少量數(shù)據(jù)的一個(gè)非常快速并有冗余的轉(zhuǎn)移,而且不想花費(fèi)時(shí)間去做備份或分離數(shù)據(jù)庫(kù)的情況下。 如果你需要轉(zhuǎn)移300個(gè)數(shù)據(jù)庫(kù),我認(rèn)為你會(huì)發(fā)現(xiàn)最好的方法是在SQL Server 2000實(shí)例上使用sp_detach_db來(lái)分離每一個(gè)數(shù)據(jù)庫(kù),并在SQL Server 2005實(shí)例上用sp_attach_db重新綁定每一個(gè)數(shù)據(jù)庫(kù)。這么做還能保留你的數(shù)據(jù)庫(kù)用戶。 然而,即使使用這個(gè)方法,你仍然需要獲得對(duì)SQL Server 2005實(shí)例的登錄。訪問(wèn)一個(gè)KB文章,那里包含了一個(gè)可以幫助你做這個(gè)工作的腳本,查看這個(gè)微軟支持頁(yè)面。 注意,當(dāng)你完成的時(shí)候,你可能需要重新匹配數(shù)據(jù)庫(kù)用戶和登錄。為了重新匹配,使用sp_change_users_login系統(tǒng)存儲(chǔ)過(guò)程。 —Adam Machanic,SQL Server 2005專家 4. 在升級(jí)之后我怎么調(diào)整SQL Server查詢性能? 我們將我們的SQL Server 2000 10 GB數(shù)據(jù)庫(kù)移植到SQL Server 2005。少數(shù)查詢比在SQL Server 2000中時(shí)要慢。先前我們獲得結(jié)果要10秒鐘,而現(xiàn)在要30分鐘。這個(gè)執(zhí)行查詢計(jì)劃在SQL Server 2000和SQL Server 2005中是不同的。SQL Server 2000使用索引而SQL 2005使用表的表掃描。還有表的嵌套循環(huán)/內(nèi)連接的序列也改變了。因?yàn)檫@是一個(gè)動(dòng)態(tài)應(yīng)用,所以修訂查詢是很困難的。你可以提供什么建議關(guān)于調(diào)整SQL Server 2005中的查詢性能嗎?
你需要把這個(gè)問(wèn)題當(dāng)做一個(gè)和升級(jí)無(wú)關(guān)的新的問(wèn)題來(lái)檢修。需要重新建立索引,需要更新統(tǒng)計(jì)。有時(shí)在一個(gè)SQL Server升級(jí)之后(從SQL 7到SQL 2000,或者從SQL 2000到SQL 2005)需要重新建立索引,需要更新統(tǒng)計(jì)。我總是推薦使用UPDATE STATISTICS命令替代sp_updatestats,因?yàn)閁PDATE STATISTICS命令使你可以訪問(wèn)比sp_updatestats存儲(chǔ)過(guò)程給予的更多的選項(xiàng)。 5.故障轉(zhuǎn)移集群在SQL 2005中是怎么工作的? 故障轉(zhuǎn)移集群在SQL 2005中是怎么工作的?它與Oracle和DB2的故障支持相比怎么樣? 在SQL Server 2005中故障轉(zhuǎn)移集群功能在很多方面都得到了很大擴(kuò)展。 首先,運(yùn)行于Windows 2000 Datacenter 的SQL Server 2000僅限于四個(gè)服務(wù)器的集群。現(xiàn)在運(yùn)行在Windows 2003 Server的SQL Server 2005可以支持八個(gè)結(jié)點(diǎn)(取決于Windows 2003的版本)。 現(xiàn)在故障也被支持于更多種類的服務(wù)。分析服務(wù)、通知服務(wù)、復(fù)制和SQL Server代理都是SQL Server 2005中的集群意義上的服務(wù)。這對(duì)于那些利用這些特性和需要維護(hù)高可用性的公司來(lái)說(shuō)是個(gè)重要的因素。 但是在數(shù)據(jù)庫(kù)可用性方面最大的改進(jìn)根本不是故障轉(zhuǎn)移集群。一個(gè)叫做“數(shù)據(jù)庫(kù)鏡像”的新的特性將證明是一個(gè)更具吸引力的維護(hù)正常運(yùn)行時(shí)間的方式。 這個(gè)特性可以被認(rèn)為是日志傳送的更實(shí)時(shí)的方式。事務(wù)被連續(xù)的從一個(gè)活動(dòng)的結(jié)點(diǎn)傳送到另一臺(tái)一直保持恢復(fù)狀態(tài)的服務(wù)器上的正在等待中的數(shù)據(jù)庫(kù)中。當(dāng)或如果這個(gè)活動(dòng)結(jié)點(diǎn)傳送過(guò)來(lái),這個(gè)鏡像幾乎可以立即接收。這是對(duì)滯后的一個(gè)非常巨大的改善——有時(shí)幾分鐘——這可以同故障轉(zhuǎn)移集群一起使用。 關(guān)于這個(gè)和數(shù)據(jù)庫(kù)管理員感興趣的其它特性的更多信息,可以在TechNet文章里看到,提供給數(shù)據(jù)庫(kù)管理員的SQL Server 2005 Beta 2概述 —Adam Machanic,SQL Server 2005專家 6.可以在同一臺(tái)機(jī)器上安裝不同的SQL Server版本嗎? 你可以在同一臺(tái)機(jī)器上安裝兩個(gè)不同版本的SQL Server嗎? 是的,你可以。雖然你理論上可以以任何順序來(lái)安裝它們,但我總是愿意建議以發(fā)布的順序來(lái)安裝軟件:先是SQL Server 2000,然后是SQL Server 2005。 —Greg Low,開發(fā)專家 7.在SQL Server 2005中可以調(diào)用一個(gè)擴(kuò)展存儲(chǔ)過(guò)程嗎? 我在java中使用用于SQL Server 2005的JDBC調(diào)用一個(gè)擴(kuò)展存儲(chǔ)過(guò)程(特別是xp_cmdshell)時(shí)遇到了問(wèn)題。通過(guò)使用用于SQL Server 2000 Service Pack 3的JDBC,我可以調(diào)用它就像調(diào)用一個(gè)普通的存儲(chǔ)過(guò)程一樣。對(duì)于SQL Server 2005,我得到下面的信息: om.microsoft.sqlserver.jdbc.SQLServerException:對(duì)存儲(chǔ)過(guò)程‘xp_cmdshell’的請(qǐng)求失敗了 因?yàn)?xp_cmdshell'是一個(gè)存儲(chǔ)過(guò)程對(duì)象。 它是一個(gè)SQL Server 2000服務(wù)器。我想用新的2005JDBC,因?yàn)樵谑謩?dòng)事務(wù)模式下克隆連接使用沒(méi)有問(wèn)題。我在我的webserver上遇到了關(guān)于selectMethod=cursor屬性的問(wèn)題,它看起來(lái)沒(méi)起作用。它在開發(fā)過(guò)程中在我的本地webserver上運(yùn)行良好,但是由于某種原因在運(yùn)行在動(dòng)態(tài)webserver上時(shí)不能正常工作。是否可以調(diào)用這個(gè)擴(kuò)展存儲(chǔ)過(guò)程呢?<.p> 是的,默認(rèn)的,它在2005中是不可用的,因?yàn)樗槐徽J(rèn)為是安全的。如果你認(rèn)為它是適當(dāng)?shù)模憧梢允褂猛鈬鷳?yīng)用配置器(Surface Area Configuration Tool)工具來(lái)設(shè)置它為可用的。 8.我怎么為一個(gè)SQL Server數(shù)據(jù)庫(kù)創(chuàng)建用戶名和密碼? 我創(chuàng)建了一個(gè)SQL Server 2005數(shù)據(jù)庫(kù),我計(jì)劃用一個(gè)用戶名和密碼來(lái)保護(hù)它。我不清楚這要怎么做。我怎樣用我的新數(shù)據(jù)庫(kù)的安全對(duì)象為它建立一個(gè)安全系統(tǒng)? 這有一篇Steve Jones寫的很好的文章,它會(huì)讓你從SQL用戶和登錄開始:開始SQL Server——登錄和用戶。 —Steven Andres,安全專家 9.我可以同時(shí)運(yùn)行SQL 2000和SQL 2005實(shí)例嗎? 你可以在同一臺(tái)機(jī)器上運(yùn)行SQL 2000和SQL 2005實(shí)例嗎?有什么問(wèn)題是和這兩個(gè)實(shí)例運(yùn)行在一起相關(guān)聯(lián)的嗎? 是的,他們可以運(yùn)行在一起。我看過(guò)的唯一問(wèn)題是當(dāng)2000在2005之后安裝的,因?yàn)楣蚕韉ll被舊的替代了而出現(xiàn)了一些問(wèn)題。安裝另一個(gè)2005的實(shí)例看起來(lái)總是可以解決這一問(wèn)題。 —Greg Low,開發(fā)專家 10.你能提供一些SQL Server 2005升級(jí)問(wèn)題的例子嗎? 從SQL Server 2000移植到SQL Server 2005時(shí)可能會(huì)遇到什么問(wèn)題?在移植過(guò)程中所應(yīng)該采取的預(yù)防措施都有哪些? 在做移植時(shí)你可能會(huì)遇到很多問(wèn)題——而在這里很難解釋所有的問(wèn)題。幸運(yùn)的是,微軟已經(jīng)發(fā)布了一個(gè)工具來(lái)幫助移植。你可以在我的文章“使用SQL Server 2005升級(jí)顧問(wèn)減少升級(jí)未知數(shù)”里讀到所有關(guān)于升級(jí)的問(wèn)題。 要知道更多的關(guān)于移植的信息,我邀請(qǐng)你聽(tīng)我的webcast升級(jí)到SQL Server 2005:你必須知道的事情,在其中我分享了許多提示以幫助確保順利的轉(zhuǎn)變到新的版本。 —Adam Machanic,SQL Server 2005專家 11. 在SQL Server 2005中會(huì)出現(xiàn)什么存儲(chǔ)過(guò)程并發(fā)問(wèn)題? 我在SQL Server 2005遇到了一個(gè)并發(fā)問(wèn)題。在我賣票的公交車上有一些免費(fèi)的座位。在插入一個(gè)售出的票之前我要檢查是否還留有免費(fèi)的座位。我的存儲(chǔ)過(guò)程像下面所示: CREATE PROCEDURE add_ticket -- parameters DECLARE free_seats int BEGIN TRANSACTION SELECT free_seats = COUNT(*) FROM tickets WHERE seat_is_not_taken IF free_seats <> 0 INSERT INTO tickets VALUES(...) -- some other statements END TRANSACTION 問(wèn)題是兩個(gè)進(jìn)程可以并發(fā)的讀取免費(fèi)票的數(shù)量,并都可以保留一張票,即使已經(jīng)沒(méi)有免費(fèi)票了。我需要一種方法使運(yùn)行add_ticket存儲(chǔ)過(guò)程的進(jìn)程在沒(méi)有插入一張新的票之前,其它進(jìn)程被阻止讀取免費(fèi)票的數(shù)量。SET TRANSACTION ISOLATION LEVEL在這種情況下不起作用,對(duì)吧? 你是對(duì)的;一個(gè)更高的隔離級(jí)別不能幫助保證多個(gè)讀者不會(huì)同時(shí)讀取同一行數(shù)據(jù)。不過(guò),你可以采取幾種方式來(lái)完成這個(gè)工作。例如,你可以分配給每一個(gè)座位一個(gè)唯一的標(biāo)識(shí)(意思是,一個(gè)唯一的鍵,沒(méi)有必要是全局統(tǒng)一標(biāo)識(shí)符),并創(chuàng)建一個(gè)表儲(chǔ)存已經(jīng)被占用的座位。在這個(gè)表上加一個(gè)UNIQUE約束,這樣就能保證一個(gè)座位不能插入兩次。 我認(rèn)為一個(gè)更有趣的選擇可能是使用SQL Service Broker。你可以為每一輛公交車建立一個(gè)會(huì)話,將這個(gè)會(huì)話句柄存儲(chǔ)在一個(gè)表里,讀者在作接受之前可以參考這個(gè)表。通過(guò)這種方法,讀者可以簡(jiǎn)單的按其需要接受這個(gè)信息(在進(jìn)程中,保留汽車上的座位)。Service Broker會(huì)確保沒(méi)有信息會(huì)被接受兩次,這意味著你不會(huì)再遇到任何并發(fā)問(wèn)題。 —Adam Machanic,SQL Server 2005專家 12. SQL Server 2005數(shù)據(jù)庫(kù)可以移植回SQL Server 2000嗎? 在移植到SQL Server 2005的過(guò)程中,許多組織仍然會(huì)被要求支持SQL Server 2000安裝。結(jié)果,一個(gè)普遍的要求是能夠反向移植:將數(shù)據(jù)庫(kù)從SQL Server 2005移植會(huì)SQL Server 2000。 不幸的是,這并不是那么簡(jiǎn)單。從SQL Server 2005實(shí)例備份的數(shù)據(jù)庫(kù)不能恢復(fù)到SQL Server 2000實(shí)例中。分離的SQL Server 2005數(shù)據(jù)庫(kù)也不能重新綁定到SQL Server 2000中。 因?yàn)椴恢С謧浞?恢復(fù)和分離/綁定,對(duì)于移動(dòng)數(shù)據(jù)從SQL Server 2005到SQL Server 2000的唯一可用的方法是基于復(fù)制數(shù)據(jù)。數(shù)據(jù)和schemas可以用一個(gè)工具例如Red Gate的SQL Packager來(lái)跟蹤,腳本可以應(yīng)用于SQL Server 2000上。另一個(gè)選擇是使用像DTS或SSIS之類的工具,這些工具都包含數(shù)據(jù)復(fù)制向?qū)А?/P> 然而,復(fù)制數(shù)據(jù)和schema是一個(gè)潛在的麻煩經(jīng)歷。SQL Server 2005支持許多SQL Server 2000種沒(méi)有的特性,而這在交叉移植過(guò)程中會(huì)引起問(wèn)題。在試圖為兩種平臺(tái)開發(fā)解決方案時(shí)謹(jǐn)慎是很重要的,我的建議是開發(fā)應(yīng)該采用SQL Server 2000來(lái)完成,而代碼和數(shù)據(jù)應(yīng)該移植到SQL Server 2005中。 該文章在 2011/2/27 0:22:29 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |