以下的文章主要是介绍SQL Server数据库与其实际应用元数据我前两天在相关网站看见SQL Server数据库与其实际应用元数据的资料觉得挺好就拿出来供大家分享希望会给大家带来一些帮助在此方面
以下的文章主要是介绍SQL Server数据库与其实际应用元数据我前两天在相关网站看见SQL Server数据库与其实际应用元数据的资料觉得挺好就拿出来供大家分享希望会给大家带来一些帮助在此方面
我常被问到如何把驻留在物理服务器/SQL 实例上的SQL Server数据库转变为它们相应的应用程序名称在准备计划好的服务器停机通知时这种需要就产生了但在我的组织内与IT经理或非技术人员沟通时这也是有价值的如果你不是数据
我常被问到如何把驻留在物理服务器/SQL 实例上的数据库转变为它们相应的应用程序名称在准备计划好的服务器停机通知时这种需要就产生了但在我的组织内与IT经理或非技术人员沟通时这也是有价值的
如果你不是数据库管理员或特定数据库的应用分析师你通常会无视数据库的命名规则而这些数据库支持着你每日依赖的应用程序这就是为什么当需要产生时在适当的位置上由元数据库来提供转化很重要
专家解答
大部分数据库管理员拥有某种形式的数据库元SQL Server数据库他们依赖其来跟蹤范围很广的Microsoft SQL Server环境我利用连接的服务器和分布式数据库访问来建立一个已经在我的环境中使用了七年的元数据库它不是漂亮的但它是功能性很强的
跟很多IT开发者和数据库管理员一样即使它有自身的不足我还是为自己的创造感到骄傲它很慢不像它可以的那样最新型也不像它应该的那样安全
自从读了年月和月Rodney Landrum在SQL Server杂志上发表的关于SQL Server集成服务(SSIS)和数据库管理员知识库(DBA Repositories)的文章我知道是时候采取别人的解决方法了这对于我的环境来说是完美的而一些改动也是容易采纳的
年月一篇后续文章在SQL Server杂志上发表在这篇文章里Rodney更新了他的解决方法我下载了代码在我的测试环境里审核并迅速把它纳入产品中当大家普遍地为这个解决方法所提供的而感到高兴时在它包中缺少的一方面是把数据库关联到应用程序的能力
通过在他的解决方法中增加两张额外的表我可以在我的“土生土长”元数据库中增加应用程序元数据到我现在使用的SQL Server杂志的方法中
增加到我数据库中的应用元数据包括创建两张表dboApplications专为存储所有程序的应用名称而这些程序在我的环境中依赖于SQL Server数据库还有
dboDatabase_Applications它保存SQL 实例SQL Server数据库和应用程序之间的关系
Applications Table CREATE TABLE [dbo][Applications] (
[AppID] [int] IDENTITY() NOT NULL
[ApplicationName] [varchar]() NOT NULL )
Database_Applications Table
CREATE TABLE [dbo][Database_Applications] (
[DB_AppID] [int] IDENTITY() NOT NULL
[ServerName] [varchar]() NOT NULL
[DatabaseName] [varchar]() NOT NULL
[ApplicationName] [varchar]() NULL )
你可能注意到我没有规范化dboDatabase_Applications表如果我规范化我会只存储两个区域一个与存储我的应用元数据的表有关的外键和一个与我的元数据库相对应的外键我有自己的原因
我没有处理大量的数据我有大概个数据库这些SQL Server数据库在我的环境里发布个实例虽然这对于一个数据库管理员来说是个很大的环境但是它既不转变成在我的元数据表里的大量纪录也不转变成数据库的巨大字节
不是通过dboApplications表的主键而是包含表中的应用程序名我可以通过只访问dboDatabase_Applications表产生我的主要应用程序元数据报告(key Application Metadata report)
我的环境中的SQL元数据库使用“焦土政策”人口处理方法除了SQL Agent Job History和Backup History其他的表都被每天删除和重新载入我发现在
dboDatabase_Applications表中保存信息可以使我的生活变得很容易
每日从我的环境中载入数据后我可以通过以下脚本得到在我的环境中产生的任何新的数据库的良好的陈述
SELECT D[Server] DDatabaseName FROM dboDatabases D LEFT JOIN dboDatabase_Applications DA ON DDatabaseName = DADatabaseName AND D[Server] = DA[ServerName] WHERE DADB_AppID IS NULL ORDER BY D[Server] DDatabaseName
这个查询的结果提供任何数据库的清单这些SQL Server数据库产生于上次我更新应用元数据和服务器时它不仅是跨域的数据库创建活动的通知也是致力于更新两个数据库来符合应用程序信息的数据清单这个查询也适合SQL Server Reporting Services报告的数据表而当我不在办公室时SQL Server Reporting Services报告也为我提供了一个新的数据库到我的黑莓(BlackBerry)的日常通知
最后我创建了以下存储程序由此用任何新的数据库信息来合并dboApplications表和dboDatabase_Applications 表它接受三个参数服务器数据库和应用程序如果应用程序已经不存在于dboApplications表中它就会被补充然后一个记录被插入到服务器/数据库/应用程序关系中的dboApplications表
CREATE PROCEDURE [dbo][pAdd_Application]
@ServerName varchar()
@DatabaseName varchar()
@ApplicationName varchar()
AS Add any new databases created
but not recorded in the repository to the repository
UPDATE dboDatabase_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 dboApplications
WHERE ApplicationName = @ApplicationName) =
BEGIN INSERT INTO dboApplications (ApplicationName)
VALUES (@ApplicationName)
PRINT Added new Application:
+ @ApplicationName + to Applications table
SELECT * FROM dboApplications
WHERE ApplicationName = @ApplicationName
END List the new record in the repository
SELECT ServerName DatabaseName ApplicationName
FROM dboDatabase_Applications
WHERE ServerName = @ServerName
AND DatabaseName = @DatabaseName
AND ApplicationName = @ApplicationName
虽然我可以很容易地把这个存储程序的执行整合为SQL Server集成服务(SSIS)程序包中的最后一步而这个程序包能够组装我的存储数据库但我选择不这样做这是为了在我的环境里我能密切关注围绕新的SQL Server数据库创造而展开的活动