在这篇文章里,我将从正反两个方面讨论SQL Server图形管理工具和T-SQL管理命令,我将通过明确的例子来支持我的观点。读完这篇文章后,欢迎你发clearcase/" target="_blank" >cc>邮件给我阐述你的观点,不管你支持还是反对我,我将根据你的想法更新这篇文章的相关部分。
你也许在很多地方了解到真正的数据库管理员(DBA)和系统管理员使用命令管理,只有新手和最终用户使用图形管理工具(GUI)。这是真的吗,也许是,也许不是。我认为这个观点和UNIX世界里命令行是主要的交互界面有点关系。
什么是我的最爱,企业管理器(Enterprise Manager)还是T-SQL命令?我的答案是通过查询分析器(Query Analyzer)执行T-SQL命令来完成大部分的管理工作。我依靠T-SQL命令来完成我每一天的数据库管理,因为T-SQL命令对我的这些管理工作可以完全控制而且非常灵活。
当我打一条命令时,我知道我做的是什么。当我按下向导对话框的“完成”按钮时,就不是这样了!在企业管理器中向导和对话框对我来说是一个黑箱。你知道向导将要完成你的工作,但你不知道它是如何完成的。
那么,这就意味这所有的数据库管理员要知道所有的T-SQL命令吗?不是的。但是你能用你的手指来完成命令也是非常有利的!比如,知道数据库的创建、修改、备份、还原、维护和监控等命令是一直受用的!
我们知道,所有的微软产品都带有友好的用户界面,例如SQL Server的企业管理器(一般叫EM或者SEM)。通过企业管理器,任何用户都可以方便的创建和维护数据库,但是这些用户被企业管理器所限制,其中一部分还被称为数据库管理员!他们是真正的数据库管理员吗?
离开了企业管理器他们还能工作吗?他们不能!但是,我们没有人天生就是数据库管理员!我们都是通过图形界面开始学习,但是随着学习的深入,任何一个好奇的数据库管理员都会意识到图形工具的限制,命令行的灵活。
对我个人来说,我有很多原因不喜欢企业管理器。主要的原因是性能受到限制!用命令行我可以同时直接做很多事情,企业管理器却要用很多的内存来打印基本画面,而且企业管理器使用的SQL DMO库有点慢。还有很多原因让我远离企业管理器。
那么我谈论的哪些是限制,哪些是优点呢?我们举一个简单的例子!一个新手被要求在有几百万行数据的表中在第一列前插入一个新列!
他愉快的使用企业管理器的设计表(Table Designer)功能去插入一列,当他按保存按钮后,你猜会发生什么?
在这之后,企业管理器会根据需要的结构创建一个新表,接着把旧表中的数据复制到新表中,然后删除旧表,重命名新表的名字为旧表的名字。记住,这是个有几百万行数据的表,很明显这将花掉他很多宝贵的时间去完成这个动作。但完成以后,你将会发现所有这个表的相关性信息将会丢失,就像这个表是新建的一样(你可以在修改前后用sp_depends命令来证明这一点)!
在这个例子中,我认为,一个有经验的数据库管理员会使用Alter Table命令来增加新列,他不会关心这个列在表中的位置,因为列的次序是无关紧要的。Alter Table命令可以在很短的时间内完成相同的工作。那么,企业管理器错在哪里呢?他在后台作了很多糟糕的工作(可以用事件探查器Profiler证实),在这个过程中打断对象之间的联系。他还能让你做一些在逻辑上有问题的工作(比如在特定的位置增加一列)。
这里还有一个例子。有一天,一个所谓的数据库管理员告诉我,重新命名一个数据库的名字是不可能的。我问他为什么?他说:在企业管理器中没有重命名数据库的选项。我打开SQL Server联机丛书,指给他看sp_renamedb的文件时,它的脸非常像:-)。这里企业管理器又错在哪里?他只是没有提供所有的函数功能。
我们再举一个例子。要是数据库管理员没有完全了解Backup和Restore命令,他们只能使用数据库维护计划器(Database Maintenance Plans)设置备份,那么怎么用数据库维护计划器做数据库差异备份呢?使用数据库维护计划器,没有人可以完成数据库差异备份!
还有一个例子。使用复制(Replication)向导,不可以订阅或者取消订阅一部分项目,你只能在复制中订阅或者取消订阅所有的项目。假如你使用复制的存储过程就不会有这个限制了!企业管理器又有什么问题吗?它只是没有提供完整的函数命令。所以,只会使用鼠标操作的用户无法利用一个命令或者产品的所有特性。
另外一些例子
在企业管理器中监控当前活动怎么样呢?在一个繁忙的生产服务器上,这是很慢的,它只是显示一些关于进程和锁的信息。
你有做过多少次错误的判断,只是因为你忘了在企业管理器中刷新节点的状态?
你有多少次白费功夫,因为企业管理器发生错误,或者不合法的访问,或者是其他内部的错误。
DBCC命令又怎么样呢?你无法在企业管理器中运行它。
最后,又有多少次因为你升级了一些东西(比如MDAC或MMC)使你的企业管理器因为DLL输入点错误而中断。
简单总结一下上面的内容:企业管理器会提供一些多余的东西,但也不能完成所有的函数功能。为什么这样呢?假如你编辑一个用户界面你就会理解:完成一个完整而且灵活的用户界面不是很容易的!
所以,一些复杂的任务不能在用户界面上实现。同时,SQL Server的开发团队中大部分程序员精通一些编程语言,像C,C++,C#,但不是SQL,这就是为什么企业管理器会在后台执行臃肿的T-SQL代码。我想微软可以较好的从MVP团队中发展一些SQL的高手来促进T-SQL的发展。
那么,我是否使用企业管理器呢?当然,我用!企业管理器可以做很多事情,比你自己写代码好。
例如:企业管理器是创建作业(Jobs)的最佳选择。创建作业需要调用很多MSDB数据库中复杂的存储过程,我常常用企业管理器创建作业,然后生成脚本,把它上传到Visual Source Safe (VSS)中去,然后根据不同的环境(比如,质量评价,分段处理,情况变化)配置脚本来处理作业。
还有,配置复制(Setting Up Replication)是一个非常复杂,需要调用无数的存储过程。企业管理器能出色的完成配置复制的过程,虽然复制向导没有提供一些高级选项。同样,我用企业管理器生成复制脚本,把这个脚本保存起来留到下次再要配置相似的复制的时候使用!
全文搜索是另外的一个例子。在我的开发环境中,我经常使用企业管理器来创建全文目录,然后生成脚本,把这个当作从开发到完成到运转到实施到维护整个环境的工程进展标志。
DTS也是一个例子,在企业管理器中创建DTS的界面是非常方便和直觉的。
现在你可以理解了,企业管理器有强大的脚本接受力,我尽量的使用它的这个特性。为什么?因为一旦我有一个脚本来完成某一个操作,我不必重新手工来完成这个工作,我只需要在需要的时候重新运行一下这个脚本就可以了!
这里有一些有关企业管理器错误和问题的列表。通过这些问题,你可以确信在你以后的数据库管理工作中应该如何使用企业管理器。
(顺便说一下,下面这些只是希望告诉你在使用企业管理器时你可能会碰到的问题,企业管理器仍然是一个有用的工具,只是微软还需要
花一点时间来修复这些问题!)
Q281347 BUG: Can't Append Columns to Tables with Large Number of Columns in SEM Table Designer
这个设计表的错误,是你无法在一个有299列的表中再增加列。
下面这些是在企业管理器中作备份和恢复的问题。
Q260235 BUG: Point-in-Time Recovery Adds Incorrect Seconds Value to Recovery Time Selected in SEM
Q239667 BUG: Design Table in SEM Does Not Preserve NFR Property for IDENTITY
用企业管理器中设计表功能来修改一个表不会保护“NOT FOR RRPLICATION”属性。
Q240839 PRB: Pressing ESC When Modifying SP in SEM Erases Changes Without Prompting
注意!我强烈建议不要使用企业管理器来编辑脚本,我认为SQL查询分析器是最好的工具。
Q268505 PRB: Deletion of Rows with the Same Values Behaves Differently in SEM and Query Analyzer
当你想要处理数据库表中的数据时,务必使用SQL查询分析器。这样,你就必须至少知道INSERT,DELETE和UPDATE命令。
Q237398 PRB: SQL Enterprise Manager Returns "Cannot Start Transaction While in Firehose Mode" Error
另一个用企业管理器来处理表中数据的问题。
Q305711 BUG: DBO User Does Not Display in Enterprise Manager
单用户模式下企业管理器有问题。
Q194014 PRB: Data Designer Does Not Support CASE Statements in Views
这个问题使你在定义视图时无法使用高级构造。
Q275618 FIX: Cannot Set SQLServerAgent Password to More Than 16 Characters in Enterprise Manager
Q285952 FIX: NO_TRUNCATE May Be Added to Backup Log Statement when You Perform a Log Backup from SEM
Q262607 BUG: SQL Server Enterprise Manager Does Not Create New Table in Default Filegroup
Q319246 FIX: Error Dialog Box During SQL Server Database Backup
这是一个我自己也碰到过的有趣的错误。当你使用企业管理器来备份和还原数据库时,它会弹出一个窗口“There is no floppy disk in the floppy driver.”。这个窗口不会在客户机上显示,只会在服务器上显示,所以你根本看不到它,除非你直接登陆那台服务器。这个窗口还可以阻止你打开和关闭数据库服务。
结论?假如你是一个新手,刚开始学习SQL Server,使用企业管理器是正确的。但是,假如你是需要为产品负责的工程师,或者想控制自己所做的工作,那么T-SQL命令和脚本使你的选择。就像我上面提到的,在某些情况下使用企业管理器也是恰当的。但是即使在这些情况下,我还是建议你打开SQL事件探查器来看看企业管理器到底做了些什么。
假如你使用企业管理器来生成脚本,一定要看一下全部的脚本,去掉那些你不想要的命令。我再次声明强调一下,企业管理器并不是一个非常糟糕的工具,只是里边有一些问题存在,你必须小心。假如微软花了足够的时间和精力在企业管理器上的话,它将是一个非常优秀的管理工具。让我们在Yukon期待一个更好的企业管理器。