# Di chuyển SQL Server sang SQL Server

DTS hỗ trợ các tác vụ di chuyển toàn bộ (full) và di chuyển toàn bộ + gia tăng (full+incremental) giữa SQL Server 2008 và các phiên bản mới hơn.

## Hạn chế chức năng
1. Hỗ trợ di chuyển cơ sở dữ liệu đơn lẻ, có thể di chuyển toàn bộ cơ sở dữ liệu hoặc các bảng được chỉ định, không hỗ trợ di chuyển các thủ tục lưu trữ (stored procedure), trigger, view, v.v.
2. Di chuyển toàn bộ + gia tăng không hỗ trợ DDL.
3. Trong quá trình di chuyển toàn bộ + gia tăng, cơ sở dữ liệu nguồn và các bảng cần di chuyển cần phải được bật tính năng cdc.

```sql
-- Chỉ định tên cơ sở dữ liệu
use dbname
-- Bật tính năng cdc
exec sys.sp_cdc_enable_db
-- Kiểm tra xem cdc đã được bật cho dbname chưa, giá trị trả về là 1 biểu thị đã bật
select is_cdc_enabled from sys.databases where name = "dbname";
-- Bật cdc cho dbo.tablename
exec sys.sp_cdc_enable_table @source_schema = 'dbo',@source_name = 'tablename',@role_name = null;
-- Kiểm tra xem cdc đã được bật cho dbo.tablename chưa, giá trị trả về là 1 biểu thị đã bật
select is_tracked_by_cdc from sys.tables where name = 'tablename'
-- Sửa đổi thời gian lưu trữ dữ liệu cdc, thay đổi thành ít nhất 1440 phút (1 ngày) trở lên, khuyến nghị 14400 phút (7 ngày).
EXECUTE sys.sp_cdc_change_job @job_type = N'cleanup', @retention = 14400;
```

4. Các bảng cần di chuyển phải có khóa chính, và khuyến nghị sử dụng kiểu int làm khóa chính. Nếu khóa chính là kiểu chuỗi (string) và lượng dữ liệu lớn, tốc độ di chuyển sẽ bị ảnh hưởng.
5. Thuộc tính tự động tăng (auto-increment) của khóa chính trong các bảng cần di chuyển không thể di chuyển.
6. Trường rowversion trong các bảng cần di chuyển không thể di chuyển.

## Nội dung di chuyển

| Nội dung di chuyển | Mô tả |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| Cấu trúc di chuyển | 1. Cơ sở dữ liệu, Cấu trúc bảng (thông tin chỉ mục hiện tại chỉ di chuyển khóa chính) và dữ liệu<br> 2. Trước khi bắt đầu di chuyển, các cơ sở dữ liệu và bảng hiện có trong mục tiêu sẽ không bị xóa. Nếu việc tự động tạo bảng không đáp ứng yêu cầu, khách hàng có thể tự tạo thủ công các bảng trong cơ sở dữ liệu mục tiêu trước. |
| Phạm vi di chuyển | Chỉ di chuyển các cơ sở dữ liệu và bảng có thể được chọn khi tạo tác vụ. Các bảng mới được thêm vào trong quá trình thực hiện tác vụ tạm thời sẽ không được tự động di chuyển. |
| DDL | Không hỗ trợ |
| DML | insert/update/delete |

## Điền biểu mẫu

Biểu mẫu nguồn dữ liệu

| Tên tham số | Mô tả |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| Địa chỉ | Hỗ trợ hai phương thức: địa chỉ mạng nội bộ và địa chỉ đường truyền riêng. Địa chỉ mạng nội bộ cần điền thông tin VPC và mạng con; địa chỉ đường truyền riêng hỗ trợ cả IP và tên miền. Nếu sử dụng tên miền, mạng của người dùng yêu cầu phải có quyền truy cập mạng bên ngoài. |
| Cổng | Cổng kết nối SQL Server |
| Tên người dùng | Tên người dùng kết nối SQL Server |
| Mật khẩu | Mật khẩu người dùng tương ứng cho cơ sở dữ liệu SQL Server |
| Tên cơ sở dữ liệu | Tên cơ sở dữ liệu SQL Server, chỉ hỗ trợ di chuyển cơ sở dữ liệu đơn lẻ |
| Tên bảng | Tên bảng truyền tải SQL Server, sử dụng dấu phẩy để phân tách các tên bảng. Ví dụ: `dbo.tablename1,dbo.tablename2`, schema có thể được bỏ qua khi là dbo, chỉ cần điền tablename, ví dụ: `tablename1,tablename2` |

Biểu mẫu mục tiêu truyền tải

| Tên tham số | Mô tả |
| -------------- | ------------------------------------- |
| Loại địa chỉ | Hiện tại chỉ hỗ trợ mạng nội bộ |
| Cổng | Cổng kết nối SQL Server |
| Tên người dùng | Tên người dùng kết nối SQL Server |
| Mật khẩu | Mật khẩu người dùng tương ứng cho cơ sở dữ liệu SQL Server |
