MSSQLSERVER_17204

Şunlar için geçerlidir: SQL Server

Details

Attribute Value
Ürün Adı SQL Server
Olay Kimliği 17204
Olay Kaynağı MSSQLSERVER
Bileşen SQLEngine
Sembolik Ad DBLKIO_DEVOPENFAILED
İleti Metni %ls: %ddosya numarası için dosya %ls açılamadı. İşletim sistemi hatası: %ls.

Explanation

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

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

Error: 17204, Severity: 16, State: 1.
FCB::Open failed: Could not open file c:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\data\MyDB_Prm.mdf for file number 1.  OS error: 5(Access is denied.).

Bu hataları SQL Server örneği başlatma sürecinde veya veritabanını başlatmaya çalışan herhangi bir Veritabanı işleminde (örneğin, ALTER DATABASE). Bazı durumlarda hem 17204 hem de 17207 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. Bir sistem veritabanında bir arıza, SQL Server failover kümesi kaynağının çevrimdışı kalmasına da yol açabilir.

Cause

Herhangi bir SQL Server veritabanı kullanılmadan önce veritabanı başlatılmalıdır. Veritabanı başlatma süreci şunları içerir:

  1. Veritabanını ve veritabanı dosyalarını temsil eden çeşitli veri yapılarının başlatılması
  2. Veritabanına ait tüm dosyaları açmak
  3. Veritabanında kurtarma çalıştırma

SQL Server, veritabanına ait dosyaları açmak için CreateFile Windows API fonksiyonunu kullanır.

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

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. 17204 hatası çözmek, ilgili işletim sistemi hata kodunu anlamak ve o 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. Sonra, belirli düzeltici önlemler almanız gerekiyor. Bu eylemleri bu bölümde tartışacağız.

  2. Eğer 17204 hata mesajı sadece bir hata kodu içeriyorsa ve hata açıklaması içermiyorsa, hata kodunu bir işletim sistemi kabuğundan gelen komutla çözmeyi deneyebilirsiniz: net helpmsg <error code> . 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:

    • Windows Gezgini'nde dosyanın özelliklerine bakarak dosyanın ayarlanan izinlerini denetleyin. SQL Server, çeşitli dosya kaynaklarında Erişim Denetimi sağlamak için Windows gruplarını kullanır. [SQLServerMSSQLUser$ComputerName$MSSQLSERVER veya SQLServerMSSQLUser$ComputerName$InstanceName] gibi adlara sahip uygun grubun, hata iletisinde belirtilen 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 destekleyecek yolun SQL Server Yapılandırma Yöneticisi yardımcı programı olduğunu bilin. Bu konuda daha fazla bilgi SQL Server Configuration Manager adresinde bulunabilir.

    • İşlem türüne bağlı olarak - sunucu açılırken veritabanı açmak, veritabanı eklemek, veritabanı geri yükleme vb. - taklit ve veritabanı dosyasına erişim için kullanılan hesap değişebilir. 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 hizmeti başlangıç hesabının [veya Hizmet SID] veya kimliğine bürünülen bir hesabın güvenlik bağlamı altında gerçekleşip gerçekleşmediğini anlamak için Windows SysInternals İşlem İzleyicisi gibi bir araç kullanın.

      Eğer SQL Server, işlemi CREATE DATABASE gerçekleştiren ALTER DATABASE kullanıcının kimlik bilgilerini taklit ediyorsa, Süreç İzleme aracında aşağıdaki bilgileri göreceksiniz (örnek):

      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\MSSQL10.SQL2008\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ından tam yolu inceleyin
    • Disk sürücüsünün 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
    • Eğer yol yanlışsa ve bu veritabanı sistemde zaten mevcutsa, veritabanı dosya yollarını Veritabanı Dosyalarını Taşıma başlığında açıklanan yöntemlerle değiştirebilirsiniz. Bu prosedürü kullanmanız gerekebilir, özellikle 17204 veya 17207 ile karşılaşan ve belirtilen disk sürücülerinin erişilmediği bir felaket kurtarma senaryosunda çalışıyorsanız. 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 yedekten geri yüklemeniz gerekir.
      • Hata ile ilişkilendirilen veritabanı dosyası ikincil bir dosya grubuna aitse, o dosya grubunu isteğe bağlı olarak çevrimdışı 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:

    • Windows Sysinternals'tan Process Explorer veya 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ı yer alır (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.