Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Cách sử dụng chức năng Tách và Đính kèm để di chuyển cơ sở dữ liệu SQL Server

Tóm tắt
Bài viết này mô tả cách thay đổi vị trí các tệp dữ liệu và tệp nhật ký cho bất kỳ cơ sở dữ liệu Microsoft SQL Server 2005, SQL Server 2000 hoặc SQL Server 7.0 nào.

Để biết thêm thông tin về cách di chuyển cơ sở dữ liệu hệ thống trong SQL Server 2008, hãy xem chủ đề "Di chuyển Cơ sở Dữ liệu Hệ thống" trong SQL Server Books Online. Để xem chủ đề này, hãy truy cập trang web Mạng lưới Nhà phát triển Microsoft (MSDN) Di chuyển Cơ sở dữ liệu Hệ thống.
Thông tin thêm
Các bước mà bạn phải thực hiện để thay đổi vị trí cho một số cơ sở dữ liệu hệ thống SQL Server khác với các bước mà bạn phải thực hiện để thay đổi vị trí cho cơ sở dữ liệu người dùng. Những trường hợp đặc biệt này được mô tả riêng.

Lưu ý Cơ sở dữ liệu hệ thống SQL Server 7.0 tương thích với SQL Server 2000. Không đính kèm cơ sở dữ liệu chủ, mẫu, msdb SQL Server 7.0 hoặc các cơ sở dữ liệu phân phối với SQL Server 2000. Nếu bạn đang sử dụng SQL Server 2005, bạn chỉ có thể đính kèm cơ sở dữ liệu của SQL Server 2005 với một bản sao của SQL Server 2005. Tất cả các ví dụ trong bài viết này giả định rằng SQL Server được cài đặt trong thư mục D:\Mssql7. Ngoài ra, các ví dụ cũng giả định rằng tất cả các tệp cơ sở dữ liệu và tệp nhật ký đều nằm ở thư mục D:\Mssql7\Data mặc định. Các ví dụ di chuyển tệp dữ liệu và tệp nhật ký cho tất cả các cơ sở dữ liệu tới thư mục E:\Sqldata.

Vị trí dữ liệu mặc định cho SQL Server 2005 và SQL Server 2000 như sau: 

Điều kiện tiên quyết

  • Sao lưu tất cả cơ sở dữ liệu, đặc biệt là cơ sở dữ liệu chủ từ vị trí hiện tại của chúng.
  • Đảm bảo rằng bạn có các quyền của quản trị viên hệ thống (sa).
  • Đảm bảo rằng bạn biết tên và vị trí hiện tại của tất cả các tệp dữ liệu cũng như tệp nhật ký của cơ sở dữ liệu.

    Lưu ý Bạn có thể xác định tên và vị trí hiện tại của tất cả các tệp mà cơ sở dữ liệu sử dụng bằng cách dùng quy trình lưu sẵn sp_helpfile:
    use <database_name>gosp_helpfilego
  • Bạn phải có độc quyền truy cập vào cơ sở dữ liệu mà bạn đang di chuyển. Nếu bạn gặp sự cố trong quá trình này đồng thời không thể truy cập cơ sở dữ liệu mà bạn đã di chuyển hoặc nếu bạn không thể khởi động SQL Server, hãy kiểm tra nhật ký lỗi SQL Server và SQL Server Book Online để biết thêm thông tin về các lỗi mà bạn đang gặp phải.

Di chuyển cơ sở dữ liệu người dùng

Ví dụ sau đây di chuyển cơ sở dữ liệu có tên mydb. Cơ sở dữ liệu này chứa một tệp dữ liệu, Mydb.mdf và một tệp nhật ký, Mydblog.ldf. Nếu cơ sở dữ liệu mà bạn di chuyển có nhiều tệp dữ liệu hoặc tệp nhật ký, hãy chỉ định các tệp dưới dạng một danh sách được phân cách bằng dấu phẩy trong quy trình lưu sẵn sp_attach_db. Quy trình sp_detach_db không thay đổi bất kể số tệp có trong cơ sở dữ liệu bởi vì quy trình sp_detach_db không liệt kê các tệp đó.
  1. Khởi động SQL Server 2005 Management Studio. Để thực hiện việc này, bấm Khởi động, bấm Tất cả chương trình, bấm Microsoft SQL Server 2005, sau đó bấm SQL Server Management Studio.
  2. Bấm Truy vấn Mới, sau đó tách cơ sở dữ liệu như sau:
    use master   go   sp_detach_db 'mydb'   go
  3. Sao chép tệp dữ liệu và tệp nhật ký từ vị trí hiện tại (D:\Mssql7\Data) sang vị trí mới (E:\Sqldata).
  4. Đính kèm lại cơ sở dữ liệu. Trỏ tới các tệp ở vị trí mới như sau:
    use master  go  sp_attach_db 'mydb','E:\Sqldata\mydbdata.mdf','E:\Sqldata\mydblog.ldf'  go
    Xác minh thay đổi trong vị trí tệp bằng cách sử dụng quy trình lưu sẵn sp_helpfile:
    use mydb   go   sp_helpfile   go
    Các giá trị trong cột tên tệp phải phản ánh vị trí mới.
Lưu ý Bài viết 922804 trong Cơ sở Kiến thức Microsoft mô tả sự cố xảy ra với cơ sở dữ liệu SQL Server 2005 trên bộ nhớ kết nối trực tiếp với mạng.  Để biết thêm thông tin, hãy bấm vào số bài viết sau để xem bài viết đó trong Cơ sở Kiến thức Microsoft:
922804 SỬA LỖI: Sau khi bạn tách cơ sở dữ liệu Microsoft SQL Server 2005 được lưu trữ trên bộ nhớ kết nối trực tiếp với mạng, bạn không thể đính kèm lại cơ sở dữ liệu SQL Server
Xem xét sự cố này. Ngoài ra, hãy xem xét các quyền được áp dụng cho cơ sở dữ liệu khi cơ sở dữ liệu được tách trong SQL Server 2005. Để biết thêm thông tin, hãy xem phần "Tách và Đính kèm Cơ sở dữ liệu" của chủ đề "Bảo mật Dữ liệu và Tệp Nhật ký" trong SQL Server Books Online. Để xem chủ đề này, hãy truy cập trang web MSDN Bảo mật Dữ liệu và Tệp Nhật ký.

Di chuyển cơ sở dữ liệu mẫu

Để di chuyển cơ sở dữ liệu mẫu pubs và cơ sở dữ liệu mẫu Northwind trong SQL Server 2000 hoặc SQL Server 7.0 hoặc để di chuyển cơ sở dữ liệu mẫu AdventureWorks và cơ sở dữ liệu mẫu AdventureWorksDW trong SQL Server 2005, hãy thực hiện theo quy trình tương tự dành cho di chuyển cơ sở dữ liệu người dùng.

Di chuyển cơ sở dữ liệu mẫu

SQL Server 2005 và SQL Server 2000
Trong SQL Server 2005 và SQL Server 2000, bạn không thể tách cơ sở dữ liệu hệ thống bằng cách sử dụng quy trình lưu sẵn sp_detach_db. Khi bạn cố gắng chạy câu lệnh sp_detach_db 'model', bạn sẽ nhận được thông báo lỗi sau đây:
Máy chủ: Thông báo 7940, Mức 16, Trạng thái 1, Dòng 1
Không thể tách cơ sở dữ liệu hệ thống chủ, mẫu, msdb và tempdb.
Để di chuyển cơ sở dữ liệu mẫu, bạn phải khởi động SQL Server cùng với tùy chọn -c, tùy chọn -m và cờ ghi dấu 3608. Cờ ghi dấu 3608 ngăn SQL Server khôi phục bất cứ cơ sở dữ liệu nào trừ cơ sở dữ liệu chủ.

Lưu ý Bạn sẽ không thể truy cập bất kỳ cơ sở dữ liệu người dùng nào sau khi bạn thực hiện việc này. Bạn không được thực hiện bất cứ thao tác nào khi sử dụng cờ ghi dấu này, ngoài các bước sau đây. Để thêm cờ ghi dấu 3608 làm tham số khởi động SQL Server trên SQL Server 2000, hãy làm theo các bước sau:
  1. Trong SQL Server Enterprise Manager, bấm chuột phải vào tên máy chủ, sau đó bấm Thuộc tính.
  2. Trên tab Chung, bấm Tham số Khởi động.
  3. Thêm các tham số mới sau đây:
    - c -m-T3608
Nếu bạn đang sử dụng SQL Server 2005, bạn có thể sử dụng SQL Server Configuration Manager để thay đổi các tham số khởi động của dịch vụ SQL Server. Để biết thêm thông tin về cách thay đổi tham số khởi động, hãy truy cập trang web MSDN Tùy chọn Khởi động Dịch vụ Công cụ Cơ sở dữ liệu.

Sau khi bạn thêm tùy chọn -c, tùy chọn -m và cờ ghi dấu 3608, hãy làm theo các bước sau:
  1. Dừng, sau đó khởi động lại SQL Server.
  2. Tách cơ sở dữ liệu mẫu bằng cách sử dụng các lệnh sau:
    use master   go   sp_detach_db 'model'   go
  3. Di chuyển tệp Model.mdf và Modellog.ldf từ thư mục D:\Mssql7\Data sang thư mục E:\Sqldata.
  4. Đính kèm lại cơ sở dữ liệu mẫu bằng cách sử dụng các lệnh sau:
    use master   go   sp_attach_db 'model','E:\Sqldata\model.mdf','E:\Sqldata\modellog.ldf'   go
  5. Xóa -c -m -T3608 khỏi tham số khởi động trong SQL Server Enterprise Manager hoặc trong SQL Server Configuration Manager.
  6. Dừng, sau đó khởi động lại SQL Server. Bạn có thể xác minh thay đổi trong vị trí tệp bằng cách sử dụng quy trình lưu sẵn sp_helpfile. Ví dụ: sử dụng lệnh sau:
    use model   go   sp_helpfile   go


SQL Server 7.0
  1. Đảm bảo Tác nhân SQL Server hiện không chạy.
  2. Thực hiện theo quy trình tương tự dành cho di chuyển cơ sở dữ liệu người dùng.

Di chuyển cơ sở dữ liệu MSDB

SQL Server 2005 và SQL Server 2000
Để di chuyển cơ sở dữ liệu MSDB, bạn phải khởi động SQL Server cùng với tùy chọn -c, tùy chọn -m và cờ ghi dấu 3608. Cờ ghi dấu 3608 ngăn SQL Server khôi phục bất cứ cơ sở dữ liệu nào trừ cơ sở dữ liệu chủ. Để thêm tùy chọn -c, tùy chọn -m và cờ ghi dấu 3608, hãy làm theo các bước trong phần "Di chuyển cơ sở dữ liệu mẫu". Sau khi bạn thêm tùy chọn -c, tùy chọn -m và cờ ghi dấu 3608, hãy làm theo các bước sau:
  1. Dừng, sau đó khởi động lại SQL Server.
  2. Đảm bảo dịch vụ Tác nhân SQL Server hiện không chạy.
  3. Tách cơ sở dữ liệu msdb như sau:
    use mastergosp_detach_db 'msdb'go
  4. Di chuyển tệp Msdbdata.mdf và Msdblog.ldf từ vị trí hiện tại (D:\Mssql8\Data) sang vị trí mới (E:\Mssql8\Data).
  5. Xóa -c -m -T3608 khỏi ô tham số khởi động trong Enterprise Manager.
  6. Dừng, sau đó khởi động lại SQL Server.

    Lưu ý Nếu bạn cố gắng đính kèm lại cơ sở dữ liệu msdb bằng cách khởi động SQL Server cùng với tùy chọn -c, tùy chọn -m và cờ ghi dấu 3608, bạn có thể nhận được thông báo lỗi sau:
    Máy chủ: Thông báo 615, Mức 21, Trạng thái 1, Dòng 1
    Không thể tìm thấy bảng cơ sở dữ liệu ID 3, tên 'mẫu'.
  7. Đính kèm lại cơ sở dữ liệu msdb như sau:
    use mastergo sp_attach_db 'msdb','E:\Mssql8\Data\msdbdata.mdf','E:\Mssql8\Data\msdblog.ldf' go
Lưu ý Nếu bạn sử dụng quy trình này cùng với việc di chuyển cơ sở dữ liệu mẫu, bạn đang cố gắng tách cơ sở dữ liệu msdb trong khi tách cơ sở dữ liệu mẫu. Khi thực hiện điều này, trước hết bạn phải đính kèm lại cơ sở dữ liệu mẫu, sau đó đính kèm lại cơ sở dữ liệu msdb. Nếu bạn đính kèm lại cơ sở dữ liệu msdb trước, bạn sẽ nhận được thông báo lỗi sau đây khi bạn cố gắng đính kèm lại cơ sở dữ liệu mẫu:
Thông báo 0, Mức 11, Trạng thái 0, Dòng 0
Đã xảy ra lỗi nghiêm trọng đối với lệnh hiện tại. Các kết quả, nếu có, phải được loại bỏ.
Trong trường hợp này, bạn phải tách cơ sở dữ liệu msdb, đính kèm lại cơ sở dữ liệu mẫu, sau đó đính kèm lại cơ sở dữ liệu msdb

Sau khi bạn di chuyển cơ sở dữ liệu msdb, bạn có thể nhận được thông báo lỗi sau:
Lỗi 229: Quyền THỰC THI bị từ chối đối với đối tượng 'Tên đối tượng', cơ sở dữ liệu 'chủ', chủ sở hữu 'dbo'.
Sự cố này xảy ra do chuỗi quyền sở hữu bị hỏng. Các chủ sở hữu cơ sở dữ liệu của cơ sở dữ liệu msdb và của cơ sở dữ liệu chủ không giống nhau. Trong trường hợp này, quyền sở hữu của cơ sở dữ liệu msdb đã bị thay đổi. Để khắc phục sự cố này, hãy chạy câu lệnh Transact-SQL sau đây. Bạn có thể thực hiện việc này bằng cách sử dụng tiện ích dấu nhắc lệnh Osql.exe (SQL Server 7.0 và SQL Server 2000) hoặc tiện ích dấu nhắc lệnh Sqlcmd.exe (SQL Server 2005):
USE MSDB Go EXEC sp_changedbowner 'sa' Go
Để biết thêm thông tin, hãy bấm vào số bài viết sau để xem bài viết đó trong Cơ sở Kiến thức Microsoft:
272424 Việc kiểm tra chuỗi quyền sở hữu đối tượng trên các cơ sở dữ liệu phụ thuộc vào thông tin đăng nhập được ánh xạ đến chủ sở hữu đối tượng


SQL Server 7.0
Lưu ý Nếu bạn sử dụng quy trình này khi đang di chuyển cơ sở dữ liệu msdbmẫu, trước hết bạn phải đính kèm lại cơ sở dữ liệu mẫu, sau đó đính kèm lại cơ sở dữ liệu msdb. Thực hiện theo các bước sau:
  1. Đảm bảo Tác nhân SQL Server hiện không chạy.
  2. Thực hiện theo quy trình tương tự dành cho di chuyển cơ sở dữ liệu người dùng.
Lưu ý Nếu Tác nhân SQL Server đang chạy, quy trình lưu sẵn sp_detach_db sẽ không thành công và bạn sẽ nhận được thông báo sau:
Máy chủ: Thông báo 3702, Mức 16, Trạng thái 1, Dòng 0
Không thể dừng cơ sở dữ liệu 'msdb' vì cơ sở dữ liệu hiện đang được sử dụng.
Đã hoàn tất thực thi DBCC. Nếu DBCC in thông báo lỗi, hãy liên hệ với quản trị viên hệ thống của bạn.

Di chuyển cơ sở dữ liệu chủ

SQL Server 2005
Để biết thêm thông tin về cách di chuyển cơ sở dữ liệu chủ và cơ sở dữ liệu Tài nguyên, hãy truy cập trang web MSDN Di chuyển Cơ sở Dữ liệu Hệ thống.

Bạn có thể gặp sự cố khi di chuyển cơ sở dữ liệu chủ và cơ sở dữ liệu Tài nguyên.Để biết thêm thông tin, hãy bấm vào số bài viết sau để xem bài viết đó trong Cơ sở Kiến thức Microsoft:
918695 Bạn có thể gặp sự cố khi cài đặt SQL Server 2005 Gói Dịch vụ 1 trên bản sao của SQL Server 2005


SQL Server 2000 và SQL Server 7.0
  1. Thay đổi đường dẫn của các tệp dữ liệu chủ và tệp nhật ký chủ trong SQL Server Enterprise Manager.

    Lưu ý Bạn cũng có thể thay đổi vị trí của nhật ký lỗi tại đây.
  2. Bấm chuột phải vào SQL Server trong Enterprise Manager, sau đó bấm Thuộc tính.
  3. Bấm Tham số Khởi động để xem các mục nhập sau:
    -dD:\MSSQL7\data\master.mdf -eD:\MSSQL7\log\ErrorLog -lD:\MSSQL7\data\mastlog.ldf
    -d là đường dẫn đủ điều kiện cho tệp dữ liệu của cơ sở dữ liệu chủ.

    -e là đường dẫn đủ điều kiện cho tệp nhật ký lỗi.

    -l là đường dẫn đủ điều kiện cho tệp nhật ký của cơ sở dữ liệu chủ.
  4. Thay đổi các giá trị này như sau:
    1. Xóa các mục nhập hiện tại cho các tệp Master.mdf và Mastlog.ldf.
    2. Thêm mục nhập mới chỉ định vị trí mới:
      -dE:\SQLDATA\master.mdf      -lE:\SQLDATA\mastlog.ldf
  5. Dừng SQL Server.
  6. Sao chép các tệp Master.mdf và Mastlog.ldf sang vị trí mới (E:\Sqldata).
  7. Khởi động lại SQL Server.

Di chuyển cơ sở dữ liệu tempdb

Bạn cũng có thể di chuyển các tệp tempdb bằng cách sử dụng lệnh ALTER DATABASE.
  1. Xác định các tên tệp lô-gic cho cơ sở dữ liệu tempdb bằng cách sử dụng sp_helpfile như sau:
    use tempdbgosp_helpfilego
    Tên lô-gic của từng tệp có trong cột tên. Ví dụ này sử dụng tên tệp mặc định là tempdevtemplog.
  2. Sử dụng câu lệnh THAY ĐỔI CƠ SỞ DỮ LIỆU, chỉ định tên tệp lô-gic như sau:
    use mastergoAlter database tempdb modify file (name = tempdev, filename = 'E:\Sqldata\tempdb.mdf')goAlter database tempdb modify file (name = templog, filename = 'E:\Sqldata\templog.ldf')go
    Bạn sẽ nhận được thông báo sau xác nhận thay đổi:
    Thông báo 1
    Tệp 'tempdev' được sửa đổi trong sysaltfiles. Hãy xóa tệp cũ sau khi khởi động lại SQL Server.
    Thông báo 2
    Tệp 'templog' được sửa đổi trong sysaltfiles. Hãy xóa tệp cũ sau khi khởi động lại SQL Server.
  3. Việc sử dụng sp_helpfile trong tempdb sẽ không xác nhận những thay đổi này cho đến khi bạn khởi động lại SQL Server.
  4. Dừng, sau đó khởi động lại SQL Server.
Tham khảo
Để biết thêm thông tin, hãy bấm vào số bài viết sau để xem bài viết đó trong Cơ sở Kiến thức Microsoft:
912397 Không thể khởi động dịch vụ SQL Server khi bạn thay đổi tham số khởi động cho bản sao được ghép cụm của SQL Server 2000 hoặc của SQL Server 2005 thành giá trị không hợp lệ
274188 Chủ đề "Khắc phục người dùng mồ côi" trong Books Online bị thiếu
246133 Cách chuyển thông tin đăng nhập và mật khẩu giữa các bản sao của SQL Server
168001 Quyền và thông tin đăng nhập của người dùng trên cơ sở dữ liệu có thể không chính xác sau khi cơ sở dữ liệu được khôi phục

Để biết thêm thông tin, hãy xem các sách sau:
Moving database files new location move place
Thuộc tính

ID Bài viết: 224071 - Xem lại Lần cuối: 01/08/2014 15:29:00 - Bản sửa đổi: 5.0

Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Workgroup Edition, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 7.0 Standard Edition

  • kbsqlsetup kbinfo KB224071
Phản hồi
/html>