SQL Server trong trạng thái nhầm lẫn: cơ sở dữ liệu có tồn tại hay không?


8

Có một vấn đề thực sự kỳ lạ, gây phiền nhiễu .. Bằng cách nào đó, phiên bản SQL Server 2008 R2 đang chạy trên máy chủ của chúng tôi đã bị lỗi phần nào.

Đầu tiên, chúng tôi nhận thấy rằng cơ sở dữ liệu chúng tôi tạo ngày hôm qua bị thiếu. Vì vậy, chúng tôi nhìn xung quanh và thấy rằng nó vẫn ở đó, nhưng tách ra. Vì vậy, chúng tôi đã cố gắng đính kèm mdf nhưng nhận được một tin nhắn giống như vậy The file is currently in use.

Tôi nghĩ rằng đó là kỳ lạ, vì vậy khởi động lại SQL Server. Điều tương tự ... được rồi, thời gian cho các biện pháp quyết liệt ... vì vậy, tôi đã dừng dịch vụ, nén mdf, bắt đầu dịch vụ, giải nén nó và sau đó cố gắng khôi phục nó. Tin nhắn trên đã biến mất, nhưng sau đó tôi nhận được:

Không thể đính kèm cơ sở dữ liệu có cùng tên với cơ sở dữ liệu hiện có

Ôi. Tất nhiên nó không hiển thị trong trình thám hiểm cơ sở dữ liệu, vì vậy không biết chuyện gì đang xảy ra ... giải pháp cuối cùng:

DROP DATABASE [DatabaseName]

Tất nhiên điều đó không hoạt động .. điều đó cho tôi biết cơ sở dữ liệu không tồn tại. Vì vậy, tôi bị mắc kẹt ... tại một thời điểm SQL Server nghĩ rằng cơ sở dữ liệu tồn tại và tại một thời điểm khác, nó nghĩ rằng db không tồn tại .. rõ ràng nó đang ở trong tình trạng nhầm lẫn.

Có ai thấy điều này trước đây không? Có bất kỳ ý tưởng về cách khắc phục nó?


Vì vậy, các tập tin vật lý không còn ở đó nữa, phải không? Bạn vẫn thấy cơ sở dữ liệu của bạn trong sys.databases?? Ví dụ, SELECT * FROM sys.databasesvẫn liệt kê cơ sở dữ liệu của bạn?
marc_s

@Josien thansk cho tiền boa .. Tôi cũng đặt nó ở đó
Matt

@marc_s Tôi đã thử nó ngay bây giờ, nhưng nó không hiển thị khi tôi chạy truy vấn đó
Matt

Không SELECT name, user_access_desc, state_desc FROM sys.databasestiết lộ điều gì?
Mark Storey-Smith

Tại sao trên trái đất mọi người sẽ downvote bài này? Ai đó có thể xin vui lòng giải thích? Nghiêm túc ...
Matt

Câu trả lời:


5

Phải .. tôi đã tìm ra nó .. một số chú hề ở đây (người không sở hữu nó) đã đổi tên db để tên của nó trong SSMS khác với tên tệp mdf và ldf .. và không chỉ khác một chút .. Hoàn toàn khác nhau. CƯỜI LỚN. Cảm ơn tất cả những lời đề nghị hữu ích của bạn nào.


4
Để đảm bảo an toàn, hãy từ chối quyền ALTER trên cơ sở dữ liệu cho mọi người ngoại trừ 'sa', thay đổi mật khẩu 'sa' và chọn lọc khi đưa mật khẩu cho 'chú hề'
Carol Baker West

4

Nếu bạn không được phép xem cơ sở dữ liệu thì đây sẽ chính xác là triệu chứng. Cơ sở dữ liệu sẽ không hiển thị trong quan điểm của bạn. Bạn có chắc chắn rằng bạn không chỉ tải xuống (các) tệp của cơ sở dữ liệu mà bạn không có quyền truy cập? Bạn đang hoạt động như một sysadmin?

Cập nhật


Là cơ sở dữ liệu tách ra hoặc ngoại tuyến ? Khi bạn nói So, we looked around and found that it was still there, but detachedchính xác những gì bạn đang nói về? Bạn đã tìm ở đâu, bạn đã tìm thấy gì? Xác định rằng một cơ sở dữ liệu đã bị 'tách rời' (trái ngược với, bị bỏ) không phải là chuyện nhỏ.


Tôi thực sự là một sysadmin
Matt

2
Vì bạn đã đề cập đến nó, tôi có một đoạn script trên blog của mình để phát hiện các tệp cơ sở dữ liệu không được lưu trữ trong các thư mục dữ liệu / nhật ký mặc định: tự
nguyệndba.com / post / 2012/08/21/21

Cảm ơn, tôi sẽ thử lại sau khi tôi ở văn phòng.
Matt

@JonSeigel, một người tốt, nhưng thật không may, điều đó chẳng giúp ích gì cho tôi. Tôi cũng đã thử một cái gì đó khác .. khởi động lại máy chủ và sau đó tạo một DB mới với tên đó .. sẽ không cho phép tôi làm điều đó .. rất khó chịu. Tôi nghĩ rằng tôi sẽ phải bỏ qua tình huống này và tạo một db mới với một tên khác.
Matt

3

Truy vấn sys.database. Có thể là cơ sở dữ liệu đã được tạo với một khoảng trắng ở cuối tên của nó. Chạy mã dưới đây và lưu ý rằng bạn chỉ có thể tạo một trong các cơ sở dữ liệu và không quan trọng bạn tạo cái nào trước, bạn chỉ có thể tạo cơ sở dữ liệu đó.

create database [test]
create database [test ]

Tôi nghĩ rằng đây là một lỗi, phải không?
AK

Chắc là không. Tôi giả sử rằng SQL đang thực hiện TRIM trên tên cơ sở dữ liệu khi nó kiểm tra xem giá trị có tồn tại không. Điều đó sẽ phải có chủ ý, vì vậy có lẽ là do thiết kế.
mrdenny

@mrdenny, cảm ơn, nhưng không có giúp đỡ ở đó .. cơ sở dữ liệu hoàn toàn không hiển thị, với bất kỳ biến thể nào về tên .. và chỉ có một số cơ sở dữ liệu trên máy chủ đó, vì vậy tôi sẽ phát hiện ra ngay lập tức nếu có . Dù sao cũng cảm ơn
Matt

0

CHẠY 'DBCC CHECKDB' trên master, msdb và cơ sở dữ liệu để xem những gì nó nói. Có thể cần phải đưa hệ thống vào chế độ người dùng duy nhất để dbcc chạy trong chế độ sửa chữa bị mất dữ liệu. Hoặc chỉ cần khôi phục bản sao lưu của bạn và masterdb khi thích hợp.


Chạy nó trên master và msdb không giúp được gì và tôi không thể thử nó trên db, bởi vì tôi không thể thấy db trong phòng quản lý nào ...
Matt

0

Đối với tôi điều này đã được giải quyết bằng cách làm mới Cơ sở dữ liệu. Tôi đã thực hiện một số phục hồi không thành công và thấy db, không thể xóa được với cùng một thông báo lỗi: "Cơ sở dữ liệu không tồn tại trên máy chủ."


2
Bạn có thể muốn giải thích chính xác cách bạn đi về "làm mới cơ sở dữ liệu".
mustaccio

0

Tôi đã gặp vấn đề tương tự khi sử dụng máy chủ SQL 2008r2.

Tôi đã cố gắng sao chép cơ sở dữ liệu (phiên bản foo) và cuối cùng máy chủ SQL khó hiểu. SQL Server Management Studio nghĩ rằng cơ sở dữ liệu đã tồn tại (MDF và LDF đã làm) nhưng cơ sở dữ liệu chủ không nghĩ rằng cơ sở dữ liệu tồn tại (không hiển thị trong sys.database)

Thủ thuật là đổi tên các tệp MDF và LDF, sau đó tạo cơ sở dữ liệu từ SQL create database [db name here]sau đó xóa cơ sở dữ liệu và cuối cùng đính kèm các tệp MDF và LDF từ trước đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.