Sql-Server

具有多個 .mdf 文件的數據庫

  • May 15, 2019

我在網上搜尋過,但沒有找到我要找的東西。

據我所知,問題/查詢是 SQL Server 中的數據庫應該有一個 .mdf 文件,可能還有一些 .ndf 文件和一個 .log 文件。

我見過許多帶有一個 mdf 和多個 ndf 文件的數據庫。但是最近我在伺服器上遇到了一些數據庫,其中每個數據庫都有多個 mdf 文件。

我對一些數據庫進行了備份,將它們移動到另一台伺服器,並將主文件恢復為 .mdf,將所有其他文件恢復為 .ndf,顯然除了日誌文件恢復為 .log 之外。

現在我的問題是:

  1. 為數據庫擁有多個 .mdf 文件有什麼智慧嗎?
  2. 擁有多個 .mdf 文件有什麼缺點嗎?

它是SQL Server 2008 R2 64bit Enterprise Edition

非常感謝任何正確方向的建議或指示。謝謝你。

但是最近我在伺服器上遇到了一些數據庫,其中每個數據庫都有多個 mdf 文件。

那是因為不正確的命名約定。微軟說每個數據庫都有一個主數據文件,但這並不意味著它只能有一個“mdf數據文件”,數據庫可以有多個.mdf副檔名的數據文件但只有一個是主數據文件。最好mdf為主數據文件和ndf輔助數據文件提供副檔名以進行適當的分界,但這不是硬性規定,您也可以為主數據文件提供 .abc 副檔名,這樣您所看到的都是正常的。事實上,您可以提供任何您喜歡的副檔名。

為數據庫擁有多個 .mdf 文件有什麼智慧嗎?

如果你的意思是:

為數據庫擁有多個主文件有什麼智慧嗎?

答案是否定的,一個數據庫只能有一個主數據文件。

但如果你的意思是:

為數據庫擁有多個數據文件(.mdf、.ndf 或不同名稱)有什麼智慧嗎?

這取決於您可以也不能擁有多個數據文件的優勢。如果它們分佈在不同的物理驅動器上(我說的是主軸),您會看到寫入密集型應用程序的一些優勢。如果它們都在相同的邏輯分區上,那將沒有任何優勢,因為它們將使用公共資源。使用文件和文件組可以提高數據庫性能,因為它允許跨多個磁碟、多個磁碟控制器或 RAID(獨立磁碟冗餘陣列)系統創建數據庫。例如,如果您的電腦有四個磁碟,您可以創建一個由三個數據文件和一個日誌文件組成的數據庫,每個磁碟上有一個文件。在訪問數據時,四個讀/寫磁頭可以同時並行訪問數據。

根據此 MSDN BOL 文章

文件組對每個文件組中的所有文件使用比例填充策略。在將數據寫入文件組時,SQL Server 數據庫引擎將與文件中的可用空間成比例的數量寫入文件組中的每個文件,而不是將所有數據寫入第一個文件直到寫滿。然後它寫入下一個文件。例如,如果文件 f1 有 100 MB 空閒空間,文件 f2 有 200 MB 空閒空間,則從文件 f1 分配一個擴展區,從文件 f2 分配兩個擴展區,依此類推。這樣,兩個文件幾乎同時變滿,實現了簡單的條帶化。

我知道的另一個優點是考慮一個 1 TB 的數據庫,如果你有一個數據文件,並且你想在其他伺服器上恢復這個數據庫,那麼你不太可能有 1 TB 的可用空間。現在,如果相同的數據庫分佈在每個大小為 250 G 的不同文件上,則恢復變得更容易。這實際上可能不是您的情況,但它確實有很大幫助,與一個 1 TB 驅動器相比,找到具有四個 250 G 驅動器的伺服器並不容易

我會說,與其擁有許多數據文件,不如擁有不同的文件組,但同樣沒有很多環境。由多個文件組組成的數據庫可以通過稱為分段恢復的過程分階段恢復。分段還原適用於所有恢復模式,但對於完整模式和批量日誌模式比簡單模式更靈活。可以單獨備份和恢復數據庫中的文件或文件組。這允許您僅恢復損壞的文件,而無需恢復數據庫的其餘部分。文件組備份中的文件可以單獨或作為一個組恢復

引用自:https://dba.stackexchange.com/questions/86123