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.
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.
Câu trả lời:
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).
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
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)
Chạy tệp bat sẽ tạo các tệp .dat trong thư mục mà bạn đã chỉ định.
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)
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.
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.
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.
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à
khôi phục cơ sở dữ liệu trên SQL 2012
tạo tập lệnh cho các đối tượng và dữ liệu
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 Diff và ApexQuery 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.