还剩6页未读,继续阅读
文本内容:
数据库管理引语数据库管理DatabaseManager是有关建立、存储、修改和存取数据库中信息的技术,是指为保证数据库系统的正常运行和服务质量,有关人员须进行的技术管理工作负责这些技术管理工作的个人或集体称为数据库管理员DBA数据库管理的主要内容有数据库的调优、数据库的重组、数据库的重构、数据库的安全管控、报错问题的分析和汇总和处理、数据库数据的日常备份.数据库的建立数据库的设计只是提供了数据的类型、逻辑结构、联系、约束和存储结构等有关数据的描述这些描述称为数据模式正文数据库管理包括数据库规划、设计、实施、运行和维护五个阶段
一、数据库规划构建用来描述学生的数据表,要求记录学生的如下属性姓名、学号、性别、生源地、状态、考试成绩、学分、选课
二、数据库设计createschemastudentcreatetablestudent.学生学号char8primarykey院系asconverttinyintsubstring学号32persistednotnullforeignkeyreferencesstudent.院系编号姓名char10notnull性别char2check性别=男or性别=女生源char6状态char4check状态in正常留级休学退学insertintostudent.学生values04014101曹波男湖北正常insertintostudent.学生values04014111程鸣女湖南正常insertintostudent.学生values04014122吴红霞女浙江正常insertintostudent.学生values04026205张鸿飞男北京正常insertintostudent.学生values04026210张雪梅女贵州休学insertintostudent.学生values04016108林报国男上海正常insertintostudent.学生values04016116王丽女北京正常insertintostudent.学生values05113102郝海涛男河南正常insertintostudent.学生values05113110王伟男北京正常select学生.学号姓名课程名称考试成绩fromstudent.学生joinstudent.选课on学生.学号=选课.学号joinstudent.课程on选课.课程编号=课程.课程编号where考试成绩=90select学生.学号姓名课程名称考试成绩fromstudent.学生crossjoinstudent.选课crossjoinstudent.课程where学生.学号=选课.学号and选课.课程编号=课程.课程编号and考试成绩=90select学生.学号姓名课程名称考试成绩fromstudent.课程joinstudent.选课on选课.课程编号=课程.课程编号joinstudent.学生on学生.学号=选课.学号orderby学生.学号computeavg考试成绩max考试成绩min考试成绩by学生.学号select学生.学号姓名课程名称考试成绩fromstudent.课程joinstudent.选课on选课.课程编号=课程.课程编号joinstudent.学生on学生.学号=选课.学号orderby学生.学号computeavg考试成绩max考试成绩min考试成绩by学生.学号computeavg考试成绩max考试成绩min考试成绩
三、数据库实施成果
四、数据库安全配置 1.使用安全的密码策略 我们把密码策略摆在所有安全配置的第一步,请注意,很多数据库账号的密码过于简单,这跟系统密码过于简单是一个道理健壮的密码是安全的第一步,建议密码含有多种数字字母组合并9位以上同时养成定期修改密码的好习惯,数据库管理员应该定期查看是否有不符合密码要求的账号 2.使用安全的账号策略 由于SQL的认证模式有Windows身份认证和混合身份认证两种如果数据库管理员不希望操作系统管理员来通过操作系统登录来接触数据库的话,可以在账号管理中把系统账号“BUILTIN\Administrators”删很多主机使用数据库应用只是用来做查询、修改等简单功能的,请根据实际需要分配账号,并赋予仅仅能够满足应用要求和需要的权限比如,只要查询功能的,那么就使用一个简单的public账号能够select就可以了 3.加强数据库日志的记录 审核数据库登录事件的“失败和成功”,在实例属性中选择“安全性”,将其中的审核级别选定为全部,这样在数据库系统和操作系统日志里面,就详细记录了所有账号的登录事件请定期查看SQLServer日志检查是否有可疑的登录事件发生,或者使用DOS命令 4.管理扩展存储过程 对存储过程进行大手术,并且对账号调用扩展存储过程的权限要慎重其实在多数应用中根本用不到多少系统的存储过程,而SQLServer的这么多系统存储过程只是用来适应广大用户需求的,所以请删除不必要的存储过程,因为有些系统的存储过程能很容易地被人利用起来提升权限或进行破坏 5.不要让人随便探测到您的TCP/IP端口 在实例属性中选择TCP/IP协议的属性选择隐藏SQLServer实例如果隐藏了SQLServer实例,则将禁止对试图枚举网络上现有的SQLServer实例的客户端所发出的广播作出响应这样,别人就不能探测您的TCP/IP端口了 6.修改TCP/IP使用的端口 请在上一步配置的基础上,更改原默认的端口在实例属性中选择网络配置中的TCP/IP协议的属性,将TCP/IP使用的默认端口变为其他端口 7.拒绝来自原端口的探测 由于原端口探测没有限制,能够被别人探测到一些数据库信息,而且还可能遭到DoS攻击让数据库服务器的CPU负荷增大,所以可以尽可能地隐藏您的SQLServer 8.对网络连接进行IP限制 SQL数据库系统本身没有提供网络连接的安全解决办法,但是Windows2000提供了这样的安全机制使用操作系统自己的IPSec可以实现IP数据包的安全性请对IP连接进行限制,只保证自己的IP能够访问,也拒绝其他IP进行的端口连接,对来自网络上的安全威胁进行有效的控制
五、数据库维护
1.一致性检查:检查数据库的完整性.
2.更新索引的统计数据;
3.整理数据库碎片;
4.重建索引;
5.备份;
6.检查文件的大小并释放磁盘空间;
六、监控数据库维护活动:
1.备份系统数据库;
2.备份用于生产的用户数据库;
3.SQLSERVERAgent/SQLMain/DTC的运行情况;
4.数据库大小/增长情况/磁盘自由空间的情况;
5.批处理作业是否正确执行;
6.DBCC作业是否正确执行;
7.检查SQL日志的错误;
8.复制日志代理的运行情况;
9.复制分发清除作业是否正确执行;
七、数据库优化
1、使用索引来更快地遍历表 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的在非群集索引下,数据在物理上随机存放在数据页上合理的索引设计要建立在对各种查询的分析和预测上一般来说
①.有大量重复值、且经常有范围查询(between,==)和orderby、groupby发生的列,可考虑建立群集索引;
②.经常同时存取多列,且每列都含有重复值可考虑建立组合索引;
③.组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列
2、区分ISNULL与ISNOTNULL 不能用null作索引,任何包含null值的列都将不会被包含在索引中即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除也就是说如果某列存在空值,即使对该列建索引也不会提高性能任何在where子句中使用isnull或isnotnull的语句优化器是不允许使用索引的
3、区分IN和EXISTS EXISTS要远比IN的效率高里面关系到fulltablescan和rangescan几乎将所有的IN操作符子查询改写为使用EXISTS的子查询
4、在海量查询时尽量少用格式转换
5、当在SQLSERVER2000中,如果存储过程只有一个参数,并且是OUTPUT类型的,必须在调用这个存储过程的时候给这个参数一个初始的值,否则会出现调用错误
6、区分ORDERBY和GROPUBY 使用ORDERBY和GROUPBY短语,任何一种索引都有助于SELECT的性能提高注意如果索引列里面有NULL值,Optimizer将无法优化
7、任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边
8、IN、OR子句常会使用工作表,使索引失效如果不产生大量重复值,可以考虑把子句拆开拆开的子句中应该包含索引
9、用SETSHOWPLAN_ALLON查看执行方案DBCC检查数据库数据完整性DBCCDataBaseConsistencyChecker)是一组用于验证SQLServer数据库完整性的程序
10、谨慎使用游标 在某些必须使用游标的场合,可考虑将符合条件的数据行转入临时表中,再对临时表定义游标进行操作,这样可使性能得到明显提高。