SQL Server本身有數(shù)據(jù)導(dǎo)入的操作。但如果要從一個備份的文件中導(dǎo)入數(shù)據(jù),則要進(jìn)行另外的操作。下面以一個例子進(jìn)行說明。
SQL Server服務(wù)器上已有一個DOE數(shù)據(jù)庫,并且里面有大量的數(shù)據(jù),現(xiàn)準(zhǔn)備從另外一個備份文件A1.BAK(不是DOE數(shù)據(jù)庫的備份文件)中導(dǎo)入另外的數(shù)據(jù)(即導(dǎo)入后在DOE中增加一些數(shù)據(jù)表,表中已錄有數(shù)據(jù)),并保持原DOE的數(shù)據(jù)不變。
1、首先,在“SQL企業(yè)管理器”中新建一個臨時數(shù)據(jù)庫A1。
2、右擊A1數(shù)據(jù)庫,選擇:所有任務(wù)->還原數(shù)據(jù)庫。
3、在“還原數(shù)據(jù)庫”窗口中,選擇:“從設(shè)備”。
4、點擊“選擇設(shè)備”。
5、點擊“添加”。
6、從文件名中選擇要還原的數(shù)據(jù)庫文件,如A1.BAK。
7、點擊“確定”,返回“還原數(shù)據(jù)庫”窗口。
8、點擊“選項”卡,進(jìn)入選項設(shè)置。
9、鉤選:“在現(xiàn)有數(shù)據(jù)庫上強制還原”。
10、修改“移到物理文件名”為:“c:\a1.ldf”、“c:\a1.mdf”。
11、點確定,即可導(dǎo)入備份文件中的數(shù)據(jù)到臨時數(shù)據(jù)庫A1中。
12、此時,你可以將數(shù)據(jù)從A1導(dǎo)入到另外一真正要導(dǎo)入的數(shù)據(jù)庫中,如DOE數(shù)據(jù)庫。(下面的數(shù)據(jù)導(dǎo)入操作為SQL2000企業(yè)管理器的一般數(shù)據(jù)導(dǎo)入導(dǎo)出操作。)
13、在“SQL企業(yè)管理器”中選擇“DOE”數(shù)據(jù)庫。
14、右擊DOE數(shù)據(jù)庫,選擇:所有任務(wù)->導(dǎo)入數(shù)據(jù)。
15、在“DTS導(dǎo)入/導(dǎo)出向?qū)?#8221;窗口的“選擇數(shù)據(jù)源”中,數(shù)據(jù)源選擇剛才建立并導(dǎo)入數(shù)據(jù)的臨時數(shù)據(jù)庫A1。點擊下一步。
16、在“選擇目的”中,系統(tǒng)已經(jīng)默認(rèn)為DOE數(shù)據(jù)庫。
17、連續(xù)點擊“下一步”,直到完成。
經(jīng)過上面的操作,你已經(jīng)成功地將備份文件A1.BAK中數(shù)據(jù)導(dǎo)入DOE數(shù)據(jù)庫中,并且DOE數(shù)據(jù)庫原有數(shù)據(jù)不變。此時,你可以刪除臨時數(shù)據(jù)庫A1。
==================================
一、導(dǎo)出導(dǎo)入SQL Server里某個數(shù)據(jù)庫
1.在SQL Server企業(yè)管理器里選中要轉(zhuǎn)移的數(shù)據(jù)庫,按鼠標(biāo)右鍵,選所有任務(wù)->備份數(shù)據(jù)庫。
2.備份 選數(shù)據(jù)庫-完全,
目的 備份到 按添加按鈕
文件名 在SQL Server服務(wù)器硬盤下輸入一個自定義的備份數(shù)據(jù)庫文件名(后綴一般是bak)
重寫 選重寫現(xiàn)有媒體
最后按確定按鈕。
如果生成的備份數(shù)據(jù)庫文件大于1M,要用壓縮工具壓縮后再到Internet上傳輸。
3.通過FTP或者remote desktop或者pcanywhere等方法
把第二步生成的備份數(shù)據(jù)庫文件或者其壓縮后的文件傳到目的SQL Server數(shù)據(jù)庫,如果有壓縮要解壓。
4.目的SQL Server數(shù)據(jù)庫如果還沒有此數(shù)據(jù)庫,先創(chuàng)建一個新的數(shù)據(jù)庫;
然后選中這個新創(chuàng)建的數(shù)據(jù)庫,按鼠標(biāo)右鍵,選所有任務(wù)->還原數(shù)據(jù)庫
還原->從設(shè)備->選擇設(shè)備->磁盤->添加(找到要導(dǎo)入的備份數(shù)據(jù)庫文件名)->確定
還原備份集->數(shù)據(jù)庫-完全
最后按確定按鈕。完全的數(shù)據(jù)庫導(dǎo)入成功了。
(如果在已經(jīng)存在的SQL Server數(shù)據(jù)庫上還原數(shù)據(jù)庫可能遇到有還有其它人正在使用它而恢復(fù)操做失敗,
可以去看 ->管理->當(dāng)前活動->鎖/對象->找到數(shù)據(jù)庫下鎖的進(jìn)程號->到查詢分析器里用kill 進(jìn)程號殺掉這些鎖,
然后再做還原)
注意:如果在原有的目的SQL Server數(shù)據(jù)庫上從備份文件(*.bak)還原數(shù)據(jù)庫
會把已經(jīng)存在的表、存儲過程等數(shù)據(jù)庫對象全部替換成最近這次導(dǎo)入的備份數(shù)據(jù)庫里的內(nèi)容。
如果一定要還原備份文件(*.bak)里部分?jǐn)?shù)據(jù),需要另外建一個新數(shù)據(jù)庫,
其邏輯名稱和數(shù)量同備份文件(*.bak)里數(shù)據(jù)庫的邏輯名稱和數(shù)量一致;
新數(shù)據(jù)庫的物理文件名稱取得一定要和備份文件(*.bak)里數(shù)據(jù)庫的物理文件不一樣才行。
二、導(dǎo)出導(dǎo)入SQL Server里某個表
1.沒有防火墻,同一個局域網(wǎng)里或不在同一個局域網(wǎng)里,但通過Internet可以互相訪問
在SQL Server企業(yè)管理器里選中目的數(shù)據(jù)庫 ,按鼠標(biāo)右鍵,選所有任務(wù)->導(dǎo)入數(shù)據(jù)->
彈出數(shù)據(jù)轉(zhuǎn)換服務(wù)導(dǎo)入/導(dǎo)出向?qū)Т翱?>下一步->
選數(shù)據(jù)源-> 數(shù)據(jù)源(用于SQL Server的Microfost OLE DB提供程序)->
服務(wù)器(可選擇局域網(wǎng)內(nèi)能訪問到的所有SQL Server服務(wù)器,或者直接輸入IP地址)->
選擇使用windows身份驗證還是使用SQL Serve身份驗證(輸入數(shù)據(jù)庫的用戶名和密碼)->
數(shù)據(jù)庫(可選擇上面選中SQL Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步->
選擇目的->目的(用于SQL Server的Microfost OLE DB提供程序)->
服務(wù)器(默認(rèn)為上一步里選中的導(dǎo)出服務(wù)器,也可以選其它局域網(wǎng)內(nèi)能訪問到的所有SQL Server服務(wù)器,或者直接輸入IP地址)->
目的數(shù)據(jù)庫(可選擇上面選中SQL Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步->
制定表復(fù)制或查詢->選從源數(shù)據(jù)庫復(fù)制表和視圖(也可以選擇用一條查詢指定要傳輸?shù)臄?shù)據(jù))->下一步->
選擇源表和視圖->在要導(dǎo)入的表和視圖前面選中源->目的出現(xiàn)同樣的表名(可以手工修改成別的表名)->
轉(zhuǎn)換->列映射和轉(zhuǎn)換里面可以修改源表和目的表之間字段的對應(yīng)關(guān)系,修改目的表字段的類型和長度等,
并可以選擇創(chuàng)建目的表,在目的表中增加行,除去并重新創(chuàng)建目的表,啟用標(biāo)志插入等選項->確定->下一步->
保存、調(diào)度和復(fù)制包->時間->立即運行(如果要實現(xiàn)隔一段時間自動導(dǎo)出導(dǎo)入數(shù)據(jù),選調(diào)度DTS包以便以后執(zhí)行)->
保存(可以不選)->[ 保存DTS包(如果以后還要轉(zhuǎn)移這批相同的數(shù)據(jù),可以把本次導(dǎo)出導(dǎo)入的內(nèi)容和步驟保存起來,
存到SQL Server即可,保存的時候要輸入DTS的包名及詳細(xì)描述)->下一步-> ]->完成
正在執(zhí)行包->圖形界面顯示創(chuàng)建表及插入記錄的步驟和狀態(tài)->完成
2.經(jīng)過防火墻,不在同一個局域網(wǎng)里
①、導(dǎo)出表里的數(shù)據(jù)到文本文件:
在SQL Server企業(yè)管理器里選中目的數(shù)據(jù)庫,按鼠標(biāo)右鍵,選所有任務(wù)->
導(dǎo)入數(shù)據(jù)->彈出數(shù)據(jù)轉(zhuǎn)換服務(wù)導(dǎo)入/導(dǎo)出向?qū)Т翱?>下一步->
選數(shù)據(jù)源-> 數(shù)據(jù)源(用于SQL Server的Microfost OLE DB提供程序)->
服務(wù)器(可選擇局域網(wǎng)內(nèi)能訪問到的所有SQL Server服務(wù)器)->
選擇使用windows身份驗證還是使用SQL Serve身份驗證(輸入數(shù)據(jù)庫的用戶名和密碼)->
數(shù)據(jù)庫(可選擇上面選中SQL Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步->
選擇目的->目的(文本文件)-> 文件名(在自己的電腦硬盤中生成一個自定義的文本文件) ->下一步->
制定表復(fù)制或查詢->選從源數(shù)據(jù)庫復(fù)制表和視圖(也可以選擇用一條查詢指定要傳輸?shù)臄?shù)據(jù))->下一步->
選擇目的文件格式->源(選擇要導(dǎo)出的表)->用默認(rèn)的帶分隔符->選第一行包含有列名稱選項->下一步->
保存、調(diào)度和復(fù)制包->時間->立即運行(如果要實現(xiàn)隔一段時間自動導(dǎo)出到文本文件,選調(diào)度DTS包以便以后執(zhí)行)->
保存(可以不選)-> [保存DTS包(保存的時候要輸入DTS的包名及詳細(xì)描述)->下一步->]->完成
正在執(zhí)行包->圖形界面顯示表到文本文件的步驟和狀態(tài)->完成
如果生成的文本文件大于1M,要用壓縮工具壓縮后再到Internet上傳輸。
②、通過FTP或者remote desktop或者pcanywhere等方法把
第①步生成的文本文件或者其壓縮后的文件傳到目的SQL Server數(shù)據(jù)庫,如果有壓縮要解壓。
③、把文本文件導(dǎo)入目的SQL Server數(shù)據(jù)庫
直接把文本文件導(dǎo)入目的SQL Server數(shù)據(jù)庫里跟文本文件同名的新表名時,默認(rèn)的會把所有字段類型都變成字符串。
所以我們要這樣做:
在源SQL Server數(shù)據(jù)庫上先生成創(chuàng)建表的sql語句
在SQL Server查詢分析器里->選中源數(shù)據(jù)庫里表名->按右鍵->在新窗口中編寫對象腳本->創(chuàng)建->
復(fù)制下新窗口內(nèi)創(chuàng)建表名的sql語句
到目標(biāo)SQL Server數(shù)據(jù)庫上查詢分析器里執(zhí)行創(chuàng)建表名的sql語句,生成空表結(jié)構(gòu)。
(如果已經(jīng)存在這樣的表名,修改建表的sql語句,在表名后面加上導(dǎo)入時間的年月信息,例如table_0113)
調(diào)用導(dǎo)入/導(dǎo)出工具->彈出數(shù)據(jù)轉(zhuǎn)換服務(wù)導(dǎo)入/導(dǎo)出向?qū)Т翱?>下一步->
選數(shù)據(jù)源-> 數(shù)據(jù)源(文本文件)->
文件名(已傳到目的SQL Server數(shù)據(jù)庫下要導(dǎo)入的文本文件,后綴可以不是*.txt,
但是常規(guī)文本編輯器能打開的文件,文件類型選全部)->下一步->
選擇文件格式->用默認(rèn)的帶分隔符->選第一行包含有列名稱選項->下一步->
制定列分割符->逗號->下一步->
選擇目的->目的(用于SQL Server的Microfost OLE DB提供程序)->
服務(wù)器(可選擇目標(biāo)局域網(wǎng)內(nèi)能訪問到的所有SQL Server服務(wù)器)->
選擇使用windows身份驗證還是使用SQL Serve身份驗證(輸入數(shù)據(jù)庫的用戶名和密碼)->
數(shù)據(jù)庫(可選擇上面選中SQL Server服務(wù)器上所有權(quán)限范圍內(nèi)的數(shù)據(jù)庫)->下一步->
選擇源表和視圖->修改目的表名為剛才創(chuàng)建的表名->轉(zhuǎn)換(在目的表中追加行) ->下一步->
保存、調(diào)度和復(fù)制包->
時間->立即運行(如果要實現(xiàn)隔一段時間自動把文本文件導(dǎo)入,選調(diào)度DTS包以便以后執(zhí)行)->
保存(可以不選)-> [保存DTS包(保存的時候要輸入DTS的包名及詳細(xì)描述)->下一步->]->完成
正在執(zhí)行包->圖形界面顯示文本文件到表的步驟和狀態(tài)->完成
如果要更改導(dǎo)入時間的年月信息的表名,例如table_0113到原來的表名,
在企業(yè)管理器里把原來的表名改成table_old_0113,table_0113改名成table。
這會對應(yīng)用程序里頻繁訪問的表照成一定的中斷。
注意:源表上的建的索引和主鍵約束不能用上面介紹的1和2方法轉(zhuǎn)移過來,還需要手工來建索引和主鍵。
標(biāo)志種子和not null的約束可以繼承過來。
導(dǎo)入視圖時會把源視圖里所有的真實數(shù)據(jù)導(dǎo)入成一個新表,而不是視圖。
三、SQL Server存儲過程或用戶定義的函數(shù)導(dǎo)出導(dǎo)入
1、導(dǎo)出存儲過程或用戶定義的函數(shù)成*.sql文件
在SQL Server企業(yè)管理器里選中源數(shù)據(jù)庫,
存儲過程->單選或者多選中要轉(zhuǎn)移的存儲過程->
用戶定義的函數(shù)->單選或者多選中要轉(zhuǎn)移的函數(shù)->
按鼠標(biāo)右鍵,選所有任務(wù)->生成SQL腳本->確定->在自己的電腦硬盤中生成一個自定義的*.sql文件->
保存->正在生成SQL腳本->成功
2、如果目的數(shù)據(jù)庫經(jīng)過防火墻,不在同一個局域網(wǎng)里,
要通過FTP或者remote desktop或者pcanywhere等方法把第1步生成的*.sql文件傳到目的SQL Server數(shù)據(jù)庫服務(wù)器上。
3、用查詢分析器進(jìn)入SQL Server目的數(shù)據(jù)庫,
從菜單里選文件->打開->打開查詢文件->選中第1步生成的*.sql文件->點執(zhí)行查詢的綠色倒三角型快捷鍵->
查詢窗口里會出現(xiàn)執(zhí)行后的消息(有時候可能因為存儲過程和用戶定義的函數(shù)之間有一定的依賴關(guān)系,會報一些錯。
最好先執(zhí)行用戶定義的函數(shù)的*.sql文件,再執(zhí)行存儲過程的*.sql文件)
四、ORACLE數(shù)據(jù)庫里表導(dǎo)入SQL Server數(shù)據(jù)庫
1、在目的SQL Server數(shù)據(jù)庫服務(wù)器上安裝ORACLE Client軟件或者ORACLE ODBC Driver.
在$ORACLE_HOME\network\admin\tnsnames.ora里配置ORACLE數(shù)據(jù)庫的別名(service name)。
具體配置方法可以參考本站文章:客戶端連服務(wù)器的注意事項
2、在WIN2000或者win2003服務(wù)器->管理工具->數(shù)據(jù)源(ODBC)->
系統(tǒng)DSN(本機器上NT域用戶都可以用)->添加->ORACLE ODBC Driver->完成->
data source name 可以自定義,我一般填ORACLE數(shù)據(jù)庫的sid標(biāo)志,
description里可以填ORACLE數(shù)據(jù)庫詳細(xì)描述,也可以不填->
data source service name 填第1步定義的ORACLE數(shù)據(jù)庫別名->OK。
(用戶DSN和文件DSN也可以類似配置,但使用的時候有一些限制)
3、SQL Server的導(dǎo)入和導(dǎo)出數(shù)據(jù)工具里->選數(shù)據(jù)源-> 數(shù)據(jù)源(其它(ODBC數(shù)據(jù)源))->
選第2步在ODBC里定義的系統(tǒng)DSN source name,用戶名密碼處填寫ORACLE系統(tǒng)的用戶名和密碼->
下一步->選擇目的,選SQL Server數(shù)據(jù)庫(跟上面第二點講的一致,就不重復(fù)了)。
注意:在ORACLE表和SQL Server表之間'轉(zhuǎn)換'那步很重要,
可以改變默認(rèn)的字段數(shù)據(jù)類型,如image->text,decimal->int
五、SQL Server數(shù)據(jù)庫里表導(dǎo)入ORACLE數(shù)據(jù)庫
方法一.導(dǎo)出目的選通過ODBC數(shù)據(jù)源里定義的ORACLE數(shù)據(jù)庫, 注意ORACLE里表名都是大寫的.
我一般在ORACLE這邊先生成好表結(jié)構(gòu),再選擇SQL SERVER源表往ORACLE目的表里追加數(shù)據(jù).
數(shù)據(jù)傳輸速度比方法二慢.
方法二.從SQL Server數(shù)據(jù)庫導(dǎo)入數(shù)據(jù)到ORACLE數(shù)據(jù)庫可以選擇用Windows下ORACLE9i企業(yè)或者個人版數(shù)據(jù)庫做中轉(zhuǎn)。