本人從事的工作是數據庫管理員
要維護多台服務器中的數據庫
經常把某台服務器中的某個數據庫移動到另外一台服務器
對數據的移動有些心得體會
希望和大家共同交流
通過工具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設計器
值得注意的是
如果源數據庫要拷貝的表有外鍵
注意移動的順序
有時要分批移動
否則外鍵主鍵
索引可能丟失
移動的時候選項旁邊的提示說的很明白
或者一次性的復制到目標數據庫中
再重新建立外鍵
主鍵
索引
其實建立數據庫時
建立外鍵
主鍵
索引的文件應該和建表文件分開
而且用的數據文件也分開
並分別放在不同的驅動器上
有利於數據庫的優化
利用Bcp工具
這種工具雖然在SQL Server
的版本中不推薦使用
但許多數據庫管理員仍很喜歡用它
尤其是用過SQL Server早期版本的人
Bcp有局限性
首先它的界面不是圖形化的
其次它只是在SQL Server的表(視圖)與文本文件之間進行復制
但它的優點是性能好
開銷小
占用內存少
速度快
有興趣的朋友可以查參考手冊
利用備份和恢復
先對源數據庫進行完全備份
備份到一個設備(device)上
然後把備份文件復制到目的服務器上(恢復的速度快)
進行數據庫的恢復操作
在恢復的數據庫名中填上源數據庫的名字(名字必須相同)
選擇強制型恢復(可以覆蓋以前數據庫的選項)
在選擇從設備中進行恢復
浏覽時選中備份的文件就行了
這種方法可以完全恢復數據庫
包括外鍵
主鍵
索引
直接拷貝數據文件
把數據庫的數據文件(*
mdf)和日志文件(*
ldf)都拷貝到目的服務器
在SQL Server Query Analyzer中用語句進行恢復:
EXEC sp_attach_db @dbname =
test
@filename
=
d:\mssql
\data\test_data
mdf
@filename
=
d:\mssql
\data\test_log
ldf
這樣就把test數據庫附加到SQL Server中
可以照常使用
如果不想用原來的日志文件
可以用如下的命令
EXEC sp_detach_db @dbname =
test
EXEC sp_attach_single_file_db @dbname =
test
@physname =
d:\mssql
\data\test_data
mdf
這個語句的作用是僅僅加載數據文件
日志文件可以由SQL Server數據庫自動添加
但是原來的日志文件中記錄的數據就丟失了
在應用程序中定制
可以在應用程序(PB
VB)中執行自己編寫的程序
也可以在Query Analyzer中執行
這種方法比較靈活
其實是利用一個平台連接到數據庫
在平台中用的主要時SQL語句
這種方法對數據庫的影響小
但是如果用到遠程鏈接服務器
要求網絡之間的傳輸性能好
一般有兩種語句
> select
into new_tablename where
> insert (into) old_tablename select
from
where
區別是前者把數據插入一個新表(先建立表
再插入數據)
後者是把數據插入已經存在的一個表中
我個人喜歡後者
因為在編程的結構上
應用的范圍上
第二條語句強於前者
SQL Server的復制功能
SQL Server提供了強大的數據復制功能
也是最不易掌握的
具體應用請參考相關資料
值得注意的是要想成功進行數據的復制工作
有些條件是必不可少的
>SQL Server Agent必須啟動
MSDTC必須啟動
>所有要復制的表必須有主鍵
>如果表中有text或image數據類型
必須使用with log選項
不能使用with no_log選項
另外max text repl size選項控制可以復制的文本和圖像數據的最大規模
超過這個限制的操作將失敗
>在要進行復制的計算機上
應該至少是隱含共享
即共享名是C$或D$…
>為SQL Server代理使用的Windows NT帳號不能是一個本地的系統帳號
因為本地的系統帳號不允許網絡存取
>如果參與復制的服務器在另外的計算機域中
必須在這些域之間建立信任關系
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22071.html