Di chuyển cơ sở dữ liệu từ SQL Server 2012 sang 2008


29

Tôi có một cơ sở dữ liệu về phiên bản SQL Sever 2012 mà tôi muốn sao chép vào máy chủ 2008. Máy chủ 2008 không thể khôi phục bản sao lưu được tạo bởi máy chủ 2012 (tôi đã thử).

Tôi không thể tìm thấy bất kỳ tùy chọn nào trong năm 2012 để tạo bản sao lưu tương thích 2008. Tui bỏ lỡ điều gì vậy?

Có cách nào dễ dàng để xuất lược đồ và dữ liệu sang định dạng không biết phiên bản mà sau đó tôi có thể nhập vào năm 2008 không?

Cơ sở dữ liệu không sử dụng bất kỳ tính năng cụ thể năm 2012. Nó chứa các bảng, dữ liệu và các thủ tục được lưu trữ.

Đây là những gì tôi đã cố gắng cho đến nay

Tôi đã thử Nhiệm vụTạo tập lệnh trên máy chủ 2012 và tôi có thể tạo lược đồ (bao gồm các thủ tục được lưu trữ) dưới dạng tập lệnh SQL. Điều này không bao gồm bất kỳ dữ liệu, mặc dù.

Sau khi tạo lược đồ đó trên máy 2008 của tôi, tôi đã có thể mở trình hướng dẫn "Xuất dữ liệu" trên máy 2012 và sau khi định cấu hình 2012 làm máy nguồn và 2008 làm máy đích, tôi được cung cấp một danh sách các bảng mà tôi có thể sao chép. Tôi đã chọn tất cả các bảng của mình (300+) và nhấp qua trình hướng dẫn. Thật không may, nó dành nhiều lứa tuổi để tạo các tập lệnh của nó, sau đó không thành công với các lỗi như "Lỗi khi chèn vào cột chỉ đọc 'FOO_ID'".

Tôi cũng đã thử "Sao chép cơ sở dữ liệu thuật sĩ", tuyên bố có thể sao chép "từ năm 2000 trở lên đến năm 2005 trở lên". Nó có hai chế độ:

  1. "Tách và đính kèm", không thành công với lỗi:

    Message: Index was outside the bounds of the array.
    StackTrace:    at Microsoft.SqlServer.Management.Smo.PropertyBag.SetValue(Int32 index, Object value)
    ...
    at Microsoft.SqlServer.Management.Smo.DataFile.get_FileName()
    
  2. Phương thức đối tượng quản lý SQL bị lỗi

    Không thể đọc thuộc tính IsFileStream. Thuộc tính này không khả dụng trên SQL Server 7.0. "


Bạn có thể xuất khẩu trực tiếp? Tôi không biết DB của bạn lớn như thế nào, nhưng đây là những gì tôi sẽ làm khi làm việc với các cơ sở dữ liệu nhỏ hơn.
Dave

2
Không có phiên bản SQL Server cũ hơn có thể khôi phục bản sao lưu từ các phiên bản mới hơn. Đây là do thiết kế. Sử dụng tính năng Xuất, tập lệnh ra các bảng và dữ liệu và đặt mục tiêu tập lệnh thành SQL 2008

4
"Cố gắng tìm ra lý do tại sao bất cứ ai trong tâm trí phải của họ sẽ di chuyển ngược lại." - Tôi có một máy chủ sản xuất chạy năm 2012, nhưng máy dev của tôi chỉ có năm 2008. Tôi muốn có một bản sao cục bộ của DB để hỗ trợ phát triển, nhưng tôi không muốn cài đặt 2012 trên máy dev của mình vì tôi chưa còn rất nhiều dung lượng trống và không muốn mất hàng giờ để cài đặt nó. (Vì vậy, tôi đang dành hàng giờ để cố gắng di chuyển ngược lại .... nhưng đó chỉ là tôi.)
Rich

1
Bạn gần như ở đó. Phần Xuất bạn đã đi vào có một tùy chọn để bao gồm dữ liệu cũng như lược đồ.

1
Chỉ muốn thêm cho Ramhound: Tôi đã nâng cấp SQL 2008 R2 lên SQL 2012 trên môi trường Dev của tôi và sau đó, sau khi tôi thay đổi nhiều lược đồ và dữ liệu trong phiên bản nâng cấp của mình, nhận ra VS 2010 không thể so sánh lược đồ hoặc dữ liệu với SQL 2012. SSDT cho VS 2010 và VS 2012 có thể so sánh lược đồ với SQL 2012 nhưng không tương thích với các dự án cơ sở dữ liệu VS 2010 ban đầu và không thể so sánh dữ liệu. Tóm lại, tôi muốn quay lại SQL 2008 R2 và đợi cho đến khi có quyết định nào đó, công ty sẽ sáng suốt để chuyển sang năm 2012. Nhưng tôi muốn lưu lại lược đồ / dữ liệu mới của mình. AFAIK Tôi đang ở trong tâm trí đúng đắn của tôi.
GFK

Câu trả lời:


40

Nhấp chuột phải vào cơ sở dữ liệu trong SQL Management Studio 2012 và chọn "Nhiệm vụ -> Tạo tập lệnh". Nhấp qua màn hình chào mừng, chọn "tập lệnh toàn bộ cơ sở dữ liệu và tất cả các đối tượng cơ sở dữ liệu". Trên trang "chỉ định cách lưu tập lệnh", nhấp vào "nâng cao". Trong phần "Chung" trong trang thuộc tính bật lên, thay đổi "Loại dữ liệu thành tập lệnh" từ "Chỉ lược đồ" thành "Lược đồ và dữ liệu" và thay đổi "Tập lệnh cho phiên bản máy chủ" từ "2012" thành "2008".

Sau đó tôi đã phải tìm một số cách để chỉnh sửa sự khởi đầu của tệp SQL khổng lồ này, để điều chỉnh cách tạo cơ sở dữ liệu - xem q: https://stackoverflow.com/questions/102829/best-free-text-editor -hỗ trợ nhiều hơn 4gb-file

Và cuối cùng tôi đã phải tìm một số cách để chạy tập lệnh SQL, quá lớn để mở trong SQL Management Studio - xem q này: https://stackoverflow.com/questions/431913/how-do-you-run- a-300mb-ms-sql-sql-file


Bạn đã điều chỉnh gì khi bắt đầu tập tin?
JonoRR

1
Tôi không thể nhớ chính xác, xin lỗi. Ứng dụng cụ thể, tôi nghĩ. Có lẽ tên cơ sở dữ liệu hoặc một cái gì đó như thế. Tôi nghĩ rằng tôi đã thêm nó ở đây nếu nó có liên quan đến những người có cùng vấn đề.
Giàu

3
@JonoRR Rất có thể bạn muốn chỉnh sửa câu lệnh CREATE DATABASE và đặt đường dẫn dữ liệu thành bất cứ điều gì có ý nghĩa trên máy chủ đích.
Igby Largeeman

12

Để di chuyển SQL, hãy sử dụng Trình hướng dẫn di chuyển cơ sở dữ liệu SQL miễn phí và nguồn mở.

Tôi đã có một cơ sở dữ liệu 5GB với vài ~ 10 triệu bản ghi và đã thử tuyến đường thông qua Generate Script và hơn là chạy nó với sqlcmd.exe. Trước hết, tập lệnh được tạo không phải lúc nào cũng hoạt động chính xác. Thứ hai, sqlcmd.exe cũng có thể bị lỗi trên các tệp lớn, phàn nàn về bộ nhớ khả dụng. osql.exe hoạt động, nhưng chỉ mất nhiều thời gian (và có cùng các đối số dòng lệnh).

Sau đó, tôi đã bắt gặp một công cụ tuyệt vời để di chuyển SQL Server sang cơ sở dữ liệu SQL Azure. Điều này cũng hoạt động cho SQL Server sang SQL Server, ví dụ nếu bạn muốn di chuyển cơ sở dữ liệu SQL 2012 sang 2008 R2. Nó sử dụng bcp.exe, sử dụng bản sao số lượng lớn. Có sẵn phiên bản GUI và dòng lệnh (Batch) và đó là nguồn mở. Xem http://sqlazuremw.codeplex.com/ . Trong trường hợp của tôi, hoạt động mất 16 phút.

Trong màn hình nâng cao, bạn có thể chọn mục tiêu của mình là SQL Server chứ không phải SQL Azure.


1
Nơi nào bạn đặt 2008 R2 trong trình hướng dẫn này?
JonoRR

Mẹo hay, tôi đã khôi phục cơ sở dữ liệu từ Express 2012 sang Web 2008. Rất dễ dàng.
rkawano

Có thể xác nhận nó hoạt động như quảng cáo. Đã làm 2014-> 2012, tên miền chéo, máy chủ SQL cục bộ. Làm thế nào công cụ này tránh được các tìm kiếm của tôi quá lâu! Tuyệt vời ngay cả đối với việc sử dụng không phải là phương tiện.
Gomibushi

3

Tôi mới sử dụng SQL, nhưng tôi đã di chuyển từ năm 2012 đến năm 2008. Để làm như vậy tôi đã sử dụng tiện ích nhập và xuất SQL. Tôi đã chọn máy chủ SQL 2012 và cơ sở dữ liệu mà tôi muốn di chuyển và cuối cùng là máy chủ 2008 và tạo một cơ sở dữ liệu mới làm cơ sở dữ liệu đích của tôi. Nó đã làm việc.


2

Hãy thử các công cụ APEXQuery . Họ có một công cụ sẽ kịch bản cơ sở dữ liệu và kịch bản dữ liệu cũng.


"từ $ 299" - có sự thay thế miễn phí không?
Giàu

1

Sau khi tạo lược đồ đó trên máy 2008 của tôi, tôi đã có thể mở trình hướng dẫn "Xuất dữ liệu" trên máy 2012 và sau khi định cấu hình 2012 làm máy nguồn và 2008 làm máy đích, tôi được cung cấp một danh sách các bảng mà tôi có thể sao chép. Tôi đã chọn tất cả các bảng của mình (300+) và nhấp qua trình hướng dẫn. Thật không may, nó dành nhiều lứa tuổi để tạo các tập lệnh của nó, sau đó không thành công với các lỗi như "Lỗi khi chèn vào cột chỉ đọc 'FOO_ID'".

Vấn đề là nó không thể chèn các cột ID, vì vậy:

  1. Chọn tất cả các bảng bằng cách đánh dấu chúng
  2. Chọn tất cả các bảng (cách để làm điều này là nhấp vào cái đầu tiên và giữ shift và nhấp vào bảng cuối cùng)
  3. Nhấp vào "Chỉnh sửa ánh xạ" - bạn có thể thấy ngay phía trên nút tiếp theo và bên cạnh để xem trước.
  4. Bạn sẽ nhận được một cửa sổ, đánh dấu vào "Bật nhận dạng chèn" và sau đó nhấp vào tiếp theo và tiếp tục, điều này sẽ hoạt động. Nó làm việc cho tôi.

1

Tôi đã làm theo giải pháp của Rich https://superuser.com/a/469597/312310 ở trên và nó hoạt động rất tốt! Cảm ơn - Tôi chưa thể bỏ phiếu ở đây!

Các bước bổ sung tôi phải làm để làm việc này là:

  • Thay đổi tên tệp logic và đảm bảo đường dẫn là chính xác. Tôi cũng đã phải thay đổi tên nhật ký được tạo, nếu không nó đã ghi đè lên tệp mdf bằng nhật ký và sau đó đã ném lỗi này https://stackoverflow.com/questions/7534664/sql-server-script-error-database-is- đã sử dụng

    TẠO RA BẢNG [xxxxx] TRÊN CHÍNH 1024kb) LOG ON (NAME = N'xxxxxldf 'FILENAME = N'C: \ Program Files \ Microsoft SQL server \ MSSQL11.MSSQLSERVER \ MSSQL \ Data \ xxxxx_log.ldf', SIZE = 18560KB, MAXSIZE = 2048GB đối, FILEGROWTH = 10 %) ĐI

  • Tôi đã phải nhận xét phần được tạo và thêm quyền người dùng theo cách thủ công sau đó

    USE [xxxxx]
    GO
    /****** Object:  User [xxxxx]    Script Date: 30/11/2014 12:44:07 ******/
    CREATE USER [xxxxx] FOR LOGIN [xxxxx] WITH DEFAULT_SCHEMA=[dbo]
    GO
    sys.sp_addrolemember @rolename = N'db_owner', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datareader', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datawriter', @membername = N'Umbraco'
    GO
    

Chạy lên và lo và bây giờ tôi có thể khôi phục cơ sở dữ liệu Umbraco 7.1.2 mới của mình vào máy chủ web chỉ có SQL Server 2008 R2!


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.