จะเริ่มเข้าใจฐานข้อมูลที่ไม่รู้จักได้ที่ไหน


12

ดังนั้นชื่อเรื่องจึงสรุป

ฉันมีฐานข้อมูล SQL Server ที่มี 28 ตารางและ 86 โพรซีเดอร์ที่เก็บไว้ซึ่งต้องถูกวิศวกรรมย้อนกลับ ฉันค่อนข้างแน่ใจว่าบางตารางไม่เคยใช้และไม่ใช้ procs ทั้งหมดเช่นกัน

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

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

ฉันขอโทษด้วยถ้าคำถามแบบนี้ไม่ได้ถูกถามที่นี่


1
ฉันไม่ทำตาม คุณสามารถเข้าถึงฐานข้อมูลได้อย่างสมบูรณ์และคุณรู้ว่าคุณมี 86 ขั้นตอนการจัดเก็บเพื่อย้อนกระบวนการ ดังนั้นเหล่านี้เป็นขั้นตอนการเข้ารหัสที่เก็บไว้? คุณต้องการวิศวกรรมย้อนกลับอะไรบ้าง?
paparazzo

โอ้ใช่. คำถามของคุณสมเหตุสมผล: db ใช้งานได้ แต่เป็นระเบียบสมบูรณ์ ดัชนีที่ไม่ดีประเภทข้อมูลที่ไม่ถูกต้องไม่เป็นมาตรฐานและทั้งหมดนั้นสรุปว่าเป็นประสิทธิภาพที่แย่ ... แต่ก็ใช้งานได้
Human_AfterAll

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

แน่นอน! ขอบคุณสำหรับทิป! การเตรียมความพร้อมทางอารมณ์เป็นขั้นตอนที่สำคัญอย่างหนึ่ง (ถ้าไม่มี) ขั้นตอนที่สำคัญที่สุด
Human_AfterAll

คำตอบ:


5

สามขั้นตอนอย่างรวดเร็วเพื่อให้คุณเริ่มต้น:

1)

USE DatabaseName

SELECT    [TableName] = OBJECT_NAME(object_id),
last_user_update, last_user_seek, last_user_scan, last_user_lookup
FROM    sys.dm_db_index_usage_stats
WHERE    database_id = DB_ID('DatabaseName')

จะบอกคุณว่าครั้งสุดท้ายที่ใช้ดัชนีแต่ละครั้งรวมถึงดัชนีคลัสเตอร์ อย่างน้อยก็ให้รสชาติที่จะเข้าถึงตาราง (ซึ่งไม่ได้)

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

คำแนะนำที่เป็นประโยชน์: หากคุณสามารถแก้ไขสตริงการเชื่อมต่อที่แอปใช้เลยให้ผนวก "; ชื่อแอปพลิเคชัน = AppNameGoesHere" เพื่อให้คุณสามารถเรียกใช้การกรองการสืบค้นกลับในชื่อแอปพลิเคชันนั้น ๆ ปฏิบัติที่ดีอยู่แล้ว

3) รับรุ่นของแอปพลิเคชันที่ทำงานบนเซิร์ฟเวอร์ที่ไม่ได้ใช้งานจริง พัฒนารายการของการทดสอบตามพฤติกรรมสำหรับแอปพลิเคชัน ("เมื่อผู้ใช้คลิกที่ปุ่มรายการใหม่มันจะสร้างรายการใหม่สำหรับผู้ใช้นั้น" ฯลฯ ) เริ่มต้นการลบออบเจ็กต์ที่คุณรู้สึกว่าไม่มีผลต่อการทดสอบ (ฉันใช้รูปแบบเช่น objectName_DEPRECATED_YYYYMMDD - โดยวันที่เป็นวันที่ฉันวางแผนจะลบจริง ๆ ) ยืนยันการทดสอบทั้งหมดของคุณอีกครั้ง

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

โชคดี!


7

ทางออกที่ดีที่สุดของคุณในการเริ่มต้นคือจัดทำเอกสารฐานข้อมูลของคุณโดยใช้SQL Power Doc

เอกสารเซิร์ฟเวอร์ SQL & Windows โดยใช้ Windows PowerShell

SQL Power Doc เป็นชุดของสคริปต์และโมดูล Windows PowerShell ที่ค้นหาจัดทำเอกสารและวินิจฉัยอินสแตนซ์ของ SQL Server และการกำหนดค่า Windows OS และเครื่องที่รองรับ SQL Power Doc ทำงานร่วมกับ SQL Server ทุกรุ่นจาก SQL Server 2000 ถึง 2014 และ Windows Server และผู้ใช้ระบบปฏิบัติการ Windows ทุกรุ่นจาก Windows 2000 และ Windows XP ผ่าน Windows Server 2012 R2 และ Windows 8 SQL Power Doc ยังสามารถ ทำเอกสารฐานข้อมูล Windows Azure SQL

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


ขอบคุณ นี่จะเพิ่มชุดของขั้นตอนที่ฉันจะต้องทำเพื่อที่จะเข้าใจฐานข้อมูลที่ถูกสาปแช่งนี้
Human_AfterAll

เฮ้! ฉันแย่มากกับ PowerShell และไม่สามารถผ่านNew-Item -type directory -path "$([Environment]::GetFolderPath([Environment+SpecialFolder]::MyDocuments))\WindowsPowerShell\Modules"ขั้นตอนนั้นไปยังSqlServerInventory ReadMe.txtไฟล์ได้ ฉันไม่ได้รับตำแหน่งที่ฉันควรแทรกเส้นทางไปยังโฟลเดอร์ที่สร้างขึ้นใหม่และตำแหน่งที่ควรแทรกชื่อโฟลเดอร์ที่สร้างขึ้นใหม่
Human_AfterAll

3

เนื่องจากครั้งหนึ่งฉันเคยอยู่ในสถานการณ์ที่คล้ายกันฉันสามารถบอกคุณได้ว่านี่จะเป็นงานที่ยากและเป็นไปไม่ได้ ฉันมีซอร์สโค้ด (> 100k บรรทัดของโค้ด), บริการที่ทำงานอยู่, ฐานข้อมูลที่รัน (~ 50 ตาราง) และไม่มีเอกสารประกอบและไม่มีใครถามเกี่ยวกับมันยกเว้นผู้ใช้แอปพลิเคชันนี้และสำเนาของฐานข้อมูลและบริการที่ทำงานอยู่ สภาพแวดล้อมการทดสอบ (ซึ่งเป็นหมายเลขรุ่นก่อนหน้า แต่ไม่มีซอร์สโค้ด) ข้อกำหนดอีกประการหนึ่งก็คือบริการต่างๆต้องทำงานตลอด 24/7 เพราะเป็นบริการภายนอกกับลูกค้า สถานการณ์ดังกล่าวเกิดขึ้นเนื่องจากพนักงานส่วนใหญ่ออกเดินทางในเวลาเดียวกันรวมถึงผู้พัฒนาและเอกสารประกอบที่หายไปในความวุ่นวาย ฉันใช้เวลามากกว่า 6 เดือนกว่าจะได้ภาพรวมคร่าวๆ / เอกสาร มีตารางและฟังก์ชั่นมากมายที่ไม่มีผลเพราะใช้สำหรับใช้ในอนาคตหรือไม่ได้ใช้งานอย่างเต็มที่ คุณสมบัติผิดพลาดหรือไม่รองรับหรือไม่ได้เผยแพร่ หลังจาก 6 เดือนฉันต้องเขียนเอกสารใหม่เพราะฉันค้นพบสิ่งใหม่หรือความสัมพันธ์ระหว่างสิ่งต่าง ๆ และฉันมีข้อผิดพลาดมาก่อน

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

หากคุณต้องการทำวิศวกรรมย้อนกลับจริงๆฉันขอแนะนำขั้นตอนต่อไปนี้

  • ทำการสำรองข้อมูลของระบบทั้งหมด! (ขั้นแรก: คุณจะไม่มีทางรู้ว่าคุณจะต้องการมันข้อที่สอง: คุณต้องการในขั้นตอนต่อไป)
  • สร้างสำเนาของระบบ (บริการและฐานข้อมูล) ใหม่เพื่อทำงานกับและเขียนวิธีการสร้างเพราะคุณจะต้องทำสิ่งนี้หลายครั้งในเดือนถัดไปเพราะคุณจะทำมันซ้ำหลายครั้งในขณะที่วิศวกรรมย้อนกลับ
  • สร้าง ER-diagram พร้อมการพึ่งพาระหว่างตาราง
  • ดูและบันทึกการอ้างอิงของแต่ละตารางกระบวนงานที่เก็บไว้ ... เนื่องจากสิ่งเหล่านี้ส่วนใหญ่ไม่รวมอยู่ใน ER-diagrams
  • เข้าใจในสิ่งที่ซอฟต์แวร์ควรทำโดยขอให้ผู้ใช้และใช้มันเอง (ควรทำในระบบทดสอบ)
  • หากซอร์สโค้ดของบริการพร้อมใช้งาน: รับภาพรวมของมันและเรียกไปยังฐานข้อมูลและจัดทำเอกสาร (doxygen เป็นเครื่องมือที่ดีสำหรับการรับเอกสารคร่าวๆที่มีลำดับชั้นการเรียกใช้ฟังก์ชัน)
  • ลองรับภาพรวมคร่าวๆของ DB โดยดูที่ tablenames และคอลัมน์
  • ดูฐานข้อมูลขณะใช้งาน
  • ด้วย 4 ขั้นตอนก่อนหน้านี้แบ่งตารางใน 3 หมวดหมู่ (อาจแตกต่างกันไปขึ้นอยู่กับแอปพลิเคชันของคุณ): ข้อมูลแบบคงที่ (ข้อมูลที่ไม่เปลี่ยนแปลงในขณะที่ใช้เซิร์ฟเวอร์เช่นการกำหนดค่าเซิร์ฟเวอร์, enums เพื่อ จำกัด ค่าที่ถูกต้องในตารางอื่น ๆ , ... ), ข้อมูลการกำหนดค่า (ข้อมูลที่ไม่ค่อยเปลี่ยนแปลงเช่นการตั้งค่าผู้ใช้, ... ) และข้อมูล OLTP (ข้อความผู้ใช้ในเซิร์ฟเวอร์แชท, โพสต์ในฟอรั่ม, ค่าการประเมินในระบบควบคุมเครื่องจักร, การต่อสู้ในเกมออนไลน์ ... )
  • ทำซ้ำ 5 ขั้นตอนก่อนหน้าจนกว่าคุณจะพอใจหรือยอมแพ้
  • เอกสารและรหัสราวกับคนที่จบลงด้วยการรักษารหัส / ระบบ / ฐานข้อมูลของคุณจะเป็นโรคจิตรุนแรงที่รู้ว่าคุณอยู่ที่ไหน

ขอให้คุณโชคดี ;)


1
-1 ใครก็ตามที่คิดว่ามันเป็น"ง่ายและราคาถูกกว่าที่จะเริ่มต้นจากศูนย์และเขียนใหม่ทั้งหมด"ของแอปพลิเคชันขนาดใหญ่ที่ไม่เคยมีมาก่อน นี่คือคำแนะนำสำหรับมือสมัครเล่น
BlueRaja - Danny Pflughoeft

@ BlueRaja-DannyPflughoeft มันขึ้นอยู่กับชนิดขนาดและสถานะของแอปพลิเคชันและข้อกำหนดสำหรับความเข้ากันได้ย้อนหลัง ฉันเขียนแอปพลิเคชันใหม่อีกครั้งตั้งแต่เริ่มต้นด้วย LoC ประมาณ 100k ไม่มีความต้องการที่จะลอกเลียนแบบต้นฉบับ แต่ถูกปล่อยออกมาเป็นเวอร์ชั่นหลักใหม่พร้อมกับเพิ่มฟังก์ชั่นใหม่, ลบฟังก์ชั่นเก่าบางส่วน, อินเทอร์เฟซผู้ใช้ที่ทันสมัยและความสามารถในการใช้ข้อมูลเก่า รหัสเดิมนั้นเป็นระเบียบและภัยพิบัติด้านความปลอดภัยที่เราเร็วกว่าเวลาโดยประมาณในการล้างรหัสเก่า
H. Idden

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

2

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

getting the SQL Power Doc to work.

หากคุณทำตามขั้นตอนในหน้าเอกสารของพวกเขามันจะทำงานได้อย่างง่ายดาย เพิ่งเริ่มจากด้านบน

https://sqlpowerdoc.codeplex.com/wikipage?title=Guide%20For%20PowerShell%20Beginners

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