Khôi phục bản sao lưu SQL Server 2012 vào cơ sở dữ liệu SQL Server 2008?


41

Có cách nào để khôi phục bản sao lưu cơ sở dữ liệu SQL Server 2012 sang SQL Server 2008 không?

Tôi đã cố đính kèm tập tin, nó không hoạt động.


Thanh toán các tài liệu tham khảo sẽ giúp bạn: msdn.microsoft.com/en-us/library/ms140052.aspx dba.stackexchange.com/questions/5511/... Cảm ơn

Có một câu hỏi khác tương đương với câu hỏi này và được trả lời rất tốt: superuser.com/questions/468578/
Khăn

1
Có một câu trả lời tuyệt vời cho vấn đề này ở đây (di chuyển, không phải sao lưu / khôi phục): stackoverflow.com/questions/19837886/ mẹo
Don Jewett

Câu trả lời:


30

Bạn có một vài lựa chọn:

Tùy chọn A : Script out cơ sở dữ liệu trong chế độ tương thích bằng tùy chọn Generate script:

Lưu ý: Nếu bạn loại bỏ cơ sở dữ liệu bằng lược đồ và dữ liệu, tùy thuộc vào kích thước dữ liệu của bạn, tập lệnh sẽ rất lớn và sẽ không được xử lý bởi SSMS, sqlcmd hoặc osql (cũng có thể tính bằng GB).

nhập mô tả hình ảnh ở đây

Tùy chọn B:

Tập lệnh đầu tiên ra bảng trước với tất cả các Chỉ mục, FK, v.v. và tạo các bảng trống trong cơ sở dữ liệu đích - tùy chọn chỉ với SCHema (Không có dữ liệu).

Sử dụng BCP để chèn dữ liệu

  1. bcp ra dữ liệu bằng cách sử dụng tập lệnh dưới đây. đặt SSMS ở Chế độ văn bản và sao chép đầu ra được tạo bởi tập lệnh bên dưới trong tệp bat.

    -- save below output in a bat file by executing below in SSMS in TEXT mode
    
    -- clean up: create a bat file with this command --> del D:\BCP\*.dat 
    
    select '"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp.exe" ' /* path to BCP.exe */
        +  QUOTENAME(DB_NAME())+ '.' /* Current Database */
        +  QUOTENAME(SCHEMA_NAME(SCHEMA_ID))+'.'            
        +  QUOTENAME(name)  
        +  ' out D:\BCP\'  /* Path where BCP out files will be stored */
        +  REPLACE(SCHEMA_NAME(schema_id),' ','') + '_' 
        +  REPLACE(name,' ','') 
        + '.dat -T -E -SServerName\Instance -n' /* ServerName, -E will take care of Identity, -n is for Native Format */
    from sys.tables
    where is_ms_shipped = 0 and name <> 'sysdiagrams'                       /* sysdiagrams is classified my MS as UserTable and we dont want it */
    /*and schema_name(schema_id) <> 'unwantedschema'    */                             /* Optional to exclude any schema  */
    order by schema_name(schema_id)
    
  2. Chạy tệp bat sẽ tạo các tệp .dat trong thư mục mà bạn đã chỉ định.

  3. Chạy bên dưới tập lệnh trên máy chủ đích với SSMS ở chế độ văn bản một lần nữa.

    --- Execute this on the destination server.database from SSMS.
    
    --- Make sure the change the @Destdbname and the bcp out path as per your environment.
    
    declare @Destdbname sysname
    set @Destdbname = 'destinationDB' /* Destination Database Name where you want to Bulk Insert in */
    select 'BULK INSERT ' 
    /*Remember Tables must be present on destination database */ 
    + QUOTENAME(@Destdbname) + '.' 
    + QUOTENAME(SCHEMA_NAME(SCHEMA_ID)) 
    + '.' + QUOTENAME(name) 
    + ' from ''D:\BCP\' /* Change here for bcp out path */ 
    + REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '') 
    + '.dat'' with ( KEEPIDENTITY, DATAFILETYPE = ''native'', TABLOCK )' 
    + char(10) 
    + 'print ''Bulk insert for ' + REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '') + ' is done... ''' 
    + char(10) + 'go'
       from sys.tables
       where is_ms_shipped = 0
    and name <> 'sysdiagrams' /* sysdiagrams is classified my MS as UserTable and we dont want it */
    and schema_name(schema_id) <> 'unwantedschema' /* Optional to exclude any schema */
        order by schema_name(schema_id) 
    
  4. Chạy đầu ra bằng SSMS để chèn dữ liệu trở lại trong các bảng.

Đây là phương pháp bcp rất nhanh vì nó sử dụng chế độ Bản địa.


Rất hữu ích - phương pháp B làm việc cho tôi (SQL được tạo bởi phương pháp A là 7GB và SSMS không có phương thức nào). Một số SSID và máy chủ được liên kết không hoạt động bình thường, nhưng khi nào thì có liên quan gì đến máy chủ được liên kết lần đầu tiên hoạt động? Không chắc chắn tôi sẽ hài lòng khi sử dụng điều này trong sản xuất nhưng để có được môi trường thử nghiệm nhanh chóng 95% thì nó hoàn hảo.
aucuparia

@aucuparia Some SSIDs and linked servers didn't go across properly. Các máy chủ được liên kết phải được viết kịch bản bằng tay. SSID có thể được kiểm tra bằng cách sử dụng sp_helprevlogin. Các công việc SQLAgent, các gói ssis, v.v ... nên được di chuyển theo nhu cầu của bạn. Điểm của phương pháp này là lấy dữ liệu nhanh nhất có thể khi bạn hạ cấp hoặc hợp nhất 2 cơ sở dữ liệu.
Kin Shah

Tùy chọn B là phương pháp duy nhất phù hợp với tôi, vì các tập lệnh được tạo quá lớn theo các cách khác
JumpingJezza

23

Không, bạn không thể đi lùi, chỉ tiến lên. Bạn có thể tạo một cơ sở dữ liệu trống vào năm 2008 và sau đó sử dụng trình hướng dẫn Tạo tập lệnh trong Management Studio để tạo kịch bản cho lược đồ và dữ liệu (hoặc các công cụ so sánh của bên thứ 3 từ Red Gate và các công cụ khác). Đảm bảo bạn đặt đúng phiên bản mục tiêu là 2008 và bạn sẽ phải bổ sung những thứ không tương thích (ví dụ OFFSET hoặc FORMAT) mà bạn có thể đã sử dụng vào năm 2012.


8

Không có cách nào được hỗ trợ để làm điều này vì SQL Server không cho phép loại tương thích này.

Những gì bạn có thể làm là

  1. khôi phục cơ sở dữ liệu trên SQL 2012

  2. tạo tập lệnh cho các đối tượng và dữ liệu

  3. dọn sạch các tập lệnh khỏi tất cả các chi tiết duy nhất cho SQL 2012
  4. thực thi các kịch bản vào năm 2008

Nếu bạn không có SQL Server 2012 thì bạn có thể sử dụng các công cụ của bên thứ ba để đọc bản sao lưu và trích xuất dữ liệu và cấu trúc.

Trong trường hợp này, chỉ cần tạo cơ sở dữ liệu trống trên SQL 2008 và sử dụng các công cụ như ApexSQL DiffApexQuery Data Diff để đồng bộ hóa các đối tượng và dữ liệu. Bạn cũng có thể tìm thấy những thứ này từ các nhà cung cấp lớn khác như Red-Gate hoặc Idera.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.