首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

建立資料庫與應用程式對應關係元資料庫:讓 DBA 與業務溝通零障礙

     編輯:關於SqlServer

DBA 常面臨挑戰:伺服器停機通知需列出受影響「應用程式名稱」,而非資料庫名稱。IT 主管與業務單位不懂 DB_FIN_01 代表什麼,但清楚「財務系統」。本文分享建立「資料庫-應用程式對應元資料庫」的實務做法,讓技術與業務語言無縫轉換。

問題背景

  • 資料庫命名規範通常只有 DBA 看得懂
  • 計畫停機、異事件通知、容量規劃都需「應用程式視角」
  • 缺乏集中對應表,導致每次臨時查詢、人工對照、易遺漏

解決方案:兩張核心表

1. Applications (應用程式主檔)

CREATE TABLE [dbo].[Applications] (
    [AppID] INT IDENTITY(154,1) NOT NULL PRIMARY KEY,
    [ApplicationName] VARCHAR(100) NOT NULL
);

2. Database_Applications (資料庫-應用程式關聯)

CREATE TABLE [dbo].[Database_Applications] (
    [DB_AppID] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [ServerName] VARCHAR(50) NOT NULL,
    [DatabaseName] VARCHAR(100) NOT NULL,
    [ApplicationName] VARCHAR(100) NULL  -- 故意不正規化,存名稱而非 FK
);

為何不正規化 (存 ApplicationName 而非 AppID FK)?

  1. 資料量小:約 800 資料庫、80 實例,元資料表極小
  2. 查詢簡潔:單表 Database_Applications 即可產生報表,無需 JOIN
  3. 「焦土政策」載入:每日截斷重載 (除 Job/備份歷史),保留 ApplicationName 避免 FK 失效
  4. 彈性:應用程式重命名只需 UPDATE 單表

自動偵測新資料庫腳本

每日元資料載入後,執行以下查詢找出尚未登記的新資料庫:

SELECT D.[Server], D.DatabaseName
FROM dbo.Databases D
LEFT JOIN dbo.Database_Applications DA
    ON D.DatabaseName = DA.DatabaseName AND D.[Server] = DA.[ServerName]
WHERE DA.DB_AppID IS NULL
ORDER BY D.[Server], D.DatabaseName;
  • 結果即為「新建立但未登記應用程式」的資料庫清單
  • 可做成 SSRS 報表,每日推播至 DBA 手機 (BlackBerry/現代推播)
  • 作為更新元資料的待辦清單

新增/更新關聯預存程序

CREATE PROCEDURE [dbo].[pAdd_Application]
    @ServerName VARCHAR(50),
    @DatabaseName VARCHAR(100),
    @ApplicationName VARCHAR(100)
AS
BEGIN
    -- 1. 更新已存在但未指定應用的記錄
    UPDATE dbo.Database_Applications
    SET ApplicationName = @ApplicationName
    WHERE ServerName = @ServerName
      AND DatabaseName = @DatabaseName
      AND ApplicationName IS NULL;

    -- 2. 若應用程式不存在於主檔,自動新增
    IF (SELECT COUNT(*) FROM dbo.Applications WHERE ApplicationName = @ApplicationName) = 0
    BEGIN
        INSERT INTO dbo.Applications (ApplicationName) VALUES (@ApplicationName);
        PRINT 'Added new Application: ' + @ApplicationName + ' to Applications table';
        SELECT * FROM dbo.Applications WHERE ApplicationName = @ApplicationName;
    END

    -- 3. 回傳關聯記錄
    SELECT ServerName, DatabaseName, ApplicationName
    FROM dbo.Database_Applications
    WHERE ServerName = @ServerName
      AND DatabaseName = @DatabaseName
      AND ApplicationName = @ApplicationName;
END

整合與操作流程

  1. SSIS 套件每日蒐集所有實例資料庫清單 → 載入 dbo.Databases
  2. 執行偵測新資料庫查詢 → 產生待辦清單
  3. DBA 確認新資料庫用途 → 執行 pAdd_Application 登記
  4. 停機通知/報表直接查 Database_Applications 產出應用程式清單

刻意不將 pAdd_Application 整合入 SSIS 最後步驟,保留人工確認環節,避免誤登記、確保 DBA 掌握新資料庫動態。

擴充建議

  • 加入 Environment (Prod/Dev/Test)、Criticality (高/中/低)、OwnerTeam 欄位
  • 整合 CMDB / IT 服務管理工具 (ServiceNow 等) 雙向同步
  • 建立 API 供自動化部署管線 (CI/CD) 直接登記

結語

「資料庫-應用程式對應元資料庫」成本極低 (兩張表、一個預存程序、一個每日查詢),效益極高:讓 DBA 用業務語言說話,讓業務單位聽得懂技術影響。這是從「管理資料庫」進化到「管理業務資料服務」的關鍵一步。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved