Data Transfer and Loop Delete with Linked Server

Bu yazımızda büyük bir tablodan başka bir tabloya veri aktarıp, aktarılan verinin o tablodan silinmesi adımlarını bulabilirsiniz. Yazıda aktarım işlemi ayrı sunucularda yapılmıştır. Bu sebeple linked server kullanılmıştır. Özellikle devamlılığı olan bu tür işlemleri, aşağıdaki paylaştığımız scripti bir store procedure yapıp ve bu procedure bir job ile tetiklenirse otomatik olarak işlem sürekli olarak yapılacaktır. Bu işlemin bize en büyük faydası birden fazla transcation işleminin bir arada veri kaybı  olmadan yapılması sağlar. Ayrıca performanslı bir aktarım sağlar ve delete işlemini loop yaptığımız için canlı sistemde ldf’in büyümeden rahatça yapmasına imkan sunar.   use AdminDB   CREATE TABLE #TempTable (Id INT NOT NULL INDEX idx_Id Clustered) /*1-Verilerin tutarlı ve hızlı aktarımı yapılması için temp tablo oluşturuyoruz.*/     DECLARE @SixMonthDate DATETIME   SET @SixMonthDate = (SELECT DATEADD(MONTH,-6,GETDATE())) /**2-6 aydan eski verilerin taşınması için Tarih belirliyoruz**/     DECLARE @SourceTblName VARCHAR(255)   SET @SourceTblName  ='TransferData'   DECLARE @DestinationTblName NVARCHAR(255)   SET @DestinationTblName = '[LinkedServerInstanceName].[TransferDB].dbo.[TransferData]' […]

Data Transfer and Loop Delete with Linked Server

Bu yazımızda büyük bir tablodan başka bir tabloya veri aktarıp, aktarılan verinin o tablodan silinmesi adımlarını bulabilirsiniz. Yazıda aktarım işlemi ayrı sunucularda yapılmıştır. Bu sebeple linked server kullanılmıştır.

Özellikle devamlılığı olan bu tür işlemleri, aşağıdaki paylaştığımız scripti bir store procedure yapıp ve bu procedure bir job ile tetiklenirse otomatik olarak işlem sürekli olarak yapılacaktır.

Bu işlemin bize en büyük faydası birden fazla transcation işleminin bir arada veri kaybı  olmadan yapılması sağlar. Ayrıca performanslı bir aktarım sağlar ve delete işlemini loop yaptığımız için canlı sistemde ldf’in büyümeden rahatça yapmasına imkan sunar.

 

use AdminDB

  CREATE TABLE #TempTable (Id INT NOT NULL INDEX idx_Id Clustered) /*1-Verilerin tutarlı ve hızlı aktarımı yapılması için temp tablo oluşturuyoruz.*/

 

  DECLARE @SixMonthDate DATETIME

  SET @SixMonthDate = (SELECT DATEADD(MONTH,-6,GETDATE())) /**2-6 aydan eski verilerin taşınması için Tarih belirliyoruz**/

 

  DECLARE @SourceTblName VARCHAR(255)

  SET @SourceTblName  ='TransferData'

  DECLARE @DestinationTblName NVARCHAR(255)

  SET @DestinationTblName = '[LinkedServerInstanceName].[TransferDB].dbo.[TransferData]'

 

  DECLARE @QueryParameters NVARCHAR(4000)

  SET @QueryParameters = '@FirstDateParam datetime'

 

  DECLARE @SelectInsertQuery NVARCHAR(MAX) =

                N'

                      BEGIN

                                        

                          INSERT INTO #TempTable

                          SELECT

                          TOP 3 [Id]

                          FROM '+ @SourceTblName +' WITH (NOLOCK)

                          WHERE Date <= @FirstDateParam

                                                      

                      END '

      

       exec sp_executesql @SelectInsertQuery, @QueryParameters,@FirstDateParam = @SixMonthDate /*3-Ana tablodaki 6 aydan eski verilerin Id'lerini temp tablosuna Insert ediyoruz.*/

      

  DECLARE @SelectInsertQuery2 NVARCHAR(MAX) =

                 N'

                      BEGIN

                                                         

                          INSERT INTO '+ @DestinationTblName +'([Id], [Date])

                          SELECT [Id], [Date]

                          FROM '+ @SourceTblName +' WITH (NOLOCK)

                          WHERE '+ @SourceTblName +'.Id in (select #TempTable.Id from #TempTable)

                                                           

                      END '

 

        execsp_executesql @SelectInsertQuery2 /*4-Adimda Temp Tablosuna bastığımız Id'leri Ana tablo ile eşleştirip Ana tablo'dan siliyoruz.*/

      

  DECLARE @DeleteQuery NVARCHAR(MAX) =

                           N' 

                             BEGIN

                                 

                                DECLARE  @RowCount INT;

                                SET @RowCount = 1;

                            

                                WHILE (@RowCount > 0)

                                      BEGIN

                                             

                                             SET @Rowcount = 0

 

                                                     DELETE TOP (1)

                                                     FROM '+ @SourceTblName +'

                                                     WHERE '+ @SourceTblName +'.Id in (select #TempTable.Id from #TempTable)

 

                                              SET @RowCount = @@ROWCOUNT      

                            

                                      END

                            

                                END '

                                

     exec sp_executesql @DeleteQuery /*4.Adimda Linked server'la bastığımız verileri ana tablodan temp tablodaki Id'ler ile sağlamasını yaparak siliyoruz.*/

 

        Droptable #TempTable
Benzer Yazılar

SQL SERVER PARTITION SPLIT-MERGE

T-SQL 5 gün önce

Partitioning Nedir? SQL Server’da partitioning (bölümleme), büyük veritabanlarını yönetilebilir parçalara ayırmak amacıyla kullanılan bir tekniktir. Bu sayede büyük veri setlerinin yönetimi daha verimli hale gelir. Tabloyu veya indeksleri birden fazla bölüme ayırarak, her bölümün ayrı bir veri dosyasında saklanmasını sağlarsınız. Bu, sorgu performansını artırabilir ve bakım işlemlerini kolaylaştırabilir. Partition Range Split ve Merge: Range Split: Partitioning aralığını (range) bölme işlemi, mevcut bir partition’un iki ayrı bölüme ayrılması anlamına gelir. Bu, veri büyüdükçe daha ince kontrol sağlamak için yapılabilir. Merge: Partition’ları birleştirme işlemi, veritabanı yapısını sadeleştirmek veya daha büyük veri kümelerini tek bir partition içinde toplamak için kullanılır. Partition split ve merge işlemleri yaparken kullanılan partition tipi çok önemlidir. Range RIGHT ve Range LEFT arasında bazı önemli temel farklar bulunmaktadır. Bu farklar var olan partition yapınızı güncellemek,yeni bir bölümlemeye sahip olmak istediğinizde hali hazırda kullanımda olan partition bölümlemenizin bozulmasına sebebiyet verebilir. Peki nedir bu Farklar; Tablonuzda Range LEFT olan bir partition […]

SQL Server DMV ve DMF – 6

SQL Server 2 hafta önce

Bu yazımızda DMV ve DMF Serimizin 6.sına devam edeceğiz. Bir önceki seride Memory’ye ilişkin DMV ve DMF’leri ele almıştık. Bu yazıda Memory konusunda devam edeceğiz. SQL server’da Memory kavramı en önemli kavramlardan biridir. Özellikle tüm transaction işlemlerinin önce Buffer sonra disk üzerinden devam ettiğini düşünürsek buffer’ın oynadığı kritik rolü daha iyi anlayabiliriz. Bu yazıda Memory’nin durumunu ve monitör edilmesine bakacağız. Özellikle Performans sorunlarında memory konusunda sorun yaşandığı durumda nasıl okumak gerektiği önemli rol oynamaktadır. Hangi database’de, hangi tablo’da sorun yaşandığına ilişkin bilgilere bu paylaşım sonrasında görebileceğiz. SQL Server’ın Memory kullanım durumunu incelediğimde; select physical_memory_in_use_kb/1048576.0 AS ‘physical_memory_in_use (GB)’, locked_page_allocations_kb/1048576.0 AS ‘locked_page_allocations (GB)’, virtual_address_space_committed_kb/1048576.0 AS ‘virtual_address_space_committed (GB)’, available_commit_limit_kb/1048576.0 AS ‘available_commit_limit (GB)’, page_fault_count as ‘page_fault_count’ from  sys.dm_os_process_memory; Görsel – 1   Physical_memory_in_use: Kullanımda olan Fiziksel Memory miktarını gösterir. locked_page_allocations: Memory’de lock’lanmış olan Page’lerin miktarını belirtir. virtual_address_space_contained: SQL Server VAS(Virtual Adress Space) için ayrılan miktarı belirtir. available_commit_limit: SQL Server tarafından kullanılabilecek Memory Miktarını gösterir. […]

SQL SERVER’DA LINKED SERVER KULLANIMI – 2

SQL Server 2 ay önce

SQL Server’da Linked Server Kullanımı makalemizin ikinci bölümünde uygulamamıza göre ayarlamaları yapabilmeyi ve sorgu çalıştırma yöntemlerini anlatmaya çalışacağız. Birinci bölüme ulaşmak için SQL SERVER’DE LINKED SERVER KULLANIMI – 1 linkine tıklayabilirsiniz.İçindekilerSERVER OPTIONS1. OPENQUERY2. Köşeli Parantez SERVER OPTIONS Collation Compatible: Linked server’da “collation compatible” seçeneği, iki veritabanı arasındaki metin karşılaştırmalarında ve sıralamalarında uyumluluğu belirler. Bu seçenek, bir linked server’a bağlanırken, yerel veritabanının ve linked server’daki veritabanının collation ayarlarının uyumlu olup olmadığını kontrol eder. True: Karşılaştırma ve sıralama işlemlerinin sorunsuz bir şekilde yapılacağı anlamına gelir. Örneğin, karakter setleri ve sıralama kuralları arasında tutarsızlık olmadığında, bu ayar kullanışlıdır. False: Metin karşılaştırmalarında ve sıralamalarında sorunlar çıkabilir. Örneğin, veritabanları farklı diller için ayarlanmışsa, bir sorgu doğru sonuçlar vermeyebilir. Data Access: Linked server’da “data access” seçeneği, linked server üzerinden veritabanına veri erişiminin etkin olup olmadığını belirler. Bu seçenek, linked server ile iletişim kurarken veri okuma, yazma ve güncelleme işlemlerinin yapılabilip yapılmayacağını kontrol eder. True: Sorguların, veri […]

0 Yorum

Yorum Yaz

Rastgele