- อยากรู้เรื่องนี้อยู่พอดีมี คนถามใน thaiadmin.org ว่า
เออ มันทำได้ไหมครับ ใน SQL Server 2000-2008 นะครับ
ถ้าผมจะเขียน procedure ให้มันทำการ insert ค่า ลงใน DB ที่อยู่ IP = x.x.x.123 โดยเอาข้อมูลมาจาก DB ที่อยู่ IP = x.x.x.135
แล้วค่อย เขียนให้มัน exec ลงใน Trigger ของ DB ที่อยู่ IP = x.x.x.123 อะครับ
เออ ประมาณว่า
พอ Table_1 ที่ DB1 ของ IP = x.x.x.135
ถูก insert ลงไป 1 Row
ก็ให้ทำ Trigger After INSERT
ไป EXEC Proc ที่เขียนไว้ใน DB1 ของ IP = x.x.x.135
ให้ทำการ เอาข้อมูล row ที่เพิ่งใส่เข้าไปใหม่ เอาไป insert ลงที่ Table_1 ที่ DB1 ของ IP = x.x.x.123
อย่างนี้นะครับ ทำได้ไหมครับ ถ้าทำได้ มี hint ในการเขียนไหมครับ เพราะผมทำเป็นแต่ ข้าม DB ที่อยู่ใน SERVER เดียวกันนะครับ
T_T
ถ้าทำเป็น Trigger ต้องระวังนะครับ เพราะว่า อย่างสมมติ คุณเขียน Trigger After Insert เนี่ย ถ้าคำสั่งใน Trigger Fail เนี่ย มันจะทำให้คำสั่ง Insert คุณ Error ไปด้วย แล้วหลาย ๆ ครั้ง บางทีดูจาก Error Message แล้ว ถ้าไม่ใช่คนออกแบบ DB เอง ก็นึกไม่ถึงว่ามันมาจาก Trigger กว่าจะไล่เจอ ก็เสียเวลาพอดู
ดังนั้น เท่าที่คิดออก ผมว่าอาจจะดูเพิ่มเติมเรื่อง
- Table ปลายทาง เช่น ขนาด field, constraints ต่าง ๆ ทั้งก่อนทำ และการแก้ไขภายหลัง
- เสถียรภาพของ Network ด้วย เช่น กรณี Link Server ทั้ง 2 ด้วย WAN ซึ่งถ้าเป็นแบบนี้ ผมคิดว่า ทำ Trigger ให้ Insert ใส่ Tmp Table แล้วค่อย ใช้ DTS Transfer ไปปลายทาง น่าะดีกว่า เพราะว่าอย่างน้อยการ Insert ที่ต้นทางคุณก็ไม่ Error เวลา Link down
- แหละพี่ vc ในนั้นเค้าแนะนำเกี่ยวกับเรื่อง DTS แค่นั้นเอง
- แล้ว DTS คืออาไรหว่า
DTS SQL 2005 Express
We received many questions about SQL 2005 Express though number 1 is always DTSwizard is gone! Well no not really it is harder to understand than in SQL 2000 as the gui is simply not as straight forward.
If you look at your files this path C:\Program Files\Microsoft SQL Server\90\DTS should be present.
If you do not have this path you may need SQLServer2005_DTS.msi If you try this as I did it appeared to do nothing at all. I checked to make sure that I had IIS running on the desktop and installed that. Still no luck, so some searching offered another link which did the trick. SQLEXPR_TOOLKIT.EXE After you install this then run the DTS.MSI again. Just go to C:\Program Files\Microsoft SQL Server\90\DTS\Binn\DTSWizard.exe
You should then see a very friendly wizard that really is not that different from SQL 2000.
Installation
1. download DTS (SQLServer2005_DTS.msi) from microsoft.
The direct link to download DTS wizard is:
2. Setup the SQLServer2005_DTS.msi
3. You will find the locationof DTS Wizard at:
C:\Program Files\Microsoft SQL Server\90\DTS\Binn\DTSWizard.exe
4. now you can export or import your data.
Note
- if we can't see C:\Program Files\Microsoft SQL Server\90\DTS\Binn\DTSWizard.exe
- Try to download SQLEXPR_TOOLKIT.EXE first and then retry.
- สรุปคือ ถ้าเราลง SQLServer2005_DTS.msi แล้วแต่ไม่มี ...\DTSWizard.exe ให้เราลง SQLEXPR_TOOLKIT.EXE แล้วก็ทำการติดตั้ง SQLServer2005_DTS.msi อีกรอบแค่นี้เราก็จะได้...\DTSWizard.exe
- อีกอย่างใน SQLEXPR_TOOLKIT.EXE เราจะได้ business intelligence developement studio ด้วยถ้าเราเลือก ตอนติดตั้งนะ
- ตอน export data เราสามารถ select เฉพาะได้ด้วยแหละ เท่ดี
- และอีกอย่าง เราสามารถ เลือกว่าจะ ย้ายข้อมูลใส่แบบ append หรือ delete ข้อมูลที่มีออกก่อนก็ได้
After test it
- เราสามารถคัดลอกข้อมูลจาก db ก้อน a มายัง ก้อน b (คนละก้อนกันซึ่งมี table ต่างกัน) ที่อยู่คนละ server ได้ โดยข้อมูลที่เราสามารถคัดลอกได้ แค่ table และ view หว่า ซึ่ง view จะถูกคัดลอก ไปยังปลายทางให้เป็น table ซะงั้น
- ไม่มีการย้าย store procedure หรือ trigger หรือ view โดยตรงให้เรา
- ไม่มีการสร้าง primary key ที่ table ปลายทาง (ในกรณี มีการสร้าง table ปลายทางใหม่ เพราะ ไม่มี table นั้นที่ปลายทาง) ทำให้ เมื่อย้ายข้อมูลจะไม่เกิด duplicate key ย้ายข้อมูลซ้ำได้ซะงั้น ต้องระวัง ในกรณี db ปลายทางมี table นั้นอยู่แต่ไม่มี primary key อ่ะนะ แต่คงไม่มีใครเค้าทำกันหรอกมั้งที่จะไม่สร้าง primary key อ่ะนะ
- ในกรณี db ปลายทางมี table นั้นอยู่ และมีการสร้าง pk เรียบร้อย การใช้ dts จะเกิด error เมื่อมีการ insert duplicate key อ่ะนะ มันก็คงต้องเป็นเช่นนั้นไม่งั้น db ปลายทางเราก็เละ อ่ะดิ
- แต่ถ้าข้อมูลไม่ซ้ำก็ย้ายได้ปกติอ่ะนะ
- ในกรณี table ปลายมี record ที่จะคัดลอกจากต้นทางอยู่ และ บาง record ก็ไม่มีที่ปลายทาง จะทำให้การย้ายข้อมูลใน table นี้ ไม่สำเร็จ ทั้งที่มี record ใหม่อยู่อ่ะนะ
- แต่ถ้ามีการคัดลอกหลายๆ table ในครั้งหนึ่ง อันใหนที่ มี record ซ้ำจะคัดลอกไม่สำเร็จสัก record เลย แต่อันใหนที่ มีแต่ record ใหม่ๆ ไม่ซ้ำ จะทำการคัดลอกได้ปกติ ไม่มีปัญหา
- สามารถ สร้าง table ปลายทางได้เอง ถ้า db ปลายทางเป็น db ก้อนเปล่าๆ ไม่มี table อาไรเลย
- สรุป สามารถย้ายได้แค่ (ทำเป็นแค่นี้อ่ะนะ เค้าอาจจะทำได้แต่เราไม่รู้) คัดลอก table และ view ให้มาปลายทางกลายเป็น table ที่ปลายทางที่อยู่คนละ server (ต่างไอพีว่างั้น) ได้
- อีกอย่าง หลังจากติดตั้ง dts เห็นมี bcp.exe มาให้ด้วยแฮะ แต่เห็น เค้าว่า ^^' BCP ทำได้เฉพาะข้อมูลเท่านั้น ไม่รองรับ Schema คุณต้องมี File ที่เก็บ Schema ต่างหาก (schema ก็เป็นที่บอกว่า table นี้ประกอบด้วย columns อะไรบ้างและมีชนิดเป็นอะไร)
- BCP ใช้ได้กับ SQL Server เท่านั้น DBMS แต่ละตัว มีวิธีการคล้าย BCP ด้วยกันทั้งสิ้นแต่ใช้ร่วมกันไม่ได้
- แนะนำ DTS น่าจะโอเคกว่าเพราะ ชนิดของ column ที่ย้ายมาก็ ถูกต้องอ่ะนะ เสียแค่ ย้ายทุกอย่างมาไม่ได้หมดแค่นั้นเอง แต่ก็ไม่ใช่ปัญหาเพราะ อย่างอื่นเราย้ายแบบ script มาได้ ^^'
- แต่เค้ามี option การเลือก แบบ เรา query เองก็ได้นะ
- ส่งสัยเราจะใช้ dst ย้าย ข้อมูลได้หลายแบบด้วยแหละ คิดว่านะ
- เห็นเค้ามี excel หรือ access ให้เลือกทั้ง sourcce และ destination อ่ะ
Last
- ถ้าเราติดตั้ง SQL Server 2005 เวอร์ชั่นเต็ม DTS จะมีมาให้พร้อมเลยนะ
- แต่ตอนนี้เราใช้ sql 2005 express ต้องหาลงเพิ่มเองอ่ะนะ
- สิ่งที่ต้องระวัง คือ source เราต้องระวังด้วยถ้าเลือก หมดจะมีการเลือก view ด้วย
- ทำให้ destination อาจเพิ่มอีก จาก view นั้นอ่ะนะ
Related
Reference
- http://blog.activeservers.com/PermaLink,guid,ef311ad9-242d-48fa-b2a3-6b46d006d099.aspx
- http://www.thaiadmin.org/board/index.php?topic=89931.0
- http://social.msdn.microsoft.com/Forums/en-US/sqlexpress/thread/b642de2b-7b64-4667-a3f3-b0f55faf3d4b
- http://social.msdn.microsoft.com/forums/en-US/sqltools/thread/546f4407-0aa4-4b04-96f3-e6f0ba39a9d1/
- http://www2.cs.science.cmu.ac.th/useminar/2543/dataware/populating.htm
- ช่วยเรื่อง DTS, Data Transformation Service
- http://www.thaidev.com/board1/view.php?id=6020&bn=board_delphi
No comments:
Post a Comment