go to http://oracle.in.th

Wednesday, September 16, 2009

Export / Import อย่างมืออาชีพ กับ Oracle Data Pump

Oracle Data Pump
Oracle Data Pump Export / Import เป็นเครื่องมือที่ใช้ในการทำการ Export และ Import ข้อมูล ซึ่งถูกพัฒนามาจากเครื่องมือ Export / Import แบบดั้งเดิม ทำให้มีความเร็วในการ Export มากกว่าเดิมประมาณ 2 เท่า และมีความเร็วในการ Import มากกว่าเดิมประมาณ 15-45 เท่า โดยได้มีการนำมาใช้ตั้งแต่ Oracle 10gR1 แล้ว ในส่วนที่เพิ่มเข้ามาจากแบบดั้งเดิมนั้นมีหลายส่วนเช่น


  • สามารถทำงานได้แบบ Parallel แต่จำนวน Process ที่ใช้ในการทำงานจะต้องสอดคล้องกับจำนวนของ Dump File (แบบเดิมนั้นจะมี Dump File เพียงไฟล์เดียว แต่ Data Pump จะมีไฟล์มากกว่า 1 ไฟล์)
  • สามารถทำการ Restart การทำ Export/Import ได้ในกรณีที่เกิดข้อผิดพลาดระหว่างการ Export/Import โดยจะไม่ทำให้ข้อมูลเกิดความเสียหาย
  • ผู้ดูแลฐานข้อมูลสามารถ Monitor การทำ Export/Import ได้จากหลายๆที่ ซึ่งทำให้สะดวกต่อการตรวจสอบความเรียบร้อย
  • ด้วยพารามิเตอร์ NETWORK_LINK ทำให้สามารถทำการ Export ข้อมูลจากเครื่องต้นทางไปยังเครื่องปลายทางที่มีการเชื่อมต่อกันผ่านระบบเครือข่ายได้
  • สามารถเปลี่ยนชื่อของ Datafiles ของต้นฉบับให้เป็นชื่ออื่นได้
  • สามารถทำการคัดกรอง Metadata ได้ โดยใช้ “Exclude” หรือ “INCLUDE” ในคำสั่งได้
  • ผู้ดูแลฐานข้อมูลสามารถทำการประเมินได้ว่าจะต้องใช้พื้นที่ว่างเท่าไรในการ Export โดยยังไม่ต้องลงมือทำ Export จริงๆ
  • ผู้ดูแลฐานข้อมูลสามารถทำการคัดกรองข้อมูลได้โดยใช้คำสั่ง “Select”
  • สามารถใช้งานกับ External Table ได้
ซึ่งในรูปแบบของคำสั่งที่ใช้นั้นมีความคล้ายคลึงกับของเดิม โดย expdp คือการ Export ส่วน impdp คือการ Import สามารถแบ่งได้เป็น 3 แบบคือ

1 การ Export/Import แบบเจาะจงตาราง

2 การ Export/Import แบบเจาะจง Schema

3 การ Export/Import ทั้ง Database (แบบ Full)


รูปแบบของคำสั่งจะเป็นดังนี้

1 การ Export/Import แบบเจาะจงตาราง 

expdp user/password@SID tables=table_name directory=_directory_ dumpfile=filename.dmp logfile=logname.log

impdp user/password@SID tables=table_name directory=_directory_ dumpfile=filename.dmp logfile=logname.log

2 การ Export/Import แบบเจาะจง Schema

expdp user/password@SID schemas=schema_name directory=_directory_ dumpfile=filename.dmp logfile=logname.log

impdp user/password@SID schemas=schema_name directory=_directory_ dumpfile=filename.dmp logfile=logname.log

3 การ Export/Import แบบทั้ง Database (แบบ Full)

User ที่จะทำการ Export/Import แบบ Full ได้นั้นจะต้องเป็น User ที่มีสิทธิ์ในการ Export/Import Full Database เท่านั้น ในที่นี้ยกตัวอย่างเป็น User: Sys Password: manager1 และพารามิเตอร์ full จะเป็นตัวบอกว่าจะทำการ Export/Import แบบ Full

expdp sys/manager1@SID full=Y directory=_directory_ dumpfile=filename.dmp logfile=logname.log

impdp sys/manager1@SID full=Y directory=_directory_ dumpfile=filename.dmp logfile=logname.log

สรุปประเด็น

  • Oracle Data Pump มีการพัฒนามาใช้ตั้งแต่ Oracle 10gR1
  • ทำหน้าที่ในการ Export ข้อมูลและ Import ลงฐานข้อมูลอื่นเช่นเดียวกับเครื่องมือ Export/Import แบบดั้งเดิม แต่มีประสิทธิภาพมากกว่า เนื่องจากมีการเพิ่มความสามารถด้านต่างๆเข้าไป
  • การ Export โดยใช้ Data Pump ทำได้เร็วกว่าเดิมประมาณ 2 เท่า
  • การ Import โดยใช้ Data Pump ทำได้เร็วกว่าเดิมประมาณ 15-45 เท่า
  • รูปแบบคำสั่งที่ใช้จะมี 3 แบบด้วยกันคือ 1)การ Export/Import ในระดับ Table 2) การ Export/Import ในระดับ Schema 3) การ Export/Import ทั้งฐานข้อมูล
  • การ Export จะใช้คำสั่งที่ขึ้นต้นด้วย expdp username/password@sid ตามด้วยพารามิเตอร์ต่างๆ
  • การ Import จะใช้คำสั่งที่ขึ้นต้นด้วย impdp username/password@sid ตามด้วยพารามิเตอร์ต่างๆ

Created By: Pinant Thammanajit
ข้อเขียนนี้ช่วยฉัน:  

5 comments:

Kim said...

เสริมครับ,
การ import/export
อย่าลืม set NLS_LANG ให้เป็น AMERICAN_AMERICA.TH8TISASCII ด้วย
จะพบว่ามีหลายคน coding ใน PL/SQL
แล้ว hardcode ภาษาไทยลงไป
ถ้าไม่ set NLS_LANG ให้ถูกต้อง
ภาษาไทยที่ hardcode จะกลายเป็น ??????? ครับ

Kim said...

ประเด็นที่ 2 ที่จะเสริมคือ
โดยเฉพาะ @stigmatise และ @mercedez31
คือเรื่อง logfile=logname.log
อยากให้ใช้ติดเป็นนิสัยเลยครับ

สำคัญและจำเป็นมากในการไป service ให้ลูกค้า

yong said...

ยังไม่เคยได้ลองใช้ Data Pump เลยครับ

แต่คิดว่าถ้า Import ได้เร็วขึ้นขนาดนี้ก็น่าจะเป็นประโยชน์มาก

เพราะงานที่กำลังทำอยู่นี่ขนาด Dump File ประมาณ 6GB ใช้เวลาในการ import ประมาณ 1 ชั่วโมง

ถ้ามีหลายๆไฟล์ก็คงต้องใช้เวลามากเลยครับ

แต่ทั้งนี้ทั้งนั้นก็ต้องขึ้นอยู่กับว่าใช้ Tool ของเวอร์ชันใดในการ Export

ถ้าเป็น Tool Export แบบดั้งเดิมก็จะใช้กับ Data Pump ไม่ได้ ต้องใช้ Tool Import แบบดั้งเดิมเช่นกันครับ

Kim said...

เสริมข้อที่ 3
การ export จะได้ .dmp file ออกมา
ปกติขนาดของ .dmp file จะค่อนข้อนใหญ่

ถ้าต้องการทำ archive เก็บไว้
แนะนำให้บีบอัดก่อนครับ
จะ zip, rar, tar.gz ก็แล้วแต่
จะบีบได้ประมาณ 10 เท่าเป็นอย่างตำ

ที่ @stigmatise ขนาด 6GB, บีบแล้วจะประมาณ 500MB ครับ
จะย้าย file, ftp ก็ใช้เวลาไม่นาน

ส่วน command ของ impdp/expdp ใน version 11 จะมี option compress มาให้ด้วย รายละเอียดดูได้ใน oracle docs ครับ

Unknown said...

เพิ่มให้

parameter ESTIMATE จะใช้ได้ 2 แบบครับ คือ
estimate={BLOCKS | STATISTICS}

ถ้าเป็นแบบ BLOCKS จะทำการ scan block เพิ่มกะขนาดของไฟล์ dump ให้ ใช้เวลานานเหมือนกันครับ

แบบ STATISTICS จะใช้ค่าที่เราทำ Analyze Statistic มาคำนวนค่าขนาดไฟล์ dump ให้ครับ (ซึ่งไม่ค่อยแม่นเลย ฮา)

โดยทั่วๆ ถ้าไม่ใส่ จะเห็นว่า expdp จะค้างอยู่พักใหญ่ๆ (เสียเวลา) เพื่อทำการ estimate ค่าให้ก่อนการทำ export

ส่วนใหญ่ ถ้าเรามี disk ที่ใช้เก็บ dump ใหญ่ๆ อยู่แล้ว ผมจึงมักจะเซตให้เป็น STATISTICS ครับ ก็จะได้กลับบ้านเร็วขึ้นแป๊บนึง

(ถ้า database ขนาด 2TB ก็จะได้กลับบ้านเร็วขึ้นเกือบๆ 2 ชั่วโมงแหนะ \^0^/)

Post a Comment