如何把高版本的SQLServer還原到低版本的sqlserver


·

如何把高版本的SQLServer 還原到低版本的 sqlserver

微軟的軟件設計方案基本上都是新版本兼容舊版本,舊版本不兼容新版本。

所以,直接通過 【數據庫備份】的.bak文件,來進行【數據庫還原】的方式是不支持的。

 

方案一:直接使用生成的完整數據庫sql來還原

                      {   僅用於小數據庫(數據庫完整導出的.sql文件小於100M)   }

 

整體思路:  通過新版本的SQLServer生成兼容低版本的.sql腳本,然后將sql腳本實現在低版本SQLServer上執行。從而創建數據庫。

 

假設:需要實現的功能是 把sqlserver2016(2012)的數據庫備份到sqlserver2012(2008),數據庫名為Test,並且這兩個數據庫在不同的服務器上。

 1. 打開SQL Server Management Studio (下方簡稱SSMS),鏈接新版本的數據庫服務器;

 2.  右鍵點擊需要導出的數據庫Test-屬性-選項  看到如下圖

    

 

 2. 右鍵Test-任務-生成腳本,下一步-下一步到達下圖,點【高級】選項。把【script for sql  version】改成你要降級的那個版本 也就是【sql2008】。確定完成即可。會生成一個【script.sql】腳本文件。

 

 

 

 

3.下一步要把sqlserver2012源文件復制到另外一個電腦上。由於SqlServer正在運行是無法復制的。所以首先要【停止】sqlserver服務。

 

 

4. 找到sql2012數據庫在電腦中的位置。 右鍵【數據庫】-【文件】會有路徑,復制出這兩個文件來。 至此sqlserver2012的電腦操作完成。

 

 

5. 把上面得到的【script.sql】文件和兩個數據源文件復制到sql2008所在的電腦中。在sql2008中【新建】-【查詢管理器】。把【script.sql】拖進去,會看到代碼。

 

   (注意綠色部分。此時顯示的數據庫文件位置是sql2012電腦的位置。需要把這兩個地址改為 sql2008 中 復制過來的那兩個源文件的地址即可。按【F5】鍵執行,即可完成數據庫從SQL2012到SQL2008的降級。 )

 

 

 

方案二:使用CMD命令 

        很多時候,我們的數據庫比較大,通過數據庫生成的.sql腳本(>100M)在SQL Server manager Studio(SSMS)中打開不了,提示“文件太大,無法打開” 。

        這時候,我們就需要通過命令行(cmd命令提示符)來執行sql腳本的還原數據庫了。

       特別說明:-d 后面跟的數據庫名稱,必須是目標數據庫中已經存在的數據庫!!!請先在SqlServer中創建一個空白數據庫。

   在開始菜單上右擊,單擊 “命令提示符(管理員)”打開  

   注意,如果腳本太大,可以關閉stderr消息,以加快執行速度。

 

前提:  備份數據庫,生成sql腳本備用

    1. 右擊數據庫 --> 任務 --> 生成腳本。

    2. 在生成腳本的“選擇對象”步驟選擇“編寫整個數據庫及所有數據庫對象的腳本選項”。下一步。

    3. 在生成腳本的“設置腳本編寫選項”界面, 點擊【高級】按鈕進入高級選項。

       ●  設置 “編寫USE DATABASE 腳本” 和 “架構限定對象名稱” 選項為False;
       ●  並將“服務器版腳本” 選擇為你的低版本數據庫的版本。生成腳本。

    生成腳本完成。

 

    使用sqlcmd命令還原數據庫,要求-d 數據庫名 必須要先手工創建這個數據庫! 所以在備份時生成sql腳本最好先去掉下方這兩項:

     “編寫Use Database腳本”  和 “架構限定對象名稱” 設置為False 

      

 

    4. 在低版本的數據庫中新建數據庫,數據庫名稱隨意(與原高版本的數據庫名不同即可)。

          CMD命令中的“dbname” 部分,可以在下方替換。

             

 

 

 

    5. 完成,后面就是執行cmd命令了。

 

 

運行CMD命令:  還原數據

2.1 方法一: 標准的sqlcmd命令

SQLCMD -U sa -P 123 -S "172.0.0.1\SQLExpress" -d dbname -r -i d:\dbscript.sql

  說明:SQLExpress是本地數據庫服務器(低版本的),dbname 是數據庫名稱,dbscript.sql 是備份的腳本文件
                  -U 后面是數據庫用戶名, -P 后面是數據庫用戶的密碼 -S后是服務器名(數據庫地址\實例)。

 

2.2 方法2:標准的osql命令

OSQL -U sa -P 123 -S (local)\SQLExpress -d dbname -r -i "d:\dbscript.sql"

  

2.3 方法3:通過Windows身份驗證Sqlserver的sqlcmd命令 (通過master來執行創建數據庫命令)

SQLCMD -E -d dbname -i d:\dbscript.sql

  (通過master來執行創建數據庫命令,沒有輸入數據庫賬號密碼,需要Windows身份驗證且登錄的賬號是數據庫管理員)

        Sqlcmd: The -E and the -U/-P options are mutually exclusive. (-E和 -U / -P 選項是互斥的。)

 

 

sqlcmd工具(或者osql)的命令參數如下

    特別說明:-d 后面跟的數據庫名稱,必須是目標數據庫中已經存在的數據庫!!!

sqlcmd    [-U 登錄 ID]             [-P 密碼]
   [-S 服務器]                [-H 主機名]           [-E 可信連接]
   [-d 使用數據庫名稱]         [-l 登錄超時值]      [-t 查詢超時值]
   [-h 標題]                    [-s 列分隔符]         [-w 列寬]
   [-a 數據包大小]           [-e 回顯輸入]         [-I 允許帶引號的標識符]
   [-L 列出服務器]           [-c 命令結束]         [-D ODBC DSN 名稱]
   [-q "命令行查詢"]         [-Q "命令行查詢" 並退出]
   [-n 刪除編號方式]          [-m 錯誤級別]
   [-r 發送到 stderr 的消息]  [-V 嚴重級別]
   [-i 輸入文件]             [-o 輸出文件]
   [-p 打印統計信息]          [-b 出錯時中止批處理]
   [-X[1] 禁用命令,[退出的同時顯示警告]]
   [-O 使用舊 ISQL 行為禁用下列項]
       <EOF> 批處理
       自動調整控制台寬度
       寬消息
       默認錯誤級別為 -1 和 1
   [-? 顯示語法摘要]

  

 擴展閱讀: 使用SQLCMD在SQLServer執行多個腳本https://blog.csdn.net/dba_huangzj/article/details/8350829

    SQLCMD -E -dmaster -ic:\Scripts\create_db.sql

 

SQLCMD有一個很重要的命令::r,記住,SQLCMD是大小寫敏感的。當:r發現正在運行SQL腳本,它會告訴SQLCMD把這個文件所引用的文件一並放入調用腳本中。這將告訴你,停止目前的單個查詢。並重新調整查詢,把應該關聯的查詢放到適當的位置。另外,使用:r命令在一個批處理中執行多個腳本,使得你可以定義一個單獨的變量集,用於包含所有腳本,但是不包含GO終結符。

 

方案三: 暫無

 

············

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM