MSSQLSERVER_17207

Şunlar için geçerlidir: SQL Server

Details

Attribute Değer
Ürün Adı SQL Server
Olay Kimliği 17207
Olay Kaynağı MSSQLSERVER
Bileşen SQLEngine
Sembolik Ad DBLKIO_OS2DISKERROR
İleti Metni %ls: '%ls' dosyası oluşturulurken veya açılırken işletim sistemi hatası %ls oluştu. İşletim sistemi hatasını tanılayıp düzeltin ve işlemi yeniden deneyin.

Explanation

SQL Server, belirtilen işletim sistemi hatası nedeniyle belirtilen dosyayı açamadı.

SQL Server veritabanı ve/veya işlem günlüğü dosyalarını açamadığında, Windows Uygulama Olayı veya SQL Server Hata günlüğünde 17207 hatası görebilirsiniz. İşte hatanın nasıl görünebileceğine dair bir örnek.

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.

Bu hataları SQL Server örneği başlatma sürecinde veya veritabanını başlatmaya çalışan herhangi bir veritabanı işlemi sırasında görebilirsiniz (örneğin, ALTER DATABASE). Bazı durumlarda hem 17207 hem de 17204 hatalarını görebilirsiniz, diğer durumlarda ise sadece birini görebilirsiniz.

Bir kullanıcı veritabanı bu hatalarla karşılaşırsa, o veritabanı RECOVERY_PENDING durumda kalır ve uygulamalar veritabanına erişemez. Bir sistem veritabanı bu hatalarla karşılaşırsa, SQL Server örneği başlamaz ve bu SQL Server örneğine bağlanamazsınız. Bu ayrıca bir SQL Server failover kümesi kaynağının çevrimdışı olmasına da yol açabilir.

Sorun SQL Server FileStream dosya grubunuzla ilgiliyse, dosya adı yerine sadece tam dizin yolunun listelendiğini fark edeceksiniz. Aşağıda bir örnek verilmiştir.

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.

Cause

Herhangi bir SQL Server veritabanı kullanılmadan önce veritabanı başlatılmalıdır. Veritabanı başlatma süreci, veritabanını ve veritabanı dosyalarını temsil eden çeşitli veri yapılarının başlatılmasını, veritabanına ait tüm dosyaların açılmasını ve son olarak veritabanında kurtarma çalışmasını içerir. SQL Server, veritabanına ait dosyaları açmak için CreateFile Windows API fonksiyonunu kullanır.

17207 (ve 17204) numaralı mesajlar, SQL Server'ın başlatma sürecinde veritabanı dosyalarını açmaya çalışırken bir hata karşılaştığını belirtmektedir.

Bu hata mesajları aşağıdaki bilgileri içerir:

  1. Dosyayı açmaya çalışan SQL Server fonksiyonunun adı. Bu hata mesajlarında genellikle gözlemlediğiniz fonksiyon adı şunlardır:

    • FCB::Open - SQL Server açmaya çalıştığında dosya hata ile karşılaştı
    • FileMgr::StartPrimaryDataFiles - birincil veri dosyası veya birincil dosya grubuna ait bir dosya
    • FileMgr::StartSecondaryDataFiles - ikincil dosya grubuna ait bir dosya
    • FileMgr::StartLogFiles - bir işlem günlüğü dosyası
    • STREAMFCB::Startup - SQL FileStream konteyneri
    • FCB::Alternatif Akışları Kaldır
  2. Durum bilgisi, bu hata mesajını üretebilen bir fonksiyon içindeki birden fazla konumu ayırt eder.

  3. Dosyanın tam fiziksel yolu.

  4. Dosyaya karşılık gelen dosya kimliği.

  5. İşletim sistemi hata kodu ve hata açıklaması. Bazı durumlarda sadece hata kodunu göreceksiniz.

Bu hata mesajlarında basılan işletim sistemi hata bilgisi, 17204 hatasına yol açan temel sebeptir. Bu hata mesajlarının yaygın nedenleri izin sorunu veya dosyaya yanlış giden bir yoldur.

Kullanıcı eylemi

  1. 17207 numaralı hatanın çözümü, ilgili işletim sistemi hata kodunu anlamak ve bu hatayı teşhis etmek anlamına gelir. İşletim sistemi hata durumu çözüldüğünde, veritabanını (örneğin ONLINE kullanarakALTER DATABASE SET) veya SQL Server örneğini yeniden başlatmayı deneyerek etkilenen veritabanını çevrimiçi hale getirebilirsiniz. Bazı durumlarda, işletim sistemi hatasını çözemeyebilirsiniz, bu yüzden özel düzeltici önlemler almanız gerekir. Bu eylemleri bu bölümde tartışacağız.

  2. Eğer 17207 hata mesajı sadece bir hata kodu içeriyorsa ve hata tanımı içermiyorsa, o zaman hata kodunu bir işletim sistemi kabuğundan gelen komutla çözmeyi deneyebilirsiniz: net helpmsg <hata kodu> . Eğer hata kodu olarak 8 haneli bir durum kodu alıyorsanız, bu durum kodlarını işletim sistemi hatalarına dönüştürmek için bir HRESULT'u Win32 hata koduna nasıl dönüştürürüm? gibi bilgi kaynaklarına başvurabilirsiniz.

  3. İşletim sistemi hatası = 5 alıyorsanız Access is Denied şu yöntemleri göz önünde bulundurun:

    • Dosyada belirlenen izinleri Windows Explorer'da dosyanın özelliklerine bakarak kontrol edin. SQL Server, çeşitli dosya kaynaklarında erişim kontrolü sağlamak için Windows gruplarını kullanır. Uygun grubun (SQLServerMSSQLUser$ComputerName$MSSQLSERVER veya SQLServerMSSQLUser$ComputerName$InstanceName) hata mesajında bahsedilen veritabanı dosyasında gerekli izinlere sahip olduğundan emin olun. Daha fazla ayrıntı için Veritabanı Altyapısı Erişimi için Dosya Sistemi İzinlerini Yapılandırma bölümünü gözden geçirin. Windows grubunun SQL Server hizmet başlangıç hesabını veya hizmet SID'sini içerdiğinden emin olun.

    • SQL Server hizmetinin çalışmakta olduğu kullanıcı hesabını gözden geçirin. Bu bilgileri almak için Windows Görev Yöneticisi'ni kullanabilirsiniz. "sqlservr.exe" yürütülebilir dosyası için "Kullanıcı Adı" değerini arayın. Ayrıca, yakın zamanda SQL Server servis hesabını değiştirdiyseniz, bu işlemi yapmanın desteklenen yolunun SQL Server Yapılandırma Yöneticisi yardımcı programını kullanmak olduğunu bilin. Bu konuda daha fazla bilgi SQL Server Configuration Manager adresinde bulunabilir.

    • İşlemin türüne (sunucu başlatma sırasında veritabanlarını açma, veritabanı ekleme, veritabanı geri yükleme vb.) bağlı olarak, kimliğe bürünme ve veritabanı dosyasına erişim için kullanılan hesap farklılık gösterebilir. Hangi işlemin hangi izni ve hangi hesapları ayarladığını anlamak için Veri ve Günlük Dosyalarının Güvenliğini Sağlama konusunu gözden geçirin. Dosya erişiminin SQL Server örnek hizmet başlatma hesabı (veya Service SID) güvenlik bağlamında mı yoksa taklit edilmiş bir hesap altında mı gerçekleştiğini anlamak için Windows SysInternals Process Monitor gibi bir araç kullanın.

      Eğer SQL Server, or CREATE DATABASE işlemini gerçekleştiren ALTER DATABASE giriş girişinin kullanıcı kimlik bilgilerini taklit ediyorsa, Süreç İzleme aracında aşağıdaki bilgileri göreceksiniz (örneğin).

      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. Eğer The system cannot find the file specified OS hatası alıyorsanız = 3:

    • Hata mesajındaki tüm yolu gözden geçirin.
    • Disk sürücüsü ve klasör yolunun Windows Explorer'dan görünür ve erişilebilir olduğundan emin olun.
    • Bu disk sürücüsünde herhangi bir sorun olup olmadığını öğrenmek için Windows Olay günlüğünü inceleyin.
    • Yol yanlışsa ve bu veritabanı sistemde zaten mevcutsa, Veritabanı Dosyalarını Taşıma makalesinde açıklanan yöntemlerle veritabanı dosya yollarını değiştirebilirsiniz. Bu prosedürü, özellikle 17204 veya 17207 ile karşılaşan ve belirtilen disk sürücülerinin erişemediği bir felaket kurtarma durumunda çalıştığınız için kullanmak zorunda kalabilirsiniz. Bu konu ayrıca çeşitli sistem veritabanlarının mevcut konumunu [master, model, tempdb, msdb ve mssqlsystemresource] nasıl tespit edebileceğinizi de açıklıyor.
    • Veritabanı dosyaları eksik olduğu için bu hatayı görürseniz, veritabanını geçerli bir yedeklemeden geri yüklemeniz gerekir:
      • Hata ile ilişkilendirilen veritabanı dosyası ikincil bir dosya grubuna aitse, o dosya grubunu isteğe bağlı olarak çevrimdışı olarak işaretleyebilir, veritabanını çevrimiçi hale getirebilir ve ardından o dosya grubunun tek başına geri yüklemesini gerçekleştirebilirsiniz. Daha fazla bilgi için, Dosya ve Dosya Grubu Seçenekleri (Transact-SQL) konusununALTER DATABASE ÇEVRIMDİYİ bölümüne bakabilirsiniz.
      • Hatayı üreten dosya işlem günlüğü dosyasıysa, konununCREATE DATABASE (Transact-SQL) "FOR ATTACH" ve "FOR ATTACH_REBUILD_LOG" bölümlerindeki bilgileri inceleyerek eksik işlem logu dosyalarını nasıl yeniden oluşturabileceğinizi anlayabilirsiniz.
    • SQL Server bu konumlardaki veritabanı dosyalarına erişmeye çalışmadan önce herhangi bir disk veya ağ konumunun [örneğin iSCSI sürücüsü] kullanılabilir olduğundan emin olun. Gerekirse Küme Yöneticisi veya Servis Kontrol Yöneticisi'nde gerekli bağımlılıkları oluşturun.
  5. İşletim The process cannot access the file because it is being used by another process sistemi hatasını alıyorsanız = 32:

    • Process Explorer veya Windows Sysinternals'tan Handle gibi bir araç kullanarak başka bir süreç veya servisin bu veritabanı dosyasında münhasır kilit edinip edinmediğini öğrenin.
    • Bu sürecin SQL Server Veritabanı dosyalarına erişmesini durdurun. Yaygın örnekler arasında antivirüs programları bulunur (aşağıdaki KB makalesindeki dosya hariç tutma rehberine bakınız).
    • Küme ortamında, önceki sahibi düğümden gelen sqlservr.exe sürecinin gerçekten tutamaçları veritabanı dosyalarına serbest bıraktığından emin olun. Normalde bu olmaz, ancak küme veya I/O yollarının yanlış yapılandırmaları böyle sorunlara yol açabilir.