DBA的最佳选择—图形界面还是T-SQL命令?

图形

    在这篇文章里,我将从正反两个方面讨论SQL Server图形管理工具和T-SQL管理命令,我将通过明确的例子来支持我的观点。读完这篇文章后,欢迎你发邮件给我阐述你的观点,不管你支持还是反对我,我将根据你的想法更新这篇文章的相关部分。

    你也许在很多地方了解到真正的数据库管理员(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

     Q319697 FIX: SQL Enterprise Manager Restore to Point in Time Does Not Stop at Requested Time and the Database is Left in a Loading State

     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 

    Q296769 BUG: Can't Use SQL Enterprise Manager to Create Stored Procedures Containing Linked Server Objects 

    Q262607 BUG: SQL Server Enterprise Manager Does Not Create New Table in Default Filegroup 

    Q259551 FIX: Database Remains in Single User Mode with the Database Maintenance Plan Option "Repair Any Minor Problems" 

    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期待一个更好的企业管理器。

时间: 2024-10-03 05:37:24

DBA的最佳选择—图形界面还是T-SQL命令?的相关文章

《Android和PHP开发最佳实践》一2.8 Android图形界面

2.8 Android图形界面 前面介绍了Android应用界面(Android UI)的相关内容,不过对于一些游戏应用来说,这些UI控件往往派不上用场.此外,一些特殊的Android应用也有可能会使用到比较底层的图形类库,因此,本节我们就来学习Android的图形系统. Android系统中的图形大致可以分为2D图形和3D图形两类,2D图形的类库在android.graphics包下,本节将会重点介绍:3D图形的类库在android.opengl包下,由于这部分内容和游戏开发关系比较紧密,这部

详解Git图形界面的使用

图形界面 Git 的原生环境是终端. 在那里,你可以体验到最新的功能,也只有在那里,你才能尽情发挥 Git 的全部能力. 但是对于某些任务而言,纯文本并不是最佳的选择;有时候你确实需要一个可视化的展示方式,而且有些用户更习惯那种能点击的界面. 有一点请注意,不同的界面是为不同的工作流程设计的. 一些客户端的作者为了支持某种他认为高效的工作流程,经过精心挑选,只显示了 Git 功能的一个子集. 每种工具都有其特定的目的和意义,从这个角度来看,不能说某种工具比其它的"更好". 还有请注意,

Ubuntu server 10.04下安装图形界面

以下在Ubuntu server 10.04测试完成. 1.连接网络,你一定要确保网络通畅,如果你和我一样使用Wireless,那先找根网线插上,因为下面的安装都要通过网络下载组件的. 2.进入图形界面的命令是startX,敲击后会有安装xinit的提示. sudo apt-get install xinit 安装完,终端由黑色界面变成白底黑字.出现X型的鼠标指针. 3.安装环境管理器 如果你喜欢 GNOME,使用sudo apt-get install gdm KDE和Xface用户分别改为

图形界面编译工具Koala将SASS文件编译成CSS文件

文章简介:本文主要通过创建一个SASS项目为实例,带领大家如何使用Koala这样的图形界面编译工具来将你的SASS项目,将SASS文件编译成CSS文件. <SASS界面编译工具--Codekit的使用>一文中图解了"CodeKit"图形工具编译SASS项目.由于CodeKit是一款付费工具,而且只能在Mac中使用,因此国内众多SASS爱好者,或者初学者也就无法体验CodeKit工具编译SASS项目.幸运的是,有一款国产图形工具Koala和CodeKit功能极其类似,支持多个

利用图形界面从SQL导入导出到MySQL

从sql导出到mysql的方法很多,现介绍一种无需编程,直接利用sql和mysql里的图形界面进行导入导出的简单方法. 前提是已经安装了sqlserver客户端和mysql的图形界面管理工具phpmyadmin.在控制台根目录下打开sqlserver企业管理器,新建sqlserver组,根据自己的情况进行选择:然后新建sqlserver 注册,进行对sqlserver的连接.准备妥当后,下面就开始了: 首先打开数据转换服务,新建包,打开DTS界面,在连接中选择数据源进行配置.再选择将要转换到的目

基于JUnit的InstallAnywhere安装程序图形界面自动测试框架

JUnit 简介 JUnit 是一个开源的单元测试框架,用于编写和运行自动测试,由 Erich Gamma 和 Kent Beck 在 1997 年开发完成.它包括以下特性: 提供的 API 可以让你写出测试结果明确的可重用单元测试用例: 提供了三种方式来显示你的测试结果,而且还可以扩展: 提供了单元测试用例成批运行的功能: 超轻量级而且使用简单,没有商业性的欺骗和无用的向导: 整个框架设计良好,易扩展. InstallAnywhere 简介 InstallAnywhere(下文简称 IA)是一

CentOS6.8下非图形界面如何配置IP?

  CentOS6.8下非图形界面如何配置IP?          操作提示: 将输入定向到虚拟机中时,在虚拟机内部单击或者按Ctrl+G; 将输入定向到物理主机时,按Ctrl+Alt. 1 安装CentOS6.8系统 2 查看IP配置信息 输入命令行:ifconfig,即可得到如图1所示系统已有的IP配置信息. 图1 系统已有的IP配置信息 从图1中可以看到,IP配置信息中并没有显示网卡设备eth0的基本信息. 3 查看系统是否存在网卡设备eth0 输入命令:ls /ect/sysconfig

怎么从Linux字符界面切换到图形界面

  1.在字符界面输入startx或init 5 . 2.通过编辑/etc/inittab文件实现默认进入图形界面. 把其中的id:3:initdefault中的3改为5,这样以后系统启动后将直接进入文本模式. 以下是配置引导进入图形模式的etc/inittab文件的部分内容: #Default runlevel.The runlevels used by RHS are: # 0-halt(Do NOT set initdefault to this) # 1 -Single user mod

windows-Windows,C++图形界面,适当方法

问题描述 Windows,C++图形界面,适当方法 想做一个界面过得去的Windows桌面应用,MFC比较麻烦,看了一些界面库,但还不怎么了解,不知道用起来怎样.有什么可以推荐的方法,比较合适做一般的应用,比如CSS和HTML类似的方法. 解决方案 如果你希望做现代的,设计和实现分离的代码,优先的选择是使用wpf,wpf使用类似html的方式(xaml)来定义界面,因此把具体怎么绘图之类的事情和定义界面应该呈现成什么样的形式分离开来了,使得程序员不必考虑底层细节.并且wpf还可以充分利用wind