การเคลื่อนย้ายข้อมูลขนาดใหญ่


11

ฉันต้องการย้ายหลายพันล้านแถวจาก schema1.table1 ไปยัง schema2.table2 ใหม่โดยที่ table2 เป็น refactored หนึ่งจาก table1 ดังนั้นโครงสร้างตารางของพวกเขาจึงแตกต่างกัน ทั้ง table1 และ table2 ถูกแบ่งพาร์ติชั่น แต่ table2 ว่างเปล่า สกีมาทั้งสองนี้อยู่ในฐานข้อมูล Oracle เดียวกัน ประสิทธิภาพของวิธีที่มีประสิทธิภาพในการโยกย้ายข้อมูลนี้ คุณต้องการที่จะดำเนินการเฉพาะที่ส่วนท้ายสุดหรือเลือกที่จะกระทำที่เพิ่มขึ้น? นั่นคือสมมติว่าการย้ายข้อมูลล้มเหลวหลังจากทำ 99% ของงานซึ่งใช้เวลาไม่กี่ชั่วโมง ตอนนี้คุณย้อนกลับหรือไม่ หากคุณเพิ่มความมุ่งมั่นคุณจะจัดการกับความล้มเหลวได้อย่างไร

คำตอบ:


8

ขนานINSERT APPENDกับNOLOGGINGจะเป็นวิธีการทำเช่นนี้แล้วเช่นเดียวกับการดำเนินการทั้งหมด NOLOGGING ใช้การสำรองข้อมูลทันทีที่เสร็จสิ้น ทำเครื่องหมายดัชนีที่ใช้ไม่ได้ก่อนปิดใช้งานข้อ จำกัด แก้ไขตารางดำเนินการจากนั้นเปิดใช้งานข้อ จำกัด อีกครั้ง

ผนวกทำให้ Oracle มีพื้นที่ว่างเหนือเครื่องหมายน้ำสูงในปัจจุบันเสมอดังนั้นจึงไม่มีประสิทธิภาพในการใช้พื้นที่ซ้ำในเซกเมนต์ แต่หลีกเลี่ยงการเล่นซอกับนักอิสระและโอเวอร์เฮดของ UNDO หากคุณมีการเริ่มต้นอีกครั้งด้วยเหตุผลใด ๆไม่ได้TRUNCATEDELETE

สำหรับความมุ่งมั่นที่เพิ่มขึ้นนั้นจะขึ้นอยู่กับวิธีการแบ่งส่วนข้อมูลของคุณคุณสามารถพูดได้อย่างง่ายดายว่าย้ายค่าของเดือนในแต่ละครั้ง (เช่นรูปแบบการแบ่งพาร์ติชันเหมือนกันในแหล่งที่มาและเป้าหมาย) เพราะจำไว้ว่าถ้าคุณต้องการที่จะตอบสนองเพรดิเคตบางอย่างนั่นจะทำให้คุณช้าลงอย่างเห็นได้ชัด ทดสอบเพื่อให้แน่ใจว่าการดำเนินการจะไม่ล้มเหลวอย่างมีเหตุผล (เช่นประเภทข้อมูลที่เข้ากันไม่ได้ในแหล่งที่มาและเป้าหมาย) จากนั้นจัดสรรทรัพยากรที่เพียงพอและเพียงไปทำมันในธุรกรรมเดียว โชคดี!


ฉันรู้ว่าการใช้ redef ออนไลน์จะช้า แต่ dbms_redef อาจไม่รองรับสถานการณ์ข้างต้น?
John

3

หากรูปแบบพาร์ทิชันเหมือนกัน (ข้อมูลของ partion a ในตารางที่ 1 ไปที่พาร์ติชัน a ในตารางที่ 2 เป็นต้น) จากนั้นฉันจะไปหลายเซสชันและให้แต่ละเซสชั่นผนวกข้อมูลของพวกเขาในพาร์ทิชันของตัวเอง สิ่งนี้ป้องกันการล็อคจำนวนมากและมีความเร็วที่ดีที่สุด ขึ้นอยู่กับฮาร์ดแวร์ที่คุณสามารถเติมการ์ด HBA จนถึงคอของพวกเขา คอมมิทสำหรับทุกพาร์ติชั่น - สมมติว่ามีมากกว่าสองสามแถวสำหรับแต่ละพาร์ติชั่น - จะไม่มีปัญหาและแน่นอนว่าฉันจะทำเช่นนั้น สมมติว่าแอปพลิเคชันหยุดทำงานในระหว่างการย้ายข้อมูล fallback นั้นง่าย: อย่าเปลี่ยนแอพและตัดพาร์ติชั่นของ table2 ก่อนที่จะลองอีกครั้งอย่างน้อยที่สุดสำหรับชิ้นส่วนเหล่านั้นที่แอพเปลี่ยนข้อมูลก่อนที่จะรันครั้งที่สอง

ฉันหวังว่านี่จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.