Detach hoặc Đính kèm là gì và chúng hoạt động như thế nào?
Chúng ta sẽ bắt đầu với tách ra. Khi bạn tách cơ sở dữ liệu trong SQL Server, bạn sẽ lấy cơ sở dữ liệu ngoại tuyến và xóa nó khỏi phiên bản SQL Server mà bạn đang tách nó ra. Dữ liệu cơ sở dữ liệu và các tệp nhật ký vẫn còn nguyên và được để ở trạng thái nhất quán để sau đó bạn có thể đính kèm cơ sở dữ liệu vào một điểm sau hoặc với một phiên bản SQL Server khác. Đính kèm kết nối dữ liệu và tệp nhật ký từ cơ sở dữ liệu đã được tách riêng (hoặc được sao chép từ phiên bản SQL Server được tắt sạch) với phiên bản SQL Server và đưa cơ sở dữ liệu trực tuyến.
Làm cách nào để tách cơ sở dữ liệu?
Bạn có thể làm điều này trong T-SQL hoặc từ GUI của SQL Server Management Studio.
Trong GUI, bạn nhấp chuột phải vào cơ sở dữ liệu bạn muốn tách ra, chọn All Tasks
và nhấp vào Detach
. Từ đó bạn sẽ nhận được hộp thoại tách ra. Trước tiên, bạn có thể chọn hủy kết nối để ngắt kết nối bất kỳ kết nối đang hoạt động nào và công việc khôi phục lại chúng đang ở giữa quá trình thực thi. Bạn cũng có thể chọn cập nhật số liệu thống kê trước khi tách ra.
Trong T-SQL:
-- You don't want to be in the database you are trying to detach
USE Master
GO
-- Optional step to drop all active connections and roll back their work
ALTER DATABASE DatabaseName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
-- Perform the detach
EXEC sp_detach_db 'DatabaseName'
GO
Đối với thủ tục lưu trữ hệ thống sp_detach_db, có hai tham số mà bạn có thể vượt qua tùy chọn:
@skipchecks
- đầu vào chấp nhận được 'True'
hoặc 'False'
nếu 'True'
, SQL Server sẽ cập nhật số liệu thống kê trước khi tách ra. Nếu ' False'
, nó sẽ không. Nếu bạn không chỉ định bất cứ điều gì ở đây, số liệu thống kê sẽ được cập nhật trong SQL Server 2005 trở lên.
@keepfulltextindexfile
- Mặc định ở đây là 'True'
- nếu điều này được đặt thành đúng, siêu dữ liệu chỉ mục toàn văn bản sẽ không bị hủy trong quá trình tách.
Để xem nhiều hơn về Cắt ra và một số chi tiết về những rủi ro tôi làm nổi bật dưới đây, bài viết Sách trực tuyến cho sp_detach_db
là một nơi tốt để bắt đầu.
Làm cách nào để đính kèm cơ sở dữ liệu?
Bạn cũng có thể thực hiện việc này trong T-SQL hoặc từ GUI của Studio Server Management Studio.
( LƯU Ý: Nếu bạn có các tệp dữ liệu và nhật ký từ cơ sở dữ liệu không được tách riêng, tệp đính kèm của bạn có thể không hoạt động. Khi tách ra, cơ sở dữ liệu được ngoại tuyến và tệp nhật ký và dữ liệu được đặt ở trạng thái nhất quán. xảy ra khi dịch vụ ngừng hoạt động. )
Trong GUI, bạn nhấp chuột phải vào Databases
thư mục cấp cao nhất cho ví dụ của bạn và chọn Attach
. Trong hộp thoại tiếp theo, sau đó bạn sẽ chọn tệp dữ liệu chính (.MDF) của cơ sở dữ liệu bạn muốn đính kèm và đảm bảo bạn có các tệp khác được chọn và vị trí thích hợp của chúng được chỉ định và nhấp vào OK, đính kèm cơ sở dữ liệu của bạn.
Trong T-SQL, cách tốt nhất để thực hiện điều này trong SQL Server 2005 và chuyển tiếp là thông qua CREATE DATABASE
lệnh. Đây là phương pháp được hỗ trợ ngoài SQL Server 2012. Nếu bạn muốn xem cách sử dụng sp_attach_db
, bạn có thể thấy điều đó trong các bài báo trực tuyến cho [sp_attach_db][3]
hoặc[sp_attach_single_file_db][4]
Khi bạn có sẵn tệp nhật ký và tệp dữ liệu và chúng nhất quán, đây là cách tiếp cận T-SQL:
- Sử dụng Tạo cơ sở dữ liệu và mệnh đề FOR ATTACH để đính kèm
CREATE DATABASE DatabaseName
ON (FILENAME = 'FilePath\FileName.mdf'), -- Main Data File .mdf
(FILENAME = 'FilePath\LogFileName.ldf'), -- Log file .ldf
(FILENAME = 'FilePath\SecondaryDataFile.ndf) -- Optional - any secondary data files
FOR ATTACH
GO
Bạn cũng có thể xem thêm về câu lệnh Tạo cơ sở dữ liệu trong sách trực tuyến.
Làm cách nào để tách / đính kèm trong SQL Server Express?
Nó thực sự giống nhau. Nếu bạn đang sử dụng SQL Server Management Studio Express, bạn có thể sử dụng hộp thoại tách / đính kèm trong GUI được mô tả ở trên hoặc các bước T-SQL thông qua SSMS Express được mô tả ở trên. Không có sự khác biệt với Express ở đó.
Nếu bạn không có SSMS Express, bạn có thể tải xuống ( Đây là phiên bản SQL Server 2012 Express).
Bạn có thể tham gia vào một SQLCMD
phiên và sử dụng các cấu trúc T-SQL tương tự được mô tả ở trên.
Khi nào tôi nên cân nhắc thực hiện Detach hoặc Đính kèm?
Trước tiên, một từ về những gì tách và đính kèm không có nghĩa là được sử dụng cho: Sao lưu và khôi phục Detach và Đính kèm không phải là một cách để sao lưu cơ sở dữ liệu của bạn cho mục đích phục hồi thông thường. Không có bản sao lưu nhật ký giao dịch theo cách này, nó đặt cơ sở dữ liệu của bạn vào trạng thái mà các tệp cơ sở dữ liệu có thể bị xóa vô tình và không phải là một cách tốt cho mục đích này.
Điều đó nói rằng, tách và đính kèm là tốt cho một vài trường hợp sử dụng (không đầy đủ, thoải mái chỉnh sửa để thêm hoặc tạo một câu trả lời mới với nhiều hơn):
- Đôi khi cho việc di chuyển (mặc dù tôi thích sao lưu / khôi phục cho những người được thảo luận trong câu trả lời của tôi ở đây )
- Khi bạn muốn xóa một cơ sở dữ liệu không còn được sử dụng tích cực nhưng có khả năng đính kèm sau này khi cần.
- Trong một số tình huống khắc phục sự cố, điều này có thể được yêu cầu
- Không có không gian để sao lưu hoặc khôi phục cả dữ liệu và tệp nhật ký sang môi trường khác (bạn không nên ở đây nhưng tôi đã sử dụng nó để di chuyển cơ sở dữ liệu dev xung quanh môi trường .. Không muốn hoặc không cần Nhật ký cũng đã đính kèm / xây dựng lại tệp nhật ký)
Rủi ro và cảnh báo
Một lần nữa, sách trực tuyến là một tài nguyên tốt ở đây , nhưng tôi sẽ nêu ra một số cân nhắc cụ thể cần lưu ý khi tách hoặc đính kèm cơ sở dữ liệu -
Tách
- Bạn đang lấy cơ sở dữ liệu của bạn ngoại tuyến. Nó sẽ không thể truy cập được nữa. Điều này nên rõ ràng, nhưng đáng gọi ra. Đây là lý do tại sao nó không phải là một lựa chọn sao lưu tuyệt vời.
- Khi cơ sở dữ liệu của bạn trực tuyến, SQL Server sẽ khóa các tệp. Tôi không khuyên bạn nên thử điều này để chứng minh tôi sai, vì có thể có một số tình huống khác đang diễn ra, nhưng bạn thường không thể xóa tệp cơ sở dữ liệu (dữ liệu, dữ liệu thứ cấp hoặc tệp nhật ký) trong khi SQL Server đang trực tuyến. Đây là một điều tốt. Khi bạn tách ra, bạn không có sự bảo vệ như vậy - đây có thể là một điều xấu.
- Nếu bạn đang xử lý tham nhũng cơ sở dữ liệu và bạn tìm thấy một số bài viết ở đâu đó có bước đầu tiên của Detach - thì đó là sai - nếu bạn tách một cơ sở dữ liệu bị hỏng, thì đó có thể là nó. Bạn có thể không được đính kèm cơ sở dữ liệu đó một lần nữa.
- Cắt và dán các tệp cơ sở dữ liệu sản xuất của bạn trên toàn mạng là một cách có khả năng giới thiệu tham nhũng cấp tệp .. Một lý do khác tôi thích sao lưu / khôi phục khi thực hiện di chuyển.
- Nó có thể gây ra một kế hoạch bảo trì thất bại. Tình huống là bạn đã, như tôi đã làm, thiết lập một kế hoạch bảo trì để thực hiện sao lưu thường xuyên tất cả các cơ sở dữ liệu mà không cần kiểm tra thực tiễn tốt nhất. Điều này hoạt động tốt để bạn ngừng suy nghĩ về nó. Một số người khác sau đó quyết định lấy cơ sở dữ liệu họ không sử dụng ngoại tuyến. Kế hoạch bảo trì sẽ thất bại từ thời điểm đó trở đi cho đến khi bạn sửa đổi kế hoạch bảo trì bằng cách chọn tùy chọn "bỏ qua cơ sở dữ liệu có trạng thái không trực tuyến" trong hộp thoại "Cơ sở dữ liệu". Lưu ý rằng nó sẽ không bị lỗi đối với cơ sở dữ liệu ngoại tuyến - kế hoạch bảo trì sẽ không thành công khi có lỗi khi cố gắng sao lưu cơ sở dữ liệu ngoại tuyến để một số cơ sở dữ liệu trực tuyến có thể không được sao lưu. (tác giả khác nhau cho điểm này vì vậy đối xử với sự nghi ngờ)
Đính kèm
- Giống như bạn không nên chạy các tập lệnh từ internet hoặc chấp nhận các gói từ người lạ ở sân bay, bạn không nên đính kèm cơ sở dữ liệu bạn nhận được từ người khác mà không cần một số bước để xác minh. Cơ sở dữ liệu này có thể có mã bên trong nó trong các kích hoạt, các thủ tục được lưu trữ, v.v. có thể làm tổn hại đến môi trường của bạn. Bạn nên xem lại cơ sở dữ liệu bạn muốn đính kèm trong một môi trường an toàn và được tường lửa, chứ không phải hệ thống sản xuất của bạn.
Điều gì về các phiên bản hoặc phiên bản khác nhau của SQL Server?
Những điều này không khác gì các quy tắc xung quanh việc khôi phục cơ sở dữ liệu giữa các phiên bản. Nói chung, bạn có thể khôi phục tối đa phiên bản tiếp theo cho 3 phiên bản (ví dụ: SQL Server 2008 sang SQL Server 2012 sẽ hoạt động. SQL Server 2000 đến SQL Server 2012 sẽ không hoạt động). Bạn hoàn toàn không thể quay ngược lại thông qua sao lưu / khôi phục hoặc tách / đính kèm - bạn phải loại bỏ các đối tượng và kịch bản ra các phần chèn và thực hiện thủ công hoặc với một công cụ thực hiện việc này. Đối với các phiên bản, bạn thường có thể di chuyển giữa các SKU chính của SQL Server - ví dụ: bạn có thể di chuyển cơ sở dữ liệu từ Standard sang Enterprise mà không phải làm thêm. Nếu bạn đang sử dụng các tính năng Enterprise (Nói, nén hoặc phân vùng), bạn sẽ cần phải tắt các tính năng đó trước khi bạn di chuyển. Bạn có thể có được một ý tưởng về các tính năng bạn '