คุณเปลี่ยนแปลงเวอร์ชันฐานข้อมูล Oracle ของคุณอย่างไร


32

ฉันสนใจที่จะทราบว่าคนอื่นกำลังใช้วิธีการใดในการติดตามการเปลี่ยนแปลงที่เกิดขึ้นกับฐานข้อมูลรวมถึงการเปลี่ยนแปลงคำนิยามตารางวัตถุใหม่การเปลี่ยนแปลงแพ็คเกจ ฯลฯ คุณใช้ไฟล์แฟลตด้วยระบบควบคุมเวอร์ชันภายนอกหรือไม่? ทริกเกอร์? ซอฟต์แวร์อื่น ๆ ?


1
นี่คล้ายกับdba.stackexchange.com/questions/2/… - คุณอาจได้รับแนวคิดที่ไม่เฉพาะเจาะจงของออราเคิลสำหรับสิ่งนี้
Gaurav

@Gaurav ฉันเห็นแล้ว แต่ฉันต้องการคำตอบเฉพาะของ Oracle
Leigh Riffel

ไม่ใช่สิ่งที่คุณต้องการ แต่เกี่ยวข้อง: การกำหนดนิยามใหม่ตามรุ่น
Jack Douglas

คำตอบ:


22

ที่ไซต์ที่ฉันเคยทำงานการเปลี่ยนแปลงใด ๆ ที่จำเป็นต้องทำกับอินสแตนซ์การผลิตจะต้องถูกสคริปต์เป็นสคริปต์การเปลี่ยนแปลงที่จะทำงานใน SQL * Plus; นอกจากนี้สคริปต์ที่จำเป็นในการสร้างวัตถุสคีมาใหม่ทั้งหมดจากศูนย์จะต้องได้รับการปรับปรุงให้ทันสมัยอยู่เสมอ สคริปต์ทั้งหมดเหล่านี้ถูกตรวจสอบในการควบคุมการเปลี่ยนแปลงและย้ายจากที่นั่น

คุณสามารถตรวจสอบการเปลี่ยนแปลง DDL หรือใช้ทริกเกอร์ DDL เพื่อรับการเปลี่ยนแปลงหรือใช้ซอฟต์แวร์ต่าง ๆ เพื่อเปรียบเทียบสองอินสแตนซ์ แต่วิธีการเหล่านี้ไม่ได้พิจารณา บ่อยครั้งที่นักพัฒนาจะทำและเลิกทำการเปลี่ยนแปลงจำนวนมากกับสคีมา (เช่นการเปลี่ยนแปลงการทดสอบเล็กน้อยการสร้างตารางจำลองเพื่อทดสอบแนวคิดเป็นต้น) ก่อนที่จะทำการแก้ไขสิ่งที่จำเป็นต้องเปลี่ยนแปลงอย่างแท้จริง


1
ที่ทำงานของฉันมีเวิร์กโฟลว์คล้ายกับที่กล่าวถึงที่นี่
Sathyajith Bhat

10

ฉันคิดและอ่านมากเกี่ยวกับหัวข้อนี้ นี่คือหัวข้อกว้าง ๆ ของการควบคุมการกำหนดค่าและกลยุทธ์การจัดการการเปลี่ยนแปลง CMMI มีโดเมนในหัวข้อนี้ แม้แต่ใน บริษัท ที่ได้รับการรับรองมาตรฐาน CMMI 3-5 บางครั้งพวกเขาไม่ได้ควบคุมเวอร์ชันฐานข้อมูลของตน

คำถามนี้ควรได้รับการตอบในขณะที่การรักษาในใจต่อไปนี้ข้อ จำกัด

  1. คุณมีผู้รักษาประตูและ DDL ทุกตัวถูกดำเนินการโดยผู้รักษานี้
  2. บุคคลอื่นมีความสามารถในการดำเนินการคำสั่ง DDL
  3. คุณต้องการเพียงบันทึกสิ่งที่ได้ทำการเปลี่ยนแปลง แต่คุณไม่จำเป็นต้องเปรียบเทียบความแตกต่างมากมาย
  4. การออกแบบฐานข้อมูลของคุณทำผ่านเครื่องมือภายนอกจากนั้นเผยแพร่ไปยังฐานข้อมูล เครื่องมือภายนอกนี้สามารถสคริปต์ DDL ในการควบคุมแหล่งที่มาแม้ แต่ประเด็นสำคัญคือคุณต้องควบคุมแหล่งข้อมูลนี้แล้วเผยแพร่ไปยังฐานข้อมูล
  5. คุณไม่จำเป็นต้องรู้การเปลี่ยนแปลงในทันที แต่เป็นครั้งคราวเช่นรายชั่วโมงรายวัน
  6. คุณมีโครงสร้างเซิร์ฟเวอร์ที่กำหนดไว้: การพัฒนาการทดสอบการผลิต และกลยุทธ์การทดสอบที่ดี

คำตอบ 1

  • ถ้า 1, 4,6 เป็นจริงคุณสามารถใช้การควบคุมแหล่งภายนอก ตัวอย่างเช่น
    • Embercadero มีเครื่องมือจัดการการเปลี่ยนแปลงฐานข้อมูล ( http://www.embarcadero.com/products/db-change-manager-xe ) ซึ่งมีความสามารถในการแปลงวิศวกรรมฐานข้อมูล (Oracle) และวางไว้ในการควบคุมแหล่งที่มา จากนั้นนักพัฒนาจำนวนเท่าใด dba สามารถเข้าถึงสคีมานี้และทำการเปลี่ยนแปลงได้
    • Oracle SQL Designer นั้นคล้ายกับแนวทางนี้
    • ให้คุณสร้างสคริปต์ตารางเพื่อควบคุมแหล่งที่มา (svn, mercurial และอื่น ๆ ) และดูแลพวกมันให้เหมือนกัน
    • http://www.liquibase.orgเป็นวิธีการอัตโนมัติด้านบน
    • ฉันเขียนตัวสร้างโค้ดซึ่งสร้างคำสั่ง DAL (Data Access Layer), DDL (สร้างตาราง) เราให้การควบคุมแหล่งที่มาและรักษาไว้ที่นั่น ฉันคิดว่าโซลูชันเฉพาะเช่น liquibase อาจทำงานได้ดีขึ้น

วิธีนี้ใช้ได้ดีถ้ามี 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 คุณต้องจัดเก็บการเปลี่ยนแปลงทุกรุ่น

  1. เริ่มต้น
  2. V1
  3. V2
  4. V3
  5. ...

หากคุณใส่คอลัมน์ไว้ในตารางและตัดสินใจนำออกภายหลัง สคริปต์ของคุณจะแสดงสิ่งนี้ใน answer2 ขณะที่อยู่ใน answer1 คุณจะเห็นเฉพาะเวอร์ชันล่าสุด และคุณต้องเปรียบเทียบ V2 และ V1 เพื่อดูความแตกต่าง โดยส่วนตัวแล้วฉันชอบคำตอบ 1 ดีกว่าเนื่องจากฉันสามารถเปรียบเทียบ Start และ V3, V1 และ V3 ได้อย่างง่ายดาย ใน answer2 ฉันต้องค้นหาการเปลี่ยนแปลงทั้งหมด ในคำตอบ 2 สคริปต์ในการควบคุมแหล่งที่มามีแนวโน้มที่จะเป็นบิ๊กแบงสคริปต์ที่ซับซ้อน หาข้อมูลยาก

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

คำตอบ 4 ถ้าคุณมี 3 และ 5 โปรดทราบว่าในสถานการณ์นี้คุณไม่มีข้อ จำกัด 6 นั่นคือ: คุณไม่มีเซิร์ฟเวอร์การพัฒนาทดสอบและผลิตภัณฑ์ เซิร์ฟเวอร์การผลิตเท่านั้น แทนที่จะเป็นทริกเกอร์เพื่อเก็บการเปลี่ยนแปลง คุณใช้เครื่องมือภายนอกค้นหาการเปลี่ยนแปลงและเก็บสคริปต์ DDL ในตัวควบคุมแหล่งที่มา

หากเครื่องมือเหล่านี้มีความสามารถในการบันทึกว่าใครได้ทำการเปลี่ยนแปลงมันจะมีประโยชน์ โปรดทราบว่าในการแก้ปัญหานี้คุณหลวม DDL พิเศษซึ่งจะทำในช่วงเวลา



4

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


4

เราใช้Schema Version Controlสำหรับฐานข้อมูล 11g ของเรา แต่มีปัญหาบางอย่างกับซอฟต์แวร์ในวันที่ 11.2 ถ้ามันไม่ได้เป็นปัญหาที่เรายังคงทำงานอยู่มันจะเป็นผลิตภัณฑ์ที่ยอดเยี่ยม


2

เราเคยทำงานกับ Oracle SQL Designer ซึ่ง (ฉันเดา) ได้ถูกแทนที่ด้วย SQL Developer Data Modeler ทันที http://www.oracle.com/technetwork/developer-tools/datamodeler/overview/index.html

นั่นเป็นสิ่งที่ดีทีเดียว ความสามารถในการตั้งค่า DOMAINs สำหรับคอลัมน์และประหยัดเวลาในการสร้างคอลัมน์ทั่วไป (mtime, ctime ฯลฯ )


2

เราใช้ชุดเครื่องมือoracle-ddl2svn (ซึ่งฉันเป็นผู้เขียน) สำหรับการจัดเก็บ schema DDL ใน Oracle โดยอัตโนมัติ



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