DBA 看到 DB_FIN_2023、DB_HR_PROD,業務主管只關心「財務系統」、「人資系統」。溝通斷層導致:
參考 Rodney Landrum《SQL Server Magazine》DBA Knowledge Base 系列,擴充兩張核心表:
dbo.Applications
CREATE TABLE dbo.Applications (
AppID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
ApplicationName VARCHAR(100) NOT NULL UNIQUE
);
dbo.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,簡化查詢
CONSTRAINT UQ_Server_DB UNIQUE (ServerName, DatabaseName)
);
設計取捨:環境約 800 DB / 80 實例,資料量小,反正規化換取查詢簡潔(無需 JOIN 即得業務名稱)。
每日元資料同步後,執行:
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;
結果即為「新建立但未登記業務歸屬」的資料庫清單,可:
dbo.pAdd_Application
CREATE PROCEDURE dbo.pAdd_Application
@ServerName VARCHAR(50),
@DatabaseName VARCHAR(100),
@ApplicationName VARCHAR(100)
AS
BEGIN
-- 更新現有記錄的業務名稱
UPDATE dbo.Database_Applications
SET ApplicationName = @ApplicationName
WHERE ServerName = @ServerName
AND DatabaseName = @DatabaseName
AND ApplicationName IS NULL;
-- 新應用程式寫入主檔
IF NOT EXISTS (SELECT 1 FROM dbo.Applications WHERE ApplicationName = @ApplicationName)
BEGIN
INSERT INTO dbo.Applications (ApplicationName) VALUES (@ApplicationName);
PRINT 'Added new Application: ' + @ApplicationName;
END
-- 回傳新建立的對應關係
SELECT ServerName, DatabaseName, ApplicationName
FROM dbo.Database_Applications
WHERE ServerName = @ServerName
AND DatabaseName = @DatabaseName
AND ApplicationName = @ApplicationName;
END
sp_help_revlogin 同步登入 SID,構建完整「伺服器-資料庫-登入-應用」四維元資料模型Environment (Prod/UAT/Dev)、Criticality (P1/P2/P3)、OwnerTeam、RPO/RTO從「管理資料庫」進化到「管理業務資產」,讓 DBA 與業務、管理層說同一種語言,提升溝通效率與決策品質。