2012年5月13日

初探SQL Server CLR 集成

SqlServer 2005中,加入了很多新特性。对于开发人员(尤其是从事.NET开发的朋友)来讲,最值得一提的是对XML的支持以及CLR集成。当然,还有一些关于“高可用“(数据库集群/数据库镜像/日志传送等)的新特性,这些更适合DBA们学习和使用。当然不止我列举的这些,感兴趣的朋友,可以参考并学习webcast《sqlserver 2005盛宴系列》。


相信很多朋友和我一样,一直很希望在sqlserver中能够非常灵活地编程,来实现各种功能(能像在VS中使用C#编程一样的爽)。但是一直未能如愿,暂不说开发环境的问题(代码补全,配色等方面)。最主要的是,T-SQL这语言本身就不适合做复杂的运算(对我这种菜鸟来讲确实有难度。对那些大牛来说估计不难),也缺乏面向过程/面向对象编程的灵活性。连一些基本的数据结构也没有办法实现(在C#里面,又是强类型又是泛型集合,在sql里面,恐怕智能用临时表、表变量、CTE公共表表达式之类的玩意了),更别提什么面向对象特性了。哈哈。


但是,有了sqlserver CLR集成后,这一切似乎就变了。什么是CLR (搞.NET几乎都知道),到底什么是CLR集成?先看看MSDN的解释吧。
通过在 Microsoft SQL Server 中托管 CLR(称为 CLR 集成),可以在托管代码中编写存储过程、触发器、用户定义函数、用户定义类型和用户定义聚合函数。 因为托管代码在执行之前会编译为本机代码,所以,在有些方案中可以大大提高性能。

通俗点讲,就是sqlserver 2005 版本之后,数据库引擎中加入了 .NET Framework 的公共语言运行时 (CLR) 组件,可以更方便和.NET应用程序交互。

首先,新建一个sqlserver CLR 数据库项目,如图:

项目新建好之后,可以打开试图,看看结构,里面只包含一些测试示例的sql脚本。

接下来,新建一个普通的C#类,在类中定义一个方法。如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Server;
namespace SqlServerProject1
{

   public  class demo
    {
       [Microsoft.SqlServer.Server.SqlProcedure]
       public static void ClrProc() {
           SqlContext.Pipe.Send("Hello World");
       }
    }
}

记得要引入using Microsoft.SqlServer.Server这个命名空间。在方法体中,使用了如下代码:

SqlContext.Pipe.Send("Hello World"); 

可以理解为像客户端发送一条结果,就像Response.Write输出一样。

给这个普通的方法,加上[Microsoft.SqlServer.Server.SqlProcedure]特性。其意义就是标记自己是个CLR 存储过程。

注:Attribute,有的人也称作属性,为了避免不和面向对象中的get/set混淆,故本人习惯称之为”特性“。和java中的注解差不多。

编译通过后,可以选择直接在VS的生成菜单下选择”部署“,也可以去数据库中手动创建。

 

打开指定数据库的查询窗口,开始写脚本,检查数据库配置,看看是否开启了clr支持,没有的话则手动去开启:

--查看系统配置
SELECT * FROM sys.configurations
ORDER BY name
GO
--启用clr
sp_configure 'clr enabled',1
go
RECONFIGURE;
GO

准备完毕后,开始创建程序集和CLR存储过程:

--创建程序集
CREATE ASSEMBLY SqlServerProject1 
FROM 
N'C:\Users\Administrator\Documents\visual studio 2010\Projects\Database1\SqlServerProject1\bin\Debug\SqlServerProject1.DLL'
WITH permission_set=SAFE
GO

--
--DROP ASSEMBLY SqlServerProject1
--go
--创建CLR存储过程 (程序集.命名空间.类型.方法名)
CREATE PROC dbo.helloworld
AS EXTERNAL NAME SqlServerProject1.[SqlServerProject1.demo].ClrProc
go

--执行Clr存储过程

EXEC helloworld
go

注意,之前的项目中编译后的DLL文件的路径(推荐使用绝对路径),权限直接给safe。创建CLR存储过程,其实和普通的proc差不多,只不过多了一句(大致意思就是指定程序集中指定的命名空间下的类和对应的方法)

可以像调用普通的存储过程一样去执行它。看看结果,果然有了”HelloWorld“。呵呵。当然,这只是最简单的,目的是教大家如何创建。

当然,也可以创建复杂一点的存储过程/函数/触发器等。我就拿存储过程为例,做一个稍微复杂的,返回一个SqlDataReader对象。

直接在项目上右键,新建,选择存储过程即可(刚才新建一个普通类,是为了让大家理解其基本的实现和对应关系)。如图:

 

建好存储过程后,可以往方法里面添加一些简单的代码,执行一个基本的单表查询,然后返回给客户端一个SqlDataReader对象。代码如下:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;


public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void StoredProcedure1()
    {
        // 在此处放置代码
        SqlConnection conn = new SqlConnection("context connection=true");
        try
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand("SELECT count(*) FROM dbo.TempCatalog", conn);
            SqlDataReader dr = cmd.ExecuteReader();
            SqlContext.Pipe.Send(dr);
        }
        catch (Exception)
        {

            conn.Close();
        }
    }
};

编译完成后,可以在VS的生成菜单下选择”部署“(会自动部署到sqlserver中,并覆盖原来的)。当然,也可以手动去重新加载程序集并创建需要的存储过程。

在sqlserver中创建好并执行存储过程后,检查一下结果,看是不是你想要的?

提示:手动重复加载、创建,可能会冲突。需要先删除后再重新创建。可以在sqlserver对象浏览器中检查,也可以使用如下sql语句查询相关信息。

SELECT * FROM sys.assemblies
SELECT * FROM sys.assembly_files

简单的例子做完了,优点是可想而知的。那到底啥时候应用CLR,啥时候写纯T-sql呢?我觉得具体要根据实际业务需求和应用场景去判断了。

根据有些微软方面的专家提示,在下面几种情况下,应该考虑使用CLR: 
SQL中涉及大量的逻辑判断和逻辑运算。比如需要在数据库级别自定义加密算法,解密算法等。 
T-SQL无法处理需求。比如需要在SQL中进行正则表达式的判断等。 
逻辑判断或者循环分支过于复杂,有时需要使用大量游标进行处理(也不一定使用游标就会变慢,关键看敲代码的人水平如何)。

 

本文出自http://www.cnblogs.com/dinglang/         http://blog.csdn.net/dinglang_2009,转载请注明出处。

 

 

 

 

 

posted @ 2012-05-13 21:38 @Dylan 阅读(881) 评论(1) 编辑

2012年4月27日

.NET好书盘点(二)

上篇文章中,我向大家推荐了一些比较不错的书籍,但大多是比较基础的,适合入门或参考。本文中,我将会推荐一些偏高级的技术书籍,当然,包括软件工程,数据库、操作系统等领域的。虽然标题是“.NET”,但绝不止步于.NET。

 

 

 

1.sqlserver 数据库方面的:

SQL 必知必会(第3版)

 

把这本书排第一个,不是因为它是最好的。我个人觉得,拿这本书学习sql语句入门还不错,例如写写连接查询,分组,排序......

 

SQL Server编程必知必会

这是上本书的“升级版”,主要是讲解T-SQL编程入门的。如果你想学习写复杂一点的存储过程、自定义函数、触发器.....可以看看这本书

 

SQL 解惑(第2版)

此书比较有趣,精选了75个SQL编程问题,如果你想练手,提高自己的sql水平,可以拿这本书实战。

 

接下来推荐的,要么是偏向DBA读的,要么有些偏底层。

SQL Server 2008查询性能优化

 

这本书讲的还比较全面,对于查询性能优化的方方面面都有涉及,但个人认为,并不是太深入。

 

【深入解析SQL Server 2008】

 

这本书讲解的比较深入,对sqlserver内部的一些机制讲解得很细。网上评价相当好(尤其是英文版)

 

接下来介绍的是《sqlserver 2005 技术内幕》系列,其前身《Inside SQL Server 2000 》也是堪称经典。现在好像出了《sqlserver 2008 技术内幕》系列。这系列书籍是真正从sqlserver 2005 底层去剖析的(举个例子:别人是教你用GUI工具去跟踪,去分析和排查性能问题。而它是告诉你sql语句在内部执行的原理,再结合sqlserver内部的DMV、DMF结合查询计划分析器,非常详细地教你分析查询性能)。当然,我不认为他适合初学者,我也不认为这类书一定要读。因为大多数人还是从事应用层的开发,也很难涉及到那些复杂的技术和面临那么高的要求。如果你已经具有中高级水平,而且迫切想挑战,那就试试吧。

 

 

2.软件工程和其他方面的:

【人月神话】

 

经典得不能再经典,不用解释了。

【代码大全】

 

看不懂英文版也行,中文版是我的"偶像"金戈翻译的。

 

3.CLR 、Windows操作系统深入

 

框架设计(第2版):CLR Via C#

 

高级.NET程序员必须知道的书

 

【你必须知道的.NET】

 

中国人出了本好书,真不容易啊!

 

 

一直在windows下面写程序的人,真应该去啃啃这本书。中文版是潘爱民老师翻译的。

 

好了,由于篇幅和时间有限。就介绍到这里。除了我上诉列举的这些书外,当然,还有很多优秀的,适合不同领域和不同层次的朋友们去读。由于本人水平有限,如果您有什么不同意见和看法,欢迎留言交流,切勿进行人身攻击。

除了平时多看书,多动手,多积累(在学校,工作中,业余都可以的)外,还需掌握适合自身的好的学习方法。光看书是没太大用的,技术和知识,真正掌握了才是自己的,分享了才是真正快乐的。

抱怨一句,做程序员就是这么累;奉劝大家一句,做程序员当不辍学习。

 

为了避免某些无良网友的恶意人身攻击,特此说明:

以下这些书籍都出自不同的作者,不同的出版社,国内/国外/翻译版本的都有,因此本人可以摆脱“书托”的嫌疑。

花费时间和精力来整理并写作此文,是为了给大家推荐一些自认为比较不错的学习书籍。由于本人水平有限,如果您认为本文有“误人子弟”的地方,敬请“笔下留情”如果您有什么意见或是好的建议、推荐,欢迎留言或发消息给我,大家一起学习,共同进步。

 

本文出自http://www.cnblogs.com/dinglang/        http://blog.csdn.net/dinglang_2009,转载请注明出处。

 

 

 

 

 

 

 

posted @ 2012-04-27 22:09 @Dylan 阅读(4954) 评论(24) 编辑

2012年4月17日

.NET好书盘点(一)

本人身为一个典型的技术宅,平时看了一些技术书籍。算不上是“博览群书”,但也涉猎不少。抽空出来整理一下,把个人认为不错的推荐给大家,希望能帮助到同仁们。

注:本文标题是“.NET...”,但并不局限于.NET领域的,也涵盖一些web开发,数据库相关的等。本人也不是什么高手或者大牛,所以几乎可以完全排除“书托”的嫌疑。

(排名部分先后,按记忆整理。基本是按照一般人的学习顺序来的。如果您有自己的不同看法或者好书推荐,欢迎您及时留言指出。)

 

1.  C# 编程基础相关的(语法,面向对象基础):

 

 【 C#入门经典】

传说中的“红皮书”,在北京的时候,看到几乎是“人手一本”。后来自己在网上下载了电子版看了看,感觉还不错。比较适合初学者入门和参考。

 

【C#高级编程】

《C#入门经典》的升级版,适合深入去学习。网上有很多人推荐,自己去看了看,感觉一般般。部分章节翻译得一般,有copy  MSDN的嫌疑。(仅个人看法)

 

【C#图解教程】

这本书主要是讲解C#语法,面向对象编程基础的。讲的还比较细致,有些地方拿C++思想对比。适合“初中级”读者,可以作为案头参考工具书。个人还比较推荐。

 

 

2.  web开发相关的

JavaScript网页开发——体验式学习教程

 

该书是张孝祥老师早年的作品,适合初学者学习。结合本书的配套视频,认真学习后,基本可以掌握HTML、CSS、javascript等网页开发技术。

 

精通CSS+DIV网页样式布局

 

比较适合web程序员或者网页设计师。想要深入点学习网页开发,DIV布局,浏览器兼容等技术。

 

精通JavaScript

该书是jQuery之父的著作。想深入学习javascript BOM,DOM及面向对象编程,强烈推荐此书。

 

【jQuery基础教程】

适合想要学习jQuery框架(类库)的朋友,其中也包含一些DOM编程、事件驱动的知识。再配合jQeury API文档,便可以熟练使用jQurey框架开发应用了。

 

3. asp.net开发方面的:

asp.net开发方面的书籍缺少不少,但是大多是讲些什么“控件”的,这类书籍我不太推荐大家去看,因为没有太大价值。毕竟我是过来人,走过的弯路不希望大家继续走。

我推荐大家先看看一套完整的视频,理解了web开发的本质后,回头再去看那些所谓的“控件”,“web窗体”等等。这样能举一反三,很快掌握这些控件。再经过一定的积累,便真正掌握了asp.net的精髓,能够快速成长起来。毫不吹牛的讲,我在几年前刚毕业参加工作的时候,很多有工作经验的程序员都曾对我这小子“刮目相看”。这就是本质与精髓的魅力,这就是掌握内功后,学习能力突飞猛进的体现。

猛击这里下载“真正剖析asp.net内核,讲解asp.net精髓的视频教程”

 

至于书籍嘛。有一两本还是值得一读的。例如《asp.net本质论》,是从底层去剖析的,讲解非常深入。有深度,值得一读。(网上有试读章节,不妨参考)

《ASP.net3.5核心编程》(这本书的前身叫做《ASP.NET.2.0技术内幕》,由于翻译的一般般,网上评价不是太好。《ASP.net3.5核心编程》翻译得靠谱一些,也加入了一些新的技术点,建议直接阅读《ASP.net3.5核心编程》)

如果你想更深入的了解那些控件的工作原理,并开发出自己的控件,不妨读读这本《庖丁解牛—纵向切入ASP.NET3.5控件和组件开发技术》

 

 

好了,今天由于时间的关系,就先到这里。后续还会给大家推荐一些.NET Framework和CLR本质,Windows编程和操作系统,sqlserver数据库相关等...

 

 

本文出自http://www.cnblogs.com/dinglang/,转载请注明出处

 

 

未完待续......

posted @ 2012-04-17 09:35 @Dylan 阅读(1773) 评论(15) 编辑

2012年4月13日

写给想从事数据库方面工作的朋友

经常有人问我,有关数据库方面的职位、职业规划、转型等相关的问题。对于经常听到的“DBA(数据库管理员)、数据库开发工程师、数据挖掘工程师、数据库架构师......”这些职位,之前我也比较迷惑,甚至搞不清楚这些岗位具体的工作任务和职责,更别提什么职业规划了。后来询问了一些专门从事数据库方面工作的朋友,也查了一些资料,加入了自己的一点点见解。抽空整理了一下,写出本文,希望能够帮助到想走这条路的朋友。由于本人也并不太专业,如有错误,望及时指出。

 

1.总的来讲,数据库方面的工作主要有两种:数据库管理,数据库开发。这是两个不同的方向。

 

所谓数据库管理,就是我们通常说的DBA(数据库管理员)。主要工作是做数据库安装、管理、调优、备份、容灾、集群、安全等(拿sqlserver DBA为例子,工作职责可以参考http://blog.csdn.net/dinglang_2009/article/details/7352850),主要技术点是除了对数据库本身比较熟悉外,还要对硬件(主机、存储、网络)、操作系统等方面有较好的理解,否则很难做到真正的高手。例如,在做数据库调优中,I/O是比较常见的性能瓶颈,你要想真正最大限度的调优,必须了解磁盘(硬件)的工作原理,还要了解操作系统的相关知识(例如windows下的文件系统的特性)。在做数据库集群的过程中,拿sqlserver为例子,必须先实现windows操作系统的集群,如果你不了解windows系统的管理,怎么能胜任呢?优秀的DBA,不一定是个优秀的系统管理员,但至少也是非常数据操作系统实现和管理的,这毫不夸张。

总的一点,就单单这个方向而言,要学的知识和技术也确实太多了。所以,通常DBA只需要熟悉一款数据库产品(例如Oracle。国内sqlserver DBA很少)即可,能在职业生涯中走得很远。相反,多而不精是很忌讳的。

 

所谓数据库开发,我认为有好几种。首先,一般人理解是指涉及到数据库应用的开发。例如使用php+mysql开发网站的,运用Java+Oracle开发银行系统的,asp.net+mssqlserver开发企业级ERP系统的......这些都可以认为是数据库开发。在某些公司(一般是大公司),也有专业从事数据库层面开发的工程师。通常他们的系统都比较依赖于数据库层面,例如使用了很多事务控制,存储过程,高并发经常造成数据库死锁等等。这样一来,工作任务会很重,必须有单独的“数据库开发工程师”。还有一种是采用纯数据库系统上的语言进行开发工作,这类一般是指专注于纯数据库技术开发的人员,如数据挖掘工程师(数据库抽取、传输、加载,是数据仓库应用的一部份)。此类入门的门槛较高,薪资待遇也非常好,随着商业智能在国内的兴起,这类职位的需求也越来越多。

 

有些大型公司,对数据库应用比较深入,可能会设置专业的DBA从事开发顾问工作,主要责任是与项目组一起进行系统的数据库结构设计、SQL相关的开发优化,建库建表操作等,这类DBA要求对系统业务有一定了解,对数据库开发与优化也比较熟悉,对这种职位每个公司的名称可能不一样,有些公司还是称为DBA或数据库开发工程师,阿里巴巴公司称为开发DBA或应用DBA。例如我有个朋友在阿里巴巴下面的支付宝DBA项目组,他就主要从事Oracle数据库管理和调优工作。总而言之,大公司会细分,小点的公司则一般希望你是全能型的。这很好理解,大公司有钱,且对技术要求更高,所以需要很多“专才”来协作。而小公司财力等各个方面有限,相对技术要求低一点(也不一定),所以更倾向于“通才”(至于那种太小的公司或者不是专门从事IT行业的,一般不会设专门的DBA。打个比方,一个皮包公司招到一个程序员,恨不得立马就把公司里的美工也炒了,可想而知小老板对人才的渴望和要求)。至于“通才”还是”专才“,还是要看自己定位了。

 

2.应届生能选择做DBA吗?
应届毕业生要从事DBA工作门坎比较高,因为DBA职位是需要有一定实践经验的人员,应届生很难录用,除非你的特长刚好是公司需要的:比如说你在学校从事的项目或课题中有较深入的数据库相关应用,你在数据库理论方面又有很好的理解。或者你没有做过DBA,但是学校里参与设计过数据库系统,对数据库实现原理很了解。如果你是211或者有高学历(硕士以上),人家可能会愿意培养你。否则,成功入职的可能性就很小了。没办法,在天朝就这样。


      表面上看DBA是从事数据库管理工作,不需要软件开发技能,但是随着个人的发展,你需要经常与开发人员打交道,需要写代码模拟开发人员访问数据库的 CASE,还需要做一些新技术的测试学习,写一些自动化脚本等。所以在DBA成长的过程中,开发技能也是必不可少的。实际上,大部分DBA都是从事了一段时间开发工作后才转型为DBA岗位。例如我刚才说道的那位朋友,之前也是从事J2EE方面开发的,积累到一定阶段后,逐渐转型DBA。


      所以对于应届生,我不建议直接挑战DBA岗位,最好还是先从事一段时间开发工作,如果对数据库管理的工作比较感兴趣,可以在工作过程中不断学习数据库知识,帮助团队解决数据库的问题,当决定转型为DBA或者是工作中有明确的DBA需求后,再选择从数据库概念、功能、管理、开发、调优逐步系统的学习数据库知识,多做测试与实践,在专业论坛中处理更多的问题。不要忽略论坛,Oracle大牛冯大辉、盖国强,他们就是在论坛和工作中积累起来的。


3.关于考试与认证
早几年,在我还在上学的那个时候,“认证”是非常流行的,认可度也不错。数据库相关培训的价格应该都不低(例如Oracle  OCP OCM 等),外界的认可度也没以前好,因为现在认证考试基本上很容易通过。去参加数据库培训也并不一定能学到多少东西,更重要的是个人的兴趣与环境。如果你真想提高自己,而且有经济基础,那可以选择参加数据库培训,但前提是你要具备一定的基础再去,因为培训的时间一般很短,要想在培训的时间内消化基本上不太可能,所以最好先拿认证试题测试一下自己的能力,如果你连题目的意思都不理解或者里面的概念都没听过那还是花一些时间再自学一下吧。


4.数据库学习的方法

就我个人而言,对数据库谈不上有什么深入研究。稀里糊涂的用了几年,不敢提太多建议误人子弟。关于数据库学习的方法,一定要理论加实践(否则就是纸上谈兵了),光看书是没用的,而且会让人感觉投入多收益少而失去学习兴趣。开始时多动手实践,掌握常用的功能,在工作中或网络上解决实际的问题,学习别人解决问题的方法,对于不理解或不熟悉的知识点自己要亲自实践,解决的问题多了,自然就会感觉水平提高。到一个阶段后,接着会发现水平提高得越来越慢,这时反过来从更基础的层面系统的学习数据库知识,尤其是研究偏底层和原理性的知识,再加以实践。过了这个阶段,基本算是入行了。我在博客园和CSDN等网站上,经常有许多深入数据库底层相关的文章与讨论,让我这种菜鸟望而却步,这些知识很重要而且难掌握,但并不表示这些知识很实用,因为我们学习知识主要目的是解决问题,而不是表现自己。因为我们大多数人还是从事应用层开发。我曾对sqlserver的索引、事务、锁一直比较疑惑,想恶补一下。抱着几本《sqlserver 2005 技术内幕》啃,这系列的书是从sqlserver 2005底层开始揭示的,确实写的好,可惜不太适合我这种菜鸟。试想,连一条复杂的sql语句都写不出来,你跟他讲sqlserver引擎内部执行原理,那能有好效果吗?所以,还是那句经典的话:由浅入深,循序渐进,理论加实践。说起来简单,做起来难啊!没有捷径。工作中积累,业余还得学习,不断积累多年。

 

本文出自http://www.cnblogs.com/dinglang/  blog.csdn.net/dinglang_2009,转载请注明出处。

posted @ 2012-04-13 11:54 @Dylan 阅读(214) 评论(0) 编辑

2012年3月14日

SQL Server DBA工作内容详解

在Microsoft SQL Server 2008系统中,数据库管理员(Database Administration,简称为DBA)是最重要的角色。DBA的工作目标就是确保Microsoft SQL Server 2008系统正常高效地运行。DBA的工作也是最繁忙的工作,无论是性能调整,还是灾难恢复,都离不开DBA的支持。

  一般地,作为一个DBA,至少应该做好以下12项任务:

  下面简单描述这些DBA的任务

  任务一:安装和配置。

  DBA的第一项任务是安装和配置Microsoft SQL Server 2008软件系统,为顺利使用Microsoft SQL Server 2008软件创建良好的环境。无论是安装还是配置,都应该根据实际需要来进行,使得系统满足用户的实际需求。需要注意的是,系统配置不是一劳永逸的,应该随时根据需求的变化和环境的需要,进行监视和适当地调整。

  任务二:容量规划。

  容量规划是对整个Microsoft SQL Server 2008系统进行一个总体的规划。规划的重点应该放在解决瓶颈问题上。可以从内容和期限两个方面考虑系统的容量规划。

  从内容上来看,应该考虑的主要内容包括:硬件容量规划、软件规划、网络规划。硬件容量规划包括磁盘空间、CPU、I/O等规划。软件规划包括操作系统的安装和配置规划、数据库规划、数据库对象内容和数量规划等。网络规划包括网络硬件、网络软件和协议、网络客户数量流量和分布、网络拓扑结构等规划。

  从期限上来看,应该考虑短期、中期和长期规划。短期规划的目的是满足当前日常业务的需要。中期规划主要是满足业务发展和扩大的需要。长期规划主要是满足业务极限需要等。例如,如果预测某个系统的当前并发用户数量是1000,3年后的用户可能达到1000万,那么这时既不能按照1000用户的需求来设计,也不能一下子按照1000万用户的需求来设计,一定要采取一个折中的形式。

  任务三:应用架构设计。

  应用架构设计包括数据库设计、应用程序设计和相应的技术架构设计。

  数据库设计应该考虑数据库的逻辑需求、数据库的创建方式和数量、数据库数据文件和日志文件的物理位置等。一般情况下,可以在Microsoft SQL Server 2008系统成功安装之后,根据规划的目标,手工创建数据库。

  应用设计应该考虑开发工具的选择、API技术、内部资源和外部资源的结合、应用架构的分布等。需要强调是在应用设计时,DBA应该与开发人员共同工作,确保他们编写出优化的代码,尽可能地使用服务器的资源。

  技术架构设计主要包括表示层、逻辑层和数据层的分布。这些分布不应该考虑到硬件资源和用户需求。既不能片面地追求过高的硬件资源,也不能仅仅局限于当前的环境,一定要按照可扩展的观点来综合考虑。

  任务四:管理数据库对象。

  管理数据库对象是使用数据库的最基本、最重要的工作。这些对象包括表、索引、视图、存储过程、函数、触发器、同义词等。为了完成管理数据库对象的工作,DBA应该能够很好地回答诸如下面的这些问题。

  任务五:存储空间管理。

  存储空间管理任务就是怎样为数据分配空间、怎样保持空间可以满足数据的不断增长。随着业务量的继续和扩大,数据库中的数据也会逐渐地增加,事务日志也不断地增加。存储空间管理任务主要围绕下面几个问题。

  任务六:安全管理。

  安全性是DBA重要的日常工作之一。安全管理的主要内容包括账户管理和权限管理。账户管理就是在数据库中应该增加哪些账户、这些账户应该组合成哪些角色等等。权限管理是对象权限和语句权限的管理,应该回答下面这些问题:

  任务七:备份和恢复。

  无论系统运行如何,系统的灾难性管理是不可缺少的。天灾、人祸、系统缺陷都有可能造成系统的瘫痪、失败。怎样解决这些灾难性问题呢?办法就是制订和实行备份和恢复策略。备份就是制作数据的副本,恢复就是将数据的副本复原到系统中。备份和恢复工作是DBA的一项持续性的重要工作,其执行频率根据数据的重要程度和系统的稳定程度来确定。

  任务八:性能监视和调优。

  根据企业的经营效益评价企业的管理水平,根据学生的考试成绩评价学生的学习好坏。作为一个大型软件系统,Microsoft SQL Server 2008系统的运行好坏必须得到正确地监视、评价和相应的调整。这是DBA的一项高级工作。借助一些工具和运行性能指标,DBA应该能够监视系统的运行。如果某些运行指标出现了问题,DBA应该及时地采取补救措施,使得系统始终保持高效运行状态。

  任务九:调度作业。

  DBA不可能一天24小时不停地盯住系统的运行,及时地执行某些指定的操作。Microsoft SQL Server 2008系统提供了许多工具,DBA应该充分利用这些工具和机制,解决下面一些问题。

  任务十:网络管理。

  作为一种分布式的网络数据库,网络管理的任务更加的重要。Microsoft SQL Server 2008系统提供了网络管理工具和服务,DBA应该借助这些工具进行服务规划和管理网络操作。

  任务十一:高可用性和高可伸缩性管理。

  作为一个DBA,必须保持系统具有高可用性和高可伸缩性。可用性是一项度量计算机系统正常运行时间的指标。可伸缩性描述应用程序可以接受的并发用户访问的数量问题。影响系统可用性的主要因素包括:网络可靠性、硬件故障、应用程序失败、操作系统崩溃、自然灾害等。无论是数据库系统管理员,还是应用程序设计人员,都应该最小化系统破坏的几率,最大化系统的可用性。在设计系统的可用性时,应该确定采取什么样的可用性策略来满足可用性的需求。

  可用性的需求可以通过3个方面描述,即运行的时间、连接性需求和数据的紧密和松散要求。在确定可用性的需求时,首先考虑系统的运行时间。一般地,数据库应用程序有两种运行时间,即在工作时间是可用的和在任何时间都是可用的。如果只是要求在工作时间是可用的,那么可以把系统的维护等工作安排在周末进行。但是,有许多应用程序要求每天运行24小时、每周运行7天,例如,在线超市等,这时必须采取措施保证系统总是运行的。不同的应用程序有不同的连接性要求。大多数的应用程序和电子商务解决方案要求采用可靠的网络连接。这时,要求永久性的在线连接,必须最小化各种异常现象的发生。有些应用程序允许用户离线使用。这时,系统的可用性要求降低了。大多数应用程序要求数据是同步使用的。用户对数据的请求,系统必须立即做出回应。这是紧密型的数据要求,这种情况必须保证系统的高可用性。有些应用程序不需要数据是同步的,对用户的请求可以延迟回应。这种要求是数据松散型的要求,这时系统的可用性需求比较低。

  任务十二:故障解决。

  虽然不希望Microsoft SQL Server 2008系统出现故障,但是故障可能是无法避免的。这些故障可能每天都会发生。有些故障是人为不小心造成的,有些故障可能是系统中的缺陷形成的,有些故障可能是莫名其妙的。作为一个DBA,在系统中的其他用户心目中是Microsoft SQL Server系统的权威。无论是大事还是小事,DBA都应该做到迅速诊断、准确判断、快速修复。从这个意义上来说,DBA是一个数据库系统的专业医生。

 

原文地址http://www.searchdatabase.com.cn/showcontent_54849.htm

更多精品文章,请访问http://blog.csdn.net/dinglang_2009/        http://www.cnblogs.com/dinglang

posted @ 2012-03-14 14:32 @Dylan 阅读(1177) 评论(1) 编辑

2012年3月8日

Android手机归属地查询工具

摘要: 在Android应用开发中,经常需要与网络上的服务端的程序(J2EE或者.NET等应用)进行通信、交互。例如“优酷、土豆”的android客户端,每天访问都会有最新的视频资讯,那些是哪里来的呢?如果你正在从事企业级开发,你们公司的CRM系统需要开发一个Android手机移动版本,方便随时随地联系、关怀客户。那android客户端上需要显示的客户列表和基本信息那些从哪里来呢?当然,公司可以让每个人打开电脑,对着屏幕上的CRM系统,不停的往自己手机里面去录入,然后一条条存起来。(很显然没人会这么干)更为“明智”的一种方式是:公司的CRM系统提供一个webservice接口,android客户端去访阅读全文

posted @ 2012-03-08 12:23 @Dylan 阅读(1155) 评论(0) 编辑

2012年3月1日

Activity生命周期详解

摘要: 学习并掌握Activity生命周期,对从事Android开发(或者打算日后从事这方面的开发工作)的朋友来讲,是至关重要的。本文将用图解和实例的方式,向大家详细讲解Activity生命周期的有关知识。当然,也加入了一些自己的理解。如有错误或不足,望各位大牛及时指出。何为Activity呢?如果你还不了解“android四大组件”基础知识,请参考android系列文章。Activity有三个状态:1.当它在屏幕前台时(位于当前任务堆栈的顶部),它是激活或运行状态。它就是响应用户操作的Activity。2.当它上面有另外一个Activity,使它失去了焦点但仍然对用户可见时(如图),它处于暂停状态。阅读全文

posted @ 2012-03-01 17:59 @Dylan 阅读(308) 评论(1) 编辑

android操作XML的几种方式

摘要: XML作为一种业界公认的数据交换格式,在各个平台与语言之上,都有广泛使用和实现。其标准型,可靠性,安全性......毋庸置疑。在android平台上,我们要想实现数据存储和数据交换,经常会使用到xml数据格式和xml文件。小提示:android中存储数据一般有如下几种:SharedPreferences(参数化),XML文件,sqllite数据库,网络,ContentProvider(内容提供者)等。在android中,操作xml文件,一般有几种方式:SAX操作,Pull操作,DOM操作等。其中DOM的方式,可能是大家最熟悉的,也是符合W3C标准的。1)在java平台中,有诸如DOM4J这样优阅读全文

posted @ 2012-03-01 17:39 @Dylan 阅读(1229) 评论(1) 编辑

2012年2月16日

Asp.net中服务端控件事件是如何触发的?

摘要: 初学ASP.NET的时候,曾被各种控件的强大功能所折服。当然,也很容易被搞晕,仅仅记住那些控件的名字都不是一件简单的事儿,何况还有那么多的属性、事件、功能、配置步骤......哈哈。后来越发觉得这些东西确实没啥价值,在企业级开发中很少用到。写本文的目的并不是要“贬低”或者刻意“排斥”webform中的服务端控件,这里对其优劣也不做过多的讨论。不过有情提示初学者:其实很多控件的用法都差不多,掌握一种后,再去使用其他的会相对比较容易。例如会用GridView之后,再去用ListView绝对不是难事。切勿“浮于控件表面”,因为你一旦形成了某种思维方式,以后会很难提高。当然,当你慢慢理解了web的本质阅读全文

posted @ 2012-02-16 13:11 @Dylan 阅读(1907) 评论(7) 编辑

2012年2月11日

http协议和web本质

摘要: 当你在浏览器地址栏敲入“http://www.cnblogs.com/”,然后猛按回车,呈现在你面前的,将是博客园的首页了(这真是废话,你会认为这是理所当然的)。作为一个开发者,尤其是web开发人员,我想你有必要去了解这一系列的处理流程,在这期间,浏览器和服务器到底是如何打交道的?服务器又是如何处理的?浏览器又是如何将网页显示给用户的呢?......疑惑和细节真是太多了。坦白讲,要想彻彻底底的弄清楚以上每个疑惑和处理细节,至少需要十本书的厚度,所谓“底层无极限”嘛,而且不同的web服务 器和服务器端编程语言的实现和处理流程不尽相同(但本质都是相通的)。本文中,我将根据http协议的有关知识,跟阅读全文

posted @ 2012-02-11 12:17 @Dylan 阅读(5161) 评论(14) 编辑

仅列出标题  下一页

导航

统计

公告