你可能注意到,我沒有規(guī)范化dbo.Database_Applications表。如果我規(guī)范化,我會只存儲兩個區(qū)域:一個與存儲我的應用元數(shù)據(jù)的表有關的外鍵,和一個與我的元數(shù)據(jù)庫相對應的外鍵。我有自己的原因:
我沒有處理大量的數(shù)據(jù):我有大概800個數(shù)據(jù)庫,這些SQL Server數(shù)據(jù)庫在我的環(huán)境里發(fā)布80個實例。雖然這對于一個數(shù)據(jù)庫管理員來說是個很大的環(huán)境,但是它既不轉變成在我的元數(shù)據(jù)表里的大量紀錄,也不轉變成數(shù)據(jù)庫的巨大字節(jié)。
不是通過dbo.Applications表的主鍵,而是包含表中的應用程序名,我可以通過只訪問dbo.Database_Applications表產(chǎn)生我的主要應用程序元數(shù)據(jù)報告(key Application Metadata report)。
我的環(huán)境中的SQL元數(shù)據(jù)庫使用“焦土政策”人口處理方法,除了SQL Agent Job History和Backup History,其他的表都被每天刪除和重新載入。我發(fā)現(xiàn)在
dbo.Database_Applications表中保存信息可以使我的生活變得很容易。
每日從我的環(huán)境中載入數(shù)據(jù)后,我可以通過以下腳本得到在我的環(huán)境中產(chǎn)生的任何新的數(shù)據(jù)庫的良好的陳述。
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
這個查詢的結果提供任何數(shù)據(jù)庫的清單,這些SQL Server數(shù)據(jù)庫產(chǎn)生于上次我更新應用元數(shù)據(jù)和服務器時,它不僅是跨域的數(shù)據(jù)庫創(chuàng)建活動的通知,也是致力于更新兩個數(shù)據(jù)庫來符合應用程序信息的數(shù)據(jù)清單。這個查詢也適合SQL Server Reporting Services報告的數(shù)據(jù)表,而當我不在辦公室時,SQL Server Reporting Services報告也為我提供了一個新的數(shù)據(jù)庫到我的黑莓(BlackBerry)的日常通知。
最后,我創(chuàng)建了以下存儲程序,由此用任何新的數(shù)據(jù)庫信息來合并dbo.Applications表和dbo.Database_Applications 表。它接受三個參數(shù):服務器,數(shù)據(jù)庫和應用程序。如果應用程序已經(jīng)不存在于dbo.Applications表中,它就會被補充。然后一個記錄被插入到服務器/數(shù)據(jù)庫/應用程序關系中的dbo.Applications表。
CREATE PROCEDURE [dbo].[pAdd_Application] @ServerName varchar(50), @DatabaseName varchar(100), @ApplicationName varchar(100) AS --Add any new databases created, but not recorded in the repository, to the repository UPDATE dbo.Database_Applications SET ApplicationName = @ApplicationName WHERE ServerName = @ServerName AND DatabaseName = @DatabaseName AND ApplicationName IS NULL --Determine if there is already an application for this database in the repository, if not, then add it 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 --List the new record in the repository SELECT ServerName, DatabaseName, ApplicationName FROM dbo.Database_Applications WHERE ServerName = @ServerName AND DatabaseName = @DatabaseName AND ApplicationName = @ApplicationName
雖然我可以很容易地把這個存儲程序的執(zhí)行整合為SQL Server集成服務(SSIS)程序包中的最后一步,而這個程序包能夠組裝我的存儲數(shù)據(jù)庫,但我選擇不這樣做,這是為了在我的環(huán)境里,我能密切關注圍繞新的SQL Server數(shù)據(jù)庫創(chuàng)造而展開的活動。
原文:http://database.ctocio.com.cn/452/11516452.shtml
本文鏈接:http://www.95time.cn/tech/program/2010/7942.asp
出處:IT專家網(wǎng)
責任編輯:bluehearts
上一頁 SQL Server數(shù)據(jù)庫對于應用程序的關系 [1] 下一頁
◎進入論壇網(wǎng)絡編程版塊參加討論
|