Alper Konuralp

Kartınızı Oluşturun
Google+
Follow @alperkonuralp

Posts Tagged ‘SQL Server 2008’

Server ‘SERVERNAME’ is not configured for RPC

Eğer linked server bağlantısı üzerinden karşı tarafta bir procedure çalıştırmaya çalışıyorsanız, butür bir hata almanız mümkündür. Korkmayın Open-mouthed smile 

 

Durum şu : Linked Server bağlantısında bir ayar değişikliği yaptığınızda problem çözülecektir.

7e8e1352-10c5-4992-aa56-620b15b5c90d1

Bu ekrandaki RPC karşı tarafta procedure çalıştırmayı, RPC Out’da bu procedure’den veri geri almayı sağlar. Eğer ikisine de ihtiyacınız varsa ikisinide aktif edebilirsiniz.

Yada bu işi kodla yapmak için :

exec sp_serveroption @server=’LSNAME’, @optname=’rpc’, @optvalue=’TRUE’
exec sp_serveroption @server=’LSNAME’, @optname=’rpc out’, @optvalue=’TRUE’

kodlarını kullanabilirsiniz. Tabi bu kodlardaki LSNAME yerine kendi linked server’ınızın adresini girmelisiniz.

Sql Server’da tabloların kapladıkları alanların öğrenilmesi

Hazırladığım veri tabanlarından birinin aşırı büyümesi sonucu içinde bir araştırma yapmaya karar verdim. ancak tabloları tek tek dolaşıp boyutlarını belirlemeye çalışmak benim için hoş olmayan bir durum. Bu tür işlerde ben her zaman işi yapan kodu yazmayı yeğlerim Açık ağızlı gülümseme . Bu sebeple bir araştırma yaptım ve tatmin edici bir sonuca ulaştım.

1. Tablo boyutunu öğrenmek için sp_spaceused ismindeki bir prosedürden yararlanabiliyormuşuz. bu arkadaş bize tablonun boyutu hakkında bilgiler veriyor.

Capture1

Örnekte aldığı tek parametre tablonun ismi. Bu komutun detayları için buraya bakabilirsiniz.

Şimdi buraya kadar tek tablodan bilgiyi okudukta, sonrası ne olacak? tek tek bütün tablolar için bu yöntemimi kullanacağız. Bu noktada 2 yöntem kullanabiliriz. İlki Sql’e sql cümlesi yazdırıp bunu çalıştırabiliriz.( En sevdiğim yöntemlerdedir). İkincisi ise sql server tarafında dökümante edilmemiş bir prosedür olan sp_MSforeachtable ‘ı kullanabiliriz. 

1. Yöntem :

Capture2

 

2. Yöntem :

image

 

2. Yöntemin farklı bir uyarlaması ise :

image

 

şeklinde olabilir. Hatta toplam boyutu bulabilmekte mümkün :

image

Sql Server 2008 HierarchyId Tipi

SQL Server 2008 ile beraber hayatımıza giren yeni sql tipi hierarchyid esasında eskiden beri bizim uğraşmamız gereken bir probleme çözüm oluyor. Bildiğiniz gibi hiyerarşik yapıları sql server içinde tutarken nasıl bir yol izleneceği biraz karmaşık bir yol olmuştur. o sebeple bu yeni tip bizim hayatımızı kolaylaştırıyor.

İleriki zamanlarda konu ile ilgili daha geniş bir yazı yazmayı ümit ediyorum, ancak o zamana kadar bilgi alabileceğiniz birkaç adresi sizinle paylaşacağım :

  1. hierarchyid (Transact-SQL) : http://technet.microsoft.com/en-us/library/bb677290.aspx
  2. Using hierarchyid Data Types (Database Engine) : http://technet.microsoft.com/en-us/library/bb677173.aspx
  3. Dmitri Nesteruk tarafından yazılmış güzel bir yazı : http://nesteruk.org/blog/post/Working-with-SQL-Server-hierarchical-data-and-Silverlight.aspx
  4. Working With SQL Server HierarchyId Data Type In .NET Application : http://www.thereforesystems.com/working-with-sql-server-hierarchyid-data-type-in-net-application/
  5. Vasco Oliveira tarafından yazılmış makale : http://blog.vascooliveira.com/sql-server-2008-hierarchyid-data-type-tutorial/
  6. Loading a TreeView using HierarchyID : http://www.codeproject.com/KB/cs/TreeViewFromHierarchyID.aspx
  7. The HierarchyID Datatype in SQL Server 2008 : http://www.sqlservercentral.com/articles/SQL+Server+2008/62204/
  8. SQL Server 2008 – HierarchyID – Part I : http://blogs.msdn.com/b/manisblog/archive/2007/08/17/sql-server-2008-hierarchyid.aspx
  9. SQL Server 2008 – HierarchyID – Part II : http://blogs.msdn.com/b/manisblog/archive/2007/08/28/sql-server-2008-hierarchyid-part-ii.aspx
  10. HierarchyID in Entity Framework not working : http://stackoverflow.com/questions/4316069/hierarchyid-in-entity-framework-not-working

Not: Entity Framework ve Linq To Sql ile kullanmaya çalıştım, ama problemli olduğunu görüp vazgeçtim. tam destek çıkmadan kullanmamanızı öneririm.

SQL Server 2008′de Suspect moduna düşmüş veri tabanları

Merhaba, Sql Server 2008′de suspect moduna düşmüş bir veri tabanı ile karşılaştığımızda yapabileceğimiz bir şey var. Bugün başıma gelen bir olaydan dolayı bu durumu araştırdığımda bu konuda yazılmış güzel bir makaleye rastladım.
http://www.sqlskills.com/blogs/paul/post/CHECKDB-From-Every-Angle-EMERGENCY-mode-repair-the-very-very-last-resort.aspx adresinden bu makaleyi okuyabilirsiniz.

Benim karşılaştığım problemde sharepoint server 2010 evimdeki test sisteminde çalışmayıp veritabanına bağlanamama hatası veriyordu. İlk yaptığım sql server instance larını kontrol etmek oldu. hepsinin çalışır durumda olduğunu gördüm. sonrada sql server management studio vasıtası ile default instance ve SHAREPOINT ismindeki instance’lara bağlandım. SHAREPOINT’te bir terslik görünüyordu. [SharePoint_Config_23343a2b-8f43-45ac-8115-cccaf572c1c5] ismindeki veri tabanı suspect modda görünüyordu. bu da tabii ki problem anlamına geliyordu.

Hemen event viewer a baktım. Windows Logs altındaki application da aradığım hatayı buldum.
The log scan number (271:241:1) passed to log scan in database ‘SharePoint_Config_23343a2b-8f43-45ac-8115-cccaf572c1c5′ is not valid. This error may indicate data corruption or that the log file (.ldf) does not match the data file (.mdf). If this error occurred during replication, re-create the publication. Otherwise, restore from backup if the problem results in a failure during startup.

ve

An error occurred during recovery, preventing the database ‘SharePoint_Config_23343a2b-8f43-45ac-8115-cccaf572c1c5′ (database ID 8) from restarting. Diagnose the recovery errors and fix them, or restore from a known good backup. If errors are not corrected or expected, contact Technical Support.

demek oluyorki veri tabanımda istenmeyen bir durum oluşmuş ve bunun sonucunda da transaction log dosyası zarar görmüş. Hal böyle oluncada sql server bu hali ile veri tabanını tekrardan attach edemiyor. Zararın oluşma nedeni olarak beklenmedik kapanmalar gösteriliyor.

o halde ne yapacağız :

  1. Önce ne olur ne olmaz sistemi tekrardan bir zorlayalım. Belki bizi zorlamadan çalışır :
    ALTER DATABASE [SharePoint_Config_23343a2b-8f43-45ac-8115-cccaf572c1c5] SET ONLINE;

    ama işe yaramadı. Sql log dosyasında hata olduğunu tekrardan söyledi.

  2. O zaman işe başlayabiliriz :
    ALTER DATABASE [SharePoint_Config_23343a2b-8f43-45ac-8115-cccaf572c1c5] SET EMERGENCY;

    ile veri tabanımıza kurtarma moduna alırız. Tabi bu tekbaşına yeterli olmayacak, veri tabanını birde single user moduna almamız gerekiyor.

    ALTER DATABASE [SharePoint_Config_23343a2b-8f43-45ac-8115-cccaf572c1c5] SET SINGLE_USER;

    eğer bunu yapmaz isek o zaman az sonra yazacağımız kodda bizi single user moda geçmemiz için uyaran bir sonuç alırız.

  3. Veri tabanımız kurtarılmayı bekliyor. O zaman daha fazla bekletmeden işimizi yapalım :
    DBCC CHECKDB ([SharePoint_Config_23343a2b-8f43-45ac-8115-cccaf572c1c5], REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS;

    ile transaction log’daki problemler onarıldı ve veri tabanımız tekrardan online moda alındı.

  4. Az önce single user moduna aldığımız veri tabanını tekrardan multi user moduna alıyoruz ki, tam olarak çalışabilir hale gelsin :
    ALTER DATABASE [SharePoint_Config_23343a2b-8f43-45ac-8115-cccaf572c1c5] SET MULTI_USER;

Böylece bir veri tabanı kurtarma operasyonunun daha sonuna geldik. Siz sağ, ben selamet… Geçmiş olsun.

T-Sql String’i parçalara ayırma

Merhaba, Birçok noktada işimizi kolaylaştırabilecek bir T-Sql fonksiyonunu anlatmak istiyorum. Önce soruna bakalım :
Elimizde bulunan :

Excel 2000, Excel XP, Excel 2003, Excel 2007, Excel 2010

şeklindeki bir yazıyı bir tabloya dönüştürmek istiyoruz diyelim. Bu string’i (,) karakterinden parçalamamız (split) gerekir.

İşte çözüm:

DECLARE @ara AS NVARCHAR(MAX)

SET @ara = N'Excel 2000, Excel XP, Excel 2003, Excel 2007, Excel 2010';

SELECT *
FROM dbo.Split ( @ara , ',');

İyide Bu dbo.Split ne diyebilirsiniz. Güzel soru, cevabıda şu :

-- SQL Server 2005 ve 2008 de çalışabilecek, String'i parçalara ayırmayı sağlayan bir araçtır.
CREATE FUNCTION dbo.Split
(
    @Text NVARCHAR(MAX) , -- Parçalanacak string'i içerecek
    @Seperator NVARCHAR(20)) -- Ayraç
RETURNS @sonuc TABLE ( Item NVARCHAR(MAX) ) -- sonuç olarak bir tablo sonucu dönecek
AS
BEGIN -- işte başlıyoruz.
    IF @Text IS NOT NULL AND LEN(@Text) > 0 -- önce gelen veri var mı kontrolü
    BEGIN
        IF CHARINDEX(@Seperator, @Text) = 0 -- Eğer ayraçtan hiç string'de yok ise o zaman yazıyı tek bir parça olarak göndeririz.
        BEGIN
            INSERT INTO @sonuc
            VALUES ( @Text )
        END
        ELSE
        BEGIN
            WITH ara AS ( -- gelelim işin en zevkli tarafına recursive sorgulama ile sisteme parçalara ayıralım.
                SELECT  -- önce ilk satır
                    LTRIM(RTRIM(SUBSTRING(@Text, 1, CASE CHARINDEX(@Seperator, @Text) WHEN 0 THEN LEN(@Text) ELSE CHARINDEX(@Seperator, @Text) - 1 END))) AS a, -- ilk ayraçtan önceki kısım alınır.
                    LTRIM(RTRIM(SUBSTRING(@Text, CASE CHARINDEX(@Seperator, @Text) WHEN 0 THEN LEN(@Text) ELSE CHARINDEX(@Seperator, @Text) + LEN(@Seperator) END, LEN(@Text)))) AS b -- ilk ayraçtan sonraki kısım alınır.

                UNION ALL -- recursive kısım başlıyor.
                SELECT -- Son eklenen satırdan yeni bir satır oluşturuluyor
                    LTRIM(RTRIM(SUBSTRING(b, 1, CASE CHARINDEX(@Seperator, b) WHEN 0 THEN LEN(b) ELSE CHARINDEX(@Seperator, b) - 1 END))), -- ayraçtan önceki kısım alınır
                    LTRIM(RTRIM(SUBSTRING(b, CASE CHARINDEX(@Seperator, b) WHEN 0 THEN LEN(b) + 1 ELSE CHARINDEX(@Seperator, b) + 1 END, LEN(b)))) -- ayraçtan sonraki kısım alınır
                FROM ara -- Recursive olayını yapan kısım. Dikkat ederseniz CTE kendini çağırıyor.
                WHERE LEN(b) > 0 -- işte döngüyü dizginleyen arkadaş. Eğer b boşsa iş bitmiştir. Bu olmaz ise sonsuz döngüye girer
            )
            INSERT INTO @sonuc -- Sonuçlar iade alanına yazılıyor.
            SELECT a -- sadece ilk kolon yeterli
            FROM ara -- CTE
        END
    END

    RETURN -- işte bu kadar
END

Gördüğünüz bu fonksiyon işini çok iyi yapıyor. Bazı kontrollere belki gerek olmayabilir, veya daha fazla kontrole gerek olabilir ama bu bile bir çok görevi yerine getirebilir.

Kolay Gele

İzmir Yazılım Grubu
Google Groups
Subscribe to İzmir Yazılım Grubu
Email:
Visit this group
Mayıs 2012
Pts Sal Çar Per Cum Cts Paz
« Şub    
 123456
78910111213
14151617181920
21222324252627
28293031  
Yeni Downloadlar
StatPress
Visits today: 99
Sahip oldugum diger adresler :
3dmaxtraining.info
3dmaxtrainings.com
3dmaxtrainings.info
adobelearning.info
adobelearnings.info
adobetrainings.com
adobetrainings.info
autocadbootcamp.info
autocadexams.info
autodesklearning.info
autodesklearnings.com
autodesklearnings.info
ciscotrainings.info
egepro.com
elonunbahcesi.com
elonunbahcesi.info
flashbootcamp.info
flashexams.com
flashexams.info
konuralp.biz
konuralp.org
mayatutorial.info
mayatutorials.info
microsoftexams.info
microsofttrainings.info
proege.com
sharepointlearning.info
sharepointlearnings.com
sharepointlearnings.info
sharepointtutorial.info
silverlightbootcamp.info
silverlightlearning.info
silverlightlearnings.info
silverlighttraining.info
silverlighttrainings.com
silverlighttrainings.info
silverlighttutorial.info
silverlighttutorials.info
sirasende.info
urunbul.info
yagmurca.com
yagmurca.info