日期:2014-05-17  浏览次数:20379 次

征集有点深度的MSSQL DBA面试题
我这有一份:
1.把MSSQLSERVER数据库恢复到某个时间点,需要如何恢复?需要哪些备份文件?恢复过程中数据库是否需要脱机?请详细说明。
2.MSSQLSERVER数据库复制功能有几种类型?每种类型都适合在什么情况下采用?
3.集群的类型有几种?MSSQLSERVER数据库本身只能支持哪种类型的集群?
4.有一个在线的MSSQLSERVER数据库,数据库数据量不断地增长,而前台又需要快速提取数据,在这种情况下,需要你对数据库进行调优,你将从哪些方面考虑?每个方面请详细说明理由,比如说是需要增加索引,那么你要说清索引添加的原则,以及缺点和优点请详细说明。
5.有一个在线MSSQLSERVER2005数据库,瞬间运转超负荷,数据库服务器已经不能接受远程连接,这时候你作为数据库管理员应该如何解决?主要采取哪些措施?
6.MSSQLSERVER的扩展功能你还熟悉哪些?使用这些扩展功能做过些什么?
7.除MSSQLSERVER数据库之外,你还了解哪些数据库?了解到什么程度?
8.为保证数据库中数据的安全,在过去的工作中你采取过哪些措施来保护数据的安全性?
9.请写语句把下面TEST表中的name字段重复的数据删除,用一条语句完成。
TEST表结构:
id name desp
1 A C
1 A D
1 A E
2 B F
2 B G
结果集:
id name desp
1 A C
2 B F
10. 1忆条数据如何快速导入到另外一个新表中?建成的新表需要做什么配置才能保证快速的数据提取?

------解决方案--------------------
--> 测试数据:#TEST
if object_id('tempdb.dbo.#TEST') is not null drop table #TEST
create table #TEST([id] int,[name] varchar(1),[desp] varchar(1))
insert #TEST
select 1,'A','C' union all
select 1,'A','D' union all
select 1,'A','E' union all
select 2,'B','F' union all
select 2,'B','G'


delete from #TEST  where desp not in (select min(desp) from #TEST group by name)
select * from #TEST

------解决方案--------------------
需要完整备份和日志备份。先完全恢复,再按照日志一个一个的还原,


--创建测试数据库 
  CREATE DATABASE Db 
  GO 
  --对数据库进行备份 
  BACKUP DATABASE Db TO DISK='c:db.bak' WITH FORMAT 
  GO 
  --创建测试表 
  CREATE TABLE Db.dbo.TB_test(ID int) 
  --延时1秒钟,再进行后面的操作(这是由于SQL Server的时间精度最大为百分之三秒,不延时的话,可能会导致还原到时间点的操作失败) 
  WAITFOR DELAY '00:00:01' 
  GO 
  --假设我们现在误操作删除了 Db.dbo.TB_test 这个表 
  DROP TABLE Db.dbo.TB_test 
  --保存删除表的时间 
  SELECT dt=GETDATE() INTO # 
  GO 
  --在删除操作后,发现不应该删除表 Db.dbo.TB_test 
  --下面演示了如何恢复这个误删除的表 Db.dbo.TB_test 
  --首先,备份事务日志(使用事务日志才能还原到指定的时间点) 
  BACKUP LOG Db TO DISK='c:db_log.bak' WITH FORMAT 
  GO 
  --接下来,我们要先还原完全备份(还原日志必须在还原完全备份的基础上进行) 
  RESTORE DATABASE Db FROM DISK='c:db.bak' WITH REPLACE,NORECOVERY 
  GO 
  --将事务日志还原到删除操作前(这里的时间对应上面的删除时间,并比删除时间略早 
  DECLARE @dt datetime 
  SELECT @dt=DATEADD(ms,-20,dt) FROM # --获取比表被删除的时间略早的时间 
  RESTORE LOG Db FROM DISK='c:db_log.bak' WITH RECOVERY,STOPAT=@dt 
  GO