1Oracle结构Word文档下载推荐.docx
《1Oracle结构Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《1Oracle结构Word文档下载推荐.docx(32页珍藏版)》请在冰豆网上搜索。
CACHE
CLUSTER
INDEX
改善对表数据的访问
INDEXPARTITION
LOBINDEX
LOBSEGMENT
NESTEDTABLE
ROLLBACK
用来维护用户事务期间的读一致性和执行事务恢复的特殊段
TABLE
把数据存储在行和列结构中
TABLEPARTITION
把一个表划分成更小的、更易管理的片段已达到改善性能的目的
TABLESUBPARTITION
TYPE2UNDO
表空间
表空间是一个逻辑结构
Droptablespacexxxincludingcontents;
递归地删除该表空间中的任何段(表、索引)
Droptablespacexxxincludingcontentsanddatafiles;
删除该表空间中的存储对象和基础数据文件
重命名表空间
Altertablespacexxxrenametoyyy;
把表空间变成只读的
Altertablespacexxxreadonly;
把表空间变成可读写的
Altertablespacexxxreadwrite;
把表空间置于备份模式
Altertablespacexxxbeginbackup;
把表空间改离备份模式
Altertablespacexxxendbackup;
将数据文件改名
altertablespaceapp_datarenamedatafile'
c:
\oracle\oradata\app_data.dbf'
to'
\oracle\app_data.dbf'
;
alterdatabaserenamefile'
to'
改变表空间中数据文件的大小
alterdatabasedatafile'
resize200m;
修改表空间的存储参数
ALTERTABLESPACEtablespacename
MINIMUMEXTENT2M;
ALTERTABLESPACEtablespacename
DEFAULTSTORAGE(
INITIAL2M
NEXT2M
MAXEXTENTS999);
回收站
回收站是每个表空间内的一个逻辑结构,它用来保存已删除的表和那些表所关联的对象,比如索引。
已删除表所关联的空间不是立即被可供使用的,但出现在dba_free_space中,当表空间出现空间压力时,回收站的对象按照FIFO的方式被删除,进而最大限度地延长最近被删除对象在回收站中的保持时间量。
Limits:
1.只有非system的本地管理式表空间能够含有一个回收站。
但是,如果已删除的对象驻留在一个本地管理式表空间中,那么驻留在目录管理式表空间中的依赖对象得到保护。
2.删除一个表时,除了位图连接索引、参照完整性约束(外部健约束)和物化视图日志外,这个表的依赖对象均被保存在回收站中。
3.索引仅当这个表先被删除时才得到保护,明确地删除一个索引时不会将该索引放置到回收站中。
盘区管理方式
局部盘区管理方式(LMT)或者较老式的目录盘区管理方式
本地管理的表空间比字典式管理的表空间有如下优点:
本地管理避免了循环空间管理操作,而这种操作在字典式管理表空间中可能发生(当消耗或释放某个区的空间,导致另一个消耗或释放回退段或数据字典表内空间的操作)。
如果利用目录盘区管理方式,数据库跟踪数据目录中自由和已用盘区,因而利用递归sql来修改fet$和uet$表。
因为本地管理的表空间不记录数据字典表中的空闲空间,从而减少了对这些表的争用
区的本地管理自动跟踪邻近的空闲空间,因而无须合并空闲区
本地管理的区大小可以由系统自动决定,作为选择本地管理的表空间内的所有的区都可以有相同大小
转换为区的位图不会生成回退信息,因为它们不更新数据字典中的表(除表空间定额信息等特殊情况外)
对于LMT,有两种针对盘区分配方式的选项:
UNIFORM或autoallocate。
Uniform用相同的固定大小分配和再分配表空间中的盘区。
Autoallocate选项告诉数据库,为每个段变化盘区的大小。
利用oracle提供的包dbms_space_admin,读者可以把一个表空间从目录盘区管理方式转换到局部盘区管理方式,或者反响转换。
但是,不能把system表空间和临时表空间转换到老式的目录管理方式。
盘区管理处理段级的空间分配
段空间管理方式
被看作是自由空间管理方式
手工
自动(ASSM)
使用自由列表来标识那些数据块可用
(这种跟踪一个段内空闲空间的方法有时会出现争用现象,而且会产生性能问题)
使用位图来标识那些数据块可用
用于表空间段的PCT_FREE和PCT_USED参数不被忽略
用于表空间段的PCT_FREE和PCT_USED参数被忽略
可以所有类型的表空间
不能用于临时和系统表空间
段级管理处理数据块级的空间分配,ASSM简化空闲空间的管理工作
临时表空间
在诸如orderby、groupby和createindex以及散列连接临时表或向临时表插入数据之类的操作时生成
临时段在下列大型分类操作时被创建:
1.orderby
2.groupby
3.selectdistinct
4.createindex
5.mergejoin
数据文件和临时文件在分配方面的不同:
数据文件在创建时被完全分配和初始化,而临时文件不一定保证被分配指定的磁盘空间。
这意味着某些unix系统上不实际分配磁盘空间,直到某个分类操作需要它。
这种延迟式分配方法容许文件的快速创建。
撤销表空间
目的:
1.rollback语句明确回退一个事务。
2.数据库恢复
3.回闪查询
4.DML操作和查询的读一致性
三个参数:
undo_management、undo_tablespace、undo_suppress_errors
即使撤销表空间的大小在一个撤销表空间问题解决之后得到了调整,在每个24小时时限内也仅有一个警告被报出。
回滚段包含的信息:
1.未提交撤销信息
2.已提交未过期撤销信息
3.已过期撤销信息
常见操作示例
修改数据文件的位置
1.脱机表空间
Altertablespacexxxoffline;
2.使用一个操作系统程序物理地转移文件,比如windows下的copy命令或者unix下的cp命令
3.把新位置告诉数据库
Altertablespacexxxrenamedatafile‘H:
\oracle\oradata\ora10\receiveables02.dbf’to‘G:
\oracle\oradata\ora10\receiveables02.dbf’;
4.重新联机表空间
Altertablespacexxxonline;
表
名称空间就是供该空间所服务的模式对象集使用的名称域。
(表、视图、序列、专用同义词、过程、函数、包、物化视图和用户定义类型)
回收空闲的空间(回收到High-watermark)
全部回收需要TRUNCATETABLEtablename
ALTERTABLEtablename DEALLOCATEUNUSED;
标记列不可用
ALTERTABLEtablename SETUNUSEDCOLUMNcolumnname CASCADECONSTRAINTS;
删除标记为不可用的列
ALTERTABLEtablename DROPUNUSEDCOLUMNSCHECKPOINT1000;
把表放到BUFFER_POOL中去
ALTERTABLEtablename STORAGE(BUFFER_POOLRECYCLE);
避免动态分配EXTENT
ALTERTABLEtablenameALLOCATEEXTENT;
把表放到CACHE中去
ALTERTABLEtablenameALLOCATECACHE/NOCACHE;
为表加主键,利用原来的索引
altertablexxaddprimarykey(user_no)usingindexidx_xx;
如果idx_xx是唯一索引,则altertablexxdisableprimarykey;
会删除idx_xx
如果idx_xx是非唯一索引,则altertablexxdisableprimarykey不会删除idx_xx
altertablexxdisableprimarykey;
altertablexxenableprimarykey;
系统会删除和重建维系主键的索引,但索引名不一定有意义,比如SYS_C0015634
临时表
Createglobaltemporarytablexx(col1int)oncommitdeleterows;
oncommitdeleterows只在当前事务的持续时间内
oncommitpreserverows 当前会话的持续时间内
rowed:
在数据库中存储一个堆结构表中任何一行的64进制物理地址。
Rowid包含对象ID、相对文件号、块号和块内行号。
Urowid:
存储64进制串,该串表示一个索引结构表中某一行的逻辑地址。
当创建一个含有lob列的表时,可以为lob数据指定一个与该表其余部分不同的表空间和属性。
LOB定位器(即一种指针)随同表行一起存储,并用来访问lob数据。
数据库lob类型如下所示:
CLOB存储变长字符数据
NCLOB用同一码字符集存储变长字符串
BLOB在数据库里面存储变长二进制数据。
BLOB数据在数据库之间或在客户与服务器进程之间传递时部经历字符集转换。
BFILE在数据库外面存储变长二进制数据。
_understore下划线
$dollarsign美元符号
#poundsign英镑符号
-periodsign破折号
@at@符号
Punctuation标点符号
统计
表的统计信息,是存在数据词典里的,可以被oracle基于代价的优化器使用,最新的优化器可以极大地提高系统的性能。
分析表
analyzetablemzbs.db_codeESTIMATESTATISTICSSAMPLE20PERCENT;
约束
deferrableinitiallydeferred
在事务结尾才检查它。
notdeferrable
每条语句之后就检查它,第三种总是IMMEDIATE,并且不会受SETCONSTRAINTS影响
initiallydeferred
initiallyimmediatedeferrable
每条语句之后就检查它。
createtableexceptions(row_idrowid,
ownervarchar2(30),
table_namevarchar2(30),
constraintvarchar2(30));
createtableexceptions(row_idurowid,
prmarykeyanduniquekey的区别:
如果主键是deferrable,则支持他的索引是nonunique,如果主键是immediate,则支持他的索引是unique
索引
索引分配参数
ALTERINDEXindexname STORAGE(NEXT400KMAXEXTENTS100);
重新整理索引表空间碎片
ALTERINDEXindexnameCOALESCE;
把索引放到BUFFER_POOL中
ALTERINDEXcust_name_idx REBUILDSTORAGE(BUFFER_POOLKEEP);
释放索引空间
ALTERINDEXindexname ALLOCATEEXTENT(SIZE200K DATAFILE'
/DISK6/indx01.dbf'
);
ALTERINDEXindexname DEALLOCATEUNUSED;
位图索引的限制:
1.位图索引不能被声明成唯一索引
2.基于规则的优化器不会使用位图索引
3.当执行altertable语句,并修改包含有位图索引的列时,会使位图索引失效
4.位图索引在索引块中存储了索引键的值;
然而,它们并不能用于任何类型的完整性检查。
5.不支持行级加锁。
内存结构
Sga系统全局区
数据库高速缓存
由数据库用户最近访问过的数据
重作日志缓存
重做入口(重做记录),它有一组变化的向量组成,这些变化的向量包括表块变化(块位置,变化数据)、undo块变化和undo事务表变化。
当用户执行事务操作时(ddl和dml)时,服务器进程会将重做记录写入重做日志缓冲区,并最终由后台进程lgwr将重做日志记录写到重做日志文件中。
日志序列号是重做日志的使用标示号,其数值也是顺序递增的。
共享池
数据库用户已经发布的最常用的sql语句
数据字典缓存
Dictionarycache
库高速缓存
Librarycache
java池
在oracle的jvm选件得到使用时,高速缓存最近使用的java对象和应用软件代码
流存储池
当oracle的advancedqueueing选件得到使用时,高速缓存跟排队的消息请求相关的数据。
大型池
为诸如rman备份与恢复活动之类的大型操作和sharedserver构件高速缓存器
保存其他控制信息的结构
其他
在32bit的数据库下,通常oracle只能使用不超过1.7G的内存,假如我们安装64bit的数据库,我们就可以
使用很大的内存,我们几乎不可能达到上限。
select*fromv$sga;
FixedSize746272
VariableSize3221225472
DatabaseBuffers3221225472
RedoBuffers1323008
FixedSize:
oracle的不同平台和不同版本下可能不一样,但对于确定环境是一个固定的值,里面
存储了SGA各部分组件的信息,可以看作引导建立SGA的区域。
VariableSize:
包含了shared_pool_size、java_pool_size、large_pool_size等内存设置
DatabaseBuffers:
在9i中包含db_cache_size、db_keep_cache_size、db_recycle_cache_size、db_nk_cache_size。
RedoBuffers:
指日志缓冲区,log_buffer。
selectsubstr(name,1,10)name,substr(value,1,10)valuefromv$parameterwherename='
log_buffer'
log_buffer1048576
select*fromv$sgastatwherename='
log_buffer1312768
Pga进程全局区
存储与用户具体相关的会话信息,比如赋值变量、会话变量
私有sql区
会话内存区
排序区
进程全局区(PGA)即可以理解为ProcessGlobalArea,也可以理解为ProgramGlobalArea.它的内存段是在进程私有区(ProcessPrivateMemory)而不是在共享区(SharedMemory).它是个全局区意味着它包含了所有代码有可能进入的全局变量和数据结构,但是它是不被所有进程共享的.每个Oracle的服务器进程都包含有属于自己的PGA,它只包含了本进程的相关特定信息.PGA中的结构不需要由latches来保护,因为其它的进程是不能进入到这里面来访问的.
PGA包含的是有关进程正在使用的操作系统资源信息以及进程的状态信息,而其它的进程所使用的Oracle的共享资源是在SGA中.PGA是私有的而不是共享的,这个机制是有必要的,因为当进程死掉后可以把这些资源清除和释放掉.
PGA包含两个主要区域:
FixedPGA和VariablePGA或称为PGAHeap.FixedPGA的作用跟FixedSGA是类似的,都包含原子变量(不可分的),小的数据结构和指向VariablePGA的指针.
VariablePGA是一个堆.它的Chunks可以从FixedTableX$KSMPP查看得到,这个表的结构跟前面有提到的X$KSMSP是相同的.PGAHEAP包含了一些有关FixedTable的永久性内存,它跟某些参数的设置有依赖关系.这些参数包含DB_FILES,LOG_FILES,CONTROL_FILES.
Uga(UserGlobalArea)
Cga
跟其它的全局区不同,CallGlobalArea是短暂性存在的.它只有在调用数据期间存在,一般是在对实例的最低级别的调用时才需要CGA,如下:
分析一个SQL语句
执行一个SQL语句
取出一个SELECT语句的输出
一个单独的CGA在递归调用时是需要的.在SQL语句的分析过程中,对数据字典信息的递归调用是需要的,因为要对SQL语句进行语法分析,还有在语句的优化期间要计算执行计划.执行PL/SQL块时在处理SQL语句的执行时也是需要递归调用的,在DML语句的执行时要处理触发器执行也是需要递归调用的.
不管UGA是放在PGA中还是在SGA中,CGA都是PGA的一个子堆(Subheap).这个事实的一个重要推论是在一个调用的期间会话必须是一个进程.对于在一个MTS的Oracle数据库进程应用开发时关于这一点的理解是很重要的.如果相应的调用较多,就得增加processes的数量以适应调用的增加.
没有CGA中的数据结构,CALLS是没法工作的.而实际上跟一次CALL相关的数据结构一般都是放在UGA中,如SQLAREA,PL/SQLAREA和SORTAREA它们都必须在UGA中,因为它们要在各CALLS之间要一直存在并且可用.而CGA中所包含的数据结构是要在一次CALL结束后能够释放的.例如CGA包含了关于递归调用的信息,直接I/OBUFFER等还有其它的一些临时性的数据结构.
JavaCallMemory也是在CGA中.这一段内存比Oracle的其它内存段管理得更密集.它分成三个Space:
StackSpace,NewSpace,OldSpace.在NewSpace和OldSpace中不再被参考使用的Chunks,根据它们在使用期间的长度及SIZE的不同,在调用的执行过程中将被当成不用的Chunks收集起来.NewSpaceChunks很多次的不用的Chunks的反复收集过程中没有被收集的Chunks将会被放到OldSpaceChunks中.这是在Oracle内存管理中唯一的一个废物收集(garbagecollection),其它的Oracle内存段都是释放DeadChunks.
ProcessMemoryAllocation
跟SGA不一样的是,SGA在实例启动之后SIZE就已经是定下来的,而PGA的SIZE是会增长的.通过使用malloc()或者sbrk()系统调用来为进程增加堆数据段大小而使得PGA的SIZE的增长.OS的新虚拟内存会被做为PGAHEAP中的一个新的区被加到PGA中来.这些区一般只几KB大,如果有需要,Oracle将会给分配上千个区.
操作系统对每个进程的堆数据段的增长是有限制的.大部分的情况是操作系统的内存参数进行限制(kernelparameter:
MAXDSIZ),有一些情况它的缺省值是可以以每个进程为基准进行修改的.对于所有的进程,操作系统对整个虚拟内存也有一个系统全局性的限制,这个限制跟系统的SWAPSPACE相关.一旦超过了这两个限制,Oracle的进程在执行中会遇到ORA-4030错误.
ORA-4030这个错误的产生一般不是因为每个进程的资源限制而是因为SWAPSPACE空间不足造成.为了诊断这个问题可以使用操作系统的一些选项来查看SWAPSPACE的使用情况.另外,在一些操作系统中,Oracle包含了一个工具叫maxmem,它可以用来查看每个进程可以被分配的堆数据段的最大SIZE以及哪一个限制是第一次超过的.
如果这个问题的出现是因为SWAPSPACE空间不足,而且换页的动作非常频繁而且较多,则需要减少系统一级的虚拟内存的使用,这个可以通过减少进程数也可以通过减少每个进程的内存限制.如果换页动作不频繁而且比较少,则需要调大SWAPSPACESIZE.
ProcessMemoryDeallocation:
Oracle堆的增长比它们的收缩要来得容易,当然它们的SIZE也是可以收缩的.在V$MYSTAT和V$SESSTAT视图中,session的统计信息sessionugamemory和sessionpgamemory分别显示了当前session的UGA和PGA的内存大小,包含内部的空闲空间.相应的统计信息sessionugamemorymax和sessionpgamemorymax分别显示了在session的生存期间所使用过得最大的UGA