iT邦幫忙

0

SQL 2000 資料庫復製到另1資料庫作法?

sql

各位大大 您好:
請問目前我有1台SQL 2000 server,因操作者記錄檔過於肥大,導致系統運作效能低,目前想將資料庫(A)做瘦身,但把操作者記錄內含資料刪除後,發現資料庫還是一樣大……經詢問系統廠商,廠商回覆,必須做匯出/匯入,才能縮小資料庫大小。
1.A資料庫所有資料匯到B資料庫:但目前在執行匯出/匯入,出現了錯誤訊息(PRIMARY KEY 違反條件約束'VCHRREL_PK',無法在物件'VCHRREL_PK'上插入重複索引鍵。)
2.同1台SERVER,A資料庫完整備份,B資料庫進行還原,系統顯示,無法還原"A",因為A資料庫A正在使用。請使用WITH MOVE來確認該檔案的有效位置。
故想請問大大,是否有什麼方法,可以讓我在同一台SERVER,將舊資料庫(A),裡面所有資料匯到新資料庫(B)呢?而其做法或指令為??或有教學網站,可提供參考?

slime iT邦大師 1 級 ‧ 2012-10-23 10:08:25 檢舉
建議先確定透過完整備份, 資料庫還是不會縮小.

印象中要有做完整備份, 才會清掉使用者交易記錄.

2 個回答

10
pojen
iT邦新手 2 級 ‧ 2012-10-23 11:02:02
最佳解答

Log 檔肥大應該是沒有作 log backup. 請先使用 dbcc loginfo 看一下 status 欄. 如果是 0 的話, 代表可以作瘦身的動作 (i.e., dbcc shrinkfile), 如果是 2 的話表示尚未作 log backup 而導致無法瘦身.

如果完整備份有照常作的話, 可以暫時將資料庫的 log mode 從 full 轉到 none. 做完 dbcc shrinkfile 然後馬上再作一次 full backup. 這樣應該就可以將 log 檔瘦身了.

至於匯入匯出的問題:

  1. import/export 的話有時會遇到 constraint 的問題. 比較阿Q的做法是在import/export 時 disable 掉所有的 constraint. 然後等 import 完成後再重新 enable.

  2. 因為想要回復到同一個 server, 而預設回復的檔案地址就是現在資料庫所在的位址. 所以我個人建議是
    a. 先記好目前 mdf 與 ldf (還有 ndf, 如果有的話) 所在的地址
    b. dettach 資料庫
    c. 將 mdf/ldf/ndf 搬到一個安全的備份的地方
    d. 再執行 restore. 因為你已經有一個安全的備份了, 所以在回復時可以選 overwrite existing files.
    (f) 如果不幸 restore 失敗了, 將 mdf/ldf/ndf 搬回原位, 然後 attach. 這樣資料庫就會回來了.

jughon iT邦新手 4 級 ‧ 2012-10-24 14:45:20 檢舉

pojen 大大您好:
請問目前我匯入匯出問題已解決,但仍想請問二個問題,
1.原A資料庫6G,將使用者記錄檔刪除約300萬筆資料,觀其A資料庫大約仍為6G,並沒因資料表刪除,資料庫就縮小,請問應當如何處理?
(試過刪除資料表後,對A資料庫進行完整備份,在匯入到新資料庫裡面,空間大小仍為6G。
2.因對其SQL資料庫不是如此熟悉,故對大大所提的方法不甚瞭解,是否有網站範例可供參考?謝謝大大
"Log 檔肥大應該是沒有作 log backup. 請先使用 dbcc loginfo 看一下 status 欄. 如果是 0 的話, 代表可以作瘦身的動作 (i.e., dbcc shrinkfile), 如果是 2 的話表示尚未作 log backup 而導致無法瘦身.

如果完整備份有照常作的話, 可以暫時將資料庫的 log mode 從 full 轉到 none. 做完 dbcc shrinkfile 然後馬上再作一次 full backup. 這樣應該就可以將 log 檔瘦身了."

pojen iT邦新手 2 級 ‧ 2012-10-27 22:02:15 檢舉
  1. 如果你單指 mdf(ndf) 的檔案大小. 請"不"要縮小他. 隨意縮小 mdf(ndf) 會造成不必要的 fragementation. 如果你非縮不可, 那可以試著 rebuild 你的 cluster index. 縮小他, 然後再重新 rebuild 一次.

如果只是 table 大小沒變, 那可以試試 rebuild 你的 cluster index.

  1. 我推薦 SQL Authority
    http://blog.sqlauthority.com/2006/12/30/sql-server-shrinking-truncate-log-file-log-full/
jughon iT邦新手 4 級 ‧ 2012-11-05 14:26:57 檢舉

大大 謝謝你

4
dscwferp
iT邦好手 1 級 ‧ 2012-10-26 10:09:06

方法1:先新增新資料庫 比如 B, 然後用 匯出匯入方式 將A的所有東西匯到B
優點:簡單 缺點: 有些TRIGGER & VIEW 可能會沒匯到!
方法2:用SQL管理程式裡的 壓縮資料庫 功能, A資料庫 按右鍵裡就可以看到!
優點:簡單 缺點: 有時候壓縮不了!
方法3:用SQL管理程式裡的 壓縮資料庫 功能, 先壓縮後用 如下指令壓縮LOG 檔
不要照抄喔! 一定要多看HELP 找出適用您們家的參數喔!

<pre class="c" name="code">--DBCC SHRINKFILE
--下列範例會將 UserDB 使用者資料庫中名稱為 DataFil1 之檔案的大小壓縮成 7 MB
USE UserDB;
GO
DBCC SHRINKFILE (DataFil1, 7);
GO

參考:http://xintiao.net/show.aspx?id=133&cid=5
方法4:有備份 不怕資料不見得 可以用第三方軟體
參考:http://www.pc6.com/softview/SoftView\_76649.html
最好方法 1:
先熟悉SQL SERVER管理 然後再去做
最好方法 2:
花$外包 處理

我要發表回答

立即登入回答