Oracle存储结构Word格式文档下载.docx

上传人:b****6 文档编号:18630616 上传时间:2022-12-30 格式:DOCX 页数:9 大小:19.66KB
下载 相关 举报
Oracle存储结构Word格式文档下载.docx_第1页
第1页 / 共9页
Oracle存储结构Word格式文档下载.docx_第2页
第2页 / 共9页
Oracle存储结构Word格式文档下载.docx_第3页
第3页 / 共9页
Oracle存储结构Word格式文档下载.docx_第4页
第4页 / 共9页
Oracle存储结构Word格式文档下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

Oracle存储结构Word格式文档下载.docx

《Oracle存储结构Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Oracle存储结构Word格式文档下载.docx(9页珍藏版)》请在冰豆网上搜索。

Oracle存储结构Word格式文档下载.docx

9,LOBsegment:

存放大的数据,oracle里面将这些数据并不放在表内部,而是有专门一个段来存储

10,nestedtable(嵌套表):

一个表中的某个字段的值是另外一个整表!

11,bootstrapsegment:

初始化我们的实例用的。

这个段不需要维护和管理!

二oracle存储参数的设定及继承问题

【记忆】默认为Oracledefault 

===》Tablespace(创建表空间时定义的参数)====》Segment(优先级最高)

【理解】初始参数oracleblock的5倍;

意思是说你创建一个表,即使里面没存数据,它已经占用了8k×

5=40kB的空间(这里假设oracleblocksize为8kB)

三创建表时可以单独为表指定存储参数

SQL>

connhr/123456@kk

已连接。

createtablehello(idint)

tablespacebkeep

storage(initial100k

next100k);

【点子】我们来创建一个表空间test11,不带任何存储参数,然后打开oem看看它的存储参数(这些参数就是从oracledefault哪里继承过来的!

四extent的分配和重新分配

当创建段时就分配空间

当扩展段时给它分配空间

强制分配空间给段(段可以跨数据文件,但不可以跨表空间;

但是强制的段是不能跨数据文件获取空间的)

创建表时,最初始的空间一定会分配给它!

tablespacebkeep

storage(initial100k 

//意思是,不管表里面有没有数据,都会占掉100k的空间

next100k);

表已创建。

五【实验】强制分配分区

1,我们想给hr.hello表在system01.dbf上划分1M的空间,

结果:

ORA-03284:

数据文件d:

/oracle/oradata/kk/system01.dbf不是表空间BKEEP的成员

altertablehr.hello

allocateextent(size1mdatafile'

d:

/oracle/oradata/kk/system01.dbf'

);

altertablehr.hello

*

ERROR位于第1行:

2,现在我们给bkeep表空间增加一个数据文件bkeep03.dbf

altertablespacebkeep

adddatafile'

/oracle/oradata/kk/bkeep03.dbf'

size10M;

3,再来给hr.hello表在bkeep03.dbf上强制划分1M空间

allocateextent(size1mdatafiled:

4,这里我们不指定数据文件,那么会不会是在建表的时候指定的那个数据文件上继续扩展呢?

allocateextent(size1m);

【思考】强制分配空间的时候会指定一个数据文件,当给该表分配的空间使用完以后,它将会怎么办?

继续从该数据文件上面获取空间?

还是从由localmanage随机分配空间给它?

答案:

【重点】droptablexxx和truncatetablexxx 

都会释放存储空间

回收hr.hello表没有用掉的空间

deallocateunused;

【记忆】datafile分区的使用情况记录在文件的头(filehearder)里面;

主要有两种信息:

Usedextent和Freeextent 

六databaseblock的大小

I/O读写的最小单位:

读整个块到内存去;

同理,内存的使用也以块大小为单位

块的大小是在创建表空间时指定的

DB_BLOCK_SIZE这个参数指定了缺省的块大小

七【实践检验真理】非标准块的使用方法:

验证db_16k_cache_size值的影响

oracle现在支持多种块大小的表空间,但是要使用这个功能,必须指定支持对应块大小的内存缓存区!

step1:

查看内存区为16k块分配的cache大小;

showparameterdb_16k_cache_size 

NAME 

TYPE 

VALUE

---------------------------------------------------------------

db_16k_cache_size 

biginteger 

step2:

创建表空间bkeep2并指定其blocksize为16KB;

结果:

报错

createtablespacebkeep2

datafile'

/oracle/oradata/kk/bkeep202.dbf'

size10m

blocksize16k;

createtablespacebkeep2

ORA-29339:

表空间块大小16384与配置的块大小不匹配

step3:

为16k的block在内存中设置缓存;

没有足够内存来增加高速缓存的大小

altersystemsetdb_16k_cache_size=8m;

altersystemsetdb_16k_cache_size=8m

ORA-02097:

无法修改参数,因为指定的值无效

ORA-00384:

没有足够的内存来增加高速缓存的大小

step4:

收缩其它缓存来给16kblock来用;

标准块缓存12→4,腾出了8m

altersystemsetdb_cache_size=4m;

系统已更改。

showparameterdb 

NAME 

TYPE 

------------------------------------ 

----------- 

---------------------------

8388608

db_8k_cache_size 

biginteger 

db_block_size 

integer 

8192

step5:

现在创建块大小为16kB的表空间bkeep2;

成功!

step6:

现在又想db_16k_cache_size=0;

bkeep2表空间在用,所以不能设为0

altersystemsetdb_16k_cache_size=0;

altersystemsetdb_16k_cache_size=0

ORA-00383:

DEFAULT高速缓存的块大小16384不能减少至零

step7:

把bkeep2表空间连同内容和数据文件全部删除,再来设db_16k_cache_size=0;

ok!

run

droptablespacebkeep2

*includingcontentsanddatafiles 

【思考】块大小为8k;

设对应的cache有如下特点。

db_cache_size=9m 

12M

db_cache_size=5m 

8M

showparameterdb_cache;

----------- 

---------------

db_cache_size 

8388608 

altersystemsetdb_cache_size=9m;

------------------------------------ 

12582912 

showparameterdb_b

integer 

8192 

八块的研究

header:

有多少行!

使用空间的方式是"

自上往下"

freespace:

保留用于更新的空闲空间

Data:

数据的填充方式是 

"

自下往上"

块一级控制对空间的使用

总共有四个参数:

PCTFREE、PCTUSED、INITRANS、MAXTRANS

PCTFREE

PCTUSED

【优化有关】用上面两个参数来控制块中预留的空间大小。

为什么要预留空间呢?

为了将来更新时防止数据变大而导致行移植!

为什么要避免行移植呢?

行移植的意思就是一行记录被放到两个块里面,之间做了指针链接;

将来查询这个数据的时候会读取两个块中的全部内容(block是最小读写单位),这样的话I/O负担就翻了一倍!

【说明】PCTFREE=20是20%控制insert,为了给将来update用!

呵呵,偏心吧!

九查看表的存储参数,在OEM里面

"

事务处理数量"

----‘初始值’对应‘INITRANS’‘最大值’对应‘MAXTRNS’

意思是:

初始值允许一个事务对这个块的操作,最大的事务数量是255 

十datablock的管理

自动段空间管理

手工管理段空间

自动段管理 

--推荐使用

1,借助位图来跟踪当前段的free和use空间

2,对并发数据的插入有更好的性能!

【疑问】如果表空间中包含LOBs对象,那么就不能使用自动段管理(难道我们的系统。

天哪!

) 

【常识】只能在创建表空间的时候指定段管理;

以后在这个表空间中创建的对象都将继承它的段管理特性 

【点子】在kong3表空间中创建表test11

OEM中查看表test11的存储特性

“空闲列表”为灰色的,说明它是自动管理的

十一【重点】如何通过字典视图查看空间管理信息?

每个对象所占有的分区都记录在DBA_EXTENTS里面

表空间还有多少自由空间?

DBA_FREE_SPACE

表空间从物理上有“数据文件”组成;

从逻辑上由“段”组成

物理线路:

DBA_TABLESPACES--→DBA_DATA_FILES--→DBA_FREE_SPACE+DBA_EXTENTS

逻辑线路:

DBA_TABLESPACES--→DBA_SEGMENTS---→DBA_FREE_SPACE+DBA_EXTENTS

【重点】这五个视图监控了系统存储这块的非常有用的信息;

必须高度重视,经常使用!

DBA_TABLESPACES

DBA_SEGMENTS

DBA_DATA_FILES

DBA_FREE_SPACE

DBA_EXTENTS

【技巧】如何判断表空间是local管理还是数据字典管理

SELECT*FROMDBA_TABLESPACE

可以看到“表空间名称”“block_size”“初始分区”“next分区”如果“next分区”为空,说明是local管理

【技巧】计算price表所占空间

每个对象所占用的分区都记录在DBA_EXTENTS视图里面

根据这个,我们可以计算authors表所占的空间

计算price表所占空间

SELECTsum(bytes)fromdba_extents

whereowner='

HR'

andsegment_name='

PRICE'

SUM(BYTES)

----------

65536 

【记忆】表空间的作用:

分离段,方便管理

控制用户空间的分配(普通表,分区表,cluster,LOBs等等)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1