# MS SQL還原問題排除 (記憶體不足、限制的使用者) ###### tags: `資料庫` ## 萬用解 要匯入外部來的資料庫,有時候用bak還原不回來,我就會想用指令碼的方式來處理,就算沒有匯入,至少可以逐行拿insert來看結果 ## 資料庫使用中無法還原 從新增查詢(N) (在上方工具列可以看到), 要選擇master資料庫,刪除其他正在使用資料庫的連線,先輸入按 !執行(X) ```=sql sp_who ``` 看看哪個執行緒把正在使用的dbname資料庫佔走,用kill指令對應spid砍掉 如果要看結果,把sp_who擺在後面可以馬上看到刪除結果 ```=sql kill 51; sp_who ``` ## 記憶體不足 但資料庫重建時,以前測試期都小小的沒差,後來檔案越來越大,指令碼也越長,總算在大到30萬筆的時候,出現記憶體不足的錯誤訊息 勉勉強強的找了臨時替代方案,在命令提示字元中,使用sqlcmd可以解決這問題 sqlcmd **-S** PcName\SQLEXPRESS **-U** sa **-P** password **-d** DataBaseName **-i** C:\Script.sql **-o**C:\log.txt **-S**: 此處為在 SSMS 裡寫在「伺服器名稱」的值 **-U**: 此處為在 SSMS 裡寫在「登入」的值 **-P**: 此處為在 SSMS 裡寫在「密碼」的值 **-i**: 匯入的腳本檔,也就是剛才使用資料庫發行精靈 (SqlPubWiz.exe) 產生出來的檔案 **-o**: 匯出的檔案,內容大致是平常在 SSMS 裡執行 SQL 語法時會出現在「訊息」窗格裡的內容(我是覺得這批匯入所產生的 log,和我在 SSMS 執行時看到的訊息量不太一樣) 如果是用bak正常還原,出現限制的使用者,可以在屬性>選項>狀態的限制存取裡 「Multiple」、「Single」與「Restricted」改成Multiple就可以了 ### 參考資料 [http://fannys23.pixnet.net/blog/post/29336021](http://fannys23.pixnet.net/blog/post/29336021) [[MSSQL] 使用命令列模式執行大量 SQL 語法](http://fannys23.pixnet.net/blog/post/29336021) [http://blog.xuite.net/tolarku/blog/36344366](http://blog.xuite.net/tolarku/blog/36344366) MSSQL 資料庫 - 限制的使用者 ## 作業系統 5 權限不足 SQL Server 錯誤 5120 Windows VISTA / 7 / Server 2008這些作業系統,好像在某些特殊目錄底下,都設了奇怪的權限 不像以前的 Windows XP / Server 2003那樣,管理員想進入哪個目錄都如入無人之境 只好乖乖的把以前的資料庫檔案 .mdf與 . ldf兩個檔案 放到 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data 如果您 OS是 x64的版本,而SQL Server是32 bit版, 則是放到 C:\Program Files(x86)\Microsoft SQL Server\MSSQL.1\MSSQL\Data ### 參考資料 http://www.dotblogs.com.tw/mis2000lab/archive/2010/02/10/13565.aspx