Rakkoc.Com Recep Akkoç / Rakkocun Yazıtları

29Kas/170

Ms SQL Tablo taşıma

Merhabalar, O kadar uzun zamandır bir şey yazmıyorum ki normal insanlarin gelmediği bu sayfalara artık bot'lar da uğramaz olmuştur.

O zaman artık kendi not defterim gibi kullanmaya tam olarak başlayabilirim 🙂

Sql'de bir database'deki tabloyu başka bir database'e nasıl taşırız ?

export import vs yöntemleri ile yapilamayacak kadar büyük bir datam var (290 gb) export etmek için 2 gün verdim. import ederken 10 dk de hata verdi.

Çözüm için google'dan biraz arama yarama yaptim (mssql move table to another database) ve karşıma çok güzel bir kod çıktı.

select * into DB_2.T1 from DB_1.[dbo].[T1]

yanı birde nolock koyarak işi hoşuma giden şekle sokalım (eğer okuyorlarsa nolock kullanmayan mesai arkadaşlarıma buradan selam olsun.)

Select * into DB_NEW.[dbo].TabloX from DB_Old.[dbo].[TabloX] (NoLock)

Bu sayede eski tablo yu async olarak yeni tabloya doldurup kullanabilirsiniz.

ilk esin : https://stackoverflow.com/questions/12558783/move-a-table-from-one-database-to-another-database-sql-server

21Ara/152

SQL Transaction Log Nasil Temizlenir ?

Merhaba Blog, 2-3 gündür bu yazıyı düzenliyip yayınlamayı düşünüyordum da elim ermiyordu.

  • Right click on the database name.
  • Select Tasks -> Shrink -> Database
  • Then click OK!

Bu yöntem iyi hoş ama sonuç her zaman işe yaramıyor. SQL2008 kullanan bir müşterimin database'i 46 gb civarında.

el insaf 36 gb log mu olur. Diskin IO'sunu kontrol ettiğimde ise halay çekmekte.

çözüm aslında basit ama ekranlarda bu konuda bir uyarı yok. Database Recovery Mode default olarak FULL gelmekte ve bu modda iken sadece unused alanı shrink edip %1-%2 etkilenmekte.

Etkin çözüm olarak 'AdventureWorks' veritabanımızda bir script çalıştıralım.

USE AdventureWorks;
ALTER DATABASE AdventureWorks
SET RECOVERY Simple;
GO
CHECKPOINT;
GO
CHECKPOINT; -- run twice to ensure file wrap-around
GO
DBCC SHRINKFILE(AdventureWorks_log, 200);
GO    
ALTER DATABASE AdventureWorks
SET RECOVERY FULL;
CHECKPOINT;
GO

Ve sonuç :

bu ekranı görünce insanın içini huzur kaplıyor. ama CDC kullanıyorsanız logları temizlerken dikkat ediniz.

10 GB data da fazla gibi duruyor, birde ona bakalım hangi tablo ne kadar yer kaplıyor ?

21Ara/150

SQL Veritabanı Tablo Boyutları

Merhabalar, veritabanı boyutları proje ile beraber büyüyorda büyüyor gelişiyor da gelişiyor fakat gerçekten bu kadar büyümesi gerekiyor mu ? Ne ne kadar yer tutuyor? Öğrenmenin yolu aşağıdaki scripti çalıştırmak :

exec sp_executesql @stmt=N'begin try 
SELECT
	(row_number() over(order by a3.name, a2.name)) as l1,
	a3.name AS [schemaname],
	a2.name AS [tablename],
	a1.rows as row_count,
	(a1.reserved + ISNULL(a4.reserved,0))* 8 AS reserved, 
	a1.data * 8 AS data,
	(CASE WHEN (a1.used + ISNULL(a4.used,0)) > a1.data THEN (a1.used + ISNULL(a4.used,0)) - a1.data ELSE 0 END) * 8 AS index_size,
	(CASE WHEN (a1.reserved + ISNULL(a4.reserved,0)) > a1.used THEN (a1.reserved + ISNULL(a4.reserved,0)) - a1.used ELSE 0 END) * 8 AS unused
FROM
	(SELECT 
		ps.object_id,
		SUM (
			CASE
				WHEN (ps.index_id < 2) THEN row_count
				ELSE 0
			END
			) AS [rows],
		SUM (ps.reserved_page_count) AS reserved,
		SUM (
			CASE
				WHEN (ps.index_id < 2) THEN (ps.in_row_data_page_count + ps.lob_used_page_count + ps.row_overflow_used_page_count)
				ELSE (ps.lob_used_page_count + ps.row_overflow_used_page_count)
			END
			) AS data,
		SUM (ps.used_page_count) AS used
	FROM sys.dm_db_partition_stats ps
	GROUP BY ps.object_id) AS a1
LEFT OUTER JOIN 
	(SELECT 
		it.parent_id,
		SUM(ps.reserved_page_count) AS reserved,
		SUM(ps.used_page_count) AS used
	 FROM sys.dm_db_partition_stats ps
	 INNER JOIN sys.internal_tables it ON (it.object_id = ps.object_id)
	 WHERE it.internal_type IN (202,204)
	 GROUP BY it.parent_id) AS a4 ON (a4.parent_id = a1.object_id)
INNER JOIN sys.all_objects a2  ON ( a1.object_id = a2.object_id ) 
INNER JOIN sys.schemas a3 ON (a2.schema_id = a3.schema_id)
WHERE a2.type <> N''S'' and a2.type <> N''IT''
ORDER BY a3.name, a2.name
end try 
begin catch 
select 
	-100 as l1
,	1 as schemaname 
,       ERROR_NUMBER() as tablename
,       ERROR_SEVERITY() as row_count
,       ERROR_STATE() as reserved
,       ERROR_MESSAGE() as data
,       1 as index_size
, 		1 as unused 
end catch',@params=N''
go

Peki kod ile uğraşmak istemezsen ?

If you are using SQL Server Management Studio (SSMS), instead of running a query (which in my case returned duplicate rows) you can run a standard report.

  1. Right click on the database
  2. Navigate to Reports > Standard Reports > Disk Usage By Table
5Oca/140

(EF) Entity Framework Nedir?

Entity Framework (EF)’ün tanımına geçmeden bilmemiz gereken bir iki tanim vardir. Bunlar Object Relational Mapping (ORM) ve Object Oriented Programming (OOP). Entity Framework, .Net platformunda ORM (Object Relational Mapping) araçlarından biridir. ORM (Object Relational Mapping) ise veritabanı ile nesneye yönelik programlama (OOP) arasındaki ilişkiyi kuran teknolojidir. Yani Entity Framework, nesne tabanlı programlamada veritabanındaki tablolara uygun nesneler oluşturma tekniğidir.

Öncelikle ORM nedir sorusuna cevap bulalım ; Veritabanımızda yaratmış olduğumuz her bir nesneye karşılık kod tarafında bir nesne oluşturan programlardır diyebiliriz. Bu programlar code generation veya shema generation tekniği kullanarak bizim yazmamız gereken kodu otomatik üretiyor veya tam tersinde bizim yazdigimiz kod sablonuna uygun database semasini olusturuyor.

Günümüzde kullanılan birçok ORM aracı bulunmaktadır. Örneğin; Java tabanlı olarak Hibernate, Flex’de Athena Framework, Delphi’de ECO gibi. Entity Framework ise Microsoft tarafından geliştirilen .Net tabanlı bir ORM aracıdır. Entity Framework ile kolayca CRUD işlemleri yapılabilir. Peki, neden ORM? Çünkü;

- Veritabanı işlemleri ile ilgili kod yazımı en aza ineceğinden minimum zamanda maksimum iş çıkartmayı sağlar.

- OOP düzeninde kod yazmayı sağlar.

- Veritabanı olarak esnek yapıya sahiptir. Örneğin yazdığınız proje MSSQL ile çalışmakta ve birden Oracle’a geçmeniz istendi. Bunu yapabilmek için birçok ayar gerekirken Entity Framework ile direkt geçiş yapabilirsiniz.

- Veritabanı bağımlılığı yoktur. Yani EF’yi oluşturmadan önce veritabanı tablo ve kolonlarını oluşturmalısınız gibi bir kural yoktur. Siz EF ile modellemeyi yaparken olmayan tabloları ve kolonları sizin yerinize açacaktır.

-Maintenance daha kolaydır.

Her ne kadar EF kodlama olarak zaman kazandırsa da performans olarak ADO.Net kadar hızlı değildir. Bunu ayriyetten belirtmek istedim cunku yazilan her proje Entity ile olmak zorunda degildir ve/veya projenin tamaminda entity kullanmak zorunda olmak sizin icin dezavantaj olabilir.

Entity Framework .Net 3.5 ile beraber Vs 2008 sp1 ile gelmistir. tarih 11 Agustor 2008

Database tarafinda relationshiplarimiz (iliskiler) orm tarafinda association olarak adlandirilacaktir.

Entity Framework ile 4 farklı yöntem ile proje geliştirilebilir. Bu yöntemler;

- Model First (New Database)

-  Database First (Existing Database)

- Code First (New Database)

- Code First (Existing Database)

Model First (Önce Model): Bu yöntemde Visual Studio üzerinde boş bir model dosyası (.edmx) eklenerek veri tabanı bu model üzerinde tasarlanir. Derleme adiminda verilen script dosyasi ile veri tabani oluşturulur.

Database First (Önce Veritabanı): Bu yöntemde hali hazırda var olan veritabanı projeye model dosyası ile bağlanır ve gerekli class’lar EF tarafından üretilir. Ilerde veritabanina yapilacak eklemelerde mevcut version Ef 6 da sorunlar yasamistim kod daki classlarin iliskilerini tam yapamadigi icin bu versionu kullanmaktan uzak durmaktayim (giris seviyesineki en kolay version da budur.

Code First (Önce Kod – Yeni Veritabanı): Bu yöntemde classlar ve mapping kodları yazılımcı tarafından oluşturulur. Daha sonra veri tabanı bu class’lardan türetilir.

Code First (Önce Kod – Var olan Veritabanı): Bu yöntemde de classlar ve mapping kodları yazılımcı tarafından oluşturulur. Veritabanı class’ların ve modellemenin durumuna göre tekrardan şekillenebilir.

ilerleyen yazilarimda ustunde duracagim daha cok Code First olan version olacaktir.

14Mar/122

SQL serverda database – veritabani olusturma

Merhaba sevgili okurlarım; SQL2008 database server uzerinde yeni bir Veri tabani olusturma, bunun icine tablolar olusturma ve bu tablolarin bir biri arasinda iliskilendirmeyi gosteren bu kisa videoyu sizler icin hazirladim. ufak ufak bunlari hazirliyip sizin icin blog'a yuklemeye devam edecegim insallah bir ihtiyaci gidere biliyorumdur.

Toplam 2 sayfa mevcuttur; 1. sayfayi okuyorsunuz...12