SQL Server dalam keadaan kebingungan: apakah database ada atau tidak?

8

Punya masalah yang sangat aneh dan menjengkelkan .. Entah bagaimana contoh SQL Server 2008 R2 yang berjalan di server kami sudah agak rusak.

Pertama, kami perhatikan bahwa database yang kami buat kemarin hilang. Jadi, kami melihat sekeliling dan menemukan bahwa itu masih ada di sana, tetapi terpisah. Jadi, kami mencoba melampirkan mdf tetapi mendapat pesan yang mirip The file is currently in use.

Saya pikir itu aneh, jadi restart SQL Server. Hal yang sama ... oke, waktu untuk tindakan drastis ... jadi, saya menghentikan layanan, membuka zip mdf, memulai layanan, membuka ritsletingnya dan mencoba mengembalikannya. Pesan di atas hilang, tetapi kemudian saya mendapat:

Tidak dapat melampirkan database dengan nama yang sama dengan database yang ada

Aduh. Tentu saja itu tidak ditampilkan di database explorer, jadi tidak tahu apa yang terjadi ... pilihan terakhir:

DROP DATABASE [DatabaseName]

Tentu saja itu tidak berhasil .. itu memberitahu saya bahwa basis data tidak ada. Jadi, saya terjebak ... pada satu titik SQL Server berpikir bahwa database itu ada dan pada titik lain ia berpikir db tidak ada .. jelas itu dalam keadaan kebingungan.

Adakah yang pernah melihat ini sebelumnya? Punya ide tentang cara memperbaikinya?

Mat
sumber
Jadi file fisik sudah tidak ada lagi, kan? Apakah Anda masih melihat database Anda sys.databases?? Misalnya apakah SELECT * FROM sys.databasesmasih mencantumkan basis data Anda?
marc_s
@Josien thansk untuk tipnya .. Saya taruh di sana juga
Matt
@marc_s Saya mencobanya sekarang, tetapi tidak muncul ketika saya menjalankan kueri itu
Matt
Apa yang SELECT name, user_access_desc, state_desc FROM sys.databasesdiungkapkan?
Mark Storey-Smith
Mengapa ada orang yang menurunkan posting ini? Bisakah seseorang tolong jelaskan? Serius ...
Matt

Jawaban:

5

Benar .. Saya menemukan jawabannya .. beberapa badut di sini (yang tidak mau mengakuinya) mengganti nama db sehingga namanya di SSMS berbeda dengan nama file mdf dan ldf .. dan tidak hanya sedikit berbeda .. . benar-benar berbeda. LOL. Terima kasih semua atas saran bermanfaat Anda.

Mat
sumber
4
Agar aman, tolak izin ALTER pada database untuk semua orang kecuali 'sa', ubah kata sandi 'sa' dan selektif saat memberikan kata sandi ke 'badut'
Carol Baker West
4

Jika Anda tidak memiliki izin untuk melihat basis data maka ini adalah gejalanya. Basis data tidak akan muncul dalam tampilan Anda. Apakah Anda yakin tidak hanya men-zap file database yang tidak dapat Anda akses? Apakah Anda beroperasi sebagai sysadmin?

Memperbarui


Apakah database dilepaskan atau offline ? Ketika Anda mengatakan So, we looked around and found that it was still there, but detachedapa yang sebenarnya Anda bicarakan? Di mana Anda melihat, apa yang Anda temukan? Mengidentifikasi bahwa suatu basis data 'terpisah' (tidak seperti, katakanlah, dijatuhkan) bukanlah hal sepele.

Remus Rusanu
sumber
Saya memang seorang sysadmin
Matt
2
Karena Anda menyebutkannya, saya memiliki skrip di blog saya yang mendeteksi file basis data yang tidak terpasang dalam folder data / log default: voluntarydba.com/post/2012/08/21/…
Jon Seigel
Terima kasih, saya akan mencobanya nanti saat saya di kantor.
Matt
@ JonSeigel, bagus, tapi sayangnya itu tidak menghasilkan apa-apa untuk saya. Saya mencoba sesuatu yang lain juga .. me-restart server dan kemudian membuat DB baru dengan nama itu .. tidak akan membiarkan saya melakukannya .. sangat menjengkelkan. Saya pikir saya harus mengabaikan situasi ini dan membuat db baru dengan nama yang berbeda.
Matt
3

Query sys.databases. Bisa jadi database dibuat dengan spasi di akhir namanya. Jalankan kode di bawah ini dan perhatikan bahwa Anda hanya dapat membuat satu dari basis data, dan tidak masalah yang mana yang Anda buat terlebih dahulu, Anda hanya dapat membuatnya.

create database [test]
create database [test ]
mrdenny
sumber
Saya pikir ini bug, kan?
AK
Mungkin tidak. Saya berasumsi bahwa SQL melakukan TRIM pada nama database ketika memeriksa untuk melihat apakah nilainya ada. Itu harus disengaja, jadi mungkin dengan desain.
mrdenny
@ Mrdenny, terima kasih, tapi tidak ada bantuan di sana .. database tidak muncul sama sekali, dengan variasi nama apa pun .. dan hanya ada beberapa database di server itu, jadi saya akan segera melihatnya jika ada di sana . Terima kasih
Matt
0

JALANKAN 'DBCC CHECKDB' pada master, msdb dan databasenya sendiri untuk melihat apa yang dikatakannya. Mungkin perlu menempatkan sistem ke mode pengguna tunggal untuk mendapatkan dbcc untuk berjalan dalam mode perbaikan dengan kehilangan data. Atau cukup pulihkan backup master dan msdb Anda jika perlu.

Ian P
sumber
Menjalankan itu pada master dan msdb tidak membantu dan saya tidak dapat mencobanya pada db itu sendiri, karena saya tidak dapat melihat db di studio manajemen apa pun ...
Matt
0

Bagi saya ini diselesaikan dengan menyegarkan Database. Saya telah melakukan beberapa pemulihan yang gagal dan melihat db, yang gagal dihapus dengan pesan kesalahan yang sama: "Basis data tidak ada di server."

Raduga
sumber
2
Anda mungkin ingin menguraikan bagaimana tepatnya Anda melakukan "penyegaran basis data".
mustaccio
0

Saya mengalami masalah yang sama menggunakan SQL server 2008r2.

Saya mencoba untuk menduplikasi database (versi foo) dan akhirnya membingungkan SQL server. SQL Server Management Studio berpikir bahwa database ada (MDF dan LDF memang) tetapi database master tidak berpikir database ada (tidak muncul di sys.databases)

Caranya adalah dengan mengubah nama file MDF dan LDF, lalu buat database dari SQL create database [db name here]lalu hapus database dan akhirnya lampirkan file MDF dan LDF dari sebelumnya.

John Pycroft
sumber