Sql-Server

打開大型 SQL Server 文件時出現“系統找不到指定的文件”錯誤

  • September 1, 2020

我已將整個 SQL Server 數據庫的腳本生成到一個文件中,它超過 36 GB。當我嘗試打開它時,我收到以下錯誤:

該系統找不到指定的文件。

起初我打算在新視窗中創建腳本,但每次我的 SQL 實例都崩潰了。此外,我擁有所有必要的權限,我什至嘗試在伺服器中打開它,但我不斷收到此錯誤。

伺服器的 RAM 為 16 GB。

我最初的目標是更改整個數據庫的排序規則(包括每個欄位和每個表),由於這是一個耗時的過程,我決定生成數據庫腳本,以便創建一個具有正確排序規則的新腳本。我無法在“生成腳本”過程中創建新視窗;因此我必須創建一個新文件才能生成腳本。該文件為 36 GB。

嘗試打開文件時,我只收到提到的錯誤並且 SQL 不會崩潰。

如果不需要程式碼頁轉換(即不更改程式碼頁更改程式碼頁但程式碼頁之間沒有使用不同的字元;這僅與VARCHAR數據有關),那麼有一個未記錄的選項可能會更快,兩者在製定解決方案所花費的時間和移動數據所花費的時間方面。事實上,這種未記錄的方法非常快,因為它根本不移動任何數據。它只是更新內部collation_id元數據中的每個字元串列(對於應該更新的系統表和所有使用者表)。唯一真正花費的時間是重建所有受影響的索引。但是沒有數據導出和導入。它繞過了所有阻止更新數據庫排序規則的限制(在許多但不是全部情況下)。此外,它還更改了系統 DB 和實例級排序規則。

主要問題是,通過更改128 - 255 範圍內的collation_id任何現有字元可能會在新排序規則中被誤解。但是,如果程式碼頁沒有改變,這不是問題。此外,雖然我已要求添加它們,但目前有兩個區域尚未通過此方法更新,因此請投票支持此建議:通過 SQLSERVR -Q 更新分區函式和使用者定義表類型的排序規則VARCHAR

我所說的方法是使用開關執行sqlservr.exe 。-q您需要停止 SQL Server 引擎服務,並執行傳遞新排序規則和幾個特定跟踪標誌的命令。我在下面的文章中詳細描述了這種方法(請務必閱讀有關此方法作用和不作用的所有詳細資訊):

更改 SQL Server 實例、數據庫和所有使用者數據庫中的所有列的排序規則:可能出了什麼問題?

我建議您使用其他一些工具來執行腳本文件。例如,我在考慮 SQLCMD.EXE。

如果您需要編輯文件,請使用可以處理大型文本文件的優秀編輯器(即,在記憶體中處理文件的塊而不是整個文件)。我在這樣的編輯上找到了關於 SO 的對話。

(考慮到 a)它是一個 32 位應用程序和 b)文件太大,SSMS 對文件感到窒息並不感到驚訝。我認為試圖讓 SSMS 執行這個文件是一個死胡同。可以質疑您收到的錯誤消息,嘗試生成重現並讓 MS 查看錯誤消息 - 但這最終並不能真正幫助您。)

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