Veritabanınızda arama yapın

Yayınlandı: Ocak 2, 2012 / Software
Etiketler:, ,


Veritabanınızdaki bir sözcüğün hangi procedure,view ve fonksiyonlarda geçtiğini aşağıdaki sorgu ile arama yaparak bulabilirsiniz..

Hangi veritabanında arama yapacaksanız o veritabanın üstüne gelip sağ tıklıyoruz ve

SELECT DISTINCT SYSO.name
FROM sysobjects SYSO
INNER JOIN syscomments SYSC ON SYSC.Id = SYSO.Id
WHERE
category = 0 AND SYSC.text like ‘%BUNU_ARIYORUM%’
ORDER BY SYSO.name

Sonrasında bu sorguyu çalıştırdığınızda

size o sözcüğün geçtiği procedure,view ve fonksiyonları sıralayacaktır. 😉

Gürcan AYNISOY

 

SQL Server Database Backup Hata

Yayınlandı: Eylül 23, 2011 / Software
Etiketler:, , ,

Karşılaştığım ilginç bir hatayı paylaşmak istedim.

“failed with the following error: “A nonrecoverable I/O error occurred on file “C:\Data\A.bak”…

Bu hatayı forumlarda arattığınızda karşınıza çıkanlar bir hayli korkutucu olacaktır. Çünkü Disk probleminden kaynaklanıyor şeklinde bir sürü yazı göreceksiniz.

Merak etmeyin öyle bir durum yok.Sadece veritabanınızın büyüklüğünden kaynaklı olarak bu hatayı alıyorsunuz.

Backup aldığınız sayfanın sol tarafındaki Options’a tıklayıp en altta Compression seçeneğini göreceksiniz.Burdan Compress i seçtikten sonra tekrar backup almayı deneyin bakın nasıl alıyor o zaman 😉

Kolay gelsin…;)

SQL de Türkçe Karakter Sorunu

Yayınlandı: Ağustos 8, 2011 / Software
Etiketler:, , , , , ,

SQL de yazdığınız query sonucunda karakter setinden kaynaklanan,anlamsız harfler görebilirsiniz.İnternette
yapacağınız araştırma sonucunda çeşitli fonksiyonlar bulabilirsiniz fakat bazıları işinizi görmeyebilir.
Ben bunu aradan sızma yapmaması için şöyle kullandım;

CREATE FUNCTION [dbo].[fn_Turkcelestir](@A NVARCHAR(max))
RETURNS NVARCHAR(max)
AS
BEGIN
DECLARE @TMP NVARCHAR(max)
–SET @TMP = REPLACE(@A , N’Ð’,N’Ð’)
SET @TMP = REPLACE(@A COLLATE LATIN1_GENERAL_BIN,CHAR(208),N’Ð’)
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN,CHAR(240),N’ð’)
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN,CHAR(222),N’Þ’)
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN,CHAR(253),N’ý’)
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN,CHAR(221),N’Ý’)
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN,CHAR(254),N’þ’)
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN,N’Ý’, N’İ’)
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN,N’ð’, N’ğ’)
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN,N’Ð’, N’Ğ’)
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN,N’ý’, N’ı’)
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN,N’Ý’, N’İ’)
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN,N’þ’, N’ş’)
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN,N’Þ’, N’Ş’)
RETURN @TMP
END

Şimdi bu fonksiyonu nasıl kullanıcaz o kısma gelelim…
Hemen bulunduğunuz veritabanı üstünde New Query ile yeni bir sayfa açalım..
Bir @X değişkeni tanımlayalım yada bir Tablodaki( örneğin adres sahası) bir sahayı alalım
Ve şu şekilde kullanalım;

Declare @X nvarchar(50)
set @X=’BAÐLARBAÞI/ÝSTANBUL’
Select [dbo].[fn_Turkcelestir](@X)

SONUÇ : BAĞLARBAŞI/İSTANBUL

veya

Select [dbo].[fn_Turkcelestir](adres) From Musteriler

Hepsi Bu kadar….Sağlıcakla kalın…;)

SQL Sorguları sistemi ne kadar yoruyor?

Yayınlandı: Temmuz 22, 2011 / Software
Etiketler:, , , ,

SQL SERVER içerisinde kullandığımız sorgularımız,procedurlerimiz sistem kaynaklarını ne kadar kullanıyor acaba? Yanlış yazılmış bir döngü,bir join vs sistem kaynaklarını aşırı kulllarak sistemde yavaşlamaya sebep olduğu bir gerçek…Gelin bir sorgu ile bu işlemlerin CPU’yu ne kadar kullanıyor görelim…

Select

           q.[text], 

           SUBSTRING(q.text, (qs.statement_start_offset/2)+1,  

              ((CASE qs.statement_end_offset   

                WHEN -1 THEN DATALENGTH(q.text) 

               ELSE qs.statement_end_offset    

               END - qs.statement_start_offset)/2) + 1) AS statement_text,         

           qs.last_execution_time, 

           qs.execution_count, 

           qs.total_worker_time/1000000 as total_cpu_time_sn, 

           qs.total_worker_time/qs.execution_count/1000 as avg_cpu_time_ms, 

           qp.query_plan,     

           DB_NAME(q.dbid) as database_name, 

           q.objectid, 

           q.number, 

           q.encrypted 

      from 

          (select top 50  

                qs.last_execution_time, 

                qs.execution_count,      

                qs.plan_handle,  

                qs.total_worker_time, 

                qs.statement_start_offset, 

                qs.statement_end_offset 

          from sys.dm_exec_query_stats qs 

          order by qs.total_worker_time desc) qs 

cross apply sys.dm_exec_sql_text(plan_handle) q 

      cross apply sys.dm_exec_query_plan(plan_handle) qp 

      order by qs.total_worker_time desc

Yeni bir query açıp bu sorguyu kopyalayın,yapıştırın,çalıştırın ve izleyin…. ;)Kolay gelsin..


Windows XP kullanıyorsunuz ve bilgisayarınız kasım kasım kasılıyor.Task Manager’a bir bakıyorsunuz spoolsv.exe nin CPU kısmındaki çalışma boyutu %99’a ulaşmış ve pc nizde hiçbir işlem yapamaz duruma gelmişseniz sırasıyla şunları yapalım.

1-Task Manager’dan spoolsv.exe yi durduralım.
2- Control Panel->Administrative Tools->Services->Print Spooler ‘a gelip bu servisi Stop yapalım.
3-Sonra C:\WINDOWS\system32\spool\PRINTERS dizinine gidelim ve orada bulunan dosyaları silelim.
4-Ve tekrar servislere geri dönüp durdurduğumuz servisi tekrar başlatabilirsiniz.

Büyük ihtimalle artık sorununuz çözülmüş olacaktır… 😉

Herkese merhabalar,

SQL Server 2005 Üzerinden Csv uzantılı dosyayı SQL script(Stored procedure) ile nasıl export ediyoruz bakalım hemen .. 😉

declare @sql varchar(4000)
Declare @FilePath nvarchar(100)
Declare @FileName nvarchar(100)
Declare @FileValue nvarchar(200)
Set @FileName='dosyaexport.csv' -----Dosya Adı
Select  @FilePath='C:\'         -----Dosya Yolu
Set @FileValue=@FilePath+@FileName --Üstteki iki değişkeni tek değişkene assign ettim bu sizin tercihiniz
set @sql='BCP " Select * From Databaseismi..Tabloadı " Queryout '+@FileValue+' -c -t; -S Sunucuismi -T'
exec master..xp_cmdshell @sql

Burada gördüğünüz üzere SQL Command üzerinden Belirli bir tabloyu SQL query yazarak oluşturabiliyorsunuz.

Gördüğünüz harfleri merak edenler için açıklamalarını net üzerinden bulduğum şekliyle paylaşayım;

Command line:

Switches:

  1. -c : export as ASCII with a tab delimiter and carriage return/line feed line terminator
  2. -t, : override the tab delimiter with a comma
  3. -S : server to connect to

SQL SERVER 2008 üzerinde tablonun içeriğinde değişiklik yapmaya çalıştığınızda

şöyle bir uyarı ile karşılaşırsanız;

Warning Message:

Saving changes is not permitted. The changes you have made require the following tables to be dropped and re-created. You have either made changes to a table that can’t be re-created or enabled the option Prevent saving changes that require the table to be re-created.

Yani siz tablo üzerinde bir değişiklik yapmışsınızdır(yeni bilgi ekleme veya silme) kaydettiğinizde bu hatayla karşılaşırsınız…

Çözümüde bir o kadar basittir;

Management Studio da, Tools -> Options a seçtikten sonra açılan pencereden Designer a tıkladığınızda

Prevent saving changes that require table re-creation seçeneğinin şeçili olduğunu göreceksiniz
Bu seçeneği kaldırdığınızda gerekli değişiklikleri yapabilirsiniz…

Kolay Gelsin,Mutlu Kalın…HOŞÇAKALIN 🙂

Timeout expired Hatası

Yayınlandı: Temmuz 8, 2010 / Software

Merhabalar,

Bugün başka bir hata ile karşı karşıyayız :).Hatamız şöyle
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Eğer .Net üzerinden bir stored procedure çağırıyor iseniz ve çok fazla kayıt üzerinden işlem yapıyorsanız böyle bir hata
alabilirsiniz.

Elimizde bu sorunu çözmek için 2 farklı yol var
1.Yol:
Connection string kısmına şunları eklemelisiniz.

connect timeout=30000;pooling=’true’;Max Pool Size=200″

Burada 30000=5 dk ya karşılık geliyor buda sizin procedure ın çalışma süresine göre değişen bir değer olmalıdır.

2.Yol ise:

Dim myCommand As New SqlCommand(sql, myConnection, myTrans)

myCommand.CommandType = CommandType.StoredProcedure

myCommand.CommandTimeout = 0

Kodunuzda içerisinde bu değerleri vermelisiniz.CommandTimeout =0 demek limit olayını ortadan kaldırdınız demektir 😉

Sağlıcakla kalın…. 😉

Umarım Bu size yardımcı olur 🙂

.NET üzerinden Excel Import

Yayınlandı: Temmuz 7, 2010 / Software

Daha önce SQL Server üzerinden Excel Aktarımını paylaşmıştım.Fakat Microsoft un azizliğine gelipte
bu işlemi SQL Server 64 BIT sürümlerinde yapılamadığını çünkü Jet OLEDB provider ı desteklemediğini
görünce ufak bir .NET programcığıyla bu işlemi nasıl yapılabileceğini paylaşayım istedim.Belli olmaz bigün lazım olur belki 😉

Hemen V.Studio programını açıp Yeni Proje Windows Forms açıyoruz ve Dilide VB.NET seçelim(tercihen C# la da yapabilirsiniz)
Formunuzun üzerine bir tane Combobox,bir adet te buton ekliyoruz..
Sonrasında Butonumuzu çift tıkladıktan sonra Butonumuzun Click event ine şunları yazıyoruz

Bu arada excel içerisindeki verileri atmak için SQL tarafında Exceldekiyle aynı başlıklara sahip tablomuzu açalım…
3 farklı excelimizi var ve Combobox ın içerisine şunları koyuyorum

Computer,
Software,
Hardware

Bunlar SQL e atacağımız Excel dosyalarının isimleri ve SQL de üç ayrıda tablo oluşturuyorum

TBLComputer,TBLSoftware,TBLHardware

Ve Button1_Click eventinin altına şu kodları yazıyorum…

Dim ds As New DataSet
Dim filename As String

If Me.ComboBox1.Text = “Computer” Then
filename = “C:\Bilgisayar.xls”
ElseIf Me.ComboBox1.Text = “Software” Then
filename = “C:\Software.xls”
Else
filename = “C:\Hardware.xls”
End If

Dim MyConnection As System.Data.OleDb.OleDbConnection
MyConnection = Nothing
Try
Dim dsex As New DataSet

Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
MyConnection = New System.Data.OleDb.OleDbConnection(“provider=Microsoft.Jet.OLEDB.4.0; data source='” & filename & ” ‘; ” & “Extended Properties=Excel 8.0;”)
MyCommand = New System.Data.OleDb.OleDbDataAdapter(“Select * from [Sheet1$]”, MyConnection)
MyCommand.Fill(dsex)
MyConnection.Close()

Dim cnn As New System.Data.SqlClient.SqlConnection
cnn.ConnectionString = “Data Source=FSM01;Initial Catalog=Gurcan;Integrated Security=SSPI;User ID=sa;Password=****;”

For Each rw As DataRow In dsex.Tables(0).Rows
Dim com As New System.Data.SqlClient.SqlCommand
Dim sql As String
If Me.ComboBox1.Text = “Computer” Then
sql = “INSERT INTO TBLComputer(Marka,Islemci,Anakart,Harddisk) values(‘” & rw(0) & “‘,'” & rw(1) & “‘,'” & rw(2) & “‘,'” & rw(3) & “‘,'” & rw(4) & “‘)”
ElseIf Me.ComboBox1.Text = “Software” Then
sql = “INSERT INTO TBLSoftware(Urun,ISBN,Tur,Fiyat,Lisans_Tur) values(‘” & rw(0) & “‘,'” & rw(1) & “‘,'” & rw(2) & “‘,'” & rw(3) & “‘,'” & rw(4) & “‘,'” & rw(5) & “‘)”
Else
sql = “INSERT INTO TBLHardware(Urun,ISBN,Tur,Fiyat,Garanti,Marka) values(‘” & rw(0) & “‘,'” & rw(1) & “‘,'” & rw(2) & “‘,'” & rw(3) & “‘,'” & rw(4) & “‘,'” & rw(5) & “‘,'” & rw(6) & “‘)”
End If
com.CommandText = sql
com.CommandType = CommandType.Text
com.Connection = cnn
Dim adap As New System.Data.SqlClient.SqlDataAdapter(com)
Dim result As New DataSet
adap.Fill(result)
Next

MsgBox(“Aktarım Başarılı !!”)
Catch ex As Exception
MsgBox(“Aktarımda Hata Oluştu” & vbCrLf & ex.Message)
If Not MyConnection Is Nothing Then
MyConnection.Close()
End If
Throw ex
End Try

Eğer bu anlattığım yol üzerinden yapar ve Connectionstring bilgilerini doğru girdiğiniz taktirde programcığınızı böylece oluşturmuş olacaksınız….. 😉

Kolay gelsin…