2010-04-27 46 views
23

Tôi gặp sự cố với bản sao SQL mà tôi đang gặp sự cố khi sửa. Những gì tôi đang làm là khôi phục hai DB từ một bản sao lưu sản xuất, và sau đó cài đặt sao chép giữa chúng. Sao chép dường như được cấu hình mà không có bất kỳ lỗi nào, nhưng khi tôi nhìn vào trạng thái tôi thấy thông báo lỗi như thế này:Sao chép SQL Server 2008 không thành công với: quy trình không thể thực thi 'sp_replcmds'

Tôi gặp sự cố với bản sao SQL mà tôi đang gặp sự cố khi sửa. Những gì tôi đang làm là khôi phục hai DB từ một bản sao lưu sản xuất, và sau đó cài đặt sao chép giữa chúng. Các bản sao dường như được cấu hình mà không cần bất kỳ lỗi nào, nhưng khi tôi nhìn vào trạng thái trong Replication Monitor tôi thấy thông báo lỗi như thế này:

Lỗi thông điệp:

Quá trình này không thể thực hiện 'sp_replcmds' trên 'MYSERVER1'. Nhận giúp đỡ: http://help/MSSQL_REPL20011

Không thể thực hiện như cơ sở dữ liệu chính vì hiệu trưởng "dbo" không tồn tại, loại này gốc không thể mạo nhận, hoặc bạn không có quyền. (Nguồn: MSSQLServer, Mã lỗi: 15.517) Nhận trợ giúp: http://help/15517

Quá trình này không thể thực hiện 'sp_replcmds' bật 'MYSERVER1'. Nhận trợ giúp: http://help/MSSQL_REPL22037

Điều này có nghĩa là gì?

Trả lời

20

Bản đồ 'dbo' vào thông tin đăng nhập không hợp lệ. Nếu bạn chạy select suser_sname(owner_sid) from sys.databases, bạn có thể nhận được NULL cho hai DB đó. Bạn cần thay đổi 'dbo' thành thông tin đăng nhập hợp lệ. Chạy, trên cả hai cơ sở dữ liệu:

ALTER AUTHORIZATION ON DATABASE::[<dbname>] TO [sa] 
+0

Làm như vậy sẽ thay đổi chủ sở hữu của DB thành sa mà tôi không muốn. Chủ sở hữu của DB hiện là tài khoản cá nhân của tôi và tôi muốn nó ở lại theo cách đó. Tôi có thể liên kết lại với dbo bằng cách nào đó không? – skb

+0

Bạn có thể liên kết nó với bất kỳ tài khoản nào bạn muốn, nhưng nó phải là một tài khoản NT hợp lệ. Liệu suser_sname (owner_sid) trả về NULL? Sau đó, là một tài khoản không hợp lệ và bạn * phải * thay đổi nó. –

51

Khi tôi gặp sự cố này, cơ sở dữ liệu của tôi không có chủ sở hữu được đặt chính xác. Tôi đã khôi phục cơ sở dữ liệu từ miền cửa sổ khác, nhấp chuột phải vào cơ sở dữ liệu -> thuộc tính và được xác minh trong tab "chung" mà chủ sở hữu đã được đặt chính xác. Tuy nhiên, trong tab "tệp", chủ sở hữu không được đặt ở tất cả. Ngay sau khi tôi thiết lập nó, nhân rộng đang chạy mà không có vấn đề.

+1

Câu trả lời này đã lưu sự tỉnh táo của tôi! Tôi chạy một dấu vết và thấy rằng việc thay đổi chủ sở hữu trong tab "tệp" gọi sp_changedbowner, gọi là "ALTER AUTHORIZATION ..." như được đề cập trong câu trả lời của Remus cho câu hỏi này. – GaTechThomas

+0

Rất dễ thực hiện. Đã lưu ngày của tôi. Công trinh. –

+1

Điều này cũng cố định nó cho tôi, cảm ơn rất nhiều! – Dan

1

Tôi thấy rằng nếu bạn sử dụng bộ lọc bài viết, bạn phải sử dụng tên bộ lọc duy nhất. Khi tôi đã thay đổi tên bộ lọc thành duy nhất trên tất cả các bài viết, nó đã khắc phục sự cố này.

0

Trong trường hợp của chúng tôi, tài khoản dịch vụ mà phiên bản SQL đang chạy bị khóa. Sau khi mở khóa và chúng tôi đã dừng/khởi động lại các tác vụ của tác nhân SQL LogReader thì mọi thứ bắt đầu chảy trở lại.

1

enter image description here

Cách dễ nhất để sửa lỗi là sử dụng ALTER ỦY QUYỀN trên cơ sở dữ liệu đó có trận đấu NULL đăng nhập cho dbo.

Các vấn đề liên quan