遷移SQL Server數據庫的五種方法

我是一家軟件公司的系統管理員,要維護多臺服務器中的數據庫,經常把某臺服務器中的某個數據庫移動到另外一臺服務器,有時候也從其它分部拖數據到總公司,因此對數據移動有些心得體會,在這裏拿出來同大家交流一下,如有不足之處請大家多多指教。

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賬號不能是一個本地的系統賬號,因爲本地的系統賬號不允許網絡存取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章