SharePoint Saturday İstanbul 2018

Hata: Failed to update database “DBNAME” because the database is read-only

Kodladığınız uygulamanız içerisinde, bir batch işlemi çalıştırırken veya bir SSIS paketini çalıştırdığınızda, yani veritabanı üzerinde yazma işlemi yapmak istediğiniz herhangi bir zamanda bu hata ile karşılaşabilirsiniz.

“Failed to update database “DBNAME” because the database is read-only”

Yaptığınız kontrollerde database’in read-only modda olmadığını gözlemlemiş olabilirsiniz. Bunun için pek çoğunuzun bildiği üzere management studio üzerinden ilgili veritabanı ismi üzerinde sağ tıklamanız ve özellikler ekranında “Options” bölümüne gelmeniz ve en alta inmeniz yeterli. Burada “Read-Only” özelliğinin “False” olmasını bekliyoruz. “True” ise zaten hatanın sebebi açıkça ortadadır. Değeri değiştirmeniz yeterli olacaktır.

Biz bu bölümün “False” olmasına rağmen hatayı aldığımızı varsayalım. Bu durumda yapmanız gereken kontroller için aşağıdaki kod bloğunu kullanabilirsiniz. “AdventureWorks” örnek olarak kullanılmıştır. Bu bölümde kendi veritabanı isminizi verebilirsiniz.

 

 

Son olarak SQL Server Express versiyonunu kullananlar için bir ek hatırlatma. Burada AttachDbFileName kullanıyorsanız SQL Server servis hesabınızın Connection String’de belirttiğiniz dosya yoluna erişim ve yazma için izni olduğundan da emin olmalısınız.

Hata: SSIS Access Denied

SQL Server Integration Services kurulumunu yapmanızın ardından kurulum aşamasında servis hesabı olarak verdiğiniz kullanıcı ile bile SSIS instance’ına bağlantı kurarken aşağıdaki şekilde yetki hatası alabilirsiniz.

“Connecting to the Integration Service on the computer ”[SERVERNAME]’ failed with the following error. Access is denied”

Esas olarak SQL Server Integration Services kurulumlarında varsayılan olarak server administrator grubu yetki sahibidir ancak bazen bu kullanıcı ile bile yetki hatası alabilir ve SSIS instance’ına bağlantı sağlayamayabilirsiniz. Bu durumda aşağıdaki adımları takip etmek işinize yarayacaktır. (SQL Server 2014 ve SQL Server 2016 için test edilmiştir)

  • Component Services ekranını açın. Bunun için Start > Run  kısmına “dcomcnfg” yazarak ilerleyebilirsiniz.
  • Sol bölümdeki panelden Computers > My Computer > DCOM Config bölümüne kadar gelin.
  • Burada “Microsoft SQL Server Integration Services 12.0” (Bu SQL Server 2014 için, SQL Server 2016’da versiyon numarası 13.0 olacaktır)
  • Üzerinde sağ tıklayarak “Properties” > “Security” tabına gelin ve ekrandaki bölümlere istediğiniz yetki seviyelerine göre kullanıcınızı veya grubunuzu ekleyin.
  • İşlemden sonra SQL Server Integration Services servisini yeniden başlatın.

Bazen buna rapmen yetkilendirmede sorun yaşıyor olabilirsiniz. Bu durumda ek bir adım olarak aşağıdakini de uygulayabilirsiniz.

  • Server Manager > Computer Management > Local Users and Groups > Groups kısmında “Distributed COM Users” grubunu bulun ve kullanıcınızı buraya ekleyin.

WSS_UsageApplication Veritabanı İsminin Değiştirilmesi

Arama hizmetini yapılandırmanız ile beraber WSS_UsageApplication ismiyle bir servis uygulaması ve aynı zamanda buna ait aynı isimle bir veritabanı yaratılır. Bu veritabanı ismini çeşitli sebeplerle değiştirmek isteyebilirsiniz. Yaratılırken ismini değiştirmek kontrolünüzde olmayan bu servis için veritabanı ismini değiştirme adımları aşağıdaki şekilde olacaktır.

  • Öncelikle aşağıdaki komutlar ile veritabanı ismini SQL Server düzeyinde değiştirin.

  • Ardından aşağıdaki powershell komutuyla servis uygulamasının SharePoint düzeyinde veritabanı ismini yeni veritabanı ismi olarak güncelleyin.

 

Hata: This item could not be crawled because the repository did not respond within the specified timeout period

SharePoint 2013 veya 2016 ortamlarınızda sağlıklı çalışan bir arama hizmetinde indexleme esnasında aşağıdaki gibi bir hata ile karşılaşabilirsiniz. Bu hata sonrasında crawl işlemi duracak ve diğer öğeler için devam etmeyecektir.

“This item could not be crawled because the repository did not respond within the specified timeout period. Try to crawl the repository at a later time, or increase the timeout value on the Proxy and Timeout page in search administration. You might also want to crawl this repository during off-peak usage times”

Hatanın  çözümü için aşağıdaki iki yolu deneyebilirsiniz;

  • Sunucu üzerinde Internet Explorer‘ı açın ve Internet Options > Connections > LAN settings bölümüne gidin. Burada “Automatically detect settings” checkboxındaki seçimi kaldırın. Ayrıca eğer internet erişimi vs için proxy kullanıyorsanız proxy ayarlarını da kapatın.
  • Central Administration > Manage Service Applications > Search Service Application > Farm Search Administration bölümüne gidin ve timeout sürelerini daha yüksek değerler ile değiştirin.

Bu adımlardan sonra yeniden crawl işlemini başlattığınızda sorun olmadan indexlemenin başladığını göreceksiniz.

Hata: Database is up to date but some sites are not completely upgraded

SharePoint’in eski bir sürümünden yeni bir sürüme yükselttiğiniz uygulamalarda bazen ön yüzde herhangi bir hata ile karşılaşmasanızda Central Administration üzerinde yer alan “Database Upgrade Status” sayfasına gittiğinizde yükseltme yaptığınız uygulamanın veritabanı için “Database is up to date but some sites are not completely upgraded” hatasını gözlemliyor olabilirsiniz. Bu hata aslında upgrade işleminin tam da istediğimiz gibi gitmediği, birşeylerin eksik olduğu anlamını taşır ve müdehale gerektirir.

Bu statüde bir veritabanınız var ise aşağıdaki PowerShell komutu ile öncelikle yükseltmesi başarıyla sağlanamamış veritabanınızın sistemdeki ID’sini öğrenmeniz gerekir.

Ardından aşağıdaki komut ile bu veritabanı için yükseltme işlemini zorlayabilirsiniz.

Bu komut esnasında hata alıyorsanız hata mesajının sizi yönlendirdiği upgrade log dosyasını incelemenizi öneririm. Zira artık hata ilk upgrade sırasında yaşanan anlık bir hatadan ziyade yükseltmeyi engelleyen bir durumunuzun olduğu anlamına geliyor. Buradaki hata olasılıkları çok çeşitli olabilir, log dosyasını iyi okumak lazım. Mesela basit bir hata olarak upgrade ettiğiniz site koleksiyonunda açık olması beklenen bir feature kapalı olabilir. Bu durumda öncelikle bu sorunu gidermeli ve ardından yukarıdaki komutları çalıştırmalısınız.

Yukarıdaki senaryoyu uyguladınız ancak yine de sayfayı kontrol ettiğinizde hata mesajını görmeye devam ediyorsunuz. Bunun nedeni sayfanın güncellenmesi için SharePoint Configuration Wizard‘ı çalıştırmanız gerekliliği. Configuration Wizard başarıyla çalıştıktan sonra artık olması gerektiği gibi “No action required” mesajını görebilirsiniz.

Yeni Web Uygulaması Yaratırken Sayfa Görüntülenemiyor Hatası

Herhangi bir sorunu bulunmayan bir farmda bazen yeni bir web uygulaması taratırken “Page cannot be displayed” hatası alabilirsiniz. Bu hatanın ardından yapacağınız kontrolde web uygulaması için gerekli veritabanının yaratıldığı ancak IIS web applicationın sadece lokal sunucuda yaratılıp farmdaki diğer sunucularda yaratılmadığını gözlemlersiniz. Ve hatta lokal sunucuda da IIS altındaki dizinin içeriği muhtemelen boş olacaktır.

Söz konusu web uygulaması için yeni bir site koleksiyonu yaratmak istediğinizde ise hata mesajı ile karşılaşacaksınız.

Bu hatanın yüksek olasılıklı sebebi Central Administration web uygulaması için application pool shut down timeoutunun yeterli gelmemesidir. Varsayılan olarak bu süre 90 saniye ve yeterli gelmemesi durumunda işlem yarıda kesilerek amaçladığınız sonuca ulaşmanızı engelliyor. Sorunu aşmak için aşağıdaki adımları yerine getirebilirsiniz;

  • IIS üzerinde Central Administration application pool’unu bulun.
  • Sağ tıklayarak “Advanced Settings” bölümünü açın.
  • “Process Model” sekmesindeki shut down limiti 90 saniye yerine 200 veya 250 saniye olarak değiştirin.
  • IISRESET komutunu çalıştırın.
  • Yeniden web uygulaması yaratmayı deneyin.

 

Git Repo’dan Güncel Dosyaları Pull Yöntemiyle Alamamak

Git Repository’den güncel dosyaları elde etmek için pull işlemi yapmak istediğinizde yaşadığım bir sorunu ve çözümünü paylaşmak isterim. Her “pull” işleminden sonra aşağıdaki şekilde bir hata alıyordum.

“Your local changes to the following files would be overwritten by merge”

Visual Studio aracılığı yaptığınız pull işlemlerinde (arayüzden) aldığınız bu hatanın çözümü için projeniz adına git komut satırını açıp aşağıdaki şekilde komutları çalıştırmak dosyaların güncellenmesine yardımcı olacaktır.

 

PowerShell Yardımıyla Dosya İndirmek

PowerShell yardımıyla yapamayacağımız işlem yok gibi, mâlum içeriğinde doğrudan kod yazabiliyoruz. Bu noktada işe yarar bir scripti daha paylaşmak istiyorum. Bunu dilerseniz bir fonksiyon haline getirebilir, belli aralıklar ile çalışacak şekilde zamanlayabilir ve sürekli hale getirebilirsiniz.

 

Provider type not defined

SharePoint 2013 ortamında daha sık olmak üzere SharePoint 2016 ortamlarında da karşımıza çıkan bir hata ve çözümünden bahsetmek istiyorum. Normal şekilde çalışan bir SharePoint farmınızda bazen sadece tek bir uygulamayı (veya bazen birden fazla uygulamayı) etkiler şekilde aşağıdaki gibi bir hata mesajı ile karşılaşabilirsiniz.


SPSecurityContext: Get trust client failed with exception: System.IO.FileLoadException: Could not load file or assembly ‘Microsoft.IdentityModel.Extensions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=69c3241e6f0468ca’ or one of its dependencies. Provider type not defined. (Exception from HRESULT: 0x80090017)  File name: ‘Microsoft.IdentityModel.Extensions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=69c3241e6f0468ca’ —> System.Runtime.InteropServices.COMException (0x80090017): Provider type not defined. (Exception from HRESULT: 0x80090017)  at Microsoft.SharePoint.SPSecurityContext.GetTrustChannel()  at Microsoft.SharePoint.SPSecurityContext.SecurityTokenForContext(Uri context, Boolean bearerToken, SecurityToken onBehalfOf, SecurityToken actAs, SecurityToken delegateTo, SPRequestSecurityTokenProperties properties)

An exception occurred when trying to establish endpoint for context: Could not load file or assembly ‘Microsoft.IdentityModel.Extensions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=69c3241e6f0468ca’ or one of its dependencies. Provider type not defined. (Exception from HRESULT: 0x80090017).


Hatanın temel nedeni uygulamanın application pool’u için kullandığınız hesabın “Impersonate a client after authentication” hakkını kaybetmiş olmasını söyleyebiliriz. Bu nedenle de çözümü bu hakkı yeniden vermek olacak. İşlemi gerçekleştirmek için aşağıdaki adımları takip edebilirsiniz.

  • Start > Administrative tools > Local Security Policy > Local Policies > User Right Assignments > Impersonate a client after authentication adresine gidin.
  • Application pool hesabını buraya ekleyin.
  • Sunucuyu yeniden başlatın.

Sorununuz çözülmüş olacaktır. Durumu anlık olarak kurtarmak için bir trick ise bu işlemi daha sonra yapmak üzere geçici olarak sunucuda iisreset komutunu çalıştırmış olmanız da uygulamanın yeniden çalışır hale gelmesini sağlayacaktır.