ฉันสนใจที่จะทราบว่าคนอื่นกำลังใช้วิธีการใดในการติดตามการเปลี่ยนแปลงที่เกิดขึ้นกับฐานข้อมูลรวมถึงการเปลี่ยนแปลงคำนิยามตารางวัตถุใหม่การเปลี่ยนแปลงแพ็คเกจ ฯลฯ คุณใช้ไฟล์แฟลตด้วยระบบควบคุมเวอร์ชันภายนอกหรือไม่? ทริกเกอร์? ซอฟต์แวร์อื่น ๆ ?
ฉันสนใจที่จะทราบว่าคนอื่นกำลังใช้วิธีการใดในการติดตามการเปลี่ยนแปลงที่เกิดขึ้นกับฐานข้อมูลรวมถึงการเปลี่ยนแปลงคำนิยามตารางวัตถุใหม่การเปลี่ยนแปลงแพ็คเกจ ฯลฯ คุณใช้ไฟล์แฟลตด้วยระบบควบคุมเวอร์ชันภายนอกหรือไม่? ทริกเกอร์? ซอฟต์แวร์อื่น ๆ ?
คำตอบ:
ที่ไซต์ที่ฉันเคยทำงานการเปลี่ยนแปลงใด ๆ ที่จำเป็นต้องทำกับอินสแตนซ์การผลิตจะต้องถูกสคริปต์เป็นสคริปต์การเปลี่ยนแปลงที่จะทำงานใน SQL * Plus; นอกจากนี้สคริปต์ที่จำเป็นในการสร้างวัตถุสคีมาใหม่ทั้งหมดจากศูนย์จะต้องได้รับการปรับปรุงให้ทันสมัยอยู่เสมอ สคริปต์ทั้งหมดเหล่านี้ถูกตรวจสอบในการควบคุมการเปลี่ยนแปลงและย้ายจากที่นั่น
คุณสามารถตรวจสอบการเปลี่ยนแปลง DDL หรือใช้ทริกเกอร์ DDL เพื่อรับการเปลี่ยนแปลงหรือใช้ซอฟต์แวร์ต่าง ๆ เพื่อเปรียบเทียบสองอินสแตนซ์ แต่วิธีการเหล่านี้ไม่ได้พิจารณา บ่อยครั้งที่นักพัฒนาจะทำและเลิกทำการเปลี่ยนแปลงจำนวนมากกับสคีมา (เช่นการเปลี่ยนแปลงการทดสอบเล็กน้อยการสร้างตารางจำลองเพื่อทดสอบแนวคิดเป็นต้น) ก่อนที่จะทำการแก้ไขสิ่งที่จำเป็นต้องเปลี่ยนแปลงอย่างแท้จริง
ฉันคิดและอ่านมากเกี่ยวกับหัวข้อนี้ นี่คือหัวข้อกว้าง ๆ ของการควบคุมการกำหนดค่าและกลยุทธ์การจัดการการเปลี่ยนแปลง CMMI มีโดเมนในหัวข้อนี้ แม้แต่ใน บริษัท ที่ได้รับการรับรองมาตรฐาน CMMI 3-5 บางครั้งพวกเขาไม่ได้ควบคุมเวอร์ชันฐานข้อมูลของตน
คำถามนี้ควรได้รับการตอบในขณะที่การรักษาในใจต่อไปนี้ข้อ จำกัด
คำตอบ 1
วิธีนี้ใช้ได้ดีถ้ามี 6 คุณใส่คำสั่ง DDL ซึ่งเป็นรหัสในการควบคุมแหล่งที่มาและบำรุงรักษา ไม่มีใครจะเปลี่ยนเซิร์ฟเวอร์ทดสอบและฝ่ายผลิตโดยไม่พิจารณาถึงความเหมาะสม
ข้อเสียคือถ้าคุณทำการเปลี่ยนแปลงใด ๆ กับเซิร์ฟเวอร์การผลิตหรือการทดสอบด้วยเหตุผลใดก็ตามการแก้ไขข้อบกพร่องอย่างรวดเร็วการเปลี่ยนคีย์หลักเป็นต้นคุณต้องย้อนการเปลี่ยนแปลงนั้นไปยังเซิร์ฟเวอร์การพัฒนาด้วย เนื่องจากเซิร์ฟเวอร์การพัฒนาเป็นความจริงที่แท้จริงของคุณ ไม่ใช่วิธีอื่น ๆ
นี่เป็นวิธีที่มุ่งเน้นการพัฒนามาก แต่เมื่อคุณพัฒนาโมดูลใหม่มันก็ใช้งานได้ดีทีเดียว
ตอบ 2 - ถ้า 1 และ 6 จริง:
วิธีการที่คล้ายกันเพื่อตอบ 1 คือการบำรุงรักษาเซิร์ฟเวอร์การพัฒนา ทุกคนใช้มันเปลี่ยนมัน มากกว่าเวลาที่จะอัปเดต คุณใช้เครื่องมือเปรียบเทียบฐานข้อมูล รับสิ่งเหล่านี้เป็นสคริปต์วางไว้ภายใต้การควบคุมแหล่งที่มา
- Red Gate Schema Compare supports Oracle
- Embercadero has similar tool
- https://github.com/carbonfive/db-migration
- http://www.sumsoftsolutions.com/svco/ (I have not used this product but I believe it belongs to this category.)
- Rails Active Migration (http://www.oracle.com/technetwork/articles/kern-rails-migrations-100756.html)
ความแตกต่างระหว่างคำตอบที่ 1 และคำตอบที่ 2 คือในคำตอบที่ 1 ที่คุณรวบรวมคำสั่ง DDL สำหรับฐานข้อมูลทั้งหมดและคุณเก็บไว้ ในคำตอบ 2 คุณต้องจัดเก็บการเปลี่ยนแปลงทุกรุ่น
หากคุณใส่คอลัมน์ไว้ในตารางและตัดสินใจนำออกภายหลัง สคริปต์ของคุณจะแสดงสิ่งนี้ใน answer2 ขณะที่อยู่ใน answer1 คุณจะเห็นเฉพาะเวอร์ชันล่าสุด และคุณต้องเปรียบเทียบ V2 และ V1 เพื่อดูความแตกต่าง โดยส่วนตัวแล้วฉันชอบคำตอบ 1 ดีกว่าเนื่องจากฉันสามารถเปรียบเทียบ Start และ V3, V1 และ V3 ได้อย่างง่ายดาย ใน answer2 ฉันต้องค้นหาการเปลี่ยนแปลงทั้งหมด ในคำตอบ 2 สคริปต์ในการควบคุมแหล่งที่มามีแนวโน้มที่จะเป็นบิ๊กแบงสคริปต์ที่ซับซ้อน หาข้อมูลยาก
คำตอบ 3 ถ้า 3 เป็นจริง โปรดทราบว่าในสถานการณ์นี้คุณไม่มีข้อ จำกัด 6 นั่นคือ: คุณไม่มีเซิร์ฟเวอร์การพัฒนาทดสอบผลิตภัณฑ์ เซิร์ฟเวอร์การผลิตเท่านั้น คุณสามารถใช้ทริกเกอร์ DDL เพื่อบันทึกการเปลี่ยนแปลงที่ทำไว้ ส่วนใหญ่จะใช้เพื่อกีดกันผู้คนจากการใช้เงิน DDL ในทางที่ผิด หากมีปัญหาใด ๆ เกิดขึ้นคุณสามารถค้นหาความรับผิดชอบได้ สำหรับสิ่งนี้ในการทำงานทุกคนควรเชื่อมต่อกับบัญชีผู้ใช้และบัญชีแอปพลิเคชันไม่ควรมี DDL ใด ๆ เนื่องจากนักพัฒนาซอฟต์แวร์ทุกคนรู้จักบัญชีแอปพลิเคชันและสามารถใช้งานได้
คำตอบ 4 ถ้าคุณมี 3 และ 5 โปรดทราบว่าในสถานการณ์นี้คุณไม่มีข้อ จำกัด 6 นั่นคือ: คุณไม่มีเซิร์ฟเวอร์การพัฒนาทดสอบและผลิตภัณฑ์ เซิร์ฟเวอร์การผลิตเท่านั้น แทนที่จะเป็นทริกเกอร์เพื่อเก็บการเปลี่ยนแปลง คุณใช้เครื่องมือภายนอกค้นหาการเปลี่ยนแปลงและเก็บสคริปต์ DDL ในตัวควบคุมแหล่งที่มา
หากเครื่องมือเหล่านี้มีความสามารถในการบันทึกว่าใครได้ทำการเปลี่ยนแปลงมันจะมีประโยชน์ โปรดทราบว่าในการแก้ปัญหานี้คุณหลวม DDL พิเศษซึ่งจะทำในช่วงเวลา
เพิ่งพบบทแนะนำที่น่าสนใจเกี่ยวกับการใช้Liquibaseกับเวอร์ชัน Oracle
ในฐานข้อมูลบางส่วนของเราเราใช้ทริกเกอร์ DDL เพื่อตรวจจับการเปลี่ยนแปลงและบันทึกลงในตาราง จากนั้นเรามีเว็บอินเตอร์เฟสเพื่อดึงเวอร์ชันก่อนหน้านี้ขึ้นมา มันมีข้อเสียอย่างรุนแรงซึ่งเป็นสาเหตุที่ฉันกำลังมองหาทางเลือก แต่มันง่ายและดีกว่าไม่มีการควบคุมเวอร์ชัน
เราใช้Schema Version Controlสำหรับฐานข้อมูล 11g ของเรา แต่มีปัญหาบางอย่างกับซอฟต์แวร์ในวันที่ 11.2 ถ้ามันไม่ได้เป็นปัญหาที่เรายังคงทำงานอยู่มันจะเป็นผลิตภัณฑ์ที่ยอดเยี่ยม
เราเคยทำงานกับ Oracle SQL Designer ซึ่ง (ฉันเดา) ได้ถูกแทนที่ด้วย SQL Developer Data Modeler ทันที http://www.oracle.com/technetwork/developer-tools/datamodeler/overview/index.html
นั่นเป็นสิ่งที่ดีทีเดียว ความสามารถในการตั้งค่า DOMAINs สำหรับคอลัมน์และประหยัดเวลาในการสร้างคอลัมน์ทั่วไป (mtime, ctime ฯลฯ )
เราใช้ชุดเครื่องมือoracle-ddl2svn (ซึ่งฉันเป็นผู้เขียน) สำหรับการจัดเก็บ schema DDL ใน Oracle โดยอัตโนมัติ
ดูที่ DBmaestro TeamWork ซึ่งฐานข้อมูลบังคับใช้แนวทางการจัดการการเปลี่ยนแปลง
การเปิดเผยข้อมูล: ฉันทำงานให้กับ dbMaestro
ฉันไม่เคยใช้มัน แต่http://blog.gitora.com/เป็นตัวเลือกอื่น