Aplikasi Klien Sederhana untuk Sinkronisasi Database

ID Artikel: 2638560 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Tentang Penulis

Perkecil tabel iniPerbesar tabel ini
Perkecil gambar iniPerbesar gambar ini
MVP RidiF
Artikel ini dibuat oleh MVP Ridi Ferdiana.Microsoft berterimakasih kepada para MVP yang secara proaktif telah membagi pengetahuan mereka dengan para pengguna lainnya.

Gejala

Sinkronisasi database menjadi kebutuhan yang tidak dapat dihindari. Heterogenitas ditingkat aplikasi dan kebutuhan akan integrasi data menjadi sesuatu yang signifikan bagi organisasi tertentu. Pada artikel ini akan dibahas salah satu metode sederhana yang dapat digunakan untuk melakukan sinkronisasi di tingkat database, khususnya sinkronisasi melalui bantuan aplikasi klien, seperti WPF.

Resolusi

Sinkronisasi database sebenarnya dapat dilakukan secara ?out of the box? melalui teknologi seperti replication services. Namun demikian, kesuksesan sinkronisasi database dengan replikasi hanya dapat dijamin apabila terdapat kesesuaian antara konfigurasi database server yang digunakan. Apabila ada perbedaan yang signifikan seperti sinkronisasi antara maka menjadi tantangan dalam sinkronisasi. Microsoft memberi solusi yang menarik yang dikenal dengan Sync Framework, dan semenjak awal Sync Framework secara signifikan mampu menyelesaikan permasalahan sinkronisasi dua teknologi yang berbeda seperti SQL Server dengan SQL CE, SQL Server dengan Azure, dsb.

Pada artikel ini kita akan membuat aplikasi klien yang mensinkronisasikan dua buah database yang sejenis namun berada di lokasi yang berbeda. Skenario ini umum terjadi pada model aplikasi yang digunakan di dua tempat yang terkadang konketivitas keduanya tidak dapat dijamin. Hal tersebut yang melatar belakangi dibutuhkan dua buah database yang satu dipasangkan di site lokal dan yang satu dipasangkan di site remote. Untuk menjamin artikel ini dapat berjalan sebagaimana mestinya maka setidaknya harus disiapkan beberapa perangkat bantu ini.

  1. Vsual Studio 2010 SP1/ Visual Studio Express 2010, bagian ini dipasangkan di development machine untuk pengembangan aplikasi klien
  2. Sync Framework 2.1 SDK, komponen ini adalah software development kit untuk Sync Framework. http://bit.ly/syncfxsdk
  3. Sync Framework 2.1 Runtime, komponen ini adalah software runtime yang dipasangkan di sistem operasi klien yang menggunakan aplikasi sinkronisasi. Rutime ini dapat di unduh melalui tautan. http://bit.ly/syncfxruntime


Pada saat tulisan ini ditulis sudah terdapat versi CTP terkini yakni Sync Framework 4.0 yang baru dari framework sinkronisasi di versi 4 adalah dukungan sinkronisasi dengan SQL Azure pada platform Cloud Computing. Artikel ini menggunakan versi 2.1 karena sudah memenuhi kebutuhan terhadap solusi masalah pada artikel ini.

Setidaknya ada lima langkah yang harus dilakukan untuk mempersiapkan suatu aplikasi klien sinkronisasi yakni:

· Memasangkan Sync Framework SDK 2.1

· Melakukan pembuatan database yang hendak di sinkronisasikan

· Mempersiapkan fungsi provosioning untuk kedua basis data melalui bantuan aplikasi

· Mempersiapkan dan menjalankan fungsi sinkronisasi pada aplikasi klien

· Mendistribusikan aplikasi klien.


Sync Framework SDK 2.1Sync Framework SDK 2.1 memiliki dua versi yakni versi x86 dan versi x64. Secara umum yang dibutuhkan oleh aplikasi dan juga digunakan oleh visual studio adalah x86. Pengguna yang menggunakan mesin x64 pun dapat memasang versi x86. Instalasi dilakukan dengan mengklik berkas instalasi dan hasil instalasi dapat dilihat dengan hadirnya start menu seperti pada Gambar 1.


Perkecil gambar iniPerbesar gambar ini
2638556

Gambar 1. Instalasi Sync Framework

Database apapun dapat digunakan untuk melakukan sinkronisasi dengan Sync Framework. Hal yang patur menjadi perhatian adalah Sync Framework akan menambahkan tabel-tabel tambahan yang berperan untuk mencatat aktivitas yang terjadi selama sinkronisasi. Pembuatan Database

Pada tutorial ini dibuat dua database yakni SyncDB dan SyncExpressDB. Kedua database dikembangkan dengan SQL Server 2008 R2 dan memiliki skema yang sama. Untuk kesederhanaan pada artikel ini keduanya di pasang di dalam satu database server yang sama. Pada kenyataannya dapat dimungkkinkan keduanya terpisah secara lokasi.

Perkecil gambar iniPerbesar gambar ini
2638557


Gambar 2. Database SyncDB dan SyncExpressDB.

Fungsi ProvosioningSebelum menggunakan dua basis data yang telah disusun. Kedua database yang ada harus melakukan mekanisme provisioning. Provosioning adalah melakukan suatu proses konfigurasi otomatis seperti pembuatan tabel-tabel indek yang akan memudahkan kedua database dapat saling tersinkronisasi.

Pada artikel ini terdapat dua method static yakni ProvosioningSource dan Provosioning Target. Kodenya adalah sebagai berikut

ProvosioningSource

public static bool ProvosioningSource(string connectionString, out string pesan)
        {
            bool isSukses = false;
            try
            {
                // connect to server database
                SqlConnection serverConn = new SqlConnection(connectionString);
 
                // define a new scope named ProductsScope
                DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription("ProductsScope");
 
                // get the description of the Products table from SyncDB dtabase
                DbSyncTableDescription tableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Products", serverConn);
 
                // add the table description to the sync scope definition
                scopeDesc.Tables.Add(tableDesc);
 
                // create a server scope provisioning object based on the ProductScope
                SqlSyncScopeProvisioning serverProvision = new SqlSyncScopeProvisioning(serverConn, scopeDesc);
 
                // skipping the creation of table since table already exists on server
                serverProvision.SetCreateTableDefault(DbSyncCreationOption.Skip);
 
                // start the provisioning process
                serverProvision.Apply();
                pesan = "Database sumber berhasil di konfigurasi";
            }
            catch (Exception ex)
            {
                pesan = ex.Message;
                isSukses = false;
                
            }
            return isSukses;
        }


Pada kode ini dilakukan Provosioning database sumber atau database master yang menjadi sumber sinkronisasi. Pada kode di atas hanya tabel Product yang akan digunakan untuk sumber tabel. Pada realitisnya parameter tabel yang disinkronisasikan dapat dijadikan parameter sendiri. Namun demikian, untuk menghindari kompleksitas tabel yang hendak disinkronisasikan telah ditetapkan sebelumnya berupa tabel Product.

ProvosioningTarget

public static bool ProvosioningTarget(out string pesan, string sourcConnectionString, string targetConnectionString)
        {
            bool isSukses = false;
 
            try
            {
                // provision others server 
                // create a connection to the SyncExpressDB database
                SqlConnection clientConn = new SqlConnection(targetConnectionString);
 
                // create a connection to the SyncDB server database
                SqlConnection serverConn = new SqlConnection(sourcConnectionString);
 
                // get the description of ProductsScope from the SyncDB server database
                DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope("ProductsScope", serverConn);
 
                // create server provisioning object based on the ProductsScope
                SqlSyncScopeProvisioning clientProvision = new SqlSyncScopeProvisioning(clientConn, scopeDesc);
 
                // starts the provisioning process
                clientProvision.Apply();
                isSukses = true;
                pesan = "Provosioning database target berhasil";
            }
            catch (Exception ex)
            {
                isSukses = false;
                pesan = ex.Message;
                throw;
            }
            return isSukses;
        }


Pada kode ini dilakukan provisioning database target. Pada kode ini database target menyesuaikan tabel yang akan digunakan untuk sinkronisasi.

Pada artikel ini Kode tersebut dipasangkan dalam Class SyncUtil.cs yang dipanggil oleh aplikasi klien WPF/ Windows Form. Kode tersebut dibuat dalam class terpisah agar dapat bersifat reusable. Hal yang patut diperhatikan bahwa kode tersebut menggunakan pustaka Microsoft.Synchronization.Data dan yang lain seperti tampak pada Gambar 3. Berbagai pustaka tersebut harus direferensikan melalui tombol add reference dan harus memiliki keseuaian versi antara satu komponen Sync dengan komponen lainnya.


Perkecil gambar iniPerbesar gambar ini
2638558

Gambar 3. Provosioning Database.

Fungsi sinkronisasi dikembangkan dengan memanggil method DoSync. Hal yang menarik adalah dengan Sync Framework tidak perlu dikembangkan algoritma penyelesaian konkurensi, penyelesaian resolusi konflik, dan sebagainya. Sync Framework membantu dan menyediakannya untuk Anda.Fungsi Sinkronisasi

DoSync

public static string DoSync(string sourceDatabase, string targetDatabase)
        {
            string pesan = string.Empty;
            try
            {
                SqlConnection clientConn = new SqlConnection(targetDatabase);
 
                SqlConnection serverConn = new SqlConnection(sourceDatabase);
 
                // create the sync orhcestrator
                SyncOrchestrator syncOrchestrator = new SyncOrchestrator();
 
                // set local provider of orchestrator to a sync provider associated with the 
 
                // ProductsScope in the SyncExpressDB express client database
                syncOrchestrator.LocalProvider = new SqlSyncProvider("ProductsScope", clientConn);
 
                // set the remote provider of orchestrator to a server sync provider associated with
                // the ProductsScope in the SyncDB server database
                syncOrchestrator.RemoteProvider = new SqlSyncProvider("ProductsScope", serverConn);
 
                // set the direction of sync session to Upload and Download
                syncOrchestrator.Direction = SyncDirectionOrder.UploadAndDownload;
 
                // subscribe for errors that occur when applying changes to the client
                ((SqlSyncProvider)syncOrchestrator.LocalProvider).ApplyChangeFailed += new EventHandler<DbApplyChangeFailedEventArgs>(Program_ApplyChangeFailed);
 
                // execute the synchronization process
                SyncOperationStatistics syncStats = syncOrchestrator.Synchronize();
 
                // print statistics
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("Start Time: " + syncStats.SyncStartTime);
                sb.AppendLine("Total Changes Uploaded: " + syncStats.UploadChangesTotal);
                sb.AppendLine("Total Changes Downloaded: " + syncStats.DownloadChangesTotal);
                sb.AppendLine("Complete Time: " + syncStats.SyncEndTime);
                pesan = sb.ToString();
            }
            catch (Exception ex)
            {
                pesan = ex.Message;
                
            }
            return pesan;
        }
 
        static void Program_ApplyChangeFailed(object sender, DbApplyChangeFailedEventArgs e)
        {
            // display conflict type
            Console.WriteLine(e.Conflict.Type);
 
            // display error message 
            Console.WriteLine(e.Error);
        }



Aplikasi ini akan melakukan sinkronisasi On Demand setiap pengguna melakukan atau memilih tombol yang melakukan aksi DoSync. .


Perkecil gambar iniPerbesar gambar ini
2638559

Gambar 4. Sinkronisasi Database

Distribusi AplikasiHasil aplikasi klien yang dihasilkan dapat didistribusikan dengan melakukan penyalinan berkas biasa pada lokasi database target atau pun database source. Hal yang perlu diperhatikan bahwa adanya keharusan Runtime dipasangkan di setiap aplikasi yang mengeksekusi.

Uji coba aplikasi dilakukan dengan melakukan operasi CRUD pada tabel Product. Setelah melakukan CRUD pengguna dapat melakukan sinkronisasi dengan mengkesekusi DoSync. Provosioning dilakukan pertama kali dan tidak dilakukan setiap kali aplikasi hendak melakukan sinkronisasi.

Informasi Lebih Lanjut

Sync Framework Developer Center http://msdn.microsoft.com/en-us/sync/default.aspx

Perkecil gambar iniPerbesar gambar ini
Community Solutions
SANGGAHAN KONTEN SOLUSI KOMUNITAS


MICROSOFT CORPORATION DAN/ATAU MASING-MASING PENYUPLAINYA TIDAK MEMBUAT PERNYATAAN-PERNYATAAN TENTANG KESESUAIAN, KEBENARAN, ATAU KEAKURASIAN INFORMASI DAN GRAFIS TERKAIT YANG TERKANDUNG DI DALAMNYA. SEMUA INFORMASI DAN GRAFIS TERKAIT TERSEBUT DIBERIKAN ""APA ADANYA"" TANPA JAMINAN DALAM BENTUK APA PUN. MICROSOFT DAN/ATAU MASING-MASING PENYUPLAINYA DENGAN INI MENYANGGAH SEMUA JAMINAN DAN SYARAT-SYARAT BERKENAAN DENGAN INFORMASI DAN GRAFIS TERKAIT INI, TERMASUK SEMUA JAMINAN DAN SYARAT-SYARAT TERSIRAT MENGENAI KELAYAKAN JUAL, KELAYAKAN UNTUK TUJUAN TERTENTU, UPAYA YANG SELAYAKNYA DIKERJAKAN, HAK, DAN KEADAAN TIDAK MELANGGAR HAK KEKAYAAN INTELEKTUAL PIHAK LAIN. ANDA KHUSUSNYA SETUJU BAHWA MICROSOFT DAN/ATAU PARA PENYUPLAINYA TIDAK PERNAH BERTANGGUNGJAWAB, DALAM KEADAAN APAPUN, ATAS SEGALA BENTUK KERUGIAN YANG BERSIFAT LANGSUNG, TIDAK LANGSUNG, GANTI KERUGIAN SEBAGAI UANG PAKSA, INSIDENTAL, KHUSUS, DAN KERUGIAN KONSEKUENSIAL, ATAUPUN KERUGIAN APA PUN TERMASUK, NAMUN TIDAK TERBATAS PADA, KERUGIAN AKIBAT HILANGNYA KESEMPATAN UNTUK MENGGUNAKAN, HILANGNYA DATA ATAU KEUNTUNGAN, YANG TIMBUL AKIBAT ATAU YANG BERHUBUNGAN DALAM CARA APAPUN DENGAN PENGGUNAAN ATAU KETIDAKMAMPUAN UNTUK MENGGUNAKAN INFORMASI DAN GRAFIS TERKAIT YANG TERKANDUNG DI DALAMNYA, BAIK BERDASARKAN KONTRAK, PERBUATAN MELAWAN HUKUM, KELALAIAN, TANGGUNG JAWAB MUTLAK ATAS KERUGIAN, ATAU LAINNYA, WALAUPUN JIKA MICROSOFT ATAU SALAH SATU PENYUPLAINYA TELAH DIBERITAHU MENGENAI KEMUNGKINAN ADANYA KERUGIAN-KERUGIAN TERSEBUT.

Properti

ID Artikel: 2638560 - Kajian Terakhir: 25 September 2013 - Revisi: 2.1
Berlaku bagi:
  • Microsoft Visual Studio 2010 Professional
  • Microsoft Visual Studio 2010 Ultimate
  • Microsoft Sync Framework 2.1
Kata kunci: 
kbmvp kbcommunity kbstepbystep KB2638560

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com