Khi bản sao của cơ sở dữ liệu được tạo bằng cách sử dụng DBCC CLONEDATABASE, nó sẽ tạo một lược đồ và thống kê chỉ bản sao của cơ sở dữ liệu được chỉ định và không chứa bất kỳ bản sao dữ liệu nào.
Tạo bản sao đơn giản như truyền nguồn tên cơ sở dữ liệu và sao chép tên cơ sở dữ liệu vào lệnh DBCC.
DBCC CLONEDATABASE ('SansSQL', 'SansSQL_Clone')Đầu ra
của Lệnh DBCC
Sau khi nhân bản xong, cơ sở dữ liệu nhân bản sẽ ở chế độ Chỉ đọc.
CHỌN tên, database_id, is_read_only FROM sys.databases WHERE name in ('SansSQL ',' SansSQL_Clone ')
Vậy điều gì thực sự xảy ra khi chúng ta phát hành lệnh DBCC CLONEDATABASE trên cơ sở dữ liệu?
Nó sẽ bắt đầu bằng một số xác thực trước khi bản sao được tạo, Các xác nhận sau được thực hiện bởi DBCC CLONEDATABASE. Lệnh không thành công nếu bất kỳ xác thực nào không thành công.
- Cơ sở dữ liệu nguồn phải là cơ sở dữ liệu người dùng. Không được phép sao chép cơ sở dữ liệu hệ thống (chính, mô hình, msdb, tempdb, cơ sở dữ liệu phân phối, v.v.).
- Cơ sở dữ liệu nguồn phải trực tuyến hoặc có thể đọc được.
- Cơ sở dữ liệu sử dụng cùng tên với cơ sở dữ liệu nhân bản phải chưa tồn tại.
- Lệnh không có trong giao dịch của người dùng.
- Tạo tệp dữ liệu chính và tệp nhật ký
- Thêm không gian dữ liệu phụ
- Thêm các tệp phụ
CHỌN database_id, file_id, type_desc, name, physical_name FROM sys.master_files WHERE DB_NAME (database_id) trong ('SansSQL', 'SansSQL_Clone')
Sau đó, DBCC CLONEDATABASE sẽ thực hiện Ảnh chụp nhanh cơ sở dữ liệu nội bộ với các bước sau
- Xác thực cơ sở dữ liệu nguồn
- Nhận S lock cho cơ sở dữ liệu nguồn
- Tạo ảnh chụp nhanh của cơ sở dữ liệu nguồn
- Tạo cơ sở dữ liệu sao chép (đây là cơ sở dữ liệu trống kế thừa từ mô hình)
- Nhận khóa X cho cơ sở dữ liệu sao chép
- Sao chép siêu dữ liệu vào cơ sở dữ liệu sao chép
- Giải phóng tất cả các khóa DB
SELECT DATABASEPROPERTYEX ('SansSQL', 'isClone') AS SansSQL_DB_CloneStatus, DATABASEPROPERTYEX ('SansSQL_Clone', 'isClone') AS SansSQL_CloneDB_C trước>
Tham khảo:https://support.microsoft.com/en-in/kb/3177838