剛被交接負責一個MSSQL資料庫的維護
當然勢必要定期作備份工作
觀以前的工程師 已設定好 "完整備份"的路徑 也就是SQLSERVER 在C:下原始的安裝路徑
然而我發現... 因 C碟原本分配的磁碟空間就比較少
觀察.BAK檔所佔磁碟空間的增長速度 大概以這樣的速度增長下去 不出多久就要沒空間了
所以想改備份到D槽 或者外接硬碟
沒想到在 欲備份的資料庫(按右鍵)->工作->備份->加入->選擇好路徑與名稱 完成後
也就是 現在我的"備份至"便有兩個路徑可選
例如:
C:\Program Files(x86)\Microsoft SQL Server\MSSQL1.1\MSSQL\Backup\test
D:\SQLBackup\test
選好 新的路徑(D的那個) 按下確定後 便出現備份失敗的錯誤訊息 指出
裝置'C:\Program Files(x86)\Microsoft SQL Server\MSSQL1.1\MSSQL\Backup\test'上的磁碟區
不屬於多個家族媒體的一部分。 BACKUP WITH FORMAT可以用來構成新的媒體。
這個問題是怎麼回事 該怎麼處理才對呢
爬了一些文 說使用BACKUP WITH FORMAT 要小心?
請問要在哪裡下這個指令 又會發生什麼問題呢? 會破壞原本備份在C的那個檔案?還是什麼呢?
請有經驗的大大 幫幫忙
感恩感恩
ien03 wrote:
剛被交接負責一個MSSQL...(恕刪)
找的到在哪邊下SQL吧?
BACKUP DATABASE test
TO DISK = D:\SQLBackup\test'
WITH FORMAT;
GO
=============================
你之前那個真的很壞心
backup 到C:等於一滿就整台hang住了...
連OS都不好進去..
=============================
要知道WITH FORMAT在搞甚麼,
你可以先下
BACKUP DATABASE test
TO DISK = D:\SQLBackup\test1';
GO
跑個兩次
再下
BACKUP DATABASE test
TO DISK = D:\SQLBackup\test2'
WITH FORMAT;
GO
跑個兩次, 看看test1跟test2的大小就知道了...
=============================
BTW
可以的話, 盡量不要用圖形介面,
用command line處理大量操作時會比較方便.
且很多資訊用MSSQL本身的圖形介面是看不到的..
...只能說 傻眼之餘也讓我有得學習了
==========
slash410 wrote:
找的到在哪邊下SQL...(恕刪)
這一篇 http://blog.kkbruce.net/2011/01/sqlcmdt-sql.html#.VrIe08Xvba4
好像寫的不錯
但沒有試過 也不是很確定
另外
http://ithelp.ithome.com.tw/question/10030314
這一篇 database有加[],以及 備份路徑前面還有個N'
然後 我測試sqlcmd時 直接跟我說 連線逾時"可能是預設不允許遠端連線" 但我不是遠端呀...
可以的話還是讓我再多謹慎一點 懇請大大來賜教了 感謝大大
ien03 wrote:
呵呵 前任呀......(恕刪)
照著做看看就好了
sqlcmd很常使用,
怕會弄壞東西就弄幾台測試機慢慢搞..
管系統就是要...技巧方法多,膽大心細,多study..
===========================================
不能遠端連線有幾個可能
沒聽tcp/ip protocol, port不對, 防火牆沒設定好, 不允許遠端連接....
http://fecbob.pixnet.net/blog/post/39071397-sqlcmd%E4%B8%8D%E8%83%BD%E9%81%A0%E7%AB%AF%E9%80%A3%E7%B7%9A%E5%95%8F%E9%A1%8C%E5%8F%8A%E8%A7%A3%E6%B1%BA%E6%96%B9%E6%A1%88
先試試這連結..看看有沒有正常聽那個ip跟port
再強迫允許遠端連接
EXEC sys.sp_configure N'remote access', N'1'
GO
RECONFIGURE WITH OVERRIDE
GO
=================================
[]中括號是代表..."這字串不是保留字"
例如user在SQL裡面是保留字, 但[user]就可代表這是個字串,
example:
create datebase [user]; //正常
create database user; //錯誤
而N'代表..."這是個Unicode字串"
打英文時有加沒加沒差.
不過採用的方法跟提供的那篇有些不同
再這邊也提供一下解決方案
先PO一下 出現的問題
HResult 0x7E,層級 16,狀態 1
VIA 提供者: 找不到指定的模組。
Sqlcmd: 錯誤: Microsoft SQL Native Client : 建立連線至伺服器時發生錯誤。連線至 S
QL Server 2005 時,發生此失敗,可能是因為在預設設定下,SQL Server 不允許遠端連線
。。Sqlcmd: 錯誤: Microsoft SQL Native Client : 登入逾時終止。
參考的一些網址以及我的動作如下:
http://fecbob.pixnet.net/blog/post/39071397-sqlcmd%E4%B8%8D%E8%83%BD%E9%81%A0%E7%AB%AF%E9%80%A3%E7%B7%9A%E5%95%8F%E9%A1%8C%E5%8F%8A%E8%A7%A3%E6%B1%BA%E6%96%B9%E6%A1%88
這一篇 我在組態設定中找不到他所說的 SQL Server 組態管理員(本地)->SQL Server 2005 網路設定->HLHEBSQL 的協定-> TCP/IP 也許是版本不同 但我還是調了一些設定
我的介面中 是網路組態 通訊協定
我把原本沒有啟用的VIA 給啟用
然後 在SQL Native Client 組態(32bit) -> 用戶端通訊協定
一樣把VIA 給啟用
在我的列表中 VIA 順序是4
http://blog.miniasp.com/post/2007/12/28/How-to-enable-SQL-Express-TCP-IP-connection.aspx
然後參考這一篇 把TCP/IP內的IPAll部分 改正
TCP 動態通訊埠: 清空
TCP 通訊埠: 1433
https://support.microsoft.com/zh-tw/kb/914277
然後這個 看了一下好像沒什麼要修正的
大概只用了它的介面 把伺服器重啟
以上 遠端連線的部份便解決
sqlcmd 可以順利下達 得到1>
指令下達也沒有問題
成功將資料庫備份到D:
在WITH FORMAT下 檔案大小 變得小非常多
有趣的是 指令下完之後 MSSQLServerManagement 裡面的備份路徑也就換了
用這裡再做一次備份 檔案便膨脹 一倍有餘
只是不解的是 跟原本備份在C:的BAK檔相比 也是小了非常多
差距是110GB 和 不到1GB 的差別 這會不會太誇張了
那少掉的100"GB" 消失到哪去了... 這有沒有問題呢...???
ien03 wrote:
指令下達也沒有問題
成功將資料庫備份到D:
在WITH FORMAT下 檔案大小 變得小非常多
有趣的是 指令下完之後 MSSQLServerManagement 裡面的備份路徑也就換了
用這裡再做一次備份 檔案便膨脹 一倍有餘
只是不解的是 跟原本備份在C:的BAK檔相比 也是小了非常多
差距是110GB 和 不到1GB 的差別 這會不會太誇張了
那少掉的100"GB" 消失到哪去了... 這有沒有問題呢...???
WITH FORMAT有點像是"格式化"
等於在跟那個備份目的地"D:\test"說..."幫我重新準備一個地方讓我備份"
他就會把D:\test 標頭改掉,
也就是你在MSSQLServerManagement看到的資訊會跟著改變..
而原本備份在C:的.bak
會一直長大是因為沒有下INIT, 所以每次備份就會一直附加上去,
假如database是1GB大, 備份個100次就會變成100GB..
假如有回復資料到某一天的需求
我會弄個job, 每天備份到獨立的.bak檔
例如今天備份到D:\test_2016_01_04.bak
明天備份到D:\test_2016_01_05.bak
這樣就可以很快地找到要回復的備份檔,
這時用command line的方便就出現了 (其實也可以透過stored procedure或是排程帶參數做)
而不用附加的方式, 因為附加到最後會長很大, 要回復時會很難處理也很慢..
==================================
可以看一下這pdf, 看完跟著做幾次就差不多了..
http://www.delightpress.com.tw/bookRead/skud00004_read.pdf




























































































