SQL Server匯出匯入 作者:楊曉(http://blog.sina.com.cn/u/1237288325) 由於公司項目需要,在兩個資料庫之間進行資料庫匯入匯出。我對SQL Server匯入匯出研究了一下,發現有篇文章介紹的較全面,現把它修正一下,供朋友參考。 一、匯出匯入SQL Server裡某個資料庫 1.在SQL Server企業管理器裡選中要轉移的資料庫,按滑鼠右鍵,選所有任務->備份資料庫。 2.備份 選資料庫-完全, 目的 備份到 按添加按鈕 檔案名稱 在SQL Server伺服器硬碟下輸入一個自訂的備份資料庫檔案名(尾碼一般是bak) 重寫 選重寫現有媒體 最後按確定按鈕。 如果產生的備份資料庫檔案大於1M,要用壓縮公用程式壓縮後再到Internet上傳輸。 3.通過FTP或者remote desktop或者pcanywhere等方法 把第二步產生的備份資料庫檔案或者其壓縮後的檔案傳到目的SQL Server資料庫,如果有壓縮要解壓。 4.目的SQL Server資料庫如果還沒有此資料庫,先建立一個新的資料庫; 然後選中這個新建立的資料庫,按滑鼠右鍵,選所有任務->還原資料庫 還原->從裝置->選擇裝置->磁碟->添加(找到要匯入的備份資料庫檔案名)->確定 還原備份組->資料庫-完全 最後按確定按鈕。完全的資料庫匯入成功了。 (如果在已經存在的SQL Server資料庫上還原資料庫可能遇到有還有其它人正在使用它而恢複操做失敗, 可以去看 ->管理->當前活動->鎖/對象->找到資料庫下鎖的進程號->到查詢分析器裡用kill 進程號殺掉這些鎖, 然後再做還原) 注意:如果在原有的目的SQL Server資料庫上從備份檔案(*.bak)還原資料庫 會把已經存在的表、預存程序等資料庫物件全部替換成最近這次匯入的備份資料庫裡的內容。 如果一定要還原備份檔案(*.bak)裡部分資料,需要另外建一個新資料庫, 其邏輯名稱和數量同備份檔案(*.bak)裡資料庫的邏輯名稱和數量一致; 新資料庫的物理檔案名稱取得一定要和備份檔案(*.bak)裡資料庫的物理檔案不一樣才行。 二、匯出匯入SQL Server裡某個表 1.沒有防火牆,同一個區域網路裡或不在同一個區域網路裡,但通過Internet可以互相訪問 在SQL Server企業管理器裡選中目的資料庫 ,按滑鼠右鍵,選所有任務->匯入資料-> 彈出資料轉換服務匯入/匯出嚮導視窗->下一步-> 選資料來源-> 資料來源(用於SQL Server的Microfost OLE DB提供者)-> 伺服器(可選擇區域網路內能訪問到的所有SQL Server伺服器,或者直接輸入IP地址)-> 選擇使用windows身分識別驗證還是使用SQL Serve身分識別驗證(輸入資料庫的使用者名稱和密碼)-> 資料庫(可選擇上面選中SQL Server伺服器上所有許可權範圍內的資料庫)->下一步-> 選擇目的->目的(用於SQL Server的Microfost OLE DB提供者)-> 伺服器(預設為上一步裡選中的匯出伺服器,也可以選其它區域網路內能訪問到的所有SQL Server伺服器,或者直接輸入IP地址)-> 目的資料庫(可選擇上面選中SQL Server伺服器上所有許可權範圍內的資料庫)->下一步-> 制定表複製或查詢->選從來源資料庫複製表和視圖(也可以選擇用一條查詢指定要傳輸的資料)->下一步-> 選擇源表和視圖->在要匯入的表和視圖前面選中源->目的出現同樣的表名(可以手工修改成別的表名)-> 轉換->列映射和轉換裡面可以修改源表和目的表之間欄位的對應關係,修改目的表欄位的類型和長度等, 並可以選擇建立目的表,在目的表中增加行,除去並重新建立目的表,啟用標誌插入等選項->確定->下一步-> 儲存、調度和複製包->時間->立即運行(如果要實現隔一段時間自動匯出匯入資料,選調度DTS包以便以後執行)-> 儲存(可以不選)->[ 儲存DTS包(如果以後還要轉移這批相同的資料,可以把本次匯出匯入的內容和步驟儲存起來, 存到SQL Server即可,儲存的時候要輸入DTS的包名及詳細描述)->下一步-> ]->完成 正在執行包->圖形介面顯示建立表及插入記錄的步驟和狀態->完成 2.經過防火牆,不在同一個區域網路裡 ①、匯出表裡的資料到文字檔: 在SQL Server企業管理器裡選中目的資料庫,按滑鼠右鍵,選所有任務-> 匯入資料->彈出資料轉換服務匯入/匯出嚮導視窗->下一步-> 選資料來源-> 資料來源(用於SQL Server的Microfost OLE DB提供者)-> 伺服器(可選擇區域網路內能訪問到的所有SQL Server伺服器)-> 選擇使用windows身分識別驗證還是使用SQL Serve身分識別驗證(輸入資料庫的使用者名稱和密碼)-> 資料庫(可選擇上面選中SQL Server伺服器上所有許可權範圍內的資料庫)->下一步-> 選擇目的->目的(文字檔)-> 檔案名稱(在自己的電腦硬碟中產生一個自訂的文字檔) ->下一步-> 制定表複製或查詢->選從來源資料庫複製表和視圖(也可以選擇用一條查詢指定要傳輸的資料)->下一步-> 選擇目的檔案格式->源(選擇要匯出的表)->用預設的帶分隔字元->選第一行包含有列名稱選項->下一步-> 儲存、調度和複製包->時間->立即運行(如果要實現隔一段時間自動匯出到文字檔,選調度DTS包以便以後執行)-> 儲存(可以不選)-> [儲存DTS包(儲存的時候要輸入DTS的包名及詳細描述)->下一步->]->完成 正在執行包->圖形介面顯示表到文字檔的步驟和狀態->完成 如果產生的文字檔大於1M,要用壓縮公用程式壓縮後再到Internet上傳輸。//yangxiao ②、通過FTP或者remote desktop或者pcanywhere等方法把 第①步產生的文字檔或者其壓縮後的檔案傳到目的SQL Server資料庫,如果有壓縮要解壓。 ③、把文字檔匯入目的SQL Server資料庫 直接把文字檔匯入目的SQL Server資料庫裡跟文字檔同名的新表名時,預設的會把所有欄位類型都變成字串。 所以我們要這樣做: 在源SQL Server資料庫上先產生建立表的sql語句 在SQL Server查詢分析器裡->選中來源資料庫裡表名->按右鍵->在新視窗中編寫對象指令碼->建立-> 複製下新視窗內建立表名的sql語句 到目標SQL Server資料庫上查詢分析器裡執行建立表名的sql語句,產生空表結構。 (如果已經存在這樣的表名,修改建表的sql語句,在表名後面加上匯入時間的年月資訊,例如table_0113) 調用匯入/匯出工具->彈出資料轉換服務匯入/匯出嚮導視窗->下一步-> 選資料來源-> 資料來源(文字檔)-> 檔案名稱(已傳到目的SQL Server資料庫下要匯入的文字檔,尾碼可以不是*.txt, 但是常規文字編輯器能開啟的檔案,檔案類型選全部)->下一步-> 選擇檔案格式->用預設的帶分隔字元->選第一行包含有列名稱選項->下一步-> 制定列分割符->逗號->下一步-> 選擇目的->目的(用於SQL Server的Microfost OLE DB提供者)-> 伺服器(可選擇目標區域網路內能訪問到的所有SQL Server伺服器)-> 選擇使用windows身分識別驗證還是使用SQL Serve身分識別驗證(輸入資料庫的使用者名稱和密碼)-> 資料庫(可選擇上面選中SQL Server伺服器上所有許可權範圍內的資料庫)->下一步-> 選擇源表和視圖->修改目的表名為剛才建立的表名->轉換(在目的表中追加行) ->下一步-> 儲存、調度和複製包-> 時間->立即運行(如果要實現隔一段時間自動把文字檔匯入,選調度DTS包以便以後執行)-> 儲存(可以不選)-> [儲存DTS包(儲存的時候要輸入DTS的包名及詳細描述)->下一步->]->完成 正在執行包->圖形介面顯示文字檔到表的步驟和狀態->完成 如果要更改匯入時間的年月資訊的表名,例如table_0113到原來的表名, 在企業管理器裡把原來的表名改成table_old_0113,table_0113改名成table。 這會對應用程式裡頻繁訪問的表照成一定的中斷。 注意:源表上的建的索引和主鍵約束不能用上面介紹的1和2方法轉移過來,還需要手工來建索引和主鍵。 標誌種子和not null的約束可以繼承過來。 匯入視圖時會把源視圖裡所有的真實資料匯入成一個新表,而不是視圖。 三、SQL Server預存程序或使用者定義的函數匯出匯入 1、匯出預存程序或使用者定義的函數成*.sql檔案 在SQL Server企業管理器裡選中來源資料庫, 預存程序->單選或者多選中要轉移的預存程序-> 使用者定義的函數->單選或者多選中要轉移的函數-> 按滑鼠右鍵,選所有任務->產生SQL指令碼->確定->在自己的電腦硬碟中產生一個自訂的*.sql檔案-> 儲存->正在產生SQL指令碼->成功 2、如果目的資料庫經過防火牆,不在同一個區域網路裡, 要通過FTP或者remote desktop或者pcanywhere等方法把第1步產生的*.sql檔案傳到目的SQL Server資料庫伺服器上。 3、用查詢分析器進入SQL Server目的資料庫, 從菜單裡選檔案->開啟->開啟查詢檔案->選中第1步產生的*.sql檔案->點執行查詢的綠色倒三角型快速鍵-> 查詢時段裡會出現執行後的訊息(有時候可能因為預存程序和使用者定義的函數之間有一定的依賴關係,會報一些錯。 最好先執行使用者定義的函數的*.sql檔案,再執行預存程序的*.sql檔案) 四、ORACLE資料庫裡表匯入SQL Server資料庫 1、在目的SQL Server資料庫伺服器上安裝ORACLE Client軟體或者ORACLE ODBC Driver. 在$ORACLE_HOME\network\admin\tnsnames.ora裡配置ORACLE資料庫的別名(service name)。 2、在WIN2000或者win2003伺服器->管理工具->資料來源(ODBC)-> 系統DSN(本機器上NT域使用者都可以用)->添加->ORACLE ODBC Driver->完成-> data source name 可以自訂,我一般填ORACLE資料庫的sid標誌, description裡可以填ORACLE資料庫詳細描述,也可以不填-> data source service name 填第1步定義的ORACLE資料庫別名->OK。 (使用者DSN和檔案DSN也可以類似配置,但使用的時候有一些限制) 3、SQL Server的匯入和匯出資料工具裡->選資料來源-> 資料來源(其它(ODBC資料來源))-> 選第2步在ODBC裡定義的系統DSN source name,使用者名稱密碼處填寫ORACLE系統的使用者名稱和密碼-> 下一步->選擇目的,選SQL Server資料庫(跟上面第二點講的一致,就不重複了)。 注意:在ORACLE表和SQL Server表之間'轉換'那步很重要, 可以改變預設的欄位資料類型,如image->text,decimal->int 五、SQL Server資料庫裡表匯入ORACLE資料庫 方法一.匯出目的選通過ODBC資料來源裡定義的ORACLE資料庫, 注意ORACLE裡表名都是大寫的. 我一般在ORACLE這邊先產生好表結構,再選擇SQL SERVER源表往ORACLE目的表裡追加資料. 資料轉送速度比方法二慢. 方法二.從SQL Server資料庫匯入資料到ORACLE資料庫可以選擇用Windows下ORACLE9i企業或者個人版資料庫做中轉。 注意:ORACLE通過訪問SQL Server的資料庫連結時,用select * 的時候欄位名是用雙引號引起來的。 關於作者: 楊曉,電腦碩士,曾在NEC、Softbrain 擔任java開發工作。 部落格:http://blog.sina.com.cn/u/1237288325
|