Database Replication (Synchronization)
ဒီေန႔ ကြၽန္ေတာ္တို႔ database synchronization နဲ႔ ပတ္သက္တဲ႔ အေၾကာင္းေလး နည္းနည္း ေျပာၾကရေအာင္ဗ်ာ။ database ကို synchronize လုပ္တယ္ဆိုတာဘာလဲ? တစ္ခုထက္ပိုတဲ႔ database ေတြထဲမွာ data ေတြကိုအတူတူရွိေနေအာင္ ျပဳလုပ္ျခင္းလို႔ ေျပာရမယ္ထင္တယ္။ ဒီလိုဗ်ာ.. ကြၽန္ေတာ္မွာ database 2 ခုရွိတယ္ db_A နဲ႔ db_B ဆိုပါေတာ့။ အဲ့ဒီ database ၂ ခုကို synchronization လုပ္ခ်င္တယ္။ db_A ထဲကို ထည့္လိုက္တဲ႔ data ေတြကို db_B ထဲမွာပါ ေရာက္သြားေစခ်င္တာေပါ့။ ဒီလို လုပ္ထားျခင္း အားျဖင့္ အေၾကာင္း တစ္ခုခုေၾကာင့္ database တစ္ခုပ်က္သြားခဲ႔ရင္ တျခား တစ္ခုကေန data ေတြကို ျပန္ရေစနိုင္မယ္ေလ။ ေနာက္ တျခား အသံုး၀င္တဲ႔ ေနရာေတြ အမ်ားၾကီး ရွိဦးမယ္ဗ်။
Database replication မွာ publisher, distributor နဲ႔ subscriber ဆိုျပီး အဓိက ဇာတ္လိုက္ ၃ ေယာက္ရွိတယ္ဗ်။

- pic_1
Publisher ဆိုတာက replication မွာ dataေတြ ပို႔လႊတ္မယ့္ database ပါ။
Subscriber ဆိုတာကေတာ့ publisherက ပို႔လိုက္တဲ႔ data ေတြကို လက္ခံမယ့္ database ပါ။
Distributor ဆိုတာကေတာ့ data ေတြကို သယ္ယူပို႔ေဆာင္ေပးတဲ႔သူလို႔ ေျပာရမယ္ထင္တယ္။ replication နဲ႔ သက္ဆိုင္တဲ႔ replication status data ေတြကို သိမ္းထားေပးတဲ႔ database ပါ။
အိုေက အေပၚမွာ ေျပာခဲ႔သလို db_A ကေန db_B ကို replication လုပ္မယ္ဆိုရင္။ db_A က publisher, db_B က subscriber ပါ။ publisher နဲ႔ subscriber က ကြန္ပ်ဴတာ တစ္လံုးထဲမွာ ျဖစ္နိုင္သလို၊ local area network ထဲမွာလည္း ျဖစ္နိုင္ပါတယ္။ ဒါ့အျပင္ internet ထဲမွာ ရွိတဲ႔ server ၂ လံုးမွာလည္း ျဖစ္နိုင္ပါတယ္။ distributor database ကိုလည္း publisher computer ထဲမွာ ျဖစ္ျဖစ္၊ subscriber computer ထဲမွာ ျဖစ္ျဖစ္၊ ဒါမွမဟုတ္လည္း တျခား ကြၽန္ပ်ဴတာ တစ္လံုးမွာပဲ ျဖစ္ျဖစ္ ထားလို႔ ရပါတယ္။ အခုကြၽန္ေတာ္ေျပာမယ့္ example ေလးမွာေတာ့ publisher ေရာ၊ subscriber ေရာ၊ distributor ေရာ ကို ကြန္ပ်ဴတာ တစ္လံုးထဲမွာ ထားမွာပါ(ဒီတစ္လံုးပဲရွိတာေလ)
ကဲ အရင္ဆံုး Replication လုပ္မယ့္ database ၂ ခုကို အရင္ေဆာက္လိုက္ပါ။ publisher လုပ္မယ့္စက္မွာ db_A နဲ႔ subscriber စက္မွာ db_B ကိုေဆာက္လိုက္ပါ။ ျပီးရင္ အဲ့ဒီ database ေတြထဲမွာ table လည္းေဆာက္ရဦးမယ္ေနာ္။ table ေဆာက္တဲ႔ေနရာမွာ database 2 ခုလံုးမွာ table အေရအတြက္ အတိအက် တူစရာမလိုပါဘူး။ ဒါေပမယ့္ replicate လုပ္မယ့္ table ေတာ့ တူရမယ္။ အခု sample အေနနဲ႔ ဒီလိုေလး ေဆာက္ေပးလိုက္ပါ။
| Column Name |
Data Type |
Allow Nulls |
| ID |
int |
Unchecked |
| Name |
varchar(50) |
Checked |
| Remark |
varchar(250) |
Checked |
ဒီေနရာမွာ မွတ္ထားဖို႔ လိုတာက replicate လုပ္မယ့္ table မွာ primary key ပါကိုပါရွိရမယ္။ ဒါေၾကာင့္ ID column ကို primary key အျဖစ္သက္မွတ္ေပးလိုက္ပါ။ database ေဆာက္ table ေတြ create လုပ္ျပီးရင္ေတာ့ replication လုပ္မယ့္ အပိုင္းေရာက္ျပီ။ replication လုပ္ဖို႔အတြက္ publisher computer ထဲမွာ Distributor configuration အရင္ လုပ္ေပးရပါမယ္။
ပံု(၂) မွာ ျပထားတဲ႔အတိုင္း SQL Server Management Studio ထဲက replication folder ကို right click လုပ္ျပီး Configure Distribution ကိုေရြးပါ။

- pic_2
ဒါဆိုရင္ ပံု(၃)မွာ ျပထားတဲ႔အတိုင္း Configure Distribution Wizard ေလး ေပၚလာပါလိမ့္မယ္။ Next ကို ဆက္ႏွိပ္လိုက္ပါ။

- Pic_3

- Pic_4
ပံု(၄) ကေတာ့ distributor database location ေရြးခိုင္းတာပါ။ distributor ကို publisher စက္မွာ ထားမွာလား။ ဒါမွမဟုတ္ တျခားစက္တစ္လံုးလံုးမွာ ထားမွာလားဆိုတာကို ဒီအဆင့္မွာ ေရြးနိုင္ပါတယ္။ အခုကြၽန္ေတာ္ကေတာ့ publisher စက္မွာပဲ distributor ကိုထားမွာ ျဖစ္တဲ႔အတြက္ေၾကာင့္ default အတိုင္းပဲ ထားျပီး Next ဆက္ႏွိပ္ပါမယ္။ replication လုပ္ဖို႔အတြက္ ကြၽန္ေတာ္တို႔ computer မွာ SQL Server Agent Run ေနဖို႔လိုတယ္ဗ်။ အဲ့ဒီ agent မrun ရေသးဘူးဆိုရင္ ပံု(၅) မွာျပထားတဲ႔အတိုင္း ေပၚလာလိမ့္မယ္။ run ထားျပီးသာဆိုရင္ေတ့ ေပၚမွာ မဟုတ္ပါဘူး။

- Pic_5

- Pic_6
ပံု(၆)-ဒီအဆင့္မွာေတာ့ snapshot folder location ေရြးခုိင္းပါတယ္။ snapshot folder ဆိုတာက publisher database မွာ changes လုပ္သမွ်ကို သိမ္းထားေပးတဲ႔ transaction log folder လို႔ ေျပာလို႔ရမယ္ထင္တယ္။ ဒီ folder ကို subscriber computer ကေန လွမ္းျပီး ဖတ္မွာ ျဖစ္လို႔ subscriber computer ကေန access လုပ္လို႔ရတဲ႔ location မွာ ျဖစ္ရပါမယ္။ ကြၽန္ေတာ္အခုလုပ္သလိုမ်ိဳး publisher နဲ႔ subscriber က same computer ဆိုရင္ေတာ့ ဒီအတိုင္းထားလိုက္လည္း ရပါတယ္။ same computer မဟုတ္ဘူးဆိုရင္ေတာ့ ဒီေနရာမွာ netword share folder location ကိုထည့္ေပးရပါမယ္။ ဒီလိုမ်ိဳးေပါ့ \\pub_computer\ReplData.

- Pic_7
ပံု(၇)-ဒီအဆင့္မွာ ကြၽန္ေတာ္တို႔ distribution database ရဲ႕ name နဲ႔ ူlocation ကို ရိုက္ေပးရမွာပါ။ default ဒီအတိုင္းေလးပဲ ထားလိုက္ျပီး Next ပါမယ္။ ပံု(ဂ)- ပံု(၉)- ပံု(၁၀)-မွာ Next ေတြနွိပ္ျပီး Finished လိုက္ပါ။

- Pic_8

- Pic_9

- Pic_10

- Pic_11
ဒါဆို ကြၽန္ေတာ္တို႔ ပံု(၁၁) မွာ ျပထားတဲ႔အတိုင္း Distributor ကို configure လုပ္တာ ေအာင္ျမင္စြာ ျပီးဆံုးသြားပါျပီ။
အခုကြၽန္ေတာ္ Publisher စေဆာက္ပါမယ္။ ပံု(၁၂) မွာ ျပထားတဲ႔အတိုင္း Publications Folder ကို right click လုပ္ျပီး New Publication ကိုေရြးပါ။ ဒါဆို ပံု(၁၃) မွာ ျပထားသလို ေပၚလာပါလိမ့္မယ္။ Next ကိုႏွိပ္ပါ။

Pic_12

Pic_13

Pic_14
ပံု(၁၄)-အဆင့္မွာေတာ့ ကြၽန္ေတာ္တို႔ publication လုပ္ခ်င္တဲ႔ database ကိုေရြးေပးရမွာပါ။ အခုကြၽန္ေတာ္တို႔ db_A ကိုေရြးလိုက္ပါတယ္။ ပံု(၁၅)-အဆင့္မွာေတာ့ ကြၽန္ေတာ္တို႔ publication type ကိုေရြးေပးရမွာပါ။ publication type အဓိက ၃ မ်ိဳးရွိပါတယ္။
- Snapshot publication
- Transactional publication
- Merge publication
ကြၽန္ေတာ္အခု Transactional publication ကိုေရြးျပီး Next ပါမယ္။

Pic_15

Pic_16
ပံု(၁၆)-အဆင့္မွာ ကြၽန္ေတာ္တို႔ publish လုပ္ခ်င္တဲ႔ Articles(table) ေတြကိုေရြးရပါတယ္။ ျပီးရင္ Article Properties ထဲကို ၀င္ျပီး၊ ပံု(၁၇) မွာ ျပထားတဲ႔အတိုင္း “Keep existing object unchanged” ကိုေရြးေပးလိုက္ပါမယ္။ ဆိုလိုတာကေတာ့ အကယ္လို႔ subscriber table ထဲမွာ data ေတြ ရွိေနရင္ ဒီအတိုင္းပဲ ထားမယ္လို႔ ေျပာတာပါ။

Pic_17

Pic_18
ပံု(၁၈)-အဆင့္မွာ ကြၽန္ေတာ္တို႔ article ေတြအတြက္ row filter ေပးလို႔ရပါတယ္။ table ထဲမွာ ရွိသမွ် row ေတြအားလံုးကို publish မလုပ္ပဲ condition စစ္ျပီးမွ လုပ္ခ်င္ရင္ ဒီေနရာမွာ Add button ႏွိပ္ျပီး filter ထည့္လို႔ ရပါတယ္။ အခုကြၽန္ေတာ္ကေတာ့ မထည့္ေတာ့ပါဘူး။

Pic_19
ပံု(၁၉)-ဒီအဆင့္မွာေတာ့ အေပၚcheckbox ေလးကို check လုပ္ျပီး Next ဆက္ႏွိပ္ပါ။ ဒါဆို ေနာက္အဆင့္မွာ ပံု(၂၀)- မွာ ျပထားတဲ႔အတိုင္း Agent Security setting လုပ္ေပးရပါမယ္။

Pic_20

Pic_21
ပံု(၂၁)-မွာ ျပထားတဲ႔အတိုင္း SQL Server Agent service account နဲ႔ run မယ္လို႔ ေျပာလိုက္ပါတယ္။ ေနာက္ျပီး Publisher database ကို ၀င္ဖို႔အတြက္ SQL Server login account ထည့္ေပးရပါတယ္။ ကြၽန္ေတာ္တို႔ SQL Server install လုပ္တုန္းက password မေပးခဲ႔ဘူးဆိုရင္ေတာ့၊ By impersonation the process account ဆိုတာကို ေရြးလိုက္ပါ။

Pic_22

Pic_23

Pic_24
ပံု(၂၂)- မွာ Next ႏွိပ္၊ ပံု(၂၃)- မွာ နံမည္ေပးျပီး Finished လိုက္ပါ။ ဒါဆို ပံု(၂၄)-မွာ ျပထားသလိုမ်ိဳး publisher ေဆာက္တဲ႔ ကိစၥ အဆင္ေျပသြားပါျပီ။
အခု ေနာက္ဆံုး ကြၽန္ေတာ္တို႔ Subscriber ေဆာက္ဖို႔ပဲ က်န္ပါေတာ့တယ္။ ပံု(၂၅) မွာ ျပထားတဲ႔အတိုင္း ခုနကြၽန္ေတာ္တို႔ ေဆာက္လိုက္တဲ႔ publisher ကို right click ႏွိ္ပ္ျပီး New Subscription ကိုေရြးလိုက္ပါ။

Pic_25

Pic_26
ပံု(၂၆) ကို Next လိုက္ရင္ ပံု(၂၇) မွာ ျပထားတဲ႔အတိုင္း ကြၽန္ေတာ္တို႔ အခုေရြးလိုက္တဲ႔ publisher ေလးကို ေတြ႔ရပါမယ္၊ Next ထပ္ႏွိပ္ပါ။ ဒါဆို ေနာက္တဆင့္(ပံု-၂၈)မွာ Distribution Agent location ေရြးရပါတယ္။ Distribution Agent ဆိုတာက Transactional Replication မွာ publisher ထဲက data ေတြ ဆြဲေပးတဲ႔ process ကို ေျပာတာပါ။ Transaction Replication မွာ PUSH နဲ႔ PULL ဆိုျပီး type ၂ မ်ိဳးရွိပါတယ္။ PUSH ကိုသံုးရင္ distribution agent က publisher computer ေပၚမွာေနျပီး subscriber ကို replicate data ေတြ တြန္းပို႔ေပးပါတယ္။ PULL ကိုေရြးလိုက္ရင္ေတာ့ distribution agent က subscriber computer ေပၚမွာေနျပီး publisher ဆီကေန replication data ေတြကို ဆြဲခ်ေပးပါတယ္။ အခုကြၽန္ေတာ္ကေတာ့ PUSH ကိုပဲေရြးလိုက္ပါတယ္။

Pic_27

Pic_28
ပံု(၂၉)-အဆင့္မွာေတာ့ ကြၽန္ေတာ္တို႔ subscriber database ကိုေရြးေပးရပါတယ္။ အကယ္၍ subscriber က တျခားစက္မွာဆိုရင္ “Add Subscriber” button ေလးကိုႏွိပ္ျပီး ေရြးေပးရပါမယ္။ အခုကြၽန္ေတာ္က db_B database ကိုေရြးျပီး Next လိုက္ပါမယ္။
ပံု(၃၀)-အဆင့္မွာေတာ့ Subscriber အတြက္ Distribution Agent Security Setting လုပ္ေပးရပါတယ္။ ပံု(၃၁) မွာ ျပထားတဲ႔အတိုင္း ေရြးျပီး Next လိုက္ပါဦး။

Pic_29

Pic_30
ပံု(၃၃)၊ ပံု(၃၄)၊ ပံု(၃၅) အဆင့္ဆင့္ Next ေတြ ႏွိပ္သြားလိုက္ရင္ ေနာက္ဆံုး ကြၽန္ေတာ္တို႔ Subscription process အဆင္ေျပေျပနဲ႔ ျပီးဆံုးသြားမွာပါ။

Pic_31

Pic_32

Pic_33

Pic_34

Pic_35
အခုကြၽန္ေတာ္တို႔ database ၂ ခု(db_A and db_B)ကို replication လုပ္လို႔ ျပီးသြားပါျပီ။ ဒီ replication တကယ္ေရာ အလုပ္လုပ္ျပီလား စမ္းၾကည့္ရေအာင္။ Databases folder ေအာက္က db_A database ကို right click လုပ္ျပီး new query ေခၚလိုက္ပါ။ ျပီး ပံု(၃၆)မွာ ျပထားတဲ႔အတိုင္း အဲ့ဒီ query ထဲမွာ INSERT STATEMENT တစ္ေၾကာင္းေရးျပီး Run လိုက္ပါမယ္။

Pic_36
ျပီးရင္ db_B ထဲမွာ ၀င္မ၀င္သြားစစ္ဖို႔အတြက္ db_B database အတြက္လည္း ေနာက္ထပ္ query ထပ္ယူပါမယ္။ ျပီး SELECT STATEMENT ေလး ေရးလိုက္ျပီး run လိုက္ပါ။ ကဲ.. db_A ထဲကို ကြၽန္ေတာ္ထည့္လိုက္တဲ႔ record ကို db_B ထဲမွာပါ ေတြ႔ေနရပါျပီ။

Pic_37
အခုကြၽန္ေတာ္ ေျပာသြားတာက database replication မွာ အရိုးရွင္းဆံုး၊ အလြယ္ဆံုး အပိုင္းေလးပါ။ အားလံုး နားလည္ၾကမယ္လို႔လည္း ေမွ်ာ္လင့္ပါတယ္။ ေနာက္မွာ ပိုျပီး ရႈပ္ေထြးတဲ႔ replication ေတြ အေၾကာင္း ဆက္ေရးပါဦးမယ္။