tag:blogger.com,1999:blog-87904167203196767592024-03-13T11:30:45.838+03:00Yasin MÜFTÜLER - MS SQL ServerMS SQL SERVER İle İlgili İncelemeler Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.comBlogger60125tag:blogger.com,1999:blog-8790416720319676759.post-54563944322304900312019-07-18T10:34:00.000+03:002019-07-18T10:36:25.260+03:00There is insufficient system memory in resource pool 'internal' to run this query."There is insufficient system memory in resource pool 'internal' to run this query." ilgili hatayı alıyorsanız SQL Server'ın kullandığı memory miktarının yetersiz kaldığı anlamına gelmektedir.<br />
<ul>
<li>Bunun için çalışan sorguların optimize edilmesi.</li>
<li>SQL Server'ın aktif kullandığı memory değerlerinin değiştirilmesi</li>
</ul>
<img border="0" src="http://social.technet.microsoft.com/wiki/cfs-file.ashx/__key/communityserver-wikis-components-files/00-00-00-00-05/5483.MaxMemory.jpg" data-original-height="430" data-original-width="704" height="388" width="640" /><br />
<ul>
<li>Yada sunucunuzdaki RAM'i arttırmanız gerekmektedir.</li>
</ul>
Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-28412932902167678172019-07-16T13:53:00.000+03:002019-07-16T17:17:32.840+03:00FILESTREAM DATA NEDİR?Uygulamanızda unstructured yani yapısal olmayan veriler kullanılıyorsa bunların daha kolay yönetilmesi ve performanslı olması için SQL Server 2008 ile gelen bir özelliktir. SQL Server'da insanların aklına genelde veri denildiği zaman ilk gelen şey metin'ler olmaktadır. Fakat şunu unutmamak gerekir ki veri dediğimiz şey sadece klavyeden tuşlayarak girdiğimiz şeyler değil. Özellikle günümüzü düşünürsek resim, video, doküman gibi şeyleri de veritabanı dosyaları içerisinde saklamak isteyebiliriz. Bu noktada FileStream bizim işimizi kolaylaştıracak özelliklerden biri. FileStream ile dosyaları yapısal ve yapısal olmayan veriler arasında transactional bütünlüğü bozmadan kullanmamıza olanak verecektir.<br />
<br />
Peki 2008 den önce bu tarz dataları SQL Server'da tutamıyor muyduk? Varbinary data tipi aslında bu tarz objeleri veritabanı objelerinin içerisinde saklayabilmek için var. SQL Server'da FileStream özelliğini aktif etmeden de Varbinary data tipini kullanarak bu tarz nesneleri saklayabilirsiniz ki zaten SQL Server default kurulumda Bu özellik disable durumda gelmektedir. Eğer siz kullanacaksınız bunu aktif etmeniz gerekir. İşin aslında güzel yanı Microsft'un Filestream özelliği için yeni bir data tipi geliştirmek yerine mevcutta zaten olan varbinary data tipini kullanarak fakat bu data tipi üzerinde farklı bir çalışma yapısı geliştirerek FileStream özelliğini kurgulamıştır.<br />
<br />
Peki ne durumda bu özelliği aktif edip kullanmamız gerekir?<br />
<br />
<ul>
<li>Microsoft, Paul Randal ve bu alandaki diğer gurular depolamak istediğiniz dosyaların boyutu eğer 1 mb 'dan fazlaysa bu durumda bunu veritabanı dosyalarında saklamak yerine FileStream özelliğinin kullanılması gerektiği söylenmektedir.</li>
<li>Saklanacak olan dosyalarda okuma performansını arttırmak için.</li>
<li>Veritabanı dosyalarında öngürülemeyen ve çok hızlı büyümelerin önüne geçmek için kullanılabilinecek bir özelliktir. Bu büyümeler data file dışında olacağı için .mdf, .ndf gibi veritabanı dosyalarının yönetimi kolaylaşacaktır.</li>
</ul>
<div>
Filesystem hangi konularda Filestream yerini tutamaz.</div>
<div>
<br /></div>
<div>
Filesystem ile kurumunuzun bütün belgelerini klasörler içerisinde düzenli olarak ve üstelik veritabanınız şişmeden saklayabilirsiniz. Bu anlamda harika bir yöntem. Fakat depolama ve performans anlamında oldukça tatminkar bir çözüm olsada yol biraz ileride ikiye ayrılıyor ve bir seçim yapmanız gerekiyor. Yukarıda da bahsettiğim gibi ilişkisel veritabanın özelliklerinden olan transaction yapısını belgeler üzerinde de kullanmak isterseniz yada point in time ile nokta atışı belli bir zaman dönmek isterseniz belgeler ne olacak. Çünkü Filesytem kullandığınızda burada Transaction log'larnız olmayacak. Haliyle dosyalarınız için COMMIT yada ROLLBACK de YOK.</div>
<div>
<br /></div>
<div>
Backup durumunu ele alırsak hem veritabanızın hemde FileSystem'in ayrı ayrı backup'larını almak zorundasınız ki Filesystem ile point in time olarak restore edebilmeniz çok da mümkün değil. Dosyalarınız veritabanın da tuttuğunuz zaman sadece SQL Backup'ı ile yedeklemek mümkün. Tabi bu durum her ne kadar kulağa çok hoş gelsede veritabanı boyutu arttığı için Backup ve restore süresi uzayacaktır.<br />
<br />
Nihai olarak ihtiyaçlarınız ve beklentileriniz doğrultusunda doğru kullanım değişecektir. Mevcut durum ve beklentilerin uçtan uca değerlendirilerek en optimum seçenek tercih edilmelidir.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<br />Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-6456094458265722432019-07-11T11:56:00.001+03:002019-07-11T11:56:55.847+03:00SQL Server AlwayOn Nedir ?Microsoft'un SQL Server'ın 2012 ile birlikte duyurduğu daha önceden kullanılan Log Shipping ve Mirroring'e alternatif olacak günümüzde büyük sistemlerin beklentilerini karşılayabilecek modernize edilmiş ve geliştirilmiş bir high availability and disaster recovery çözümüdür.<br />
<br />
AlwaysOn konu başlığını, çalışma yapısı olarak iki başlığa kırabiliriz.<br />
<br />
<ul>
<li>AlwaysOn Failover Clustering Instance</li>
<li>AlwaysOn Availability Groups</li>
</ul>
<h4>
<b><u>AlwaysOn Failover Clustering Instance</u></b></h4>
<div>
Aslında başlıktan da anlaşıldığı üzere Instance seviyesinde bir HA sunduğu anlaşılmaktadır. Bu teknolojide cluster içerisinde bulunan tüm node'lar shared storage erişebilmelidir. Aşağıdaki resimde de tek cluster içerisinde bulunan iki farklı node'un shared disk üzerinde çlaıştığını gösteren topolojide de AlwaysOn Failover Clustering Instance'ın çalışma yapısını özetler niteliktedir.</div>
<div>
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://www.mssqltips.com/tipimages2/4717_Figure01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="357" data-original-width="411" height="277" src="https://www.mssqltips.com/tipimages2/4717_Figure01.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
AlwaysOn FCI SQL Server Standart ve Enterprise Edition olmak üzere her ikisinde de desteklenmektedir. Fakat standart edition'u kullanılıyorsa cluster içerisinde sadece iki node kullanımına izin verilmektedir.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<h4 style="clear: both; text-align: left;">
<u>AlwaysOn Availability Groups</u></h4>
<div>
Alwayson AG için shared disk ihtiyaç bulunmamaktadır. FCI Instance seviyesinde bir HA sağlarken AG belirlenen database'ler için bunu sağlar. Aslında bu noktada FCI'ya göre daha esnek davranabilirsiniz. Instance içerisinde bulunan fakat HA&DR dahil olmasına gerek olmayan veritabanlarını bu yöntemle dışarıda bırakabilirsiniz.</div>
<div>
<br /></div>
<div>
FCI'da node'lar aktif/aktif olarak çalışmadığı için bütün yük primary tarafta olur. Fakat AG kullanacaksınız Backup ve read işlemler secondry üzerinden ilertleterek primary taraftaki yükü azaltabilme imkanı sağlar.</div>
<div>
<br /></div>
<div>
Fakat unutulamaması gerekir ki Bu yöntem db seviyesinde bir HA çözümü sunduğu için Instance seviyesindeki objeleri manuel olarak Secondary tarafa taşınması gerekmektedir.(örn job, login,linked server...)</div>
<div>
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.mssqltips.com/tipimages2/4717_Figure02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="329" data-original-width="600" height="175" src="https://www.mssqltips.com/tipimages2/4717_Figure02.jpg" width="320" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
<br /></div>
Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-74134305612641019182019-02-26T14:15:00.000+03:002019-02-26T14:24:36.421+03:00SQL Server'da LOGON Trigger Nedir? Ne işe Yarar?Logon Trigger'lar SQL Server de güvenlik ve kontrol amaçlı kullanılabilen objelerdir. Eğer SQL Server Instance'a bağlananlar üzerinde kısıtlar uygulamak isterseniz tam olarak ihtiyacınızı Logon trigger ile karşılayabilirsiniz.<br />
<div>
<br /></div>
<div>
Şimdi bu konunun demosunu küçük bir senorya ile inceleyelim.</div>
<div>
<br /></div>
<div>
Örneğin kullanıcılarınızın veritabanına dışarıdan bilinmeyen bir bilgisayardan bağlanmasını engellemek istiyorsunuz. Yani sadece şirket bilgisayarından login olmasına izin vereceksiniz. Bu durumda kullanıcılarınız SQL Server login ile sysadmin(Full Yetki) yetkisine sahip olsa bile başka bir bilgisayardan bağlanma izni olmayacak. </div>
<div>
<br /></div>
<div>
Bunun için öncelikle küçük bir hazırlık çalışması yapmanız gerekecek. Şirket bilgisayarların isimlerini SQL Server'da bir tablo oluşturarak tutmanız gerekir. Ben aşağıdaki örnekte HostName adında bir tablo oluşturarak bilgisayar isimlerini burada tuttum.<br />
<br />
Logon Trigger'ı prod ortamına almadan önce kesinlikle test ortamınızda denemenizi tavsiye ediyorum. Kodda gözden kaçan bir mantık hatası olursa bütün kullanıcıların SQL Server'la olan bağlantısını kesersiniz. Tabi bu durumu aşmanın da yolları mevcut ama genede sonradan uğraşmamak adına dikkat etmekte fayda var.</div>
<div>
<br /></div>
<div>
Fakat bu kurgulanan senaryo çok sağlıklı değil. Çünkü her bilgisayar değişimi olduğunda ilgili tabloya tanımlama yapılması gerekmektedir. Ayrıca kişi başka bir bilgisayarın adını tabloda olan kayıtlardan biriyle eşleşecek şekilde değiştirirse de SQL Server'a erişim sağlama ihtimalide var. Daha güvenli ve jenerik bir yapı kurulması faydalı olacaktır. </div>
<div>
<br /></div>
<div>
Faydalı olması dileklerimle...</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">create</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">TRIGGER</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> pcName<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">ON</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: grey; font-family: "consolas"; font-size: 9.5pt;">ALL</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">SERVER</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">WITH</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">EXECUTE</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">AS</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: red; font-family: "consolas"; font-size: 9.5pt;">'sa'</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"><o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">FOR</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> LOGON<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">AS</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"><o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">BEGIN</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"><o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">if</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: grey; font-family: "consolas"; font-size: 9.5pt;">exists</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: grey; font-family: "consolas"; font-size: 9.5pt;">(</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">select</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: grey; font-family: "consolas"; font-size: 9.5pt;">*</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">from</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> server_b</span><span style="background: white; color: grey; font-family: "consolas"; font-size: 9.5pt;">.</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;">dbo</span><span style="background: white; color: grey; font-family: "consolas"; font-size: 9.5pt;">.</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;">HostName<o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">where</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">name</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: grey; font-family: "consolas"; font-size: 9.5pt;">=</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: grey; font-family: "consolas"; font-size: 9.5pt;">(</span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">SELECT</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: magenta; font-family: "consolas"; font-size: 9.5pt;">HOST_NAME</span><span style="background: white; color: grey; font-family: "consolas"; font-size: 9.5pt;">()))</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"><o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: green; font-family: "consolas"; font-size: 9.5pt;">--</span><span style="background: white; color: green; font-family: "consolas"; font-size: 9.5pt;">--Oluşturduğum
HostName tablosunda eğer girilmeye çalışan bilgisayar ismi yoksa trigger
tetiklenip rollback blogunun içerisine girecek ve kullanıcı bağlantı hatası
almış olacak.</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"><o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">begin</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> <o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">COMMIT</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"><o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">end</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"><o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">else</span><span style="background: white; font-family: "consolas"; font-size: 9.5pt;"><o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span style="background: white; font-family: "consolas"; font-size: 9.5pt;"> </span><span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt;">ROLLBACK</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt; line-height: 107%;">END</span><o:p></o:p><br />
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt; line-height: 107%;"><br /></span>
<br />
<div class="MsoNormal">
<span style="background: white; color: green; font-family: "consolas"; font-size: 9.5pt; line-height: 107%;"><br /></span></div>
<div class="MsoNormal">
<span style="background: white; color: green; font-family: "consolas"; font-size: 9.5pt; line-height: 107%;">-- Triggeri silmek için bu kodu kullanabilirsiniz.</span></div>
<div class="MsoNormal">
<span style="background: white; color: green; font-family: "consolas"; font-size: 9.5pt; line-height: 107%;">--DROP TRIGGER [triggerAdi] ON ALL SERVER </span><o:p></o:p></div>
</div>
</div>
<div>
<div class="MsoNormal">
<span style="background: white; color: blue; font-family: "consolas"; font-size: 9.5pt; line-height: 107%;"><br /></span></div>
</div>
Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-57519649220012788932018-09-07T10:42:00.000+03:002018-09-07T10:42:05.577+03:00SQL Server Partial Backup NedirSQL Server' da 2005 ile gelen bu özellik büyük veritabanı sistemlerinde backup alma süresini kısaltmak için kullanılmaktadır. En kısa ifade ile bunu kullanmadaki amacınız SQL Server içerisinde read only data dosyanız varsa ve bu file'in backup işlemine dahil olmasını istemiyorsanız kullanabileceğiniz bir özellik.<br />
<br />
Çalışma mantığı açısından aynı full backup gibi çalışırken tek farkı full backup bütün daya dosylarını bak dosyasına dahil ederken Partial Backup read only dışında kalan bütün dosyları bak dosyası içine yazar.<br />
<br />
Sytanx'ı aşağıdaki gibidir:<br />
<br />
BACKUP DATABASE AdventureWorks READ_WRITE_FILEGROUPS<br />
TO DISK = N'f:\AdventureWorks.bak' WITH COMPRESSION<br />
<br />
<br />
<br />
<br />Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com1tag:blogger.com,1999:blog-8790416720319676759.post-86718376646643208882018-09-04T18:05:00.000+03:002018-09-04T18:06:03.518+03:00OLE DB provider "SQLNCLI11" for linked server "" returned message "Query timeout expired". HATASIOLE DB provider "SQLNCLI11" for linked server "" returned message "Query timeout expired" hatasını alıyorsanız SQL Server tarafından kullanılan linked server'in query timeout süresi çalışan işlem için yeterli olmadığı anlamına gelmektedir.<br />
<br />
Bu sorunu aşmak için 2 farklı yol mevcut bir tanesi işlemin çalıştığı sunucu üzerinde insatance seviyesinde timeout süresini uzatabilir yada kullanılan linked server'ın query timeout değerini değiştirebilirsiniz.<br />
<br />
Instance seviyesinde süreyi uzatmak için:<br />
<br />
sp_configure 'remote query timeout',100 -- saniye cinsinden<br />
go<br />
reconfigure<br />
<br />
<br />
Linked Server üzerinden değiştirmek için ise kullanılan linked Server'a sağ tıklayarak properties'ne geldikten sonra açılan pencerede sol tarafta <b>Server Options </b>geldikten sonra <b>query timeout </b>değerini yeterli olacak bir değere getirdikten sonra bu hatayı aşmış olacaksınız.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVVRFt7-HSVTuVToCuRneeOA5Zuj8m_duncGeZzEyKpVW-R3VrfqxxTbEitJkRytmrnqx2MmBYGDw-Zggd7ETx5sM7IoDBAR_yaHhWtifQhm0jxnozg0xaOKV-Rw_hi4qX98fLlQ5Ny5Xe/s1600/Capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="695" data-original-width="693" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVVRFt7-HSVTuVToCuRneeOA5Zuj8m_duncGeZzEyKpVW-R3VrfqxxTbEitJkRytmrnqx2MmBYGDw-Zggd7ETx5sM7IoDBAR_yaHhWtifQhm0jxnozg0xaOKV-Rw_hi4qX98fLlQ5Ny5Xe/s400/Capture.PNG" width="398" /></a></div>
<br />Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-42714622434013519352017-06-05T17:11:00.000+03:002017-06-05T17:11:36.242+03:00Sistem Databas'leri olmadan SQL Server'ı Başlatma ve Sistem Db'lerini Kurtarma<div class="separator" style="clear: both; text-align: center;">
<a href="https://openclipart.org/image/2400px/svg_to_png/190594/db-blue.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="800" data-original-width="800" height="200" src="https://openclipart.org/image/2400px/svg_to_png/190594/db-blue.png" width="200" /></a></div>
<br />
<br />
SQL Server'ın çalışır durumda olması için sistem db dosyalarının zarar görmemiş, çalışır durumda olması gerekir. Peki bu dosyaları bir şekilde kaybettiysek ne olur? Bu durumda SQL Server database engine başlatamazsınız. SQL Server'ı çalışırı duruma getirebilmek için sistem db dosyalarını <b>Rebuil </b>etme olarak bilinen bir yöntemi kullanarak sistem db dosyalarını yeniden oluşturacağız. Bunun için SQL Server Setup'ına ihtiyacımız var. (Doğru versiyonu kullandığınızdan emin olun.)<br />
<br />
<b>Adımlar:</b><br />
<br />
<ul>
<li>CMD'yi yönetici olarak çalıştırın.</li>
<li>Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=instance_Adı /SQLSYSADMINACCOUNTS=kullanıcıAdi /SAPWD= sifre</li>
<ul>
<li>Yukarıdaki kodu setup'un içinde bulunduğu disk dizinine gelerek yapıştırın. Instance'ın adı ve domanin'de admin yetkisine sahip kullanıcı bilgilerini yazın ve bekleyin.</li>
</ul>
</ul>
İşlem tamamlandıktan sonra tanımlı olan klasör içerisinde tüm sistem db dosyaları tanımlanmış olacaktır. Fakat dikkat edilmesi gereken nokta SQL kullanıcıları, job gibi sistem db'leri içerisinde saklanan meta dataların bu durumda hepsini kaybetmiş olacaksınız. Sistemi çalışır duruma geldikten sonra back-up'lardan tekrardan bunları da kurtarabilir yada benzer olduğunu düşündüğünüz farklı bir database varsa servisleri durdurarak file'ları kopyalayabilirsiniz. Konu ile ilgili yakında küçük bir demo da paylaşacağım. Faydalı olması dileğiyle.<br />
<br />
<br />
<br />
<br />Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-17679298994098841702017-05-23T16:11:00.001+03:002021-07-14T12:04:55.660+03:00SQL SERVER'da Login failed for user '' Hatası<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.playtimeparis.com/images/exposer/logo-login.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="http://www.playtimeparis.com/images/exposer/logo-login.png" width="200" /></a></div>
<br />
<br />
Login failed for user '' hatasının alıyorsanız aşağıda bahsedilen maddeleri adım adım kontrol ederseniz sorunu çözmüş olacaksınız.<br />
<br />
<br />
<ol>
<li>Girmeye çalıştığınız login üzerine gelip sağ tıklayarak Propertis'i tıkladıktan sonra açılan pencerenin sol bölümündeki listeden Status'u tıklayarak buradan <b>GRANT </b>ve <b>ENABLED </b>seçeneklerinin işaretli olduğundan emin olun.</li>
<li>SQL Server Instance'a sağ tıklayarak buradan properties'e gelerek sol taraftan security'i seçin.Bu ekran da <b>Sql server and windows authentication mode'un </b>seçilidiği olduğundan emin olun. Fakat bu işlemin aktif olması için SQL Server servislerini restartlamanız gerekmektedir. Bunun içinde Instance'a tekrardan sağ tıklayarak <b>restart </b>diyebilirsiniz.</li>
<li>Bağlanmaya çalıştığınız Login bilgilerinin doğruluğunu kontrol edin gerekirse şifresini değiştirerek tekrardan deneyin.</li>
</ol>
<div>
Umarım faydalı olmuştur. </div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com1tag:blogger.com,1999:blog-8790416720319676759.post-31892467190528380432017-05-18T16:09:00.002+03:002017-05-18T16:11:13.611+03:00Exception deserializing the package SSIS Hatası<div class="separator" style="clear: both; text-align: center;">
<a href="https://blog.sqlauthority.com/i/a/errorstop.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blog.sqlauthority.com/i/a/errorstop.png" width="200" /></a></div>
<div>
<br /></div>
<div>
SSIS de paketi çalıştırdığınız da Exception deserializing the package hatası alıyorsanız. Denemeniz gereken ilk yöntem paket'in ismini değiştirmek. Paket isimlerinde ( [ ] ) köşeli parantez kullanmaktan kaçının. Bundan dolayı paket derlenirken hata alınmaktadır. Sadece harfler ve Türkçe karakter kullanmaya özen gösterin. Eğer sorununuz devam etmesi durumunda aşağıdaki adımları izleyin.</div>
<div>
<ol>
<li>Data Tools dan çıkın.</li>
<li>TaskManagerden kontrol ederek tamamen kapandığından emin olun. Eğer DTSDebugHost isimli çalışan işlemler görüyorsanız bunları da sonlandırın.</li>
<li>Projenizin klasörüne gelerek buradan ISPAC dosyasını bularak silin.</li>
<li>Ardından Data tool'u açın ve proje'ye sağ tıklayarak rebuil'i seçin ve tekrardan projenin build edilmesini bekleyin. </li>
</ol>
<div>
Bu adımlardan sonra sorun ortadan kalkacaktır. Umarım faydalı olmuştur.</div>
</div>
Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-28713552452943687332017-04-27T16:13:00.000+03:002017-04-27T16:13:48.721+03:00SQL Server da Tabloların Şemasını Değiştirme<div>
<br /></div>
<div>
<br /></div>
SQL Server da nadirde olsa tabloların şemasının değiştirme durumu ile karşılaşılabiliniyor. Bunun aslında çok basit bir T-SQL kodu bulunmakta.<div>
<br /></div>
<div>
<i><b><span style="color: blue;">Alter Schema </span></b>HedefSema <b><span style="color: blue;">Transfer </span></b>KaynakSema.TabloAd;</i></div>
<div>
<i><br /></i></div>
<div>
Eğer bir şema içerisindeki bütün tabloları farklı bir şemaya aktarmak istiyorsanız SQL Server'ın system Sp'leri içinde bulunan <i><b>Sp_MsForEachTable</b></i> bütün kullanıcı tabloların içinde dönerek işlem yapmanızı sağlar. Bu kodun kullanımı ise aşağıdaki gibidir.</div>
<div>
<br /></div>
<div>
<span style="color: blue;">exec </span><span style="color: purple;">SP_MsForEachTable</span> '<span style="color: red;">Alter Schema HedefSchema Transfer ?'</span></div>
<div>
<br /></div>
<div>
SP_MsForEachTable Sp'nin kullanımı sonucunda db de bulunan bütün kullanıcı tabloların şemaları transfer Hedef olarak belirlediğiniz şemaya aktarılacaktır.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-81698785090148944872017-04-26T15:41:00.000+03:002017-04-26T15:41:48.603+03:00A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations HatasıA SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations hatası T-sql de bir değişkene aynı anda birden fazla değer atanmaya çalışıldığı zaman alınır. Bundan emin olmak için sorguyu top 1 olarak çalıştırmayı deneyin hata almıyorsanız değişkene atama yaparken ki işlemi kontrol ediniz.<br />
<div>
<br /></div>
<div>
<b>Örnek Kullanım:</b></div>
<div>
<br /></div>
<div>
Select top 1 @degisken=kolon </div>
<div>
from TabloAd</div>
<div>
Where Id=@Id<br />
<br />
<br />
<br />
<br />
<br /></div>
Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-17293271332944028302017-04-25T10:03:00.000+03:002017-06-08T16:00:38.648+03:00The query processor ran out of internal resources and could not produce a query plan with WHERE in and several thousand values Hatası<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://cdn.pixabay.com/photo/2012/04/02/16/06/error-24842_960_720.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://cdn.pixabay.com/photo/2012/04/02/16/06/error-24842_960_720.png" width="200" /></a></div>
<div>
<br /></div>
<div>
Where statement da kullandığınız <i style="font-weight: bold;">IN </i>ifadesi içerisine limitinin dışında değer girmenizden dolayı SQL Server dan </div>
<div>
<i>"The query processor ran out of internal resources and could not produce a query plan. This is a rare event and only expected for extremely complex queries or queries that reference a very large number of tables or partitions. Please simplify the query. If you believe you have received this message in error, contact Customer Support Services for more information." </i></div>
<div>
hatasını almaktasınız. Hem bu hatayı almamak hemde daha iyi bir performans için bu noktada temp tablo yada subquery kullanarak hem hatadan kurtulabilir hemde daha iyi bir performans elde edebilirsiniz. Konu ile ilgili bu <a href="https://connect.microsoft.com/SQLServer/feedback/details/521943/the-query-processor-ran-out-of-internal-resources-and-could-not-produce-a-query-plan-with-where-in-and-several-thousand-values">sayfada</a> yorum kısmında Microsoft durumu açıklayıcı bir anlatımda da bulunmuş. Umarım faydalı olur.</div>
Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-78736980476250510392017-04-24T22:23:00.001+03:002017-04-25T10:04:14.694+03:00Transaction, Rollback, Commit Kullanımı<div class="separator" style="clear: both; text-align: center;">
<a href="http://vignette3.wikia.nocookie.net/lego/images/8/83/Undo_Rollback.png/revision/latest?cb=20110911190114" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://vignette3.wikia.nocookie.net/lego/images/8/83/Undo_Rollback.png/revision/latest?cb=20110911190114" height="200" width="200" /></a></div>
SQL Server'da bir sorgu çalıştırdığımız zaman default olarak SQL Server hemen sonuç<br />
döndürür.<br />
<br />
Eğer çalıştırılacak sorgunun başına <i>begin transaction</i> (yada begin tran) ifadesi kullanırsak otomatik olarak transaction explict uygulanır ve tablo üzerinde lock konulur. Bu lock transaction commit yada rollback olana kadar tablo üzerinde kalır.<br />
<br />
Örneğin kritik <i style="font-weight: bold;">update </i>ve <i style="font-weight: bold;"> delete </i>işlemlerinde begin tran ifadesi kullanılarak yapılan işlemin doğruluğundan emin olduktan sonra eğer bir sıkıntı yoksa commit yazarak çalıştırırsanız işlem yaptığınız en son şekilde kalacaktır. Fakat işlemi yaptıktan sonra bir problem olduğunu fark ettiniz ve geri dönmek istiyorsanız <i>ROLLBACK </i>yazarak bunu çalıştırırsanız veriler önceki haline gelecektir. Ama unutmayın kontrol yaparken aynı session üzerinden sadece verilere ulaşabilirsiniz. Farklı bir session üzerinden datalara ulaşmak istediğinizde tablo üzerinde lock olduğundan dolayı verilere gelmeyecektir.<br />
<br />
Ayrıca session üzerinde açıkta olan transaction var mı ? Varsa bunun sayısını görebilmek için<br />
<i>SELECT @@TRANCOUNT </i>ifadesi ile görebilirsiniz.<br />
<br />
Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-66083549837337274762017-04-24T14:49:00.000+03:002017-04-24T14:51:18.298+03:00SQL Sever Login ve Şifrelerini Farklı Server'a Taşıma<div class="separator" style="clear: both; text-align: center;">
<a href="https://myslu.slu.edu/res/images/cas-padlock-icon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="199" src="https://myslu.slu.edu/res/images/cas-padlock-icon.png" width="200" /></a></div>
<br />
Eğer mevcutta olan Server'ı farklı bir server'a taşıyacaksanız sadece DB'lerin full-backup ve retore işlemi ile kurtulmanız mümkün değil. Çünkü server kullanıcıları aldığnızı full-backup' a dahil edilmiyor. Herhangi bir login'e sağ tıklayarak create script dediğiniz zamansa güvenlik amaçlı SQL Server mevcut loginin şifresini rastgele olarak yeniden oluşturmaktadır. Yani mevcut şifre ile taşımanız mümkün değil. Tabi bu söylediklerim Windows Authentication için geçerli değil. Sisteminizdeki SQL Server Loginler için geçerli.<br />
<br />
Neyse ki mevcut şifreleri koruyarak taşıma işlemini yapabilmeniz için Microsoft'un yayınlamış olduğu bir Stored Procedure var. Bu Sp sayesinde mevcuttaki SQL Server login'leri mevcut şifreleri ile taşıyabilirsiniz.Bu Stored Procedure kullanıcıların scriptlerini oluştururken şifreleri güvenlik amaçlı hashlemektedir. Bu sayede server'ı taşıdıktan sonra kullanıcılar aynı şifreleri ile login olabilmektedirler.<br />
<br />
Scriptin en güncel halini <a href="https://support.microsoft.com/tr-tr/help/918992/how-to-transfer-logins-and-passwords-between-instances-of-sql-server">buradan</a> indirip Db'de oluşturabilirsiniz.<br />
<br />
Aynı zamanda SQL Server 2005 ile 2012 arasındaki versiyonları destekleyen halini <a href="https://support.microsoft.com/tr-tr/help/246133/how-to-transfer-logins-and-passwords-between-instances-of-sql-server">buradan</a> temin edebilirsiniz.<br />
<br />
<br />
Daha sonra istediğiniz login'nin create scriptini aşağıdaki örnek kullanım şekliyle elde etmeniz mümkün.<br />
<br />
EXEC dbo.sp_help_revlogin @login_name = 'Kullanici'<br />
<br />
<br />
<br />
<br />
<br />Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-74481940718826432552017-04-14T11:08:00.000+03:002017-04-14T11:08:36.139+03:00SQL Server Unable to open Step output file. The step failed HatasıJob'ı çalıştırdığınız zaman job'ın loglarında <i style="text-decoration: underline;">Unable to open Step output file </i> hatasını alıyorsanız büyük ihtimalle job'ın hata alması durumunda log'ları yazacak olan klasörde erişim yetkisi problemi yaşamaktasınız. Bunu test etmek için sorun yaşadığınız ilgili job'a sağ tıklayarak<br />
<br />
<ul>
<li><b>Properties seçeneğine gelin. </b></li>
<li><b>Açılan pencerede Step seçeneğini tıklayın.</b></li>
<li><b>Açılan pencerede Edit butonuna basın.</b></li>
<li><b>Advance Sekmesinden OutputFile alanını tamamen silin ve tekrar deneyin.</b></li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihl7KkvMNB7w6786oIPY2J3GIhQyF7Y_mK_dFIbociWkiC20VaBZwEbWaTzHmJdEyneEUEom6LXIh1TYY5lwribqcdyVBx8VSMjEDTiEqe0YvqAvPRwLqbqT8-jWdbUk21ufPyfChQcuad/s1600/Ekran+Al%25C4%25B1nt%25C4%25B1s%25C4%25B1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihl7KkvMNB7w6786oIPY2J3GIhQyF7Y_mK_dFIbociWkiC20VaBZwEbWaTzHmJdEyneEUEom6LXIh1TYY5lwribqcdyVBx8VSMjEDTiEqe0YvqAvPRwLqbqT8-jWdbUk21ufPyfChQcuad/s200/Ekran+Al%25C4%25B1nt%25C4%25B1s%25C4%25B1.PNG" width="200" /></a></div>
<div>
<br /></div>
Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-5233972880332844792017-04-06T15:25:00.001+03:002017-04-06T15:25:29.495+03:00Job History Temizleme<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.gxdmtl.com/pics/main/20/281054-clean.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.gxdmtl.com/pics/main/20/281054-clean.jpg" height="200" width="200" /></a></div>
<br />
Bunu GUI'den (SQL SERVER Management Studio)'dan yapabileceğiniz gibi aynı zamanda script'le de yazmanız mümkün. Mesela çok sık aralıklarla çalıştırdığınız bir Job'ınız varsa bu LOG'ların çok fazla şişmesine sebep olacaktır. Bunun için belli aralıklarla bu hob'ın history'sinin silme işlemini sağlayacak başka bir job tanımlayabilirsiniz.<br />
<br />
<br />
EXEC dbo.sp_purge_jobhistory @job_name = NULL,<br />
@job_id = NULL,<br />
@oldest_date = '2017-04-06 12:14:42'<br />
<br />
@job_name= işlem yapılacak olan Job'ın ismi yazılır.<br />
@job_Id=işlem yapılacak olan Job'ın Id'si yazılır ki bu Id uniqueidentifier'dır.<br />
@oldest_date= kalması gereken en eski tarihi belirtirsiniz. Eğer bunu yazmazsanız history'nin tamamı silinir.Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-27519983814908598512017-04-06T10:01:00.001+03:002017-04-06T10:01:33.710+03:00SQL Server 2016 KB2919355 Hatası<div>
<br /></div>
<div>
<br /></div>
SQL Server 2016 kurulumunda sıkça karşılaşılan hatalardan biri olan KB2919355 No'lu hatayı aşmak aslında oldukça kolay. Denetim Masasından işletim sisteminin güncellemelerini kontrol edin. Yaklaşık 800.00 Mb kb2919355 isimli bir update göreceksiniz. Makineyi update edip yeniden başlattıktan sonra SQL Server'ı kurmayı yeniden deneyin. Sorun giderilmiş olacaktır. Kolay gelsin.Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com1tag:blogger.com,1999:blog-8790416720319676759.post-74512069453388906352017-04-04T10:56:00.000+03:002017-04-04T10:57:16.709+03:00Saving Changes is not Permitted Hatası<div>
<br /></div>
<div>
SQL Server da mevcut bir tablo üzerinde şemasal bir değişiklik yapıldığı zaman arka planda SQL Server tablonun içerisindeki veriyi boşalttıktan sonra ilgili değişikliği yapar ardından tekrardan veriyi tabloya yazar. Güvenlik sebebiyle siz kapatmadığınız sürece buna SQL Server izin vermez ve <b>Saving Changes is not permitted. The changes you have either made changes to a table that can't be re-created or enabled the option Prevent saving changes theh require the table to be re-created </b>bildirimini alırsınız. </div>
<div>
<br /></div>
<div>
Bunu aşabilmek için SQL Server'da üst menüde bulunan <b>Tools </b>menüsünden <b>Options'ı </b>tıkladıktan sonra karşınıza gelen pencerenin sol menüsünden altlarda bulunan <b>Designers'ı </b>seçin. Karşınıza gelen seçeneklerden altta bulunan <b>Prevent saving changes that require table re-creation'nın </b>seçeneğini kaldırırsanız SQL Server tablo üzerinde şemasal değişiklikler yapmanıza izin verecektir. Fakat production ortamlarında sistem çalışırken bunun kullanılması data kaybınıza sebebiyet verebileceği için dikkatli olunması gerekmektedir.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br /></div>
Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-61631369497075230042017-04-03T17:07:00.000+03:002017-04-03T17:10:04.032+03:00Windowed functions can only appear in the SELECT or ORDER BY clauses Hatası<div class="separator" style="clear: both; text-align: center;">
<a href="http://vignette2.wikia.nocookie.net/clubpenguin/images/d/d7/Stage_Script_icon.png/revision/latest?cb=20120802103434" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://vignette2.wikia.nocookie.net/clubpenguin/images/d/d7/Stage_Script_icon.png/revision/latest?cb=20120802103434" height="200" width="200" /></a></div>
<br />
Windowed functions can only appear in the SELECT or ORDER BY clauses hatası alıyorsanız büyük ihtimalle windowed function lardan birini yanlış kullanımı ile karşı karşıyasınız. Windowed Function'lar ANSI standatları tarafından belirlenmiş <b>group by, having, where </b>ifadeleri işlendikten sonra çalıştırılırlar. Bundan dolayı <b>Select ve Order BY </b>ifadeleri içinde kullanılmalıdır. Ama ihtiyaç doğrultusunda <b>Where </b>ifadesi içinde de kullanılması gerekir. Bu durumda benim en çok kullandığım yöntem <b>CTE </b> ile kullanım şeklidir. Böylede Windowed Function kısmı sanki bir kolonmuş gibi davranabilir.<br />
<br />
Aşağıda AdventureWorks database'inde bulunan Customer tablosunda tekrar eden StoreID'leri tespit edelim. Kullandığımız windowed function'ı where cümlesinde kullandığımız zaman -aşağıdaki gibi-<br />
Windowed functions can only appear in the SELECT or ORDER BY clauses hatası alınacaktır.<br />
<br />
select distinct<br />
StoreID,<br />
count(StoreID) over (partition by StoreID) as a<br />
from Sales.Customer<br />
where count(StoreID) over (partition by StoreID)>1 -- Where cümlesinde kullanımına izin verilmez.<br />
<br />
Bunun yerine scrpiti CTE içinde kullanarak bu hatayı aşabiliriz. Kullanımı aşağıdaki gibidir.<br />
<br />
<br />
with c as<br />
(<br />
select distinct<br />
StoreID,<br />
count(StoreID) over (partition by StoreID) as a<br />
from Sales.Customer<br />
)<br />
select * from c<br />
where a >1<br />
<br />
<br />
<br />Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-26460323483114365532017-02-24T18:16:00.001+03:002017-02-24T18:21:48.998+03:00Instance İçerisindeki Tüm Data Dosyalarının(.mdf, .ldf, .ndf) Farklı Fiziksel Ortama Taşınması<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.shadowcdn.com/wp-content/uploads/2009/03/mdf.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.shadowcdn.com/wp-content/uploads/2009/03/mdf.jpg" /></a></div>
Bir veritabanının data file'larının yerini değiştirmek için öncelikle taşınması istenen database'i offline moda getirmelisiniz.<br />
.- <b>alter database [Northwind] set offline</b>-<br />
<b> </b>Daha sonra taşınması istenen database'in dosyalarını istenilen klasöre kopyala yapıştır yaparak taşıyabilirsiniz. Fakat SQL Server'a ilgili data file'ların yerini tanımlamanız gerekmektedir.<br />
<b>-alter database [Northwind] modify file (name =Northwind ,filename='C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\northwnd.mdf')</b>-<br />
Bu tanımlamayı da yaptıktan sonra database'i<br />
-<b>alter database [Northwind] set online</b>-<br />
komutu ile online moda alabilirsiniz.<br />
<div>
<br /></div>
<div>
Fakat eğer instance içerisinde taşınması gereken çok fazla Database'niz varsa ve hepsini taşımak istiyorsanız o zaman her biri için bu işlemi teker teker yapmak oldukça yorucu ve uzun zamanınızı alacaktır. Bunun için aslında işlemi tek sefer de yapabilecek bir script hazırladım.</div>
<div>
<br /></div>
<div>
Öncelikle Instance içerisindeki kullanıcı bazlı tüm database'leri offline moda almamız gerekecek. </div>
<div>
<div>
<br />
-----------------------------------------------------------------------------------------------</div>
<div>
<div>
declare @sayac int</div>
<div>
declare @dbname nvarchar(150)</div>
<div>
declare @cumle nvarchar(350)</div>
<div>
<br /></div>
<div>
set @sayac = 10 -- sayac değişkenini 10 dan baslattim cunku 10 dan önceki Id'ler kullanıcı Database'leri değil ve bunları taşınmasını istemiyorum.</div>
<div>
while (@sayac<14)</div>
<div>
begin</div>
<div>
<br /></div>
<div>
set @dbname = (select db.[name] -- eğer offline moda alinmasini istemedğiniz database'niz varsa Where koşulunda ilgili database'in Id'sini belirterek işlem dışında tutabilirsiniz ki ben sayaç değişkenini 10 dan başlatarak bunları işlem dışında tuttum.</div>
<div>
FROM sys.master_files as files</div>
<div>
join master.dbo.sysdatabases as db on db.dbid=files.database_id</div>
<div>
where physical_name like '%.mdf%' and dbid = @sayac)</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
set @cumle = 'alter database ' +@dbname+ ' set offline' -- online moda geçmek içinde buradaki offline'ı online olarak değiştirerek tüm kullanıcı database'lerini online moda alabilirsiniz.</div>
<div>
<br /></div>
<div>
exec (@cumle)</div>
<div>
set @sayac = @sayac +1</div>
<div>
end </div>
</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
------------------------------------------------------------------------------------------------------------</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
--select * from sys.databases<br />
den bütün database'lerle ilgili bilgileri elde edebilirsiniz.</div>
<div>
<br /></div>
<div>
Daha sonra aşağıdaki kod ile instance içindeki bütün kullanıcı veritabanlarının sql server içerisindeki fiziksel dosya yolu tanımını değiştirebilirsiniz. Eğer işlem dışında tutmak istediğiniz veritabanı varsa kod içerisinde yorum satırı olarak belirttiğim yerlerde küçük değişikler yaparak bunu sağlayabilirsiniz. Script database içerisinde bulunan tüm .mdf, .ldf, ve vasrsa .ndf dosyalarını tespit edip taşınmasını sağlar. Siz sadece script içerisinde klasör yollarını bildirmeniz yeterli olacaktır. Bu işlemi yapmadan önce scripti test ortamında deneyerek test etmeyi unutmayın. Umarım faydalı olur. Bir sonraki yazıda görüşmek üzere hoşçakalın....</div>
<div>
<br />
------------------------------------------------------------------------------------------------------</div>
<div>
<div>
declare @maxx int </div>
<div>
declare @minn int</div>
<div>
declare @db varchar(100)</div>
<div>
declare @mdf varchar(100)</div>
<div>
declare @ldf varchar(100)</div>
<div>
declare @ndf varchar(100)</div>
<div>
declare @ndfuzanti varchar(100)</div>
<div>
declare @kodLDF varchar(300)</div>
<div>
declare @kodMDF varchar(300)</div>
<div>
declare @kodNDF varchar(300)</div>
<div>
declare @ldfuzanti varchar(150)</div>
<div>
declare @mdfuzanti varchar(150)</div>
<div>
declare @ndfC int </div>
<div>
<br /></div>
<div>
set @minn = (select MIN(db.dbid)</div>
<div>
--distinct db.dbid,db.name</div>
<div>
FROM sys.master_files as files</div>
<div>
join master.dbo.sysdatabases as db on db.dbid=files.database_id</div>
<div>
where db.dbid>9) -- taşınması istenilen database Id'lerin boyutu 9'dan büyük olduğu için dbID>9 koşulu konulur. eğer taşınması istenmeyen veritabanları varsa Where koşulunda ilgili database ID lerini belirterek işlem dışında tutabilirsiniz.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
--select *--MIN(db.dbid)</div>
<div>
----distinct db.dbid,db.name</div>
<div>
--FROM sys.master_files as files</div>
<div>
--join master.dbo.sysdatabases as db on db.dbid=files.database_id</div>
<div>
--where db.dbid>9</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
set @maxx= (select max(db.dbid)</div>
<div>
--distinct db.dbid,db.name</div>
<div>
FROM sys.master_files as files</div>
<div>
join master.dbo.sysdatabases as db on db.dbid=files.database_id</div>
<div>
where db.dbid>9)</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
while (@minn<=@maxx)</div>
<div>
begin</div>
<div>
<br /></div>
<div>
--ldf ve database name </div>
<div>
SELECT @db= db.[name], @ldf=files.[name],</div>
<div>
@ldfuzanti=right(Physical_Name, charindex('\',reverse(physical_name))-1)</div>
<div>
FROM sys.master_files as files</div>
<div>
join master.dbo.sysdatabases as db on db.dbid=files.database_id</div>
<div>
where physical_name like '%.ldf%' and db.dbid <>11 </div>
<div>
--and database_id not in (1,2,3,4,5,6,7,8,9) </div>
<div>
and database_id = @minn</div>
<div>
<br /></div>
<div>
/*</div>
<div>
eğer uzantısı .ldf ise bu log dosyasıdır.</div>
<div>
Eğer uzantısı .mdf ise bu data dosyasıdır.</div>
<div>
<br /></div>
<div>
*/</div>
<div>
<br /></div>
<div>
--mdf için</div>
<div>
SELECT @mdf=[name],</div>
<div>
@mdfuzanti=right(Physical_Name, charindex('\',reverse(physical_name))-1)</div>
<div>
FROM sys.master_files as files</div>
<div>
where physical_name like '%.mdf%' and database_id <>11 -- Taşınmasını istenmeyen database Id' yi burada belirtin. Mesela ben örnekte 11 Id'li database'in taşınmasını istemiyorum</div>
<div>
--and database_id not in (1,2,3,4,5,6,7,8,9)</div>
<div>
and database_id = @minn</div>
<div>
<br /></div>
<div>
if exists(</div>
<div>
SELECT files.*</div>
<div>
FROM sys.master_files as files</div>
<div>
join master.dbo.sysdatabases as db on db.dbid=files.database_id</div>
<div>
where physical_name like '%.ndf%' and db.dbid=@minn and db.dbid <>11 ) -- Taşınmasını istenmeyen database Id' yi burada belirtin. Mesela ben örnekte 11 Id'li database'in taşınmasını istemiyorum.<br />
<br /></div>
<div>
begin </div>
<div>
<br /></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>declare @startt int</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>declare @ndfmax int</div>
<div>
<br /></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>set @startt =1</div>
<div>
<br /></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>set @ndfmax = (<span class="Apple-tab-span" style="white-space: pre;"> </span>SELECT count([name])</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>FROM sys.master_files as files</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>where physical_name like '%.ndf%' and database_id=@minn and database_id <>11 ) -- Taşınmasını istenmeyen database Id' yi burada belirtin. Mesela ben örnekte 11 Id'li database'in taşınmasını istemiyorum</div>
<div>
<br /></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>SELECT [name],</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>right(Physical_Name, charindex('\',reverse(physical_name))-1) as ad,</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>row_number() over(order by right(Physical_Name, charindex('\',reverse(physical_name))-1)) as Id</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>into ##ndf</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>FROM sys.master_files as files</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>where physical_name like '%.ndf%' and database_id=@minn and database_id <>11 </div>
<div>
<br /></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>while(@startt<=@ndfmax)</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>begin</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>-- for ndf:</div>
<div>
<br /></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>SELECT </div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>@ndf=[name],</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>@ndfuzanti=ad</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>FROM ##ndf</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>where Id= @startt </div>
<div>
<br /></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>set @kodNDF = 'alter database' +'['+@db+']'+ 'modify file (name =' +@ndf+ ' ,filename=''E:\Data\'+@ndfuzanti+''')' -- Burada taşınması istenilen klasörün yolunu bildirin.</div>
<div>
<br /></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>exec(@kodNDF)</div>
<div>
<br /></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>set @startt = @startt+1</div>
<div>
<br /></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>end</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>drop table ##ndf</div>
<div>
<br /></div>
<div>
goto asda</div>
<div>
end</div>
<div>
<br /></div>
<div>
else</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>asda:</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>begin</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span></div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span></div>
<div>
--ldf için </div>
<div>
set @kodLDF = 'alter database' +'['+@db+']'+ 'modify file (name =' +@ldf+ ' ,filename=''E:\Data\'+@ldfuzanti+''')' -- Burada taşınması istenilen klasörün yolunu bildirin.</div>
<div>
<br /></div>
<div>
--mdf için </div>
<div>
set @kodMDF = 'alter database' +'['+@db+']'+ 'modify file (name =' +@mdf+ ' ,filename=''E:\Data\'+@mdfuzanti+''')' -- Burada taşınması istenilen klasörün yolunu bildirin.</div>
<div>
<br /></div>
<div>
exec(@kodLDF)</div>
<div>
exec(@kodMDF)</div>
<div>
set @minn = @minn+1</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>end</div>
<div>
<span class="Apple-tab-span" style="white-space: pre;"> </span>end</div>
<div>
---------------------------------------------------------------------------------------------------</div>
<div>
<br /></div>
<div>
<br /></div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br />
<div>
<div>
<div>
<div>
<br /></div>
</div>
</div>
</div>
</div>
Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-51283046817215674212017-02-23T14:54:00.000+03:002017-11-30T01:05:28.710+03:00SQL Server da Tüm Nvarchar(max) Alanların Tespit Edilip Düzenlenmesi<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blog.sqlauthority.com/i/b/PerfTune.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="235" src="https://blog.sqlauthority.com/i/b/PerfTune.jpg" width="320" /></a></div>
<br />
SQL Server da nvarchar(max) kullanımı database'i performans açısında negatif olarak etkiler. Tahmin edilebilir ve çok uzun değerler girilmeyecek alanlar için nvarchar(max)' tercih etmemek gerekir. Aşağıdaki kod'un çalışma mantığı database de tüm kullanıcı tablolarında kullanılan nvarchar(max) alanlarını tespit edip, o tablo içindeki maksimum değer girilen kolonun değerini bulur ve bu değerin %20'sini ekleyerek kolunun olması gereken karakter sınırını değiştirir. Eğer tablodaki kolonlarda 3000 den fazla girilmiş karakter varsa burada herhangi bir işlem yapmayacaktır. Bu durumda bu tablolar özelinde kendiniz gözden geçirip olması gereken sınıra karar vermelisiniz. Aksi taktirde bu işlem kritik bir müdahale olabilir. Eğer hiç veri girilmemiş bir kolon yada tablolarınız varsa burada scriptin referans alacağı bir kullanım değeri olmadığı için nvarchar(max) alanları default olarak 1500 ayarlanacaktır. Production ortamında kodu çalıştırmadan önce test ortamınız da test etmenizi öneriyorum. Umarım faydalı olur.<br />
<br />
-------------------------------------------------------------------<br />
<br />
DECLARE @tabload NVARCHAR(200)<br />
DECLARE @maxdeger INT<br />
DECLARE @kolonad NVARCHAR(200)<br />
DECLARE @Id INT<br />
DECLARE @FinalKomut NVARCHAR(400)<br />
DECLARE @tabloCount INT<br />
DECLARE @arakomut NVARCHAR(400)<br />
<br />
<br />
SELECT ROW_NUMBER() OVER(ORDER BY(SELECT 100)) AS ID,<br />
TABLE_SCHEMA+'.'+TABLE_NAME as TabloAd,<br />
COLUMN_NAME AS Kolon<br />
INTO ##ym<br />
FROM<br />
INFORMATION_SCHEMA.COLUMNS<br />
where DATA_TYPE in('varchar','nvarchar') AND CHARACTER_MAXIMUM_LENGTH = -1 AND TABLE_SCHEMA not like 'dbo%'<br />
AND TABLE_NAME <> 'Tablo ismi' --Eğer işleme dahil edilmesini istemediğiniz kolon ve tablo ismi varsa burada belirtebilirsiniz.<br />
<br />
<br />
SELECT @tabloCount=COUNT(*) FROM ##ym<br />
<br />
SET @ID=0<br />
<br />
yukari:<br />
set @Id = @Id +1<br />
<br />
WHILE (@Id<=@tabloCount)<br />
begin<br />
<br />
SELECT<br />
@Id=Id ,<br />
@tabload=tabload,<br />
@kolonad=Kolon<br />
FROM ##ym<br />
WHERE ID=@Id<br />
<br />
<br />
set @arakomut =(' set @maxdeger =(select max(len('+@kolonad+')) from '+@tabload+')')<br />
exec sp_executesql @arakomut,N'@maxdeger int out',@maxdeger out<br />
<br />
IF @maxdeger IS NULL or @maxdeger = '' -- Eğer tablonun tüm satırları null yada boşsa default olarak nvarchar(1500) olarak ayarladım. Siz ihtiyaca göre buradaki alan değerini değiştirebilirsiniz.<br />
begin<br />
begin tran<br />
SET @FinalKomut = 'alter Table '+@tabload+' alter column '+@kolonad+' nvarchar(1500)'<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>EXEC sp_executesql @FinalKomut<br />
print @tabload+' '+@kolonad+' Tablo Boş nvarchar(1500) olarak ayarlandı'<br />
commit<br />
goto yukari<br />
end<br />
<br />
IF (@maxdeger)>3000<br />
<br />
BEGIN<br />
begin tran<br />
PRINT @tabload+' '+@kolonad+' 3000 den büyük değer var.İşlem Yapılmayacak' -- Eğer karakter sayısı 3000'den fazla veri varsa burası kritik olduğu için herhangi bir işlem yapmamsını tavsiye ediyorum. Bu tablolar özelinde ekranları kullanan kişiler ile konuşuarak optimum bir değer belirlenmelidir.<br />
<br />
commit<br />
goto yukari<br />
<br />
END<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<br />
IF (@maxdeger)<3000 -- Eğer 3000 den küçükse tablo içerisnde maksimum karatker sayını bulup bunun %20'si kadar ekleyerek yeni nvarchar değerini atayacaktır.<br />
BEGIN<br />
begin tran<br />
set @maxdeger = cast(@maxdeger*0.20 as int)+@maxdeger<br />
SET @FinalKomut = 'alter Table '+@tabload+' alter column '+@kolonad+' nvarchar('+cast(@maxdeger as varchar(20))+')'<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>EXEC sp_executesql @FinalKomut<br />
commit<br />
print @tabload+' '+@kolonad+' kolonu data siniri degistirildi.'<br />
SET @ID= @ID+1<br />
end<br />
END<br />
<br />
<br />
<br />
<br />Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-68171173880702212822016-11-14T00:44:00.000+03:002016-11-14T01:48:48.000+03:00kb2919355 check failed. if you have installed kb2919355, please make sure you have restart your machine sql server 2016 error<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq68ni99K0Z08Rk3v0IanIMC26cyQMcVPxja0odGlQR3urdVN4RFpQpF56BkgvaMPwHSNfrQBTnjYlDVm16y2770mPTS_OBMfALPW7pd-sOOCbI1rg_uDeh4urCLldZgGHbIMBCQBRcHdJ/s1600/capture3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="297" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq68ni99K0Z08Rk3v0IanIMC26cyQMcVPxja0odGlQR3urdVN4RFpQpF56BkgvaMPwHSNfrQBTnjYlDVm16y2770mPTS_OBMfALPW7pd-sOOCbI1rg_uDeh4urCLldZgGHbIMBCQBRcHdJ/s400/capture3.PNG" width="400" /></a></div>
<br />
Sql Server 2016 kurulumuna bu hatayı alıyorsanız aslında sorunun çözümü oldukça kolay. İşletim sistemini güncelleyerek bu sorundan kurtulabilirsiniz. Windows update penceresinde güncellemeleri kontrol ederek kb2919355 kodlu check box'ı işaretleyin ve yükletin eğer listede bu güncelleme gözükmüyorsa önce listede bulunan bütün güncellemeleri yükleyin ardında Pc'ye restart atarak tekrardan update listesini kontrol edin ve ilgili kodu tıklayarak yükleyin sorun giderilmiş olacaktır.Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-20696831579970033462016-11-14T00:12:00.002+03:002017-12-04T11:08:13.281+03:00SQL Server da Oracle JRE 7 Update 51 (64-bit) or higher is required HatasıSQL Server Feature Selection ekranında PolyBase Query Service For External Data özelliğini seçerseniz bu durumda yukarıdaki hata ile karşılaşacaksınız. Çünkü PolyBase Query Service For External Data için Oracle dan küçük bir java eklentisi gerekmektedir. Bunun için şu linki <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">tıklayarak</a> aşağıdaki resimde işaretlediğim eklentiyi indirin ve kurun. Ardından bu hatayı aşmış olacaksınız.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgayHOecJuQ63rQFMSevhOC82pdZVaeW61-W2VUBSe3V-Elf8bhFYG2L1y9Qw9KtmQRfKIpm8XgqxHqr8Y32tuzXx-WZZ3N2MT9-9uc12XyyE-0t8SiN0d1-4KG2dwCUvJ6i-P4JEue9cxd/s1600/capture.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="167" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgayHOecJuQ63rQFMSevhOC82pdZVaeW61-W2VUBSe3V-Elf8bhFYG2L1y9Qw9KtmQRfKIpm8XgqxHqr8Y32tuzXx-WZZ3N2MT9-9uc12XyyE-0t8SiN0d1-4KG2dwCUvJ6i-P4JEue9cxd/s400/capture.PNG" width="400" /></a></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdECL-w-aRetvFARpTpPCn8gNxXS8v1LmSxSxXicfmrkE13Lf_EMmIMsThynPGJhth3OrTrWI8P9WPaO5WL8awrjR-HOtoi65gUFDAAvU0v1z17tWchgQar-Qe-HIKieZdUj4WFC-CmouB/s1600/capture+2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdECL-w-aRetvFARpTpPCn8gNxXS8v1LmSxSxXicfmrkE13Lf_EMmIMsThynPGJhth3OrTrWI8P9WPaO5WL8awrjR-HOtoi65gUFDAAvU0v1z17tWchgQar-Qe-HIKieZdUj4WFC-CmouB/s400/capture+2.PNG" width="400" /></a></div>
<div>
<br /></div>
Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com5tag:blogger.com,1999:blog-8790416720319676759.post-40112604109934702942016-11-02T00:59:00.000+03:002016-11-02T00:59:41.863+03:00Database Diagram support objects cannot be installed because this database does not have a valid owner hatası hakkındaEğer database diagramına erişmeye çalışırken yukarıdaki hatayı alıyorsanız yetki ile ilgili bazı sıkıntılar yaşıyorsunuz demektir. Aşağıdaki kodu çalıştırarak sorunu gidermiş olacaksınız:<br />
<br />
<span style="color: blue;">ALTER AUTHORIZATION ON DATABASE</span>:: <i>DatabaseAdı </i><span style="color: blue;">TO </span>[<i>KullanıcıIsmi]</i>;<br />
<div>
<br /></div>
<b>Örnek Kullanım:</b><br />
<span style="color: blue;"><br /></span>
<span style="color: blue;">ALTER AUTHORIZATION ON DATABASE</span>::<i>AdventureWork </i><span style="color: blue;">TO </span>[<i>sa</i>];<br />
<div>
<br /></div>
Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0tag:blogger.com,1999:blog-8790416720319676759.post-8812308049904028632016-11-01T12:50:00.000+03:002016-11-01T12:50:02.708+03:00Failed to execute the package or element. Build errors were encountered. <div>
<br /></div>
<div>
Yukarıdaki hata ile karşılaşıyorsanız çözümü aslında oldukça basit. Öncelikle güncel olarak dataflow'unuzu kullanan bütün programları kapatın. Buna rağmen sorun çözülmediyse SSIS kapatın ve görev yöneticisinden açık kalmadığına emin olun. Buna rağmen sorun hala devam ediyorsa oturumu kapatıp açarak sorunu düzeltmiş olacaksınız.</div>
Yasin MÜFTÜLERhttp://www.blogger.com/profile/00911197041407877137noreply@blogger.com0