Bagikan melalui


MSSQLSERVER_17207

Berlaku untuk:SQL Server

Detail

Atribut Nilai
Nama Produk SQL Server
ID Peristiwa 17207
Sumber Kejadian MSSQLSERVER
Komponen SQLEngine
Nama Simbolis DBLKIO_OS2DISKERROR
Teks Pesan %ls: Terjadi kesalahan sistem operasi %ls saat membuat atau membuka file '%ls'. Mendiagnosis dan memperbaiki kesalahan sistem operasi, dan mencoba kembali operasi.

Penjelasan

SQL Server tidak dapat membuka file yang ditentukan karena kesalahan OS yang ditentukan.

Anda mungkin melihat kesalahan 17207 di Peristiwa Aplikasi Windows atau log Kesalahan SQL Server saat SQL Server tidak dapat membuka database dan/atau file log transaksi. Berikut adalah contoh seperti apa kesalahannya.

Error: 17207, Severity: 16, State: 1.
FileMgr::StartSecondaryDataFiles: Operating system error 2(The system cannot find the file specified.) occurred while creating or opening file 'F:\MSSQL\DATA\MyDB_FG1_1.ndf'. Diagnose and correct the operating system error, and retry the operation.

Anda mungkin melihat kesalahan ini selama proses startup instans SQL Server atau operasi database apa pun yang mencoba memulai database (misalnya, ALTER DATABASE). Dalam beberapa skenario, Anda mungkin melihat kesalahan 17207 dan 17204 dan dalam kesempatan lain Anda mungkin hanya melihat salah satunya.

Jika database pengguna mengalami kesalahan ini, database tersebut akan dibiarkan dalam status RECOVERY_PENDING, dan aplikasi tidak dapat mengakses database. Jika database sistem mengalami kesalahan ini, instans SQL Server tidak akan dimulai dan Anda tidak dapat tersambung ke instans SQL Server ini. Ini juga dapat mengakibatkan sumber daya kluster failover SQL Server menjadi offline.

Jika masalah terkait dengan grup file SQL Server FileStream Anda, maka Anda akan melihat bahwa hanya jalur direktori lengkap yang tercantum alih-alih nama file. Berikut adalah contohnya.

Error: 17207, Severity: 16, State: 1.
STREAMFCB::Startup: Operating system error 2(The system cannot find the file specified.) occurred while creating or opening file 'C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\DATA\bpa_files_test_fs_1\bpa_files_test_fs_1'. Diagnose and correct the operating system error, and retry the operation.

Penyebab

Sebelum database SQL Server dapat digunakan, database perlu dimulai. Proses startup database melibatkan inisialisasi berbagai struktur data yang mewakili database dan file database, membuka semua file milik database, dan akhirnya menjalankan pemulihan pada database. SQL Server menggunakan fungsi CreateFile Windows API untuk membuka file milik database.

Pesan 17207 (dan 17204) menunjukkan bahwa terjadi kesalahan saat SQL Server mencoba membuka file database selama proses startup.

Pesan kesalahan ini berisi informasi berikut:

  1. Nama fungsi SQL Server yang mencoba membuka file. Nama fungsi yang biasanya Anda amati dalam pesan kesalahan ini adalah salah satu hal berikut:

    • FCB::Open - file mengalami kesalahan ketika SQL Server mencoba membukanya
    • FileMgr::StartPrimaryDataFiles - file data utama atau file milik grup file utama
    • FileMgr::StartSecondaryDataFiles - file milik grup file sekunder
    • FileMgr::StartLogFiles - file log transaksi
    • STREAMFCB::Startup - Kontainer SQL FileStream
    • FCB::RemoveAlternateStreams
  2. Informasi status membedakan beberapa lokasi dalam fungsi yang dapat menghasilkan pesan kesalahan ini.

  3. Jalur fisik lengkap untuk file.

  4. ID file yang sesuai dengan file.

  5. Kode kesalahan sistem operasi dan deskripsi kesalahan. Dalam beberapa kasus, Anda hanya akan melihat kode kesalahan.

Informasi kesalahan sistem operasi yang dicetak dalam pesan kesalahan ini adalah akar penyebab yang menyebabkan kesalahan 17204. Penyebab umum untuk pesan kesalahan ini adalah masalah izin atau jalur yang salah ke file.

Tindakan pengguna

  1. Mengatasi kesalahan 17207 melibatkan pemahaman kode kesalahan sistem operasi terkait dan mendiagnosis kesalahan tersebut. Setelah kondisi kesalahan sistem operasi diselesaikan, maka Anda dapat mencoba memulai ulang database (menggunakan ALTER DATABASE SET ONLINE, misalnya) atau instans SQL Server untuk membuat database yang terpengaruh online. Dalam beberapa kasus, Anda mungkin tidak dapat mengatasi kesalahan sistem operasi, jadi Anda harus mengambil tindakan korektif tertentu. Kita akan membahas tindakan ini di bagian ini.

  2. Jika pesan kesalahan 17207 hanya berisi kode kesalahan dan bukan deskripsi kesalahan, maka Anda dapat mencoba menyelesaikan kode kesalahan menggunakan perintah dari shell sistem operasi: kode> kesalahan helpmsg <bersih . Jika Anda mendapatkan kode status 8 digit sebagai kode kesalahan, maka Anda dapat merujuk ke sumber informasi seperti Bagaimana cara mengonversi HRESULT ke kode kesalahan Win32? untuk mendekode kode status ini menjadi kesalahan OS.

  3. Jika Anda mendapatkan Access is Denied kesalahan sistem operasi = 5, pertimbangkan metode ini:

    • Periksa izin yang diatur pada file dengan melihat properti file di Windows Explorer. SQL Server menggunakan grup Windows untuk menyediakan kontrol akses pada berbagai sumber daya file. Pastikan grup yang sesuai (dengan nama seperti SQLServerMSSQLUser$ComputerName$MSSQLSERVER atau SQLServerMSSQLUser$ComputerName$InstanceName) memiliki izin yang diperlukan pada file database yang disebutkan dalam pesan kesalahan. Tinjau Mengonfigurasi Izin Sistem File untuk Akses Mesin Database untuk detail selengkapnya. Pastikan bahwa grup Windows benar-benar menyertakan akun startup layanan SQL Server atau SID layanan.

    • Tinjau akun pengguna tempat layanan SQL Server sedang berjalan. Anda bisa menggunakan Pengelola Tugas Windows untuk mendapatkan informasi ini. Cari nilai "Nama Pengguna" untuk "sqlservr.exe" yang dapat dieksekusi. Juga jika Anda baru-baru ini mengubah akun layanan SQL Server, ketahuilah bahwa cara yang didukung untuk melakukan operasi ini adalah dengan menggunakan utilitas SQL Server Configuration Manager. Informasi selengkapnya tentang ini tersedia di SQL Server Configuration Manager.

    • Bergantung pada jenis operasi (membuka database selama startup server, melampirkan database, pemulihan database, dan sebagainya), akun yang digunakan untuk peniruan identitas dan mengakses file database dapat bervariasi. Tinjau topik Mengamankan Data dan File Log untuk memahami operasi mana yang mengatur izin apa dan ke akun mana. Gunakan alat seperti Windows SysInternals Process Monitor untuk memahami apakah akses file terjadi di bawah konteks keamanan akun startup layanan instans SQL Server (atau Service SID) atau akun yang ditiru.

      Jika SQL Server meniru kredensial pengguna dari login yang menjalankan operasi ALTER DATABASE atau CREATE DATABASE, Anda akan melihat informasi berikut di alat Monitor Proses (contoh).

      Date & Time:      3/27/2010 8:26:08 PM
      Event Class:        File System
      Operation:          CreateFile
      Result:                ACCESS DENIED
      Path:                  C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\DATA\attach_test.mdf
      TID:                   4288
      Duration:             0.0000366
      Desired Access:Generic Read/Write
      Disposition:        Open
      Options:            Synchronous IO Non-Alert, Non-Directory File, Open No Recall
      Attributes:          N
      ShareMode:       Read
      AllocationSize:   n/a
      Impersonating: DomainName\UserName
      
  4. Jika Anda mendapatkan The system cannot find the file specified kesalahan OS = 3:

    • Tinjau jalur lengkap dari pesan kesalahan.
    • Pastikan drive disk dan jalur folder terlihat dan dapat diakses dari Windows Explorer.
    • Tinjau log Kejadian Windows untuk mencari tahu apakah ada masalah dengan drive disk ini.
    • Jika jalur salah dan jika database ini sudah ada dalam sistem, Anda dapat mengubah jalur file database menggunakan metode yang dijelaskan dalam artikel Pindahkan File Database. Anda mungkin harus menggunakan prosedur ini, terutama untuk file database sistem yang menemukan 17204 atau 17207 dan Anda bekerja melalui skenario pemulihan bencana di mana drive disk yang ditentukan tidak tersedia. Topik ini juga menjelaskan bagaimana Anda dapat mengidentifikasi lokasi saat ini dari berbagai database sistem [master, model, tempdb, msdb dan mssqlsystemresource].
    • Jika Anda melihat kesalahan ini karena file database hilang, Anda harus memulihkan database dari cadangan yang valid:
      • Jika file database yang terkait dengan kesalahan milik grup file sekunder, maka Anda dapat secara opsional menandai grup file tersebut secara offline, membuat database online, lalu melakukan pemulihan grup file itu saja. Untuk informasi selengkapnya, lihat bagian OFFLINE dari topik ALTER DATABASE File and Filegroup Options (Transact-SQL).
      • Jika file yang menghasilkan kesalahan adalah file log transaksi, tinjau informasi di bawah bagian "FOR ATTACH" dan "FOR ATTACH_REBUILD_LOG" topik CREATE DATABASE (Transact-SQL) untuk memahami bagaimana Anda dapat membuat ulang file log transaksi yang hilang.
    • Pastikan bahwa disk atau lokasi jaringan apa pun [seperti drive iSCSI] tersedia sebelum SQL Server mencoba mengakses file database di lokasi ini. Jika diperlukan, buat dependensi yang diperlukan di Administrator Kluster atau Manajer Kontrol Layanan.
  5. Jika Anda mendapatkan The process cannot access the file because it is being used by another process kesalahan sistem operasi = 32:

    • Gunakan alat seperti Process Explorer atau Handle dari Windows Sysinternals untuk mengetahui apakah proses atau layanan lain telah memperoleh kunci eksklusif pada file database ini.
    • Hentikan proses tersebut agar tidak mengakses file Database SQL Server. Contoh umum termasuk program anti-virus (lihat panduan untuk pengecualian file dalam artikel KB berikut).
    • Dalam lingkungan kluster, pastikan bahwa proses sqlservr.exe dari simpul pemilik sebelumnya benar-benar telah merilis handel ke file database. Biasanya ini tidak terjadi, tetapi kesalahan konfigurasi jalur kluster atau I/O dapat menyebabkan masalah tersebut.