asp.net+SQL

导航

统计

公告

2011年12月12日 #

SQL Server DBA三十问

很多开发人员都想成为一名DBA,也有很多人一开始就把自己定位成为一名DBA,DBA究竟需要掌握些什么知识和技能呢?以下是我

做DBA工作和面试DBA时,整理的一些DBA方面的三十个问题,三十个大问题中还有许多小的问题,涵括了SQLServer DBA比较多的技

术知识点,与大家分享下,希望给有志做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日志主要有哪几种,SQLServer日志一般保留几个,什么情况下会产生新的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和Windows),如何制定性能基线,你使用过哪些监控软件;

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

27. 创建Cluster 简要步骤,最少需要几个IP,需要安装些什么服务,需要哪些固定的磁盘,Raid如何设置,磁盘如何划分;SQLServerCluster与Mysql Cluster 和 Oracle RAC的区别等;

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

29. 你有没有遇到过因为你的误操作造成系统故障发生的情况,你当时是如何处理的;如果没有,假定你误删了一个重要的表,你该如何处理;

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

posted @ 2011-12-12 10:47 Jason Bourne 阅读(41) 评论(0) 编辑

2010年9月30日 #

工作总结

来到东之林后,以前一直希望加入一个专业的开发团队,现在终于实现了...

首先接触的是工作流,公司需要一个基于web的图形化的工作流设计器,这个肯定要用js+vml了,由于本人js水平实在有限,以前也没有做过类似的项目,为了不影响公司的项目进度,这个任务就交出去了。

第二个任务是excel文件的导入,这是个基本的功能,以前做过很多次了,打开公司的项目,感觉公司项目的结构还不是很清晰,没有明显的分层,所以我自己建了一个逻辑类,算是业务逻辑层吧,linq算是数据模型,数据操作层就忽略不计了,现在有asp.net mvc,希望公司以后能用上,结构清晰利于项目的可维护性和可扩展性。

以前在写excel文件导入的时候,完成导入的功能就行了,现在我需要从用户的角度考虑,首先要验证excel每列的数据,然后考虑到导入过程中难免会产生错误,干脆把错误作为一个常态,增加一个错误列表,把错误信息也放进去,而且显示出来,这样用户导入后,知道哪些数据导入了,哪些没有导入。

在进行数据验证的时候,每个字段都要一一验证,这样用代码来写感觉太冗长了,以前见过一个表有上百的字段的,难道要写上百段验证代码吗,用xml吧,这样维护起来也灵活一些。。。

这是xml

<?xml version="1.0" encoding="utf-8" ?>
<table>
  <fields>
    <field isnull="0" fieldType="char">行政区名称</field>
    <field isnull="0" fieldType="char">部件小类</field>
    <field isnull="0" fieldType="char">部件名称</field>
    <field isnull="1" fieldType="date">部件建立时间</field>
    <field isnull="0" fieldType="char">主管部门名称</field>
    <field isnull="1" fieldType="char">权属单位名称</field>
    <field isnull="1" fieldType="char">养护单位名称</field>
    <field isnull="1" fieldType="char">部件状态</field>
    <field isnull="1" fieldType="char">普查数据来源</field>
    <field isnull="1" fieldType="char">备注</field>   
  </fields>
</table>

首先验证模板

然后验证数据


这样代码看起来轻盈多了,维护起来也方便一些…,当然这个功能还能继续扩展,做的更加灵活…,由此觉得公司应该有通用验证类,c#版和js版的,这个应该是基本的…

后面的任务就都是一些基本的增删改查了,用到了公司自己的linq api 感觉很好,很大程度提高了生产效率,以前用ado.net存储过程,要搞一大堆参数,很耗时间。当然存储过程还是有用的,基本的增删改查用linq足够了,如果涉及后台数据复杂计算和统计那还是要用存储过程效率高一些。值得提及的是ajax,用了ajaxPro,感觉很方便,这个是在家里面做的,刚开始不起作用,代码里面该写的都写了,后来要在项目里面引用ajaxPro才行。里面有个小问题,在垃圾清运费用里面,用户输入重量的时候,应收金额文本框自动根据收费标准和用户输入的重量计算并显示相应的值,这个起先是没有问题的,可是后来在测试的时候,如果输入重量时,用户选择了文本自动提示的历史数据,就不触发文本框的相关事件了,这样会造成应收金额计算错误,必须把这个提示屏蔽掉:

document.getElementById("Wage").setAttribute('autocomplete','off');

还有一点就是,用户确认提示框,在某个功能里面需要在后台捕获用户confirm提示框的返回值,这里需要在页面添加一个linkbutton,然后添加代码:

String scriptString = "<script>if (confirm('该社区该月收入已存在,是否更新?')) __doPostBack('LinkButton1','')</script>";
ClientScript.RegisterClientScriptBlock(this.GetType(), "clientScript", scriptString);
这个时候,confirm方法返回true就会触发linkbutton的后台事件,将相应的代码写在linkbutton的click事件里面就ok了,这个里面不能把linkbutton的visible设为false,否则将失效。

还有一个任务是数据整理,这个主要是excel的格式比较复杂,不能直接返回DataTable,要用DataReader逐条读取,然后是整理,整理过程比较复杂,写了四页sql,很遗憾这些sql被我无意识删掉了。

最后在测试后做了异常处理,先是要在每个页面加,后来就干脆写在BasePage里面吧:

protected override void OnError(EventArgs e)
{
      string returnPagePath = GetRootPath("Error.aspx");
      Exception ex = Server.GetLastError();
      Server.Transfer(returnPagePath + "?error=" + ex.Message);            
}

只要继承BasePage就能处理未截获的异常了。这样更加人性化一些,当然还有一种方法是在webconfig里面进行配置,更加简单。

谈一下分页吧,项目里面感觉还是假分页,使用的是分页控件,需要把数据先全部load,数据量小可以,数据量大的话会影响运行效率,以前真分页是用存储过程实现的,现在用linq,linq也有分页方法,以后数据量大的页面肯定还是要用真分页的。

虽然都是一些很肤浅的技术,但还是尽量做好吧,希望以后和大家多些交流和沟通…大家一起与时俱进…

posted @ 2010-09-30 13:09 Jason Bourne 阅读(47) 评论(0) 编辑

2009年6月18日 #

数据结构之排序

一、简单排序

1.直接插入排序

在插入元素时直接进行排序。

2.冒泡排序

代码如下:
Code

 

3.简单选择排序

 

代码如下:

Code

 4.希尔排序

   希尔排序又称“最小缩量排序”,是对直接插入排序方法的改进。

posted @ 2009-06-18 16:31 Jason Bourne 阅读(32) 评论(0) 编辑

2009年6月17日 #

数据结构之哈希表

一、哈希表的构造

哈希表的构造方法包括直接定址法、数字分析法、平方取中法、折叠法、随机数法和除留余数法。

二、处理冲突

上图哈希表进行成功查找的平均查找长度为:

ASL = (6×1+3×2)/9 = 1.34

posted @ 2009-06-17 14:30 Jason Bourne 阅读(101) 评论(0) 编辑

2009年6月12日 #

数据结构之图

1.邻接矩阵表示法

    示例:

posted @ 2009-06-12 10:44 Jason Bourne 阅读(38) 评论(0) 编辑

2009年6月10日 #

数据结构之二叉树

摘要: 一、二叉树的性质二、二叉树的分类三、二叉树的遍历else{PostOrder(root->lchild);PostOrder(root->rchild);printf("d%",root->data);}阅读全文

posted @ 2009-06-10 22:30 Jason Bourne 阅读(101) 评论(0) 编辑

2009年6月9日 #

数据结构之矩阵

摘要: 则称之为稀疏矩阵。稀疏矩阵的三元组表的顺序存储结构为三元顺序表,常用的三元组表的链式存储结构是十字链表。阅读全文

posted @ 2009-06-09 12:36 Jason Bourne 阅读(35) 评论(0) 编辑

2009年6月5日 #

数据结构之数组

摘要: 二维数组:按行存储和按列存储,数组元素存储位置的计算:阅读全文

posted @ 2009-06-05 15:40 Jason Bourne 阅读(22) 评论(0) 编辑

数据结构之栈与队列

摘要: 1.栈的应用:栈的典型应用包括表达式求值、括号匹配等。在计算机语言的实现以及将递归过程转变为非递归过程的处理中,栈有重要的作用。典型案例求解:迷宫求解问题2.队列:允许插入元素的一端成为队尾(rear),允许删除的一端成为队首(front)阅读全文

posted @ 2009-06-05 12:17 Jason Bourne 阅读(50) 评论(0) 编辑

2009年6月2日 #

软考学习——数据结构(一、概论)学习笔记

摘要: 1.简述线性结构、树形结构、图状结构的逻辑特点线性结构:每个结点只有一个前驱和一个后继;树形结构:每个结点有一个前驱和多个个后继;图状结构:每个结点有一个前驱和多个个后继;2.简述顺序存储方法和链接存储方法的优缺点顺序存储:优点>节省存储空间,缺点>不便于修改(插入、删除结点)链接存储:优点>便于修改(插入、删除结点),缺点>存储效率不高3.设一维数组V中存有n个整数,(1...阅读全文

posted @ 2009-06-02 11:07 Jason Bourne 阅读(32) 评论(0) 编辑

仅列出标题  下一页