很多开发人员都想成为一名数据库管理员,也有很多人一开始就把自己定位成为一名DBA,DBA究竟需要掌握些什么知识和技能呢?以下是我       做DBA工作和面试DBA时,整理的一些DBA方面的三十个问题,三十个大问题中还有许多小的问题,涵括了SQL Server 2008 R2培训比较多的技术知识点,与大家分享下,希望给有志做DBA的朋友们一些帮助:1. char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储过程和使用T-SQL查询数据有啥不一样;2. 系统DB有哪些,都有什么作用,需不需要做备份,为什么;损坏了如何做还原(主要是master库);3. 有哪些操作会使用到TempDB;如果TempDB异常变大,可能的原因是什么,该如何处理;4. Index有哪些类型,它们的区别和实现原理是什么,索引有啥优点和缺点;如何为SQL语句创建合适的索引,索引创建时有哪些需要注意的项,如何查看你创建的索引是否被使用;如何维护索引;索引损坏如何检查,怎么修复;T-SQL有更好的索引存在,但是运行时并没有使用该索引,原因可能是什么;5. 视图上我们能建索引吗,如果能建的话,会啥好处和坏处;视图上建索引和表上建索引有啥区别;6. Job信息我们可以通过哪些表获取;系统正在运行的语句可以通过哪些视图获取;如何获取某个T-SQL语句的IO、Time等信息;7. 在线系统,一个表有五千万记录,现在要你将其中的两千万条记录导入到另一台服务器的某个表中,导完后,需要将这两千万数据删除,你预备如何处理,优缺点是什么;8. 数据库服务器报磁盘空间不足,你将如何应对,要求尽快恢复;9. 临时表、表变量、CTE(公用表表达式)有啥区别和联系,保存位置有啥不一样,使用时如何决定选哪种;10. SQLServer有哪些隔离级别,默认级别是哪个;数据库有哪些主要的锁类型;行版本控制是如何实现的;11. 死锁如何跟踪;阻塞如何跟踪和查找;发现有问题的语句后,如何进行处理;用Profile做跟踪时,一般我们需要跟踪哪些事件;12. Windows日志主要有哪几种,SQL Server培训日志一般保留几个,什么情况下会产生新的SQL日志;数据库日志恢复模式有哪几种,区别是什么;数据库日志突然变得很大,而且你无法收缩,可能的原因是什么,怎么查找原因,分别将如何处理;13. 分区表和分区视图是什么概念,一般是在什么情况下使用,有啥好处;14. 如何比较两个同结构的表数据的差异;如果表损坏了,如何修复;如何在备份文件有问题的情况下尽量还原数据;如何将一个表的Identity属性归零;15. CheckPoint和LazyWriter区别;DDL Trigger 和 DML Trigger有啥用,区别是啥;16. Mirroring 和Logshipping 的区别和使用场景;SQLServer的Mirroring与Oracle的哪像技术比较接近,它们的区别是啥;17. Mirroring的搭建步骤,Mirroring三种模式区别,Mirroring 中同步和异步的原理和要求,搭建了Mirroring后,需要对数据库日志做什么处理;18. Replication配置和使用场景;Replication有哪几种模式;PUSH和PULL有啥区别;搭建Replication后会产生一个什么库;报错时用什么来查看报错的具体语句,清理掉某个库的Replication使用什么语句,查看同步链信息主要通过哪些表;19. Replication发布端的表能truncate吗,为什么;Replication Identity列如何处理、缺失字段错误如何处理、主键冲突错误如何处理、如何跳过指定的错误、订阅端表被删除了如何处理、大规模改动数据如何处理;某条同步链因为其中的某个表一次性改动数据很大造成同步链的严重延时,要求尽快恢复同步链,如何处理。20. SSB(Service Broker)使用场景,如何创建,都会创建些什么对象,有啥优缺点,主要通过什么方式实现不同服务器之间的消息传递;可以通过哪些方式排错;21. 跟踪数据库数据的变更有哪些方法,它们(CDC(Change Data Capture)、CT(Change Tracking)、Trigger等)使用上的优缺点;22. SQL调优步骤,如何来判断SQL语句存在问题,怎么定位问题,如何解决这些问题;23. 数据库故障排查步骤,如何处理紧急数据库问题;24. 如何考虑和制定数据库备份计划;公司要求对一个非常大的数据库或者表做备份,而且要求数据量尽可能少丢失,你可能会采用什么方法;25. 如果要你做数据库监控,你会关注那些指标(包括SQLServer和OCP培训),如何制定性能基线,你使用过哪些监控软件;26. 数据库迁移步骤;重建一套比较大的测试系统(最少10个数据库实例),如果原来DB数据量都不大,但DB比较多,新搭建的系统数据都不需要,如何快速实现;27. 创建Cluster 简要步骤,最少需要几个IP,需要安装些什么服务,需要哪些固定的磁盘,Raid如何设置,磁盘如何划分;SQLServerCluster与Mysql Cluster 和 Oracle RAC的区别等;28. 如果遇到一个性能不理想、代码复杂的存储过程,很难通过数据库方面的调优来解决问题,你如何说服开发人员修改它(可能开发人员并不愿意修改);29. 你有没有遇到过因为你的误操作造成系统故障发生的情况,你当时是如何处理的;如果没有,假定你误删了一个重要的表,你该如何处理;30. 你准备成为一名什么样的DBA培训,为此你将如何准备(或者你有怎样的职业规划,准备怎样度过你的DBA生涯);如果你进入公司,你最想获得的是什么。

解决方案 »

  1.   


    1、
                              Char(n)                       Varchar(n)               Nvarchar(n)
              
    N 最大值                   8000                          8000                    4000 数据长度                固定(不足用空格填充)     可变(实际数据长度)     可变(实际数据长度)可存储最多                 8000                         8000                      4000
    英文(数字)最多汉字数                 4000                          4000                     4000英文(数字)所占字节        1                               1                      2汉字所占字节                2                               2                      2检索速度                    快                             慢                      慢
      

  2.   

    大牛们都偷笑了,这些都是DBA基础的东西,只要你做过DBA有实际的操作经验,基本上都可以回答。
      

  3.   

    查看日志文件实际的使用情况,一般都是占用很大的disk空间,实际用到50%都不到,可以考虑shrink日志文件。
      

  4.   


    --截断事务日志
    backup   log   数据库名   with   no_log
    go--收缩数据库
    dbcc   shrinkdatabase(数据库名)
    go 
      

  5.   

    DBA果然不是盖的...唉!!路漫漫....
      

  6.   

    显然这些题是想招有实际DBA经验的,至少一年DBA经验以上的人。
    对于开发人员来讲,是有些难了。
      

  7.   

    Cluster,Service Broker,Mirroring生产环境下还没接触过。
    这些题都是基础,如何将data转换为information才是重点,BI与分析将成为CIO首要的远见性规划。
      

  8.   

    from itpub 作者绝对牛人
      

  9.   

    1.char()是定长的字段限制 如:char(20) 我們存入Microsoft 九个字符,每次存储只能是20个,后面的空格都会包括的,如果不确定数据的数量肯定会浪费空间。
    varchar()是不定長的,如存入Microsoft,每次取出只有9个字符不包括空格。至于nvarchar()是比varchar()功能更多实际上,能存入更多类型的数据
    XML类型查找数据的方法:query方法用于从XML数据类型提取XML;value方法用于从XML文档中返回单个值;exist方法用于确定指定节点是否存在于XML文档中。
    这几个查找数据的方法谈不上哪个效率更高,每个都有它的用途;
    使用存储过程和T-sql语句最大的区别就是:存储过程在创建时就进行了编译,以后调用时不在需要编译了,速度快。而T-sql语句每次执行时都会进行编译一次的,
    会浪费很多时间,而且速度慢2.master:它包含一个系统表集合,是整个实例的中央存储库,维护登录账户,其他数据库,文件分布,系统配置设置,磁盘空间,资源消耗,端点和
    链接服务器等方面的信息。它记录SQL2005初始化信息,所以它对实例极为重要。在创建,修改或删除用户数据库,更改服务器或任何数据库配置,以及修改
    或添加用户账户后都要备份该数据库。
      model:它是SQL2005实例中所有新建数据库的模板。执行create database 命令时SQL2005会简单地将该模板数据库中的内容复制到新建数据库中,如果希望
    新建的每个数据库都带有表,存储过程,数据库选项和许可等,那么可以在Model数据库中加入这些元素,此后再新建数据库时就会添加这些元素。
      msdb:该库供SQLserver实例--主要是SQLServer代理使用来存储计划的任务,修改和备份、还原历史信息。对自动化任务和DTS作了某些修改的命令时需要备份它。
      tempdb:它是SQL2005用于各种操作的实例范围的临时工作空间。
      resource:它是SQL2005新引入的数据库,是只读的。包含所有的系统对象,如系统存储过程,系统扩展存储过程和系统函数等。
    当master数据库被破坏并且没有可用的备份时,可以使用自动设置中的Rebuild database选项将其恢复成实例安装后的状态。必须经过认真考虑后才能使用该操作,因为它会清除包括
    所有登录在内的所有服务器相关的配置,从而不得不从头开始重做所有的事情。3.tempdb的用途:1)存储专用和全局临时变量,不考虑数据库上下文;
    2)与Order by 子句,游标,Group by子句和Hash计划相关的工作表
    3)显式创建的临时对象,如存储过程,游标,表和表变量。
    4)如果启动快照隔离功能,记录所有版本的更新记录。
    5)指定Sort_in_tempdb时创建或重建索引操作时的临时排序结果
    如果TempDB异常变大,可能的原因是数据被频繁的使用tempdb数据库,出现了瓶颈。这种现象是十分罕见的。可以考虑在同一台服务器上安装多个SQL2005实例,并将数据库分为多个
    实例。因为每个实例都有它自己的tempdb,所以这样就会有效地分散tempdb的使用。4.聚焦索引:必须按顺序存储数据
    非聚焦索引:它可以按非顺序存储数据的
    包含性列索引:指包含索引键值之外的其他的索引
    索引视图:第五题
    全文索引:它是为了在文本字符串中进行模式检索用的
    XML索引:用于快速访问XML数据的。
    索引优点:查询速度快 缺点:索引建立不挡插入数据时浪费时间。
    如何为SQL语句创建合适的索引:通常是把排序,聚焦函数,分组,联合查询,where 条件的字段作为建立索引的候选字段。
    索引创建时有哪些需要注意的项:这个我面试时也被问过!!!!!!
    你创建的索引是否被使用:它真正取决于同其他索引和聚焦索引的有效性比较。优化器然后确定是否使用该索引。因为索引是一种辅助结构,而且只有在优化器
    确定他们能够提高查询性能后才使用,为了确定索引的有效性可以使用:DBCC Statistics命令,它可确定哪个索引在被使用,哪个没有被使用。具体里面的值你百度吧。
    重新组织与重新生成;
    优化索引:通常需要对应用非常了解。索引优化经常由查看配置文件输出引起,而且首先处理涉及最多读操作的SQL语句。因为索引的主要好处是降低获取数据所需的
    I/O操作数,所以首先处理执行许多读操作的SQL语句通常很有效。5.能创建索引,好处:可以改善查询性能。 坏处:会相应的增加维护索引的开销
      区别:1)对视图创建的第一个索引必须是唯一聚焦索引 2)该视图必须是使用schemabinding选项定义的。架构绑定
    将视图与底层基表的架构进行绑定。3)视图所引用的基表必须与该视图位于同一数据库中,并且与该视图有着相同的所有者 4)视图所引用的表和用户定义函数
    在视图中必须通过两段式名称引用,不允许单段式,三段,和四段式名称 ;对表建立索引你应该知道吧。
        ...............下面继续呢
      

  10.   

    6.
    我的MSDB数据库中没有全部的表;
    sys.all_columns,sys.all_objects,sys.columns;
    set statistics io 
    set statistics time  来获取7.个人认为先将两千万数据存储在本地,然后在导其他服务器中,回来删除,呵呵9.临时表和表变量的用法
    A. 如果语句很复杂,连接太多,可以考虑用临时表和表变量分步完成
    B. 如果需要多次用到一个大表的同一部分数据,考虑用临时表和表变量暂存这部分数据.
    C. 如果需要综合多个表的数据,形成一个结果,可以考虑用临时表和表变量分步汇总这多个表的数据
    D. 其他情况下,应该控制临时表和表变量的使用.
    E. 关于临时表和表变量,这个选择主要是看放在临时表的数据量,在较多的情况下,临时表的速度反而更快.
    F. 关于临时表产生使用select into和create table + insert into 的选择,一般情况下,select into 会比create table + insert into 的方法快很多,但是,select into 会锁定tempdb的系统表sysobjects,sysindexs,syscolumns,在多用户并发环境下,容易阻塞其他进程,所以在并发系统中,尽量使用create table + insert into ,而大数据量的单个语句使用中,使用select into.
    G. 注意排序规则,用create table 建立的临时表,如果不指定字段的排序规则,会选择tempdb的默认排序规则.
    而CTE也相当于临时表,只不过是把复杂的语句整合了。10.非提交读,已提交读(默认的),已提交读快照(数据库选项),可重复读,快照隔离,可序列化
    共享,更新,排他,意向锁。四个。
    为实现新的快照隔离级别行为---通过已提交读快照和快照隔离,使用了一个称作为行版本控制的新功能。这两个快照选项是不同的:已提交读快照只影响
    语句级别的锁定行为,而快照隔离影响整个事务。它们都使用行版本控制创建自己修改数据的快照。方法是将修改前的数据图像副本存储在tempdb中,以便从
    tempdb访问一致的数据快照视图,而不会阻塞实际表数据的写,也不会锁定实际的表数据。