我是一家圖書公司的資料庫管理員,要維護多台伺服器中的資料庫,經常把某台伺服器中的某個資料庫移動到另外一台伺服器,有時候也從其它分部拖資料到總公司,因此對資料移動有些心得體會,在這裡拿出來同大家交流一下,如有不足之處請大家多多指教。
DTS設計器匯入匯出 DTS的設計器功能強大,支援多任務,也是可視化介面,容易操作,但知道的人一般不多,如果只是進行SQL Server資料庫中部分表的移動,用這種方法最好,當然,也可以進行全部表的移動。
在SQL Server Enterprise Manager中,展開伺服器左邊的+,選擇資料庫,右擊,選擇All tasks/Import Data...(或All tasks/Export Data...),進入嚮導模式,按提示一步一步走就行了,裡面分得很細,可以靈活的在不同資料來源之間複製資料,很方便的。
而且可以另存成DTS包,如果以後還有相同的複製任務,直接運行DTS包就行,省時省力。
也可以直接開啟DTS設計器,方法是展開伺服器名稱下面的Data Transformation Services,選Local Packages,在右邊的視窗中右擊,選New Package,就開啟了DTS設計器。
值得注意的是:如果來源資料庫要拷貝的表有外鍵,注意移動的順序,有時要分批移動,否則外鍵主鍵,索引可能丟失,移動的時候選項旁邊的提示說的很明白,或者一次性的複製到目標資料庫中,再重建立立外鍵,主鍵,索引。
利用備份和恢複 先對來源資料庫進行完全備份,備份到一個裝置(device)上,然後把備份檔案複製到目的伺服器上(恢複的速度快),進行資料庫的恢複操作,在恢複的資料庫名中填上來源資料庫的名字(名字必須相同),選擇強制型恢複(可以覆蓋以前資料庫的選項),再選擇從裝置中進行恢複,瀏覽時選中備份的檔案就行了。這種方法可以完全恢複資料庫,包括外鍵,主鍵,索引。
直接拷貝資料檔案 把資料庫的資料檔案(*.mdf)和記錄檔(*.ldf)都拷貝到目的伺服器,在SQL Server Query Analyzer中用語句進行恢複: EXEC sp_attach_db @dbname = 'test', @filename1 = 'd:mssql7datatest_data.mdf', @filename2 = 'd:mssql7datatest_log.ldf' 這樣就把test資料庫附加到SQL Server中,可以照常使用。
如果不想用原來的記錄檔,可以用如下的命令: EXEC sp_detach_db @dbname = 'test' EXEC sp_attach_single_file_db @dbname = 'test', @physname = 'd:mssql7datatest_data.mdf' 這個語句的作用是僅僅載入資料檔案,記錄檔可以由SQL Server資料庫自動添加,但是原來的記錄檔中記錄的資料就丟失了。
在應用程式中定製 可以在應用程式(PB、VB)中執行自己編寫的程式,也可以在Query Analyzer中執行,這種方法比較靈活,其實是利用一個平台串連到資料庫,在平台中用的主要是SQL語句,這種方法對資料庫的影響小,但是如果用到遠程連結的伺服器,要求網路之間的傳輸效能好,一般有兩種語句: 1> select ... into new_tablename where ... 2> insert (into) old_tablename select ... from ... where ... 區別是前者把資料插入一個新表(先建立表,再插入資料),後者是把資料插入已經存在的一個表中,我個人喜歡後者,因為在編程的結構上,應用的範圍上,第二條語句強於前者。
SQL Server的複製功能 SQL Server提供了強大的資料複製功能,也是最不易掌握的,具體應用請參考相關資料,值得注意的是要想成功進行資料的複製工作,有些條件是必不可少的:
1)SQL Server Agent必須啟動,MSDTC必須啟動。
2)所有要複製的表必須有主鍵。
3)如果表中有text或image資料類型,必須使用with log選項,不能使用with no_log選項。 另外max text repl size選項控制可以複製的文本和映像資料的最大規模,超過這個限制的操作將失敗。
4)在要進行複製的電腦上,應該至少是隱含共用,即共用名稱是a1、b1…。
5)為SQL Server代理使用的Windows Server帳號不能是一個本地的系統帳號,因為本地的系統帳號不允許網路存取。