การควบคุมเวอร์ชันด้วย SQL Server


14

ฉันเริ่มโครงการใหม่และใช้ SVN (กับ Tortoise) เป็นระบบควบคุมเวอร์ชันของฉัน ฉันสงสัยว่ามันเป็นไปได้ที่จะรักษาฐานข้อมูล SQL Server ด้วยระบบเดียวกันหรือไม่

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

ฉันเคยเห็นและได้ยินเกี่ยวกับ Red Gate แล้ว แต่ฉันกำลังมองหาบางสิ่งบางอย่างฟรี (หรืออย่างน้อยก็ราคาถูกมาก) ฉันรู้ว่าฉันสามารถเขียนบางสิ่งบางอย่างด้วยตัวเองได้ แต่ฉันไม่ได้พยายามที่จะใช้เวลากับมัน

สิ่งหนึ่งที่ผมได้เจอเป็นแพคเกจที่มาเปิดใส่กันเรียกว่าScriptDB4Svn มีใครเคยใช้อันนี้มาก่อนหรือไม่ ดีไหม มันสามารถทำสิ่งที่ฉันต้องทำและมันค่อนข้างง่ายที่จะได้รับการติดตั้ง?


1
Has anyone used this before? Is it good? Can it do the things I need it to do and is it pretty simple to get setup?ทำไมคุณถึงกลัวที่จะลองด้วยตัวคุณเอง? เพียงแค่คว้ามันและเล่นไปรอบ ๆ
yannis

@ YanisRizos - ฉันจะทำอย่างไรถ้าฉันไม่ได้รับการตอบสนองมากเกินไปฉันแค่อยากลองและประหยัดเวลาและดูว่ามีใครเคยทำงานกับมันมาก่อนหรือถ้าใครเคยลองและทดสอบเลย เหมาะกับความต้องการของฉันดังนั้นฉันสามารถประหยัดเวลาการทดสอบได้

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

@YannisRizos - ขอบคุณ ฉันจะกระโดดเข้าสู่การแชทเพื่อดูว่าฉันสามารถรับข้อเสนอแนะบางอย่างสำหรับ ScriptDB4Svn และกลับมาที่นี่เพื่อรับการปรับปรุงสำหรับคำถามหลัก แก้ไข: ดูเหมือนว่าฉันไม่สามารถแชทได้จนกว่าฉันจะมี 20 ตัวแทน อืมฉันอดทนด้วย

คำตอบ:


2

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

BTW: ฉันใช้เครื่องมือ RedGate แล้วมันค่อนข้างเนียนและคุ้มค่ากับเงินที่จ่าย


ดังนั้นโดยทั่วไปฉันจะทำงานของฉันใน Management Studio แล้วส่งออกสคริปต์ไปยังไดเรกทอรี SVN และทำทุกครั้งที่ฉันทำงาน (แทนที่คนเก่าทุกครั้งที่ส่งออก) ฉันเดาว่ามันจะใช้ได้ มันจะทำให้ฟังก์ชั่น SVN ของการย้อนกลับและสิ่งต่าง ๆ แต่ใช่มันจะยุ่งยาก บางทีฉันอาจตรวจสอบการกำหนดราคา RedGate และดูว่ามันคุ้มค่าหรือไม่

@Scott - วิธีการทำงานด้วยตนเองคุณต้องคิดถึงการพัฒนา SQL ของคุณแตกต่างกัน วัตถุในเวอร์ชันสคริปต์นั้นเป็นวัตถุ "เป็นทางการ" และวัตถุหนึ่งใน SQL นั้นเป็นเพียงรุ่นที่รวบรวม เหมือนกับซอร์สโค้ดของคุณ
JohnFx

ฉันตัดสินใจที่จะทำสิ่งต่าง ๆ ด้วยตนเองและอาจใช้สคริปต์โดยใช้ความช่วยเหลือในลิงก์ที่ Mike Nakis จัดหาให้ แต่ตอนนี้ฉันจะใช้ GUI ในตัวภายใน Management Studio เพื่อส่งออกสคริปต์สร้าง DB เมื่อฉันเสร็จแล้ว ทำงานและตรวจสอบสิ่งเหล่านั้นในและให้ SVN รักษาเวอร์ชันนั้นไว้ เนื่องจากฉันตัดสินใจที่จะทำสิ่งต่าง ๆ ด้วยตนเองคุณจะได้รับคำตอบสำหรับการชี้ให้เห็นว่าฉันไม่จำเป็นต้องใช้เครื่องมือในการทำสิ่งนี้ :)

1

ดูเหมือนว่าคุณจะติดตั้ง Microsoft เป็นส่วนใหญ่ คุณสามารถดูในโครงการฐานข้อมูล (ก่อนหน้านี้รู้จักกันในนาม DataDude) พวกเขาเปลี่ยน T-SQL เป็นภาษาชั้นหนึ่งใน Visual Studio คุณสามารถ:

  • รวบรวมโครงการ - มันไม่เพียง แต่สร้างสคริปต์สุดท้ายเท่านั้น แต่ยังทำให้แน่ใจว่ามีชื่อวัตถุ ฯลฯ อยู่
  • ทำการวิเคราะห์โค้ดแบบสแตติก - ตัวอย่างเช่นตรวจสอบให้แน่ใจว่าคุณอ้างถึงออบเจ็กต์เสมอโดยรวมสคีมา (เช่น[dbo]ในกรณีส่วนใหญ่) เพื่อเพิ่มประสิทธิภาพที่ดี 30%
  • สร้างสคริปต์ที่ต่างกันโดยให้มันเปรียบเทียบรุ่นที่แตกต่างกันของโครงการ
  • อัพเดตโครงการของคุณจากฐานข้อมูลหรือสคริปต์ (reverse engineer)
  • Intellisense
  • ไม่มีเครื่องมือสร้างไดอะแกรม

พวกเขารวมรหัสของคุณและรหัสฐานข้อมูลของคุณอย่างดีภายใต้การควบคุมแหล่งที่มาเช่นกัน ถ้าคุณสร้างและสคริปต์วัตถุฐานข้อมูลของคุณ (แทนที่จะใช้ Davinci Tools ใน SSMS) คุณก็ต้องใช้ IDE หนึ่งอันซึ่งก็ดี


0

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

ในโครงการปัจจุบันของฉันเราไม่ได้พัฒนาแอพพลิเคชั่นใน Ruby แต่เรายังคงใช้ Rails เพื่อจัดการฐานข้อมูล ฉันจะไม่ทำอย่างอื่น


คำแนะนำใด ๆ ที่จะอธิบายสิ่งนี้เพิ่มขึ้นอีกเล็กน้อยและเข้าสู่การตั้งค่าสิ่งนี้

ที่จริงแล้วไม่ใช่ความคิดที่ดีในการใช้ Rails ร่วมกับเทคโนโลยี. NET
เลือก

บทที่เกี่ยวกับการโยกย้าย Rails ( guide.rubyonrails.org/migrations.html ) นี่น่าจะเพียงพอสำหรับคุณในการเริ่มต้นและให้พื้นฐานที่จำเป็นสำหรับคุณว่าทำไมนี่จึงเป็นความคิดที่ดี @altern - เนื่องจากคุณเพียงแค่ใช้ Rails เพื่อจัดการและปรับรุ่นฐานข้อมูลสิ่งนี้ควรมีผลกระทบกับและเทคโนโลยี. NET คุณสามารถเข้าถึงและใช้ฐานข้อมูลในลักษณะเดียวกับที่คุณไม่ได้ใช้ราง ฉันจะไม่เห็นการอ้างอิงถึงข้อกังวลของคุณ IronRuby ไม่ใช่การนำ Net มาใช้กับ Ruby และ Rails หรือไม่?
Vinnie

> IronRuby ไม่ใช่การนำ Net มาใช้กับ Ruby และ Rails หรือไม่? IronRuby เป็นการนำ. NET ของRubyมาใช้ ฉันไม่แน่ใจว่า Rails ทำงานได้อย่างถูกต้องกับ IronRuby ข้อโต้แย้งทั่วไปของฉันกับการใช้ Rails เพื่อจุดประสงค์ในการกำหนดรุ่น db คือ Ruby และเทคโนโลยีที่เกี่ยวข้อง (RoR, migratinos) มีช่วงการเรียนรู้ที่ค่อนข้างสูงชันโดยเฉพาะอย่างยิ่งสำหรับงานง่าย ๆ เช่นการกำหนดรุ่น db คุณสามารถใช้เพื่อจุดประสงค์อื่นไม่ใช่เพื่อการย้ายระบบเท่านั้น มิฉะนั้นจะเพิ่มความซับซ้อนของโครงการโดยไม่มีผลในเชิงบวกมากนัก
เลือก

0

เรื่องนี้ได้รับการพูดคุยกันก่อนหน้านี้ใน stackoverflow: /programming/2750278/sql-server-2008-create-database-script-schema-data-with-command-line

นอกจากนี้บทความภายนอกนี้ยังให้ข้อมูลเพิ่มเติมhttp://www.sqlteam.com/article/scripting-database-objects-using-smo-updatedพร้อมกับรหัสตัวอย่างในรูปแบบของแอปพลิเคชัน Windows

เนื่องจากสิ่งที่คุณต้องการทำคือสิ่งที่ฉันได้ทำด้วยตัวเองสำหรับ MS Access ฉันจะบอกคุณว่าฉันได้ทำอะไรในกรณีที่มันทำให้คุณมีความคิด: ฉันได้เขียนโมดูลที่เรียกว่า Ado2Xml ซึ่งแปลง schema และข้อมูลของ ADO ใด ๆ ฐานข้อมูลที่สามารถเข้าถึงได้ไปยัง xml และย้อนกลับ มันรู้แค่เกี่ยวกับตารางและมุมมองเท่านั้น ไม่มีขั้นตอนการจัดเก็บไม่มีทริกเกอร์ไม่มีอะไร อย่างไรก็ตามในกรณีของคุณโมดูลนี้จะถูกแทนที่ด้วยเครื่องมือที่คุณจะพบว่าสิ่งใดที่คุณต้องการด้วย MS-SQL ดังนั้นทุกครั้งที่แอปพลิเคชันของฉันเปิดตัวมันจะเปรียบเทียบการประทับเวลาของฐานข้อมูลกับการประทับเวลาของไฟล์ xml ที่บันทึกไว้ หากไฟล์ xml เป็นไฟล์ล่าสุดจะเป็นการทำลายฐานข้อมูลและเรียกใช้ Ado2Xml เพื่อสร้างไฟล์ขึ้นมาใหม่จากไฟล์ xml เมื่อแอปพลิเคชันของฉันยกเลิกจะเป็นการย้อนกลับ: จะเรียกใช้ Ado2Xml เพื่อส่งออกฐานข้อมูลไปยังไฟล์ xml อันที่จริงแล้ว วัตถุ ADO ที่แยก schema ของฐานข้อมูลมีสาเหตุบางอย่างช้ามากทำให้กระบวนการส่งออกใช้เวลาสักครู่ ดังนั้นเพื่อหลีกเลี่ยงไม่ต้องรอในแต่ละครั้งที่แอปพลิเคชันของฉันจะยกเลิกและ Visual Studio เปลี่ยนจากเค้าโครงการดีบักเป็นเค้าโครงการแก้ไขก่อนที่แอปจะยกเลิกแอปของฉันจะเรียกใช้แอปภายนอกเพื่อทำการส่งออก ทันที


ลิงก์ทั้งสองที่คุณระบุเป็นสิ่งที่ฉันอาจสนใจในการตั้งค่าด้วยตนเองดังนั้นโดยทั่วไปฉันสามารถทำตามขั้นตอนแบบแมนนวลที่ฉันทำอยู่โดยอัตโนมัติ ขอบคุณสำหรับสิ่งเหล่านั้น!

0

ใช่ฉันใช้เครื่องมือที่คล้ายกัน (พัฒนาขึ้นเอง) ในโครงการก่อนหน้านี้ มันจะสคริปต์ทุกตารางมุมมอง, sprocs, ทริกเกอร์, ฯลฯ เป็นไฟล์. sql แต่ละไฟล์ จากนั้นเรามีสคริปต์ที่ทำงานทุกคืนเพื่อ "ตรวจสอบ" ว่าทุกอย่างในฐานข้อมูล "การพัฒนา" ของเราสะท้อนให้เห็นในการควบคุมแหล่งที่มา

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

ปัญหาคือถ้าคุณลืมที่จะเรียกใช้เครื่องมือรหัสจะ "ทำงาน" (และการทดสอบหน่วยจะผ่าน) เพราะฐานข้อมูลนั้น "ถูกต้อง" แต่ sprocs / ตารางใหม่จะไม่สามารถควบคุมแหล่งที่มา

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

มันค่อนข้างน่ารำคาญเพราะมันทำให้ยากต่อการทำงานเกี่ยวกับการเปลี่ยนแปลงที่ขยายออกไปหลายวัน แต่มันก็ดีกว่าไม่มีอะไร ...


คุณสามารถอธิบายรายละเอียดเกี่ยวกับThen, we had a script that ran every night to "validate" that everything in our "development" database was reflected in source control.? ขอบคุณสำหรับคำตอบของคุณ

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