SQL Server Veri Tabanının MySql Üzerine Taşınması

SQL Server piyasa da en sık kullanılan veri tabanlarının başında gelmektedir. Ancak özellikle SQL Server‘ın ücretli olması sebebi ile zamanla kullanıcılar sistemlerini MYSQL gibi ücretsiz bir veri tabanı sistemine geçirmek isteyebiliyorlar. Bu noktada eski verilerin ne olacağı, yeni sisteme nasıl taşınacağı problemi ortaya çıkmaktadır.

Veri taşıma işlemi için ücretli alternatifler olmasının yanında MYSQL‘in kendi içerinde de dahili gelen veri taşıma aracı bulunmaktadır. Aşağıdaki YouTube videomuzda bu işlemin nasıl yapıldığını işlemeye çalışıyoruz.




SQL Server Sunucu Adının Değiştirilmesi

SQL Server yüklü sunucunun adını değiştirdikten sonra SQL Server çalışmasında sıkıntılar oluşmaya başlamaktadır. Bu sebeple SQL yüklü bilgisayarın adını değiştirdikten sonra aşağıdaki adımları izleyerek SQL Server adının da değiştirilmesi gerekmektedir. Öncelikle aşağıdaki kod ile mevcut adını bulunur.

SQL Server Adının Bulunması

Sunucu yeniden adlandırılırken

  • Mevcut sunucu adı bilgisi sp_dropserver prosedurü ile sistemden silinir.
  • Yeni sunucu adı da sp_addserver prosedurü ile sisteme eklenir.

exec sp_dropserver 'eski_sunucu_adi';
go;
exec sp_addserver 'yeni_sunucu_adi', 'local';
go;

Bu işlemden sonra SQL Server servisi yeniden başlatılır ve sunucu adı select @@SERVERNAME ile kontrol edilir.




Tabloya En Son Ne Zaman Erişim Yapıldığını Sorgulama

SQL Server performans çalışmalarında sorulan soruların nerede ise başında “hangi tabloya ne zaman erişim sağlandı?” sorusudur. Aşağıdaki sql sorgusu tabloya ne zaman erişim sağlandığını gösterir.

SELECT DB_NAME(ius.[database_id]) AS [Database],
OBJECT_NAME(ius.[object_id]) AS [TableName],
MAX(ius.[last_user_lookup]) AS [last_user_lookup],
MAX(ius.[last_user_scan]) AS [last_user_scan],
MAX(ius.[last_user_seek]) AS [last_user_seek],
MAX(ius.[last_user_update]) AS [last_user_update]
FROM sys.dm_db_index_usage_stats AS ius
WHERE ius.[database_id] = DB_ID()
--AND ius.[object_id] = OBJECT_ID('YourTableName')
GROUP BY ius.[database_id], ius.[object_id]

Sorgu sonucunda gelen kolonların açıklaması:

  • last_user_lookup: Index olmayan bir kolon üzerinde where şartı ile sorgu çalıştığı zaman
  • last_user_scan: Tabloyu sıralı okuduğu zaman, “select * from Table” sorgusu gibi
  • last_user_seek: Tablodan tek değer okunduğu zaman, “select * from Table where Id = 5” sorgusu gibi

Tabloya En Son Ne Zaman Erişilmiş?




SQL Server Hesaplanmış Kolon Oluşturma




SQL Server Kolon Değerine Şart Ekleme

Veritabanı özelliklerinden biri de veri tutarlılığını sağlamaktır. Veritabanı tutarlılığı içinde uygulanan özelliklerden biri de kolona atanabilecek değer üzerine şart koşmaktır. Bu işlem SQL Server da SQL CHECK Constraint özelliği ile yapılmaktadır.




C# İle SQL Server İşlemleri

Yazılım geliştirme çoğunlukla veri saklama ve işleme amacıyla yapılır. Verilerin saklanması içinde bir veritabannı sistemi kullanılır. Videomuzda en çok kullanılan veritabanı sistemlerinden olan SQL Server’a C# ile işlem yapmayı öğreneceğiz.




SQL Server Mail Gönderme




SQL Server Database Mail Konfigurasyonu




Nesnelerin SQL Server Üzerinde Kullandığı RAM Miktarını Bulma

SQL Server üzerinde yer alan veritabanı ve diğer nesnelerin ne kadar sistem kaynağı tükettiğini bulmak için aşağıdaki iki temel sorguyu kullanabiliriz.

İlk sorgumuzda veritablanı bazında kullanılan RAM miktarını sorgulayabiliriz.

SELECT
[DatabaseName] = CASE [database_id] WHEN 32767
THEN 'Resource DB'
ELSE DB_NAME([database_id]) END,
COUNT_BIG(*) [Pages in Buffer],
COUNT_BIG(*)/128 [Buffer Size in MB]
FROM sys.dm_os_buffer_descriptors
GROUP BY [database_id]
ORDER BY [Pages in Buffer] DESC;

Veritabanı Kullanılan RAM Sorgusu

Diğer sorgumuzda ise Index ve benzeri diğer nesnelerin kullandığı RAM miktarını sorgulayabiliriz.

SELECT obj.name [Object Name], o.type_desc [Object Type],
i.name [Index Name], i.type_desc [Index Type],
COUNT(*) AS [Cached Pages Count],
COUNT(*)/128 AS [Cached Pages In MB]
FROM sys.dm_os_buffer_descriptors AS bd
INNER JOIN
(
SELECT object_name(object_id) AS name, object_id
,index_id ,allocation_unit_id
FROM sys.allocation_units AS au
INNER JOIN sys.partitions AS p
ON au.container_id = p.hobt_id
AND (au.type = 1 OR au.type = 3)
UNION ALL
SELECT object_name(object_id) AS name, object_id
,index_id, allocation_unit_id
FROM sys.allocation_units AS au
INNER JOIN sys.partitions AS p
ON au.container_id = p.partition_id
AND au.type = 2
) AS obj
ON bd.allocation_unit_id = obj.allocation_unit_id
INNER JOIN sys.indexes i ON obj.[object_id] = i.[object_id]
INNER JOIN sys.objects o ON obj.[object_id] = o.[object_id]
WHERE database_id = DB_ID()
GROUP BY obj.name, i.type_desc, o.type_desc,i.name
ORDER BY [Cached Pages In MB] DESC;

Nesnelerin Kullandığı RAM Miktarı




Server Management Objects (SMO) İle SQL Server Kontrolü

Server Management Objects, .Net framework kullanarak SQL Server‘ı bütün yönleri ile yönetebileceğiniz yazılımlar geliştirmenizi sağlayan bir kütüphanedir. Örneğin aşağıdaki kod parçası ile sunucu üzerinde kolayca bir veritabanı oluşturuyoruz.

SMO kütüphanesini kullanabilmek için öncelikle Nuget üzerinden Microsoft.SqlServer.SqlManagementObjects projemize referans olarak eklememiz gerekmektedir.

SqlConnection sqlConnection = new SqlConnection("Data Source=localhost;Integrated Security=True");
ServerConnection serverConnection = new ServerConnection(sqlConnection);
Server server = new Server(serverConnection);

Database database = new Database(server, "Smo");
database.Create();

Bu kod ile sınıcı üzerinde Smo adında bir veritabanı oluşur.

Şimdi de başka bir işlem olan tablo oluşturma işlemi yapalım.

SqlConnection sqlConnection = new SqlConnection("Data Source=localhost;Integrated Security=True");
ServerConnection serverConnection = new ServerConnection(sqlConnection);
Server server = new Server(serverConnection);

Database workDatabase = server.Databases["Smo"];

Table table = new Table(workDatabase, "People");

Column idColumn = new Column(table, "Id", DataType.Int);
idColumn.Identity = true;
table.Columns.Add(idColumn);

Column nameColumn = new Column(table, "Name", DataType.NVarChar(50));
nameColumn.Nullable = false;
table.Columns.Add(nameColumn);

table.Create();

Bu kod ile server nesnesi üzerinde Smo veritabanını seçtikten sonra bu veritabanını parametre olarak verdiğimiz Tablo tipinde bir table nesnesi oluşturuyoruz. Daha sonra bu table nasnesini parametre olarak verdiğimiz ilgili kolonları oluşturup table.Create() ile veritabanını oluşturuyoruz.

Server Management Objects ile diğer işlemleri aşağıdaki videoda inceleyebilirsiniz

SMO İncelemesi

SMO video kodları:

https://github.com/saitorhan/ServerManagementObjects