Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
- Veritabanını ve veritabanı dosyalarını temsil eden çeşitli veri yapılarının başlatılması
- Veritabanına ait tüm dosyaları açmak
- 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:
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
Durum bilgisi, bu hata mesajını üretebilen bir fonksiyon içindeki birden fazla konumu ayırt eder
Dosyanın tam fiziksel yolu
Dosyaya karşılık gelen Dosya Kimliği
İş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
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.
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.
İş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
Eğer
The system cannot find the file specifiedOS 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.
İşletim
The process cannot access the file because it is being used by another processsistemi 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.