SQL Server DBA三十问

这30问经典了,简单回答一下,回顾下当年用SQL SERVER的感觉,欢迎补充。

1. char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储过程和使用T-SQL查询数据有啥不一样;

char 固定字符
varchar 变式字符,如果字符串没有填满会空格代替
nvarchar unicode型变式字符 ,一般用于保存中文字符等

2. 系统DB有哪些,都有什么作用,需不需要做备份,为什么;损坏了如何做还原(主要是master库);


master 系统级的元数据信息,数据库实例,哪些数据库 ,哪些账号等,需备份;
model 模板,每创建一个数据库 ,都会根据这个库的结构来创建,如果改过此库,建议备份;
msdb 保存计划任务,作业之类的信息,需备份,否则会丢失作业和备份计划;
tempdb 用户对sqlserver操作时产生的临时数据依赖于此库,最常见的是临时表,不许备份;

resource 这个是sqlserver2005新增的只读数据库,保存了sqlserver的系统对象,如sys.objects,建议备份,磁盘损坏时需要;

master的备份和还原


如果包含系统数据库的介质变了,那么必须重建系统数据库,如果你仍然可以启动SQL   Server服务,则可以通过RESTORE语句从系统数据库的备份中恢复数据库。    

如果master坏了,不能启动系统,可以按照下面步骤进行恢复     

1.重建系统数据库   运行c:/mssql7/binn/rebuildm.exe,按照提示进行即可,过程中需要系统数据库样本的路径,可在安装光盘中找到;     
   
2.重建系统数据库后,启动SQL   Server服务,用系统数据库的备份恢复数据库就行了通常恢复顺序为master->msdb->model     

 

在恢复master的备份时要注意:必须在单用户(single   user)模式下进行   

   
a.进入单用户模式的方法:     

1.在命令行模式下输入sqlservr   -c   -f   -m或者输入sqlservr   -m    

其中:-c   可以缩短启动时间,SQL   Server   不作为Windows   NT的服务启动    

-f   用最小配置启动SQL   Server     

 -m   单用户模式启动SQL   Server     
   
2.可以在控制面板-服务-MSSQLServer的启动参数中输入-c   -f   -m或者输入-m,点击开始     
        
3.进行master数据库的恢复   
a.直接进入查询分析器,有个提示不要理会它   
输入恢复语句进行数据库恢复:   
RESTORE   DATABASE   master   from   disk='c:/具体的备份文件名'   
   
b.或者用这个,在命令提示符下输入,注意大小写   
使用"windows身份验证"的,输入:isql   /E   
使用"sql   server和windows身份验证"的,输入:isql   /U"用户名"   /P"密码"   
然后在出现的提示符下输入(注意1>,2>是提示符):   
  1>RESTORE   DATABASE   master   from   disk='c:/具体的备份文件名'   
  2>go  

3. 有哪些操作会使用到TempDB;如果TempDB异常变大,可能的原因是什么,该如何处理;

创建临时表,如create table #temptable,异常变大多半是在产生复杂的报表查询语句,生成了很多临时表并发产生数据尽量少使用临时表,使用内存变量表代替之,阻塞现象会减少。

4. Index有哪些类型,它们的区别和实现原理是什么,索引有啥优点和缺点;如何为SQL语句创建合适的索引,索引创建时有哪些需要注意的项,如何查看你创建的索引是否被使用;如何维护索引;索引损坏如何检查,怎么修复;T-SQL有更好的索引存在,但是运行时并没有使用该索引,原因可能是什么;

聚集索引clustered index
非拒集索引non-clustered index

5. 视图上我们能建索引吗,如果能建的话,会啥好处和坏处;视图上建索引和表上建索引有啥区别;

可以,所谓的物化视图上建立视图,好处是提升查询性能,坏处是固化了数据结果


6. Job信息我们可以通过哪些表获取;系统正在运行的语句可以通过哪些视图获取;如何获取某个T-SQL语句的IO、Time等信息;

1)sql profiler工具跟踪

2)sp-who


7. 在线系统,一个表有五千万记录,现在要你将其中的两千万条记录导入到另一台服务器的某个表中,导完后,需要将这两千万数据删除,你预备如何处理,优缺点是什么;


8. 数据库服务器报磁盘空间不足,你将如何应对,要求尽快恢复;

日志文件导致,使用日志截断命令截断日志;
数据文件导致则加硬盘,变更数据库路径,分区库等操作

9. 临时表、表变量、CTE(公用表表达式)有啥区别和联系,保存位置有啥不一样,使用时如何决定选哪种;

都可以理解为临时的表,前者使用硬盘,后者驻留内存,不建议使用临时表
SQL临时表是一切查询阻塞的来源。

10. SQLServer有哪些隔离级别,默认级别是哪个;数据库有哪些主要的锁类型;行版本控制是如何实现的;


4个隔离级别
默认可执行读

11. 死锁如何跟踪;阻塞如何跟踪和查找;发现有问题的语句后,如何进行处理;用Profile做跟踪时,一般我们需要跟踪哪些事件;


可使用sp-lock查询,TYPE为X的可以kill spid

12. Windows日志主要有哪几种,SQL Server培训日志一般保留几个,什么情况下会产生新的SQL日志;数据库日志恢复模式有哪几种,区别是什么;数据库日志突然变得很大,而且你无法收缩,可能的原因是什么,怎么查找原因,分别将如何处理;

sql server一般保留两个, .ldf 无法收缩的原因


13. 分区表和分区视图是什么概念,一般是在什么情况下使用,有啥好处;


14. 如何比较两个同结构的表数据的差异;如果表损坏了,如何修复;如何在备份文件有问题的情况下尽量还原数据;如何将一个表的Identity属性归零;

需要写SQL脚本比较差异
dbcc
尽量还原牵涉到完整备份和增量备份策略。
DBCC CHECKIDENT(表名,RESEED,0)来复位。

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使用什么语句,查看同步链信息主要通过哪些表;

复制三种模式,瞬像复制、事务性复制和合并负责
搭建Replication后会产生数据库distribution

SQL Server Replication的常见错误以及处理错误的方法如下,请参考:

1. 错误:已将此(这些)订阅标记为不活动,必须将其重新初始化。需要删除NoSync 订阅,然后重新创建它们

对数据库distribution操作:

use distribution   go 查找状态不正常的发布:

select status,*from dbo.MSsubscriptions where status <>2 修改状态:

update dbo.MSsubscriptions set status=2where status<>2 观察复制链是否能正常运行,正常后用tablediff比较发布链中的表数据是否一致,还可以重新初始化快照,但是数据量大就是个悲剧。

2.错误:表、存储过程不存在以及表结构不一致等

处理方法:

a. 表或存储过程不存在:

在订阅端对应的库中补齐缺失的对象。

有一种比较奇怪的现象是订阅端表明明存在,但是同步链依然报错,此时可能有两种情况:

第一: 表字段不一致,可以参照下面(b)的方式补齐表字段;

第二: 表字段也一致,但是依旧报错,这时只能选碰碰运气,先停掉同步链,再开启,如果过了,算运气好;如果错误依旧,就需要在该同步链中先将该表去掉,让其他数据能同步;然后再将这个表新加到同步链中,并比较发布端和订阅端的表数据。

b. 列名'xxx' 无效:

可以通过以下语句查找缺失的字段对应的表,查找某个发布链中的某个字段(Rp_XXXX 发布名xxx 字段名)

select a.name as table_name,b.name as column_name,

(select 'alter table '+a.name+' add '+b.name+' '+   (case when name='nvarchar' then cast(b.max_length/2 AS varchar)   when name like 'date%' or name='money'


then ''   else name end )   from sys.types where

system_type_id=b.system_type_id ) as definition FROM dbo.sysarticles a WITH(NOLOCK) inner join sys.columns b WITH(NOLOCK)   on

a.objid=b.object_id inner join dbo.syspublications c with(nolock) on a.pubid=c.pubid   where c.name='Rp_XXXX' and b.name='xxx'


3. 错误:主键冲突


处理方法:跳过错误



19. Replication发布端的表能truncate吗,为什么;Replication Identity列如何处理、缺失字段错误如何处理、主键冲突错误如何处理、如何跳过指定的错误、订阅端表被删除了如何处理、大规模改动数据如何处理;某条同步链因为其中的某个表一次性改动数据很大造成同步链的严重延时,要求尽快恢复同步链,如何处理。

20. SSB(Service Broker)使用场景,如何创建,都会创建些什么对象,有啥优缺点,主要通过什么方式实现不同服务器之间的消息传递;可以通过哪些方式排错;

--应用场景
1 )可靠的面向服务构架Service Oriented Architecture (SOA)
2 异步处理:数据仓库每天夜间进行的数据抽取工作
--消息(Messages)
Service Broker由消息头和消息体组成。、
消息体的数据类型是VARBINARY(MAX),它最大可以包含2GB的任何可以转换为VARBINARY(MAX)的SQL Server数据。
注:消息类型名称和消息头中其它的Service Broker元数据都是使用二进制排序

规则。因此,名称必须完全匹配,而且区分大小写和重音。
建议,采用复制,防止出错。

CREATE MESSAGE TYPE message_type_name
   [ VALIDATION = {  NONE
                  | EMPTY
                  | WELL_FORMED_XML
                  | VALID_XML WITH SCHEMA COLLECTION
                     schema_collection_name
                  } ]

VALIDATION

--发起和结束会话
BEGIN DIALOG CONVERSATION  @Dialog
  FROM SERVICE    [//microsoft.com/ManufacturingService]
  TO SERVICE      '//microsoft.com/InventoryService'
  ON CONTRACT     [//microsoft.com/Inventory/AddItemContract]
  WITH ENCRYPTION = OFF, LIFETIME = 3600;

--发送和接收
WAITFOR (
  RECEIVE top(1)
     @message_type = message_type_name,
     @message_body = message_body,
     @dialog       = conversation_handle
    FROM dbo.InventoryQueue
  ), TIMEOUT 2000


21. 跟踪数据库数据的变更有哪些方法,它们(CDC(Change Data Capture)、CT(Change Tracking)、Trigger等)使用上的优缺点;



22. SQL调优步骤,如何来判断SQL语句存在问题,怎么定位问题,如何解决这些问题;

查看图形化执行计划 关注表关联 关注执行成本,显示服务器跟踪

尽可能利用索引 降低逻辑读次数

避免全表扫描

23. 数据库故障排查步骤,如何处理紧急数据库问题;

网络故障,服务器故障;应用故障;数据库连接故障;SQL问题


24. 如何考虑和制定数据库备份计划;公司要求对一个非常大的数据库或者表做备份,而且要求数据量尽可能少丢失,你可能会采用什么方法;

增量备份和全局备结合


25. 如果要你做数据库监控,你会关注那些指标(包括SQLServer和OCP培训),如何制定性能基线,你使用过哪些监控软件;

SQL SERVER PROFILER 执行时间counter和logic read and writes



26. 数据库迁移步骤;重建一套比较大的测试系统(最少10个数据库实例),如果原来DB数据量都不大,但DB比较多,新搭建的系统数据都不需要,如何快速实现;


27. 创建Cluster 简要步骤,最少需要几个IP,需要安装些什么服务,需要哪些固

定的磁盘,Raid如何设置,磁盘如何划分;SQLServerCluster与Mysql Cluster 和

Oracle RAC的区别等;


28. 如果遇到一个性能不理想、代码复杂的存储过程,很难通过数据库方面的调优来解决问题,你如何说服开发人员修改它(可能开发人员并不愿意修改);

指出问题所在,一般无非是使用了游标,临时表,没有做好有效索引等原因告诉他方法,如果他不愿意,第一次你可以帮她完成,熟练SQL的人员不需要太多时间,下次再出现问题他就不好意思不修改了


29. 你有没有遇到过因为你的误操作造成系统故障发生的情况,你当时是如何处理的;如果没有,假定你误删了一个重要的表,你该如何处理;误操作须避免,养成良好习惯,删除前先生成该表的临时备份表。


30. 你准备成为一名什么样的DBA培训,为此你将如何准备(或者你有怎样的职业规划,准备怎样度过你的DBA生涯);如果你进入公司,你最想获得的是什么。


转载自:http://www.itpub.net/thread-1509869-3-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值