数据库入门.docx
《数据库入门.docx》由会员分享,可在线阅读,更多相关《数据库入门.docx(36页珍藏版)》请在冰豆网上搜索。
数据库入门
数据库管理员,英文是DatabaseAdministrator,简称DBA。
这个职位对不同的人意味着不同的意义。
一个小的软件开发工作室和一个分工高度明细的大公司相比,DBA的职责来得更加宽泛一些。
一个公司,不管它是自己开发应用软件,还是购买第三方的应用软件,只要涉及到数据库(有多少不涉及数据库的应用软件呢?
数据库是商业的灵魂和大脑啊),就需要确定是否雇佣一个或几个DBA。
知道DBA这个职位有哪些要求,对于企业内部这个职位的定义或者对于那些未来的DBA将是至关重要的。
下面我列出了DBA的一些职责:
安装和升级数据库服务器(如Oracle、MicrosoftSQLserver),以及应用程序工具。
数据库设计系统存储方案,并制定未来的存储需求计划。
一旦开发人员设计了一个应用,就需要DBA来创建数据库存储结构(tablespaces)。
一旦开发人员设计了一个应用,就需要DBA来创建数据库对象(tables,views,indexes)。
根据开发人员的反馈信息,必要的时候,修改数据库的结构。
登记数据库的用户,维护数据库的安全性。
保证数据库的使用符合知识产权相关法规。
控制和监控用户对数据库的存取访问。
监控和优化数据库的性能。
制定数据库备份计划,灾难出现时对数据库信息进行恢复
维护适当介质上的存档或者备份数据
备份和恢复数据库
联系数据库系统的生产厂商,跟踪技术信息。
·把监视数据库实例当作每日必做工作以保证其可用性。
解决不可用的问题。
·收集系统统计和性能信息以便定向和配置分析。
·配置和调整数据库实例以便在应用程序特定要求下达到最佳性能。
·分析和管理数据库安全性。
控制和监视用户对数据库的访问。
必要时审计数据库的使用。
·监视备份程序。
必要时提供恢复。
测试备份与恢复程序。
·升级RDBMS软件并且在必要时使用补丁。
必要时升级或者迁移数据库实例。
·通过数据库相关动作来支持应用程序开发人员。
·跟随数据库趋向和技术。
当可应用时使用新技术。
安装,测试和评估Oracle新的相关产品。
·执行存储和物理设计。
均衡设计问题以完成性能优化。
·创建,配置和设计信的数据库实例。
·诊断,故障检测和解决任何数据库相关问题。
必要时联系Oracle支持人员以便使问题得到较好的解决。
·确保Oracle网络软件(SQL*Net,Net8,Names,OiD)配置和运行的很好。
·与系统管理员(Unix&NT)一起工作以保证Oracle相关事务得到很好的处理。
·为有效的,定期的维护数据库创建任何必要的脚本
SQLSERVER是可视化的数据库,一般用SQLSERVER的公司,都是网络、硬件维护员、系统维护员兼数据库管理员,不会专属请一个SQLSERVER数据库管理员,SQLSERVER的管理备份等都和操作QQ一样,可视化的。
数据库管理员能具备开发能力那更好,没有的话一般也要会写存储过程、触发器和基本的SQL查询。
现在真正需要数据库管理员的,一般是在LINUX/UNIX下管理ORACLE等命令式的数据库。
熟悉LINUX/UNIX的操作指令,会写SHELL,了解ORACLE的体系结构,会在命令行下用指令操作ORACLE,大企业的数据库不会装在WINDOWS下的,LINUX一般也不会启动图形界面,都是远程连过去用指令操作。
如何成为DBA
1.1DBA的应该具有的性格特点
每个DBA的成长之路都是不同的,因为没有一个人是天生的DBA,每个DBA都是在自己的职业道路上,通过一个偶然的拐点走向DBA的,而不是通过自身的职业规划。
现在,越来越多的年轻技术人员都对自己的职业发展做了很好的规划,这样能够少走很多的弯路。
作为一个走了很多弯路的老DBA,我的感受是DBA的成长之路是有捷径的,在这条成长之路上,并不是所有的付出都会得到合理的回报。
有的人会走的十分轻松,有的人却异常艰难。
这和某个人的机遇有关,就像金庸武侠小说里面一样,有些人需要几十年修炼,才能有所突破,而主人公往往都是通过一些机缘巧遇,修成正果的。
一个DBA在成长之路上,选择正确的方法,加入正确的团队,遇到正确的导师,就和金庸武侠里面遇到焊冰床或者吃了仙丹灵药一样重要。
要成为一个优秀的DBA,仅仅靠努力是不够的,还有很多因素决定了DBA的成功。
个人的性格对于DBA来说是十分重要的。
首先,DBA需要沉稳的性格,遇事不慌,做事有条理。
DBA在工作中会遇到各种各样的挑战,因此面临挑战的时候,深思而后行是十分重要的,在没有足够的把握之前,不要做任何的事情,这是DBA的铁的准则。
要养成这样的风格,先天而来的沉稳性格是必不可少的。
当然某些风格可以后天养成,但是有些性格就是DBA的天敌。
我曾经遇到过一件事情,当时一个客户的系统有些问题,需要我们协助分析一下,找出系统性能问题的根本原因。
我把任务安排给一个DBA去做,并且我嘱咐他只允许观察系统,不能做任何操作。
第二天一大早,我刚刚开机,就有客户的电话打进来,说怎么系统不可用了。
等我把忙了一晚上的那个哥们从梦里叫醒的时候,我才知道,原来他昨晚对一个近100G的表做了100%采样的全表分析。
而分析在早上8点的时候还没有完成。
事后我问那个DBA,为什么会做这种傻事。
他说他也不清楚,开始的时候他是很清醒的,知道不能对这个系统做任何事情,但是后来他发现可能是这张表分析的采样比例不够,如果重新分析就可以解决这个问题,所以他就想试试,虽然他知道他不应该做任何操作,但是有一种冲动支配他,就是想试试,后来他做了测算,估计早上9点前能够完成分析,就这么做了。
上面的例子是个很典型的例子,那个DBA知道自己应该做什么,但是在好奇心的支配下,他还是做了错事,这是性格方面的缺陷导致的。
DBA往往会在深夜独立工作,在这个时候,有些不理智的决定的产生往往是一个闪念,等你回过神来的时候,你可能发现大错已经铸就,一切都太晚了。
作为DBA,面对生产系统的时候,任何的不理智都可能是你的职业生涯的终止,沉稳的性格对于DBA的重要性就可见一斑了。
从上一个例子我们还可以学习到的是作为一个DBA,不能过于自信。
自信是一个DBA必须拥有的素质,在这方面,往往有两个极端。
第一个极端是不自信,这是几乎所有的刚刚进入DBA行业的技术人员的通病,面对客户,不敢大声说话,不敢表达自己的观点。
不自信主要来自于对自己的能力的不肯定,总是怕自己说错话。
我总是和我的同事说,只要你的技术比客户强,那么你就是专家,你的话就是专家的话,你说的就是正确的。
对于刚刚入门的DBA,建立强烈的自信心是十分关键的,不过这个过程也是很长的,根据每个人的能力和性格的不同,往往需要1年到几年的时间。
少数DBA能够在很短的时间内建立自信,这主要取决于这个人的悟性,如果他能很快的从和客户的交往中了解到客户的水平,那么他可能可以很快建立起基于自己技术能力的自信心。
缺乏自信会成为一道门,把你关在一个成功的DBA的门外,因此建立充分的自信是成为优秀DBA的第一步。
和缺乏自信相比,过度自信是十分危险的,缺乏自信只是很容易被客户小看,并不会有太大的危害性,而过度自信是大多数失误的罪魁。
很多老DBA总是说做DBA越久,胆子越小。
应用系统是十分复杂的,并没有一定之规可循。
所以老的DBA总是怀疑自己的判断是否完全准确。
而过度自信往往出现在正在成长期的新DBA身上,在成功的完成一些项目后,自信心的增长也是十分快的,自信心增长一般来说是个好事,但是在自信心增长的同时,保持必要的谨慎是十分重要的。
除了稳重和自信,DBA的下一个必备的性格是团队精神。
现代社会已经不是单打独斗的骑士时代了,做任何事情都是一个团队在工作。
团队协作可以大大降低DBA工作的强度,减轻DBA面临的压力。
作为一个DBA,不应该有孤独的感觉,因为是一个公司,一个团队在做这个工作。
在现场的DBA可以通过各种渠道获得其他团队以及公司总部资深团队的后援。
在这种情况下,遇到任何问题都不会感到无能为力。
团队精神的另一个方面是体现在团队学习上。
团队学习也可以使DBA的成长速度加快,所谓的团队学习是和我们上学的时候一样,一群人一起学习。
和上学时代不同的是,DBA的团队学习更有效率。
比如说目前有3个知识点需要学习,如果个人学习,需要3个月。
那么如果有一个团队,3个人一起学习,可以用一个月完成一个知识点的学习,然后通过一个月时间,大家互相交流,那么2个月的团队学习可以达到3个月个人学习的效果。
求真精神是成为高级DBA的必备素质,任何时候,都必须用求真的精神去对待。
目前关于DBA的资料充斥着互联网,在学习过程中,一定不要盲目相信他人,凡事应该认真求证,最好能够自己进行实验。
我碰到过很多朋友,遇到问题无论是否是十分重要的生产库还是测试库,都是直接到网上去查找一些解决方案,找到相关资料后,没有进行认真的甄别,就急急忙忙的去操作,最后导致了十分严重的后果。
敢于质疑一切的精神是十分宝贵的。
DBA的学习过程是一个不断质疑,不断求真的过程,只有用怀疑一切的态度去学习,才能够不断的深入探索,达到至高境界。
1.2DBA的起点
经常有人问我,我想成为一个DBA,需要有什么条件。
其实和其他职业一样,DBA仅仅是一种职业,是IT行业数百种职业中的一种。
要进入DBA这个行业,其入门的门槛是很低的,但是要成为一个优秀的DBA和成为一个优秀的程序员一样,都需要经过多年的磨练。
不过和程序员相比,DBA的入门之路更为困难,因为初级DBA所需要掌握的技能要比初级程序员更为全面。
作为DBA的起点,其知识和技能方面的要求很简单,在专业知识方面,需要有数据库基础(大学课程),SQL编程,操作系统方面的知识就足够了。
如果在UNIX操作系统,计算机体系结构和网络有一定的基础就更好了。
另外作为一个DBA,需要阅读大量的英文资料,因此具有较好的英语阅读能力也是十分关键的。
虽然DBA入门的条件不高,但是我不赞成DBA作为你职业生涯的第一个职业。
我所见到过的绝大多数成功的DBA都是从系统管理人员和程序员起步的。
程序员的经历对DBA成长也是十分有益的。
数据库和应用是不可分割的,在DBA日常维护工作中,经常会遇到应用带来的挑战。
程序员会接触到应用软件的设计,数据字典的设计,SQL的编写等,这些方面都是需要DBA紧密协助才能完成的,在国内的软件开发工作中,很多DBA的工作实际上是由程序员完成的。
程序员在不知不觉中已经承担了大量的DBA工作,在国内经常会碰到很多项目经理,他们多在数据库方面的恶造诣已经很深了。
因此说,DBA的起点是程序员,也是有一定的道理的。
虽然程序员也经常从事一些DBA从事的工作,但是程序员和DBA是两种截然不同的工作,在从事程序员的工作的同时,如果你希望今后向DBA发展,那么你还需要比普通的程序员做的更多。
学习数据库需要进行大量的实践,作为DBA的入门,精通数据库的安装、配置、管理是初级DBA必须具备的。
另外由于数据库和主机、存储、操作系统关系密切,掌握主流的硬件、存储、网络、操作系统也是一个成功的DBA的关键。
而对于绝大多数程序员来说,要接触这些东西是比较难的。
虽然刚刚进入这个行业的预备DBA无法接触这些高端的设备和环境,也不会影响DBa的成长之路。
在我们随手可及的微机上,我们也可以建立自己的学习环境。
如果你的微机再高档一点,也可以通过VMWARE建立自己的LINUX/SCOUNIX或者SOLARIS。
1.3理解什么是Oracle数据库
对于刚刚入门的初学者来说。
理解什么是RDBMS,什么是OracleRDBMS是十分关键的。
对于一个初学者来说,OracleConcepts这本书应该是一个必读的读物。
Oracle概念里面的很多东西是很深的,因此对于一个初学者来说不一定能够完全明白。
对于看不明白的地方,建议跳过去,等以后再来看,而不要强行去阅读。
如果理解错了,可就后患无穷了。
Oracle概念这本书是可以看很多遍的,每看一遍,都会让你感觉有所收获,现在你看不懂的地方,可能半年后你再来看,就能够理解了。
另外在看Oracle概念的时候,也要注意动手能力的培养,很多概念需要做过实验后才会在你的脑子里形成永久的记忆,因此建议在看Oracle概念的时候,自己装一套Oracle,并把能够实验的东西都逐个实验一下。
大型数据库的基本组成都是十分类似的,ORACLE主要是由存储数据的文件、提供数据库服务的后台进程、存储数据缓冲的共享内存和防止访问冲突的信号灯组成的。
经常有朋友说,Oracle数据库组成的一些基本概念,了解的那么清楚有什么用。
确实是这样的,如果你的工作只是启动关闭数据库、创建一些表空间和数据文件,那么你没有必要对Oracle的基本组成有个清晰的认识,而如果你想要做一些更深层次的工作,或者你想成为一个高级的DBA,那么这些基本概念是必需要掌握的。
如何成为真正的OracleDBA
a.首先,必须懂ORACLE,别告诉我在WINDOWS上装过就算懂差远着呢
b.其次,必须让别人也知道你懂ORACLE,最好的方法是考个认证(OCP)
c.Oracle的好处是在N多平台都可以运行,坏处呢,就是你必须明白如何让它在Solaris,HP-UX,WINDOWS,Linux,AIX,Tru64.......上跑起来系统DOWN了找别人?
那可以你自己的DATABASESERVER有什么办法,下定决心当系统管理员吧
d.ORACLE是基于网络的,所以在管理的时候,免不了用到N多网络东东总麻烦别人会遭白眼的,客户也不干,所以DBA最好也是网络管理员.恩,拿个CCNA保底也不错
e.从8i之后,ORACLE全面转向JAVA,所以为了保住饭碗,弄懂JAVA是必需的所以DBA也要是JAVAPROGRAMMER,向不会JAVA的同志们默哀,抓紧学吧
f.除了管理之外,另一方面也要协助开发人员做PROJECT,不管是B/S还是C/S那个S(server)总跑不了,所以DBA还要懂软件工程,去学UML和ROSE吧,hoho
g.现在用ORACLE做网站的很多,不管是APPLICATIONSERVER用的是ASP,JSP,ColdFusion还是别的什么,出了问题DBA也跑不了。
说你不管这个?
没门趁早学学那些东西,免得到时候弄不明白错儿出在什么地方。
学习Oracle认证的一些心得技巧
1、如果有一定的数据库基础,知道SQL是怎么回事,即使写不出来简单的SQL,但可以看动它们,你就可以跳到2。
否则请先看一下数据库基础和SQL语言,不需要很深,更不需要去记忆那些复杂的SQL命令,这些可以留在以后边应用边学习、记忆。
2、要想学好ORACLE,首先要学习ORACLE的体系结构,现在你不需要深入理解它们,但要分清几个关键的概念:
instance&database,memorystructure,process&thosefiles,suchasdatafile,controlfile,initparameterfileetc 以及database,tablespace,datafile和tablespace,segmnet,extent&block它们之间的关系。
当然还要分清undotablespace&redologfile等,对于很多初学者来说,能够对这些概念有个较为清晰的认识并不是一件容易的事,而这些并非Oracle的全部。
3、是有关ORACLE的一些基本概念,下面要学习的是一些简单的的实际操作,就是如何去管理ORACLE数据库,当然不是管理全部的ORACLE。
在此过程中你将对SQL和ORACLE体系结构有个更深入的了解。
4、到了这一步你基本上算是初步掌握了ORACLE,下面将要根据你的方向来具体学习其它的ORACLE知识了。
如果你是开发人员,则需要更多地去学习PL/SQL以及DEVELOPER,而这将是一门新的课程。
如果你是一名DBA,请继续。
5、现在你可以根据自己的实际情况,进行有选择的学习,也就是说下面的内容没有特别顺序要求。
可以选择深入学习ORACLE的管理、备份与恢复、性能调整、网络等。
当然在学习这些知识的过程中,如果有实际的工作更好,这样你可以在实际中成长,学会TROUBLESHOOTING。
6、当然在学习的过程中,你可以在网站或论坛中与他人进行交流,可以看别人的一些经验文章,也可以自己写一些心得体会。
(1)对象类型目前不实用吧?
我认为是这样.
(2)OCP考试中对象类型的成分有多重?
不多,完全不通也通得过.
(3)成为DBA的经验知识可以用其他途径,而不是实际工作,获得吗?
我觉得很难.
(4)DBA与Developer
<1>你认为哪个更好?
我觉得DBA工作更需要经验,而年龄大些也能胜任,而Developer工作如果年龄大了,干起来可能太累.
<2>他们得知识结构有何不同?
Developer主要是编程方面的知识,加一些performancetuning方面的知识
DBA需要管理系统的知识,例如安全性,可用性,扩展能力等等,需要的系统的未来有一些预见,这些都需要经验.
<3>脚踩两只船容易吗?
不容易,但如果有developer的background,作dba更顺手些,而你如果成了dba,可能就不原意再做developer了.
(5)Oracle应用开发目前的重点在哪里?
不同的工具有不同的特点,适合不同的应用,关键不是重点在哪里,而是你的应用有什么
具体的要求.
<1>PB<2>VB,Delphi
<3>C++持久对象->ODBC->Oracle
<4>perl包访问
<5>Java->JDBCDriver->Oracle
<6>ASP,JSP,Servlet
<7>RationalRoseUML建模->Oracle
<8>PL/SQL
<9>Access客户端访问
<10>XML?
Oracle
<11>Corba?
Oracle
<12>其他
(6)您管理您的Oracle是最常用的几个命令是什么?
select
(7)您为什么选择Oracle?
因为oracle的用户最多.
(8)您一般定义几个角色,各有什么权限?
与应用有关
(9)NCA还有人提吗?
这里有两个东西,1NC(Networkcomputer)2NCA(Networkcomputingarchitecture)先在原来概念中的NC不存在了,因为PC的价格下降太快.但广义上说,先在能上网的手机能上网的电视,可以说是NC的一种延伸.
关于NCA,就算应用系统运行在一台大服务器上,而client只通过普通的browser操作系统(不同于以前的client/server结构),现在已经证明NCA更加优越,NCA的系统先在已经很多,例如这个网易虚拟社区,就是典型的NCA系统.
(10)关系型数据库、表模型、SQL标准与范式各有什么关系?
提起这个问题的起因是我发现大量的例子中表不规范(如没有关键字)关系与表可以说是同义词.SQL(StructuredQueryLanguage)是关系数据库的操作语言 范式的概念更理论化一些,如果有兴趣,可以找些关系数据库理论方面的书看,在应用系统中用的是第二和第三范式,不知道也问题不大.
(11)事务处理是不是与Java多线程的同步方法有些类似?
举例说,在一个银行系统中,如果要从两个帐号间转帐,就是A帐号减100元,B帐号加100元,必须保证,两个操作要么都成功,要么都失败,否则系统就会出现不一致.这两个操作就是一个事务.而事务的这个特征,就叫做原子性.事务的原子性是由Oracle系统保证的.
(12)SQL3标准走得有多远?
Oracle8离它有多远?
不知道
(13)推荐几本应试的好书吧!
最好就是OCP的培训教材了.
(14)在SQL*Plus中如何访问数据字典?
所有字典都用select访问,关键你要知道字典的名字,有多少column,含义是什么
OracleDBA职责及日常工作分析
每天工作
1、确认所有的instance状态正常登录到所有数据库或实例,检测Oracle后台进程:
#ps-ef|grepora
2、检查文件系统的使用(剩余空间)。
如果文件系统的剩余空间小于20%,需删除不用的文件以释放空间。
#df-k
3、检查日志文件和trace文件记录alert和trace文件中的错误。
cd$Oracle_BASE/oradata//bdump
tail-falert_.log
发现任何新的ORA_错误,记录并解决
4、检查数据库当日备份的有效性
对RMAN备份方式,检查第三方备份工具的备份日志以确定备份是否成功
对EXPORT备份方式,检查exp日志文件以确定备份是否成功
对其它备份方式,检查相应的日志文件
5、检查数据文件的状态记录状态不是“online"的数据文件,并做恢复。
selectfile_namefromdba_data_fileswherestatus="OFFLINE"
6、检查表空间的使用情况
selecta.tablespace_name,round((total-free)/total,3)*100pecent
from(selecttablespace_name,sum(bytes)freefromdba_free_spacegroupbytablespace_name)a,
(selecttablespace_name,sum(bytes)totalfromdba_data_filesgroupbytablespace_name)b
wherea.tablespace_name=b.tablespace_name
7、检查剩余表空间
selecttablespace_name,sum(blocks)asfree_blk,trunc(sum(bytes)/(1024*1024))asfree_m,
max(bytes)/(1024)asbig_chunk_k,count(*)asnum_chunks
fromdba_free_spacegroupbytablespace_name;
8、监控数据库性能
运行utlbstat.sql/utlestat.sql生成系统报告,或者使用statspace收集统计数据
9、检查数据库性能,记录数据库的CPU使用、IO、Buffer命中率等等,使用vmstat,iostat,glance,top
10、日常出现问题的处理
每周的工作
1、控制数据库对象的空间扩展情况,根据本周每天的检查情况找到空间扩展很快的数据库对象,并采取相应的措施。
删除历史数据、扩展表空间
altertablespaceadddatafile'