Basis data tidak dapat ditingkatkan karena hanya baca atau memiliki file hanya baca. Buat database atau file yang dapat ditulisi, dan jalankan kembali pemulihan

8

Saya telah menerima file database dan instruksi untuk memuatnya adalah menginstal SQL Server 2005 dan kemudian melampirkannya menggunakan SQL Server Management Studio.

Setelah menginstal semuanya, saya mencoba melampirkan file MDF tetapi kemudian memberitahu saya:

pencarian direktori untuk file "D: {folderName} {filename} .LDF" gagal dengan kesalahan sistem operasi 21 (kesalahan tidak ditemukan)

File LDF tidak datang dengan database, jadi mungkin itu harus dihasilkan secara otomatis.

Sekarang, drive D adalah tempat drive CD saya, jadi tidak akan menemukan apa pun di sana. Juga tidak akan ada keberuntungan mencoba membuat apa pun di sana.

  1. Mengapa ia mencoba mencari file log di jalur tertentu? Kenapa tidak di mana file database?

  2. Bagaimana saya bisa melampirkan database ini?

Saya menyadari bahwa ketika saya memilih basis data untuk dilampirkan, tiga entri muncul di bawah "perincian basis data". sebuah MDF, NDF, dan LDF. "Jalur file saat ini" LDF menunjuk ke jalur drive D di atas, jadi saya menghapusnya.

Kali ini, ketika saya menekan "OK", saya mendapatkan pesan kesalahan yang berbeda:

Basis data tidak dapat ditingkatkan karena hanya baca atau memiliki file hanya baca.
Buat database atau file yang dapat ditulisi, dan jalankan kembali pemulihan.

Kegagalan aktivasi file. Nama fisik D: {folder} {file} .LDF mungkin salah.
File log baru "..." telah dibuat. (Microsoft SQL Server, Kesalahan: 3415)

Jadi sekarang ia membuat file log baru di folder yang sama dengan file database, yang bagus, tetapi sepertinya ada masalah keamanan.

Informasi tambahan:

  • Instruksi mengharuskan saya untuk menggunakan nama login "sa", yang tampaknya merupakan akun sysadmin. Saya terhubung ke contoh SQL Server saya menggunakan login itu.

  • Saya telah memeriksa properti file yang tidak hanya baca. Direktori tidak hanya baca-saja. Semua ACL diizinkan.

  • Saya tidak dapat melampirkan database. Ketika saya mencoba melampirkannya, ia melempar pesan kesalahan dengan "melampirkan database gagal".

  • Menutup SSMS dan membukanya kembali sebagai Administrator tidak ada bedanya.

  • select SERVERPROPERTY('ProductVersion')mengembalikan 9.00.4035.00. Ada file lain yang datang dengan database yang disebut "dbdata.ini" yang mengatakan "IsSql2000 = 1" jadi mungkin itu dimaksudkan untuk dimuat dalam SQL Server 2000. Saya akan melihat apakah saya bisa membuatnya bekerja pada 2000.

MxLDevs
sumber

Jawaban:

8

Ini bukan masalah akses. Masalahnya adalah bahwa Anda melampirkan database ke versi yang lebih tinggi dari SQL Server daripada contoh yang .mdfsemula dilampirkan dan itu hanya baca. SQL Server sedang mencoba untuk memutakhirkan database sebagai bagian dari lampiran dan tidak bisa karena db dalam mode read-only.

Jika basis data Anda ada READ_ONLY(yang kedengarannya seperti itu berdasarkan pesan kesalahan Anda), maka Anda perlu semua file (baik log dan data) untuk melampirkannya sesuai dokumentasi Technet . Jika Anda melihat di bawah FOR ATTACHklausa, itu secara eksplisit menjelaskan bahwa:

... untuk database hanya-baca, log tidak dapat dibangun kembali karena file utama tidak dapat diperbarui. Oleh karena itu, ketika Anda melampirkan database read-only yang log-nya tidak tersedia, Anda harus memberikan file log atau file dalam FOR ATTACHklausa.

Anda memerlukan pendamping .ldfuntuk basis data. Saya akan menghubungi siapa pun yang menyediakan database dan meminta mereka untuk menyediakan .mdfdan .ldffile. Kemudian, Anda dapat melampirkannya dengan sintaks berikut:

CREATE DATABASE [foo]
ON (FILENAME='<<path to mdf>>')
LOG ON (FILENAME='<<path to ldf>>')
FOR ATTACH;

The READ_ONLYStatus tidak dapat dihapus dari database tanpa melampirkan karena disimpan dalam metadata dari database. Untuk mengubahnya, database harus online dan dilampirkan.

Alternatif lain adalah meminta cadangan database. Anda dapat mengatasi beberapa masalah ini dengan lebih mudah jika Anda melakukan pemulihan basis data alih-alih melampirkan.

Mike Fal
sumber
1
Menggunakan LOG ONdengan pencocokan ldftidak menyelesaikan masalah bagi saya
Mugen
25

Saya baru saja menemukan pos yang menjawab pertanyaan ini:

Ini mungkin tidak berfungsi dalam semua kasus, tetapi saya mencoba menginstal Database Pencarian Semantik dan mendapatkan kesalahan yang sama.

Anda harus menjalankan SQL Server Management Studio sebagai administrator, dan itu berfungsi.

Juggler Data
sumber
9
  1. Buka komputer saya.
  2. Temukan folder utama tempat Anda menyimpan file ".mdf" dan ".ldf".
  3. Klik kanan pada folder klik pada "Properties".
  4. Di jendela properti klik "Keamanan"
  5. Klik tombol "Edit"
  6. Aktifkan "Baca dan jalankan", "Baca", "Tulis" untuk pengguna yang terdaftar dan terapkan perubahan pada folder berikut hingga file database.
  7. Coba lampirkan file ".mdf"
Touhid Mustakhim. M. J
sumber
terima kasih, windows lama saya hilang dan saya pikir file-file ini dikunci oleh OS itu. tetapi hanya perlu mengubah izin
saber tabatabaee yazdi
1

Klik kanan .mdfdan .ldffile, satu per satu dan klik 'properti', lalu di bagian bawah di mana dikatakan 'file ini berasal dari komputer lain dan mungkin diblokir untuk membantu melindungi komputer ini' klik tombol buka blokir.

Kemudian klik kanan, -> properti, -> tab keamanan -> tombol edit dan pilih 'pengguna' dan berikan izin kontrol penuh.

Subodh Pradhan
sumber
1

Dalam kasus saya, resolusinya adalah masuk ke SSMS dengan mode Auth windows daripada pengguna sql yang memiliki peran sysadmin. hanya pastikan pengguna yang Anda gunakan dalam mode auth windows memiliki izin yang tepat (kasus saya adalah sysadmin) Dugaan saya adalah pengguna sql tidak memiliki izin yang tepat. (Saya mengalami masalah ini ketika saya melakukan migrasi / menyalin mdf dan ldf dari berbagai mesin)

Ben F
sumber
0

Bukan izin dalam kasus kami, itu adalah versi SSMS!

(itu adalah 2012 secara lokal tempat kami mendapatkan kesalahan, tetapi berfungsi ketika kami menggunakan SSMS 17+ dari kotak jauh)

Bigpa
sumber
-1

Saya juga mengalami masalah ini. Saya membantu pelanggan saya dengan memulai kembali layanan SQL, dan dapat melampirkan MDF sesuai prosedur normal.

Chadwick Powell
sumber
-2

1) Buka Manajer Konfigurasi Sql Server

2) Pilih Layanan Sql Server (Panel kiri)

3) Klik dua kali klik SqlServer Anda (panel kanan)

4) Pilih tab Log On

5) Pilih tombol radio bawaan dan ubah sistem lokal atau layanan jaringan dalam kotak kombo.

6) Klik Ok.

7) Lampirkan file mdf di manajer server sql.

Ali Osman Yavuz
sumber
-2

Layanan SQL Server Anda mungkin berjalan di bawah akun NT Service \ MSSQLServer . Mengubahnya Sistem Lokal akan memberinya akses.

Mungkin Terbaik untuk membuat pengguna dan memberikan izin penuh kepada pengguna tersebut ke folder tempat file berada.

kwiboo
sumber