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