Bắt đầu từ đâu để hiểu một cơ sở dữ liệu chưa biết


12

Vì vậy, tiêu đề tổng hợp nó lên.

Tôi đã có một cơ sở dữ liệu SQL Server với 28 bảng và 86 thủ tục được lưu trữ phải được thiết kế ngược. Tôi khá chắc chắn rằng một số bảng không bao giờ được sử dụng và không phải tất cả các procs cũng được sử dụng.

Vấn đề lớn nhất là tất cả các Dịch vụ Windows được tạo để sử dụng với DB này và tất cả các tài liệu về phần mềm và cơ sở dữ liệu đều bị mất và người thiết kế toàn bộ hệ thống không thể tìm thấy.

Tôi đã quản lý để tạo một sơ đồ ER để giúp tôi hiểu các mối quan hệ, nhưng vì tôi không có kinh nghiệm trong quản trị cơ sở dữ liệu, tôi không biết tôi nên bắt đầu từ đâu.

Ngoài ra tôi xin lỗi nếu loại câu hỏi này không có nghĩa là được hỏi ở đây.


1
Tôi không làm theo. Bạn có toàn quyền truy cập vào db và bạn biết bạn có 86 thủ tục lưu trữ để thiết kế đảo ngược. Vậy đây là những thủ tục lưu trữ được mã hóa? Chính xác những gì bạn cần để đảo ngược kỹ sư?
paparazzo

Ô đúng rồi. Câu hỏi của bạn có ý nghĩa: db đang hoạt động, nhưng nó là một mớ hỗn độn. Các chỉ mục kém, các loại dữ liệu sai, không được chuẩn hóa và tất cả đều được tính là hiệu suất kém ... Nhưng nó hoạt động.
Human_AfterTất cả

Hãy chắc chắn rằng bạn cũng chuẩn bị tinh thần. Ôm và chấp nhận thử thách của bạn. Không làm như vậy sẽ gây ra ma sát tinh thần trong toàn bộ hành trình của bạn.
Christiaan Westerbeek

Chắc chắn rồi! Cảm ơn vì tiền hỗ trợ! Chuẩn bị cảm xúc là một trong những bước quan trọng nhất (nếu không có).
Human_AfterTất cả

Câu trả lời:


5

Ba bước rất nhanh để giúp bạn bắt đầu:

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')

Sẽ cho bạn biết lần cuối mỗi chỉ mục được sử dụng, bao gồm cả chỉ mục được nhóm. Vì vậy, ít nhất cung cấp cho bạn một hương vị mà bảng nào đang được truy cập (và bảng nào không.)

2) Bật phiên Sự kiện mở rộng (hoặc theo dõi Hồ sơ phía máy chủ nếu bạn đang chạy tiền SQL 2012) trong khoảng một giờ trong khi ứng dụng đang được sử dụng. Bạn cũng có thể yêu cầu người dùng thực hiện các hành động khác nhau trong ứng dụng theo một thứ tự cụ thể để bạn có thể tương quan với dấu vết / phiên.

Một gợi ý hữu ích: nếu bạn có thể sửa đổi chuỗi kết nối mà ứng dụng sử dụng, hãy thêm "; Tên ứng dụng = AppNameGoesHere" để bạn có thể chạy lọc theo dõi trên Tên ứng dụng cụ thể đó. Thực hành tốt dù sao đi nữa.

3) Nhận phiên bản của ứng dụng hoạt động trên máy chủ không sản xuất. Phát triển danh sách các thử nghiệm dựa trên hành vi cho ứng dụng ("Khi người dùng nhấp vào nút Mục mới, nó sẽ tạo một mục mới cho người dùng đó", v.v.) Bắt đầu xóa các đối tượng mà bạn cảm thấy không có liên quan đến các thử nghiệm bằng cách đổi tên chúng (Tôi sử dụng định dạng như objectName_DEPRECATED_YYYYMMDD - với ngày là ngày tôi dự định thực sự xóa nó.) Hoàn nguyên tất cả các bài kiểm tra của bạn.

Thông qua sự kết hợp của phiên Sự kiện mở rộng, DMV sử dụng chỉ mục và xóa mềm, bạn sẽ có thể xác định các đối tượng chính đang được ứng dụng sử dụng và có sự đồng thuận chung về đối tượng nào làm gì.

Chúc may mắn!


7

Đặt cược tốt nhất của bạn để bắt đầu là ghi lại cơ sở dữ liệu của bạn bằng SQL Power Doc

Máy chủ SQL và Tài liệu Windows bằng Windows PowerShell

SQL Power Doc là một tập hợp các tập lệnh và mô-đun Windows PowerShell khám phá, ghi lại và chẩn đoán các phiên bản SQL Server cũng như các cấu hình máy và hệ điều hành Windows bên dưới của chúng. SQL Power Doc hoạt động với tất cả các phiên bản SQL Server từ SQL Server 2000 đến 2014 và tất cả các phiên bản Windows Server và hệ điều hành Windows tiêu dùng từ Windows 2000 và Windows XP thông qua Windows Server 2012 R2 và Windows 8. SQL Power Doc cũng có khả năng ghi lại cơ sở dữ liệu Windows Azure SQL.

Lưu ý: Tôi đã sử dụng nó và nó sẽ cung cấp cho bạn một khởi đầu thực sự tốt trong việc ghi chép và hiểu trường hợp máy chủ cơ sở dữ liệu của bạn.


Cảm ơn. Điều này sẽ bổ sung thêm vào chuỗi các bước tôi sẽ phải thực hiện để hiểu DB chết tiệt này
Human_AfterTất cả

Chào! Tôi thực sự rất tệ với PowerShell và không thể vượt qua New-Item -type directory -path "$([Environment]::GetFolderPath([Environment+SpecialFolder]::MyDocuments))\WindowsPowerShell\Modules"bước đó trên SqlServerInventory ReadMe.txttệp. Tôi không biết nên chèn đường dẫn vào thư mục vừa tạo và nơi tôi nên chèn tên thư mục vừa tạo.
Human_AfterTất cả

3

Vì tôi đã từng ở trong một tình huống tương tự, tôi có thể nói với bạn rằng đây sẽ là một công việc khó đến không thể. Tôi chỉ có mã nguồn (> 100 nghìn dòng mã), dịch vụ đang chạy, cơ sở dữ liệu đang chạy (~ 50 bảng) và không có tài liệu nào và không ai hỏi về nó ngoại trừ người dùng ứng dụng này và một bản sao của cơ sở dữ liệu và dịch vụ đang chạy trong một môi trường thử nghiệm (trước đó là một vài số phiên bản nhưng không có mã nguồn). Một yêu cầu khác là các dịch vụ phải chạy 24/7 vì chúng ở bên ngoài đối với khách hàng. Tình huống phát sinh do hầu hết các nhân viên rời đi cùng lúc bao gồm các nhà phát triển và tài liệu biến mất trong hỗn loạn. Tôi đã mất hơn 6 tháng để có được một tổng quan / tài liệu sơ bộ. Có nhiều bảng và hàm không có tác dụng vì chúng được sử dụng trong tương lai hoặc chưa bao giờ được thực hiện đầy đủ, các tính năng bị lỗi hoặc không dùng hoặc không được phát hành. Sau 6 tháng tôi phải viết lại tài liệu vì tôi phát hiện ra những điều mới hoặc mối quan hệ giữa mọi thứ và tôi đã có những giả định sai lầm trước đây.

Tại sao tôi nói điều này? Bởi vì đôi khi trong tình huống như vậy, dễ dàng hơn và rẻ hơn để bắt đầu từ đầu và viết một ứng dụng mới đáp ứng đầy đủ các yêu cầu của ứng dụng cũ (hoặc ứng dụng mới nếu chúng thay đổi theo thời gian hoặc bạn muốn phát hành chính mới). Hoặc để cho bạn biết những gì bạn sẽ phải mong đợi.

Nếu bạn thực sự muốn thiết kế ngược lại, tôi sẽ đề xuất các bước sau:

  • Tạo một bản sao lưu của toàn bộ hệ thống! (Thứ nhất: Bạn sẽ không bao giờ biết khi nào bạn sẽ cần nó. Thứ hai: Bạn cần nó cho bước tiếp theo)
  • tạo lại một bản sao của hệ thống (dịch vụ và cơ sở dữ liệu) để làm việc và viết ra cách tạo ra nó bởi vì bạn chắc chắn sẽ phải làm điều này nhiều lần trong những tháng tiếp theo bởi vì bạn sẽ làm hỏng nó nhiều lần trong khi kỹ thuật đảo ngược
  • tạo sơ đồ ER với các phụ thuộc giữa các bảng
  • xem và ghi lại các phụ thuộc của từng bảng, thủ tục được lưu trữ, ... bởi vì những thứ này hầu hết không được bao gồm trong sơ đồ ER
  • hiểu phần mềm nên làm gì bằng cách hỏi người dùng và sử dụng phần mềm đó (tốt nhất nên làm trên hệ thống kiểm tra)
  • Nếu mã nguồn của các dịch vụ khả dụng: hãy tìm hiểu tổng quan về nó và gọi tới DB và ghi lại tài liệu đó (doxygen là công cụ tốt để nhận tài liệu thô với phân cấp cuộc gọi chức năng)
  • cố gắng có được cái nhìn tổng quan về DB bằng cách xem các tablenames và các cột của chúng
  • xem cơ sở dữ liệu trong khi sử dụng nó
  • với 4 bước trước đó chia các bảng thành 3 loại (có thể khác nhau tùy theo ứng dụng của bạn): dữ liệu tĩnh (dữ liệu không thay đổi trong khi chạy máy chủ như cấu hình máy chủ, enum để hạn chế giá trị hợp lệ trong các bảng khác bằng cách sử dụng khóa ngoài cho nó , ...), dữ liệu cấu hình (dữ liệu hiếm khi thay đổi như cài đặt người dùng, ...) và dữ liệu OLTP (tin nhắn của người dùng trong máy chủ trò chuyện, bài đăng trên diễn đàn, giá trị mua sắm trong hệ thống điều khiển máy, chiến đấu trong trò chơi trực tuyến, ...)
  • lặp lại 5 bước trước cho đến khi bạn hài lòng hoặc bạn bỏ cuộc
  • Tài liệu và mã như thể người cuối cùng duy trì mã / hệ thống / cơ sở dữ liệu CỦA BẠN sẽ là một kẻ tâm thần bạo lực, người biết bạn sống ở đâu.

Chúc bạn may mắn ;)


1
-1, Bất cứ ai nghĩ rằng "dễ dàng hơn và rẻ hơn để bắt đầu từ đầu và viết lại tất cả" của một ứng dụng lớn chưa bao giờ phải thực sự làm điều đó. Đây là lời khuyên nghiệp dư.
BlueRaja - Daniel Pflughoeft

@ BlueRaja-DannyPflughoeft Nó phụ thuộc vào loại, kích cỡ và trạng thái của ứng dụng và yêu cầu về khả năng tương thích ngược. Tôi đã viết lại một ứng dụng từ đầu với khoảng 100 nghìn LoC. Không có yêu cầu bắt chước bản gốc nhưng nó được phát hành dưới dạng phiên bản chính mới với một số chức năng mới được thêm vào, một số chức năng cũ bị xóa, giao diện người dùng được hiện đại hóa và khả năng sử dụng dữ liệu cũ. Mã ban đầu là một thảm họa lộn xộn và bảo mật đến nỗi chúng tôi đã nhanh hơn thời gian ước tính để dọn sạch mã cũ.
H. I đột ngột

Đặc biệt là nếu mã chứa nhiều cách giải quyết không có giấy tờ, điều đó thường xảy ra, rằng một thay đổi nhỏ đã làm hỏng một cái gì đó mô phỏng hoàn toàn không liên quan. Nhưng tôi đồng ý với bạn, rằng nhiều người đánh giá thấp chi phí (nhân lực, tiền bạc, ..) từ đầu vì họ không biết hoặc đánh giá thấp các yêu cầu đầy đủ của ứng dụng, đặc biệt là khi nó đã phát triển và thay đổi qua nhiều năm.
H. Idden

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.