เวิร์กโฟลว์ของคุณในการวางแผนการย้ายข้อมูลเป็นอย่างไร


23

หลายครั้งที่ฉันถูกนำเข้ามาในตอนท้ายของความพยายามในการพัฒนาซอฟต์แวร์และได้รับการบอกบางอย่างเช่น"โอเคเรามีรหัสใหม่ทั้งหมดและต้องมีตารางเพื่อเปลี่ยนและย้ายข้อมูล"

ดูเหมือนว่าทุกครั้งที่มันเป็นสถานการณ์แบบ one-off, shoot-from-the-hip ฉันรู้สึกว่านี่เป็นทักษะที่อ่อนแอที่สุดของฉันที่ตั้งเป็น DBA

ฉันต้องการที่จะได้รับในบางรูปแบบสำหรับการเข้าใกล้การจัดการและการทดสอบการโยกย้ายข้อมูล

โปรดยึดถือแนวทางปฏิบัติที่ดีที่สุดและ / หรือสถานที่ที่ฉันจะได้รับสื่อการเรียนรู้เพื่อช่วยให้ฉันดีขึ้นในด้านนี้

คำตอบ:


14

ทุกครั้งที่ฉันทำมันเราไปสองรอบ ...

  1. ถ่ายภาพสแนปชอตและทำงานบนเซิร์ฟเวอร์ที่แตกต่างกันใช้สิ่งนั้นเพื่อพิจารณาว่าจะต้องทำอะไรบ้างสำหรับการย้ายข้อมูลและเขียนสคริปต์
  2. เมื่อพวกเขามีสคริปต์อยู่ในมือ snapshop จะถูกกู้คืนในระบบทดสอบและมีกำหนดเวลาเพื่อดูว่ามันจะทำงานภายในเวลาที่กำหนดหรือจะทำการปรับแต่งและแก้ไขจนกว่ามันจะทำได้
  3. ให้ผู้มีส่วนได้เสียลงชื่อออกว่าไม่มีอะไรผิดปกติกับข้อมูลในระบบทดสอบ

จากนั้นในช่วงสุดสัปดาห์คุณมีการหยุดทำงานตามกำหนด:

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

ด้วยตารางเวลาของเราผู้ใช้ฐานข้อมูลโดยทั่วไปจะมีเวลา 18.00 น. ในวันศุกร์ถึง 10.00 น. ในวันเสาร์เพื่อเรียกใช้สคริปต์การสำรองข้อมูลและการย้ายข้อมูลดังนั้นเป้าหมายของเราคือพวกเขาทำงานภายใน 8 ชั่วโมง (~ 6 จากนั้นคือการสำรองข้อมูล) มีเวลาสำหรับการทดสอบและการแก้ไขของเราก่อนที่จะเผยแพร่ต่อผู้มีส่วนได้เสีย

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

โอ้และแน่นอน ... หากมีใครเปลี่ยนแปลงระหว่างการทดสอบการยอมรับและเราทำการเปลี่ยนแปลงนั่นหมายความว่าการลงชื่อเข้าใช้ของผู้มีส่วนได้ส่วนเสียทั้งหมดเป็นโมฆะและต้องทำการทดสอบอีกครั้ง ... ดังนั้น เราพยายามให้เวลาพวกเขาในการค้นหาปัญหาและดำเนินการแก้ไขเป็นชุดแทนที่จะใช้ครั้งละหนึ่งชุด

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


6

ทุกอย่างขึ้นอยู่กับปริมาณของข้อมูลเมื่อเทียบกับกำลังของฮาร์ดแวร์ที่รองรับฐานข้อมูลและข้อตกลงเกี่ยวกับความพร้อมของระบบ คุณมีเวลาหยุดทำงานหรือไม่หรือควรทำออนไลน์ทั้งหมดหรือไม่? เริ่มทำความสะอาดข้อมูลโดยล้างแถวที่ล้าสมัยให้มากที่สุด นี่คือโครงการในตัวเอง หากข้อมูลสะอาดและมีค่าให้ผู้ใช้ตัดสินใจเกี่ยวกับการหยุดทำงาน หากการหยุดทำงานพร้อมใช้งานมันจะค่อนข้างตรงไปตรงมาหากเป็นการแปลงที่รู้จักซึ่งควรใช้กับข้อมูลที่มีอยู่เพื่อจัดทำคอลเลกชันที่อัปเดต หากไม่มีการหยุดทำงานหรือน้อยมากความท้าทายจะเริ่มขึ้น Oracle สนับสนุนสิ่งนี้ในสองสามวิธีเช่นการกำหนดตารางออนไลน์ใหม่และ - การสร้างคำนิยามใหม่ตาม 11g - รุ่น ด้วยการกำหนดตารางออนไลน์ใหม่คุณสามารถจัดเตรียมตารางเพื่อใช้รูปแบบใหม่ได้ สิ่งนี้สามารถทำได้ในขณะที่แอปพลิเคชันทำงานในรูปแบบเก่าของตาราง [s] หากพร้อมแล้วคุณสามารถเปลี่ยนไปใช้รูปแบบใหม่ของตาราง [s] นี่จะเป็นช่วงเวลาที่จะแนะนำรหัสแอปพลิเคชันใหม่และในเวลาเดียวกันก็เป็นจุดเริ่มต้นของการหยุดทำงานที่จำเป็นในการทำให้แอปพลิเคชันใหม่เข้าแทนที่ สามารถเตรียมข้อมูลประวัติที่เก่ากว่าก่อนที่ข้อมูลสดจะถูกโอนย้ายและซิงค์โดยใช้เครื่องมือเช่น Oracle Golden Gate ในสถานการณ์เช่นนี้คุณจะสร้างฐานข้อมูลใหม่ที่มีผลต่อบทบาทของฐานข้อมูลเก่าได้อย่างมีประสิทธิภาพ การกำหนดนิยามใหม่ตามรุ่นเหมาะกว่าหากไม่จำเป็นต้องเปลี่ยนตาราง มีตัวเลือกมากมายให้พิจารณาและฉันคิดว่ามันยากที่จะให้กฎที่ดีที่ใช้งานได้เสมอ นี่จะเป็นช่วงเวลาที่จะแนะนำรหัสแอปพลิเคชันใหม่และในเวลาเดียวกันก็เป็นจุดเริ่มต้นของการหยุดทำงานที่จำเป็นในการทำให้แอปพลิเคชันใหม่เข้ามาแทนที่ สามารถเตรียมข้อมูลประวัติที่เก่ากว่าก่อนที่ข้อมูลสดจะถูกโอนย้ายและซิงค์โดยใช้เครื่องมือเช่น Oracle Golden Gate ในสถานการณ์เช่นนี้คุณจะสร้างฐานข้อมูลใหม่ที่มีผลต่อบทบาทของฐานข้อมูลเก่าได้อย่างมีประสิทธิภาพ การกำหนดนิยามใหม่ตามรุ่นเหมาะกว่าหากไม่จำเป็นต้องเปลี่ยนตาราง มีตัวเลือกมากมายให้พิจารณาและฉันคิดว่ามันยากที่จะให้กฎที่ดีที่ใช้งานได้เสมอ นี่จะเป็นช่วงเวลาที่จะแนะนำรหัสแอปพลิเคชันใหม่และในเวลาเดียวกันก็เป็นจุดเริ่มต้นของการหยุดทำงานที่จำเป็นในการทำให้แอปพลิเคชันใหม่เข้ามาแทนที่ สามารถเตรียมข้อมูลประวัติที่เก่ากว่าก่อนที่ข้อมูลสดจะถูกโอนย้ายและซิงค์โดยใช้เครื่องมือเช่น Oracle Golden Gate ในสถานการณ์เช่นนี้คุณจะสร้างฐานข้อมูลใหม่ที่มีผลต่อบทบาทของฐานข้อมูลเก่าได้อย่างมีประสิทธิภาพ การกำหนดนิยามใหม่ตามรุ่นเหมาะกว่าหากไม่จำเป็นต้องเปลี่ยนตาราง มีตัวเลือกมากมายให้พิจารณาและฉันคิดว่ามันยากที่จะให้กฎที่ดีที่ใช้งานได้เสมอ สามารถเตรียมข้อมูลประวัติที่เก่ากว่าก่อนที่ข้อมูลสดจะถูกโอนย้ายและซิงค์โดยใช้เครื่องมือเช่น Oracle Golden Gate ในสถานการณ์เช่นนี้คุณจะสร้างฐานข้อมูลใหม่ที่มีผลต่อบทบาทของฐานข้อมูลเก่าได้อย่างมีประสิทธิภาพ การกำหนดนิยามใหม่ตามรุ่นเหมาะกว่าหากไม่จำเป็นต้องเปลี่ยนตาราง มีตัวเลือกมากมายให้พิจารณาและฉันคิดว่ามันยากที่จะให้กฎที่ดีที่ใช้งานได้เสมอ สามารถเตรียมข้อมูลประวัติที่เก่ากว่าก่อนที่ข้อมูลสดจะถูกโอนย้ายและซิงค์โดยใช้เครื่องมือเช่น Oracle Golden Gate ในสถานการณ์เช่นนี้คุณจะสร้างฐานข้อมูลใหม่ที่มีผลต่อบทบาทของฐานข้อมูลเก่าได้อย่างมีประสิทธิภาพ การกำหนดนิยามใหม่ตามรุ่นเหมาะกว่าหากไม่จำเป็นต้องเปลี่ยนตาราง มีตัวเลือกมากมายให้พิจารณาและฉันคิดว่ามันยากที่จะให้กฎที่ดีที่ใช้งานได้เสมอ

มันเป็นเรื่องที่น่าสนใจโรนัลด์


5

คำตอบที่ดีจนถึงตอนนี้ ฉันจะเพิ่มคะแนนอีกสองสามข้อเพื่อพิจารณา

ก่อนอื่นเมื่อคุณสามารถทำการโยกย้ายด้วย SQL DML แบบง่ายคุณสามารถพึ่งพาเอนจิ้น SQL ของคุณเป็นส่วนใหญ่เพื่อให้แน่ใจว่าการประมวลผลแถวทั้งหมดจะสำเร็จ ฉันได้มีส่วนร่วมในการย้ายถิ่นที่ซึ่งการโยกย้ายบางครั้งมีความซับซ้อนมากขึ้นเล็กน้อย - มีการแปลงข้อมูลจริงเมื่อข้อมูลถูกย้ายไปยังโครงสร้างใหม่ ในกรณีเหล่านี้สิ่งสำคัญคือคุณต้องมีกระบวนการที่สามารถจัดการรายการต่อไปนี้:

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

อีกจุดที่ฉันเพิ่มคือมันเป็นสิ่งสำคัญที่จะต้องมีแผนสำหรับสิ่งที่คุณกำลังจะทำถ้า / เมื่อสิ่งต่าง ๆ ไม่เป็นไปตามแผนที่วางไว้ นี่เป็นฟังก์ชั่นการปรับใช้โดยรวม แต่เป็นสิ่งที่ดูเหมือนว่าจะมีการคัดสรรบ่อยครั้งมากพอที่ฉันคิดว่ามันคุ้มค่าที่จะกล่าวถึง


4

ภาพรวมของวิธีการทำ

จะเริ่มต้นด้วย

  • คุณมีฐานข้อมูล "after" ในการทดสอบ / UAT / อะไรก็ตาม "DB การทำงาน"
  • คุณมีฐานข้อมูล "ก่อน" ในการผลิต ดังนั้นใช้มันเพื่อสร้างสำเนาของการผลิตที่ไหนสักแห่ง = "อ้างอิงฐานข้อมูล" และอีกอันหนึ่งคือ "DB test script"
  • ฉันหวังว่าคุณจะมีสคริปต์การพัฒนาจำนวนมากพร้อม ALTER ของคุณเป็นต้นถ้าเป็นเช่นนั้นสำเนาการผลิตอีกฉบับที่ใช้สคริปต์การพัฒนาของคุณจะถูกนำมาใช้อย่างหมดจดและเพื่อประโยชน์ก็จะมีประโยชน์ = "change DB"

จากนั้นให้โหลดเครื่องมือ Red Gate เปรียบเทียบหรือสิ่งอื่น ๆเช่น Embarcadero SQL Change managerเปลี่ยนผู้จัดการ คุณไม่สามารถโยกย้ายได้อย่างง่ายดายหากไม่มี ค่าใช้จ่ายเล็กน้อยกับเวลาที่ประหยัด และที่สำคัญที่สุดสคริปต์ที่สร้างขึ้นมีการเปลี่ยนแปลงในธุรกรรมเดียวซึ่งหมายถึงการปรับใช้ที่สะอาด

ตอนนี้

  • สร้างการเปลี่ยนแปลงและสคริปต์ย้อนกลับโดยใช้เครื่องมือเปรียบเทียบระหว่าง "การอ้างอิง" และ "การเปลี่ยนแปลง"
  • ใช้สคริปต์การเปลี่ยนแปลงกับ "การทดสอบสคริปต์" และเปรียบเทียบกลับไปที่ "ฐานข้อมูลการทำงาน"
  • ใช้สคริปต์การย้อนกลับกับ "การทดสอบสคริปต์" และเปรียบเทียบกลับไปที่ "และเปรียบเทียบกลับไปที่" ฐานข้อมูลการทำงาน "

ตอนนี้คุณมีการเปลี่ยนแปลงที่ปลอดภัย + ทดสอบและสคริปต์ย้อนกลับที่จะใช้เมื่อใดก็ตาม

และแน่นอนคุณสำรองฐานข้อมูลก่อนที่ใด ๆการเปลี่ยนแปลงเพราะในที่สุดสถิติจะเกิดขึ้นในที่สุด

เครื่องมือ Red Gate ยังสามารถเปรียบเทียบกับโฟลเดอร์ที่อยู่ภายใต้การควบคุมของแหล่งที่มา จากนั้นเราจับภาพ ALTERs และอื่น ๆ ในการควบคุมซอร์สของเราแยกจากสคริปต์การเปลี่ยนแปลงจริง

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