SQL Server:移動系統資料庫

來源:互聯網
上載者:User

說到這個問題,基本上有人就會想到三個問題:

1,什麼是系統資料?

2,為什麼要移動系統資料庫?

3,移動系統資料庫我們可以用附加和分離,為什麼還要單獨拿出來說呢?

對於這三個問題我一個一個講吧,也算是自己做個筆記。

1,什麼是系統資料?

所謂系統資料庫就是我們在裝SQL Server之後,系統內建的資料庫(這樣的回答是不是很白癡^_^).

如果你裝SQL Server2005或2008在開啟一個SQL執行個體後,就會看到一個資料庫--->系統資料庫檔案夾,裡邊就是系統內建的資料庫,

   對於每一個系統資料庫,這裡我先用簡單的語言說一下:

    1),master:
          這個資料庫是全域資料庫,它包含一些系統資料表,許可權分配,使用者帳號設定,當前資料庫配置資訊以及關於磁碟空間,檔案分配等資訊。所以在執行諸如使用者帳號設定,許可權分配和改變系統配置資訊後都要備份此資料。所以在這裡強烈建議,不僅要經常備份自己的資料庫,還有備份此資料庫,雖然不像備份自己資料庫那樣那麼頻繁。至少半個月或一個月備份一次此資料庫。 
         在這裡還有專門的一個資料庫大牛討論過是否應該備份此資料庫:SQL SERVER – Backup master Database Interval – master Database Best Practices
    2),model:
           這個資料庫只是一個模板資料庫,我們在建立任意的一個資料庫的時候,都是複製此資料庫為新資料庫的基礎,如果希望每一個新的資料庫都含有某些對象或者許可權,可以把這個對象或許可權放在此資料庫中,新建立的新資料庫都會繼承此資料的新對象或許可權,並且擁有這些對象或許可權。 
    3),msdb: 
            作者原話:SQL ServerProxy 伺服器會使用該資料庫,它會執行一些列如備份和複製任務的計劃好的活動。Service Borker也會用到該資料庫,他為SQL Sever提供隊列和可靠訊息傳遞。當我們不在該資料庫執行備份或維護任務時,通常可以忽略該資料庫。在SQL Server2005之前,實際上是可以刪除該資料庫的,只後SQL Server仍然可用,但不能在維護任何備份曆史了,並且不能夠在定義任務,警告,工作或者建立複製,不過因為預設的msdb資料庫非常小,建議即使用不到也不要刪除它。
    4),tempdb:
          該資料庫說白了,就是一個中轉站或資料寄存站,使用者顯示建立的暫存資料表,在查詢處理和排序時內部所產生的中間結果的工作表,維護用的快照等,都會用到此資料庫,與其他資料庫所不同的是,在每次SQL Server執行個體重啟之後,都會重建而不是恢複. 所以我們在其中建立的所有對象和許可權在下次重啟SQL Server時都會全部丟失。
          但是我們也不能忽略此資料庫,因為tempdb的大小和配置,對最佳化SQL Server的功能和效能來說很重要。
          對tempdb資料庫,還要多說幾句,雖然在tempdb每次被重建時,它會從model資料庫繼承大多數的資料庫選項,但是tempdb卻不會從modeldb資料庫中複製其復原模式,因為它總是使用簡單復原模式。另外,tempdb是無法刪除的,也不用備份。

2,為什麼要移動系統資料庫?

         我們在安裝SQL Server後預設的這些系統資料庫都會放在C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA此檔案夾下,一般的都不很大,為什麼我們還有移動他們呢?
        在沒有實踐管理伺服器之前,我也沒有這個想法,但是我發現我的伺服器C盤一直都在增加,或者萬一重裝系統,我設定的資料庫選項,以及使用者賬戶設定都要重新設定,所以就有了這個想法。

       還有一點就是作為重新布置計劃或安排好的維護操作的一部分,我們也許需要移動系統資料庫。

3,用附加和分離就可以,為什麼還要單獨說呢?

       回答這個問題之前,我們在看一張圖
        
     注意到了嗎,在我選中master系統資料庫右擊,選中任務後,並沒有出現“分離”這個選項。那就說明移動這些系統資料庫是和使用者自訂的資料庫是不同的。
     移動tempdb,model和msdb的步驟和移動master資料庫步驟稍微有點不同。
     1),移動tempdb,model和msdb資料庫 
            i),移動一個沒有損壞的系統資料庫 
                首先讓我們用查詢命令看一下SQL Server預設儲存這些系統資料庫的路徑;查詢命令:
                      SELECT name,physical_name AS CurrentLocation,state_desc
                      FROM sys.master_files
                F5執行,顯示
                   
                之後開始我們的移動之旅吧!
                   a),對資料庫中每個要移動的檔案使用帶有MODIFY FILE選項的ALTER DATABASE命令來指定新的檔案夾選項。如:                

--Move tempdbALTER DATABASE tempdb MODIFY FILE(NAME='tempdev',FILENAME='D:\Database\tempdb.mdf');ALTER DATABASE tempdb MODIFY FILE(NAME = 'templog',FILENAME='D:\Database\templog.ldf');--Move modelALTER DATABASE model MODIFY FILE(NAME='modeldev',FILENAME='D:\Database\model.mdf');ALTER DATABASE model MODIFY FILE(NAME='modellog',FILENAME='D:\Database\modellog.ldf');--Move msdbALTER DATABASE msdb MODIFY FILE(NAME='MSDBData',FILENAME='D:\Database\msdbdata.mdf');ALTER DATABASE msdb MODIFY FILE(NAME='MSDBLog',FILENAME='D:\Database\msdb_log.ldf');

                    b),在命令提示行下用NET STOP MSSQLSERVER命令停止SQL Server執行個體;

                    c),物理移動檔案到我們定義的檔案夾,比如上面所述D:\Database檔案夾;

                    d),重啟SQL Server執行個體;

                    大功告成,然後在用上面的查詢來驗證更改,F5執行,顯示

                              
            ii),由於硬體故障而需要移動系統資料庫 
                  對於由於硬體故障而需要移動系統資料庫,上面的方法就不行了,因為我們可能無法訪問伺服器來運行ALTER DATABASE命令。那我們就另外換一種解決方案!

                  a),如果SQL Server執行個體已經啟動,那麼停止該執行個體;

                  b),在命令提示行下,輸入下面的命令把SQL Server執行個體啟動到master-only復原模式

                         NET START MSSQLSERVER /f /T3608

                  c),之後我們就能連結到伺服器了,接下來就和上面”移動一個沒有損壞的系統資料庫 ”的步驟就一樣了。

                註:如果直接用NET START MSSSQL SERVER命令來啟動SQL Server執行個體,會收到1814的錯誤提示。我們可以到“控制台”-》“管理工具”-》“事件檢視器”中看一下具體的錯誤記錄檔。

     2),移動master資料庫

           移動master資料庫的位置和其他的系統資料庫不同是,只能用SQL Server 組態管理員來更改master的位置。

           首先開啟SQL Server組態管理員,右擊目標SQL Server執行個體,選擇屬性,然後點擊進階標籤,:

           

          在啟動參數中編輯各個參數的值來指向新的master資料庫資料檔案和記錄檔的目錄位置,如下:

              -dD:\Database\master.mdf;

              -eC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Log\ERRORLOG;

               -lD:\Database\mastlog.ldf

          然後停止SQL Server執行個體,把物理檔案移動到新的檔案夾下,比如我移動到D:\Database\目錄下;

          最後啟動SQL Server執行個體,就大功告成了!如果要檢驗一下,就用上面所提到的檢驗語句,F5執行,:

            

         
           
參考:SQL Server技術內幕-儲存引擎

Author:興百放

Web:http://xbf321.cnblogs.com

Time:2010.3.12

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.