主题一:体系结构数据库很复杂---》体系结构很复杂---》为什么体系结构很复杂?因为稀有资源不足,所以oracle引入复杂的内存、外存有效的管理稀有资源。什么是稀有资源?(引入人类历史)1.Oracle的数据保存在什么地方?硬盘(机械速度读取磁盘的速度)2.Oracle的数据在什么地方更新?内存(90%)(电子速度计算机的配置)所以Oracle的稀有资源是什么?(硬盘、内存)举一个场景数据库断电(事务执行一半断电,再次启动时要恢复已经写入得数据)oracle体系结构设计的初衷是什么?不是为了处理SQL,而是为了以后可以方便改进系统的效率和数据的恢复数据库由两分组成实例(instance):内存和后台进程的集合SGA:系统全局区{共享池(sharedpool):{库缓存(librarycache):{作用:共享sql、plsql代码}数据字典缓存(datadictcache):{作用:保存数据字典和用户的权限信息}}数据库高速区:产生脏数据的场所。重做日志缓冲区:操作ddl和dml时必须先写入重做日志缓冲区}PGA:程序全局区排序信息、游标信息、会话信息后台进程:smon、dbwr、pmon、lgwr、ckpt数据库(database):由一系列数据库文件组成控制文件:数据文件:日志文件:参数文件:口令文件:归档日志文件:一条sql语句是如何执行的?编译1.库缓存检查是否存在2.检查语法是否正确3.查询数据字段检查表和列的定义4.加编译锁(sql语句在编译过程中涉及的对象不能被改变)5.查询引用对象的用户权限6.生成执行计划、装入sql共享区执行7.服务器进程执行Sql语句提取数据8.服务器进程返回数据集合,必要的时候要进行排序主题二:存储结构1.Oracle为什么要引入那么复杂的逻辑结构?可移植性强、不依赖操作系统文件2.引入表空间(Tablespace)、段(Segment)、区(Extent)、块(Oracleblock)的概念(看图说话)3.如何查询当前数据库的现有表空间?select*fromdba_tablespaces4.表空间分类数据表空间固定段还原表空间回滚段临时表空间临时段固定段:表、索引回滚段:需要回滚数据临时段:临时的排序信息、临时表5.创建用户时要选择默认表空间和临时表空间默认表空间:创建表的时候如果不指定表存放的表空间则保存在当前用户的默认表空间临时表空间:为当前用户指定临时表空间,如果不指定会使用数据库的默认临时表空间(打开user.sql进行讲解)如何查看数据库的默认临时表空间?select*fromDataBase_propertieswhereproperty_namelike'DEFAULT%';6.表空间段管理的两种方式数据字典方式(9i中已经被废弃)CreateTableSpacelession_db_dataDataFile'E:\tablespace\lession_db_data.dbf'Size5MMINIMUMEXTENT50kEXTENTMANAGEMENTDICTIONARYDEFAULTSTORAGE(INITIAL50KNEXT50KMAXEXTENTS100PCTINCREASE0);n-2next*(1+PCTINCREASE/100)从第三次开始本地创建方式CreateTableSpacelession_dataDataFile'E:\tablespace\lession_data.dbf'Size5MExtentManagementLocaluniformsize1M;7.如果创建表空间?从语法进行介绍CreateTableSpacelession_indexDataFile'E:\tablespace\lession_index.dbf'Size5MExtentManagementLocaluniformsize1M;如何查看数据文件?selectfile_id,file_name,tablespace_name,bytes/(1024*1024)MBfromdba_data_files;如何创建临时表空间?CreateTEMPORARYTableSpacelession_tempTempfile'E:\tablespace\lession_temp.dbf'Size5MExtentManagementLocaluniformsize1M;查看临时表空间文件的方式?select*fromv$tempfile8.删除表空间的问题删除表空间的语法droptablespaceLESSION_DATAincludingcontentsanddatafiles;注默认临时表空间不允许删除更新一个临时表空间为默认临时表空间alterdatabasedefaulttemporarytablespacelession_temp;9.表空间不足了怎么办?1.增加文件altertablespaceLESSION_INDEXadddatafile'E:\TABLESPACE\LESSION_INDEX02.DBF'size5M;2.扩充文件alterdatabasedatafile'E:\TABLESPACE\LESSION_INDEX.DBF'resize10M;准备工作还原数据库最初的结构模拟我们现实开发中的跑库流程主题三:数据库对象表1.定义:基本的数据存储集合,由行和列组成2.建表要注意的命名语法有哪些?(按照ppt讲解)3.表的列类型的种类?(按照ppt讲解)4.ROWID的概念AAAHafAALAAAAGKAAAAAAHaf对象的号码AAL文件号码AAAAGKoracle块号码AAA行号码数据对象号+相对文件号+块号+行号5.临时表在一次会话或则是一次事务中产生数据createglobaltemporarytableemp_temponcommitpreserve(delete)rowsasselect*fromempwheredeptno='20'为什么重新启动一个会话无法看到表中数据?因为我们的临时表不是保存在固定段(数据表空间)而是保存在临时段(临时表空间)上数据是保存在这一次的会话(PGA的session)中6.如何查看是否是临时表呢?selecttable_name,tablespace_name,temporaryfromdba_tableswhereowner='JGRING'7.如何为表申请Extent?自动(数据库完成)手动(需要通过脚本完成)在试验之前我们先查询一下申请altertablejgring.deptallocateextent;查询selectsegment_type,segment_name,tablespace_name,extentsfromdba_segmentswhereowner='JGRING'8.了解deletetable、truncatetable和droptable的区别delete:是dml语句,可以回滚,删除数据truncate:是ddl语句,不可以回滚,截断数据和索引,正在被外键引用的表不能截断,不触发触发器举例truncatedeptdrop:是ddl语句,不可以回滚,删除的表无法恢复约束1.维护数据的有效性三种方式1).Oracle的约束2).数据库触发器3).应用程序代码2.约束的分类非空C主键P外键K唯一U检查C3.如何查询在当前模式(用户)下有多少约束对象?selectconstraint_name,table_name,constraint_type,status,deferrable,deferred,validatedfromdba_constraintswhereowner='JGRING'4.如何使一个约束失效?altertableEMPdisableconstraintFK_DEPTNO;5.如何使一个约束生效?altertableEMPenableconstraintFK_DEPTNO;6.如何删除一个约束?altertableEMPdropconstraintFK_DEPTNO;7.如何新增一个约束?altertableEMPaddconstraintFK_DEPTNOforeignkey(DEPTNO)referencesDEPT(DEPTNO);8.如何增加一个check约束?LOSAL10000(实例讲解)视图1.分类1)简单视图:一个表无函数无分组2)复杂视图:多个表或则有函数或则有分组2.如何创建视图?语法createorreplaceviewv_SALGRADEasselectGRADE,LOSAL,HISALfromSALGRADE3.简单视图是可以支持dml操作的?往视图(表)中插入数据insertintov_salgradevalues(1,1,1);删除视图(表)中的数据deletefromv_salgradetwheret.rowid='AAAHacAALAAAACKAAF'4.避免对视图进行dml操作WITHREADONLY;5.删除视图dropviewv_SALGRADE;6.表和视图的区别和联系区别1、视图是已经编译好的sql语句。而表不是2、视图没有实际的物理记录。而表有。3、表是内容,视图是窗口4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时四对它进行修改,但视图只能有创建的语句来修改5、表是内模式,试图是外模式6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。8、视图的建立和删除只影响视图本身,不影响对应的基本表。联系视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系序列1.什么是序列?(对照ppt)2.如何创建序列?语法createsequenceSEQ_LESSIONminvalue1maxvalue999999999999999999999999999startwith1incrementby1cache1000;3.如何查询序列?下次值:selectseq_lession.nextvalfromdual;当前值:selectseq_lession.currvalfromdual;4.序列的用途?充当主键(自增长)insertintosalgradetvalues(seq_lession.nextval,1,1);5.什么是裂缝?口诉造成裂缝的原因1)回滚2)系统异常3)多个表同时使用同一序列6.在数据字典中查看序列select*fromdba_SEQUENCESwheredba_SEQUENCES.sequence_owner='JGRING';7.如何删除一个序列?DROPSEQUENCEseq_lession;索引1.什么是索引?(结合图书馆借书口述)2.在索引中存储的是什么?索引存储的是关键字和真正的数据指针3.索引的分类1)逻辑分类{a.单一b.非单一c.唯一d.函数}2)物理分类{B-treeBit-map}tttTtttt索引项(索引项头、索引列长度、索引列值、rowid)姓名性别张三男李四女王五男赵六未知男1rowid0rowid1rowid女0rowid1rowid0rowid未知0rowid0rowid1rowid4.如何查询索引?在什么表空间?selectindex_name,table_name,tablespace_name,index_type,uniqueness,statusfromdba_indexeswhereowner='JGRING'5.如何创建索引?createINDEXJGRING.LOSA