简述Oracle表空间,断,盘区和数据块之间的关系!

简述Oracle表空间,断,盘区和数据块之间的关系!,第1张

表空间(tablespace)

表空间是数据库中的基本逻辑结构,一系列数据文件的集合。一个表空间可以包含多个数据文件,但是一个数据文件只能属于一个表空间。

段(Segment)

段是对象在数据库中占用的空间,虽然段和数据库对象是一一对应的,但段是从数据库存储的角度来看的。一个段只能属于一个表空间,当然一个表空间可以有多个段。

表空间和数据文件是物理存储上的一对多的关系,表空间和段是逻辑存储上的一对多的关系,段不直接和数据文件发生关系。一个段可以属于多个数据文件,关于段可以指定扩展到哪个数据文件上面。

段基本可以分为以下四种

数据段(Data Segment)

索引段(Index Segment)

回滚段(Rollback Segment)

临时段(Temporary Segment)

区间(Extent)

在一个段中可以存在多个区间,区间是为数据一次性预留的一个较大的存储空间,直到那个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区间,一直到段的最大区间数(Max Extent)或没有可用的磁盘空间可以申请。

在 ORACLE8i以上版本,理论上一个段可以无穷个区间,但是多个区间对ORACLE却是有性能影响的,ORACLE建议把数据分布在尽量少的区间上,以减少ORACLE的管理与磁头的移动,但是在某些特殊情况下,需要把一个段分布在多个数据文件或多个设备上,适当的加多区间数也是有很大好处的。

数据块(Block)

ORACLE最基本的存储单位,他是OS数据块的整数倍。ORACLE的 *** 作都是以块为基本单位,一个区间可以包含多个块(如果区间大小不是块大小的整数倍,ORACLE实际也扩展到块的整数倍)。

select sum(chulishichang1) from: 查询chulishichang1属性值的和

formtable_main_854 t1: formtable_main_854是左表,起别名为t1

left join: 左连接

workflow_requestbase t2: workflow_requestbase是右表,起别名为t2

on t1requestid=t2requestid: 通过这两个属性连接两张表

where t2currentnodetype =3: 筛选条件,右表t2的currentnodetype属性值 = 3

程序开始建立两个数据库连接,函数mysql_query()原型:

resource mysql_query ( string $query [, resource $link_identifier ] )

方法1:在mysql_query函数中指定所用连接,即:

方法2:在sql语句中关联所用数据库,此时可以省略mysql_query的第二个参数,即:

string dataDir = AppDomainCurrentDomainBaseDirectory;//获取当前程序路径

if (dataDirEndsWith(@"\bin\Debug\")

|| dataDirEndsWith(@"\bin\Release\"))//判断是在\bin\Debug\或\bin\Release\路径下

{

dataDir = SystemIODirectoryGetParent(dataDir)ParentParentFullName;

//获取dataDir的父目录的名称

AppDomainCurrentDomainSetData("DataDirectory", dataDir);

}

一、问题现象

ORA-04030: out of process memory when trying to allocate 64544 bytes (sort subheap)

二、问题诊断

根据错误提示,可以确定是在 *** 作数据库时内存不够造成的。

检查ORACLE数据库内存使用情况,发现SGA和PGA内存使用都有剩余。

然后检查 *** 作系统用户的内存设置,发现/etc/security/limits文件中应用账户sde内存限制过小。

三、问题解决

1、先调整数据库服务器上sde用户的单个进程的数据段限制,由131072调整为ulimited

$ ulimit -a

time(seconds) unlimited

file(blocks) unlimited

data(kbytes) 131072

stack(kbytes) 4194304

memory(kbytes) 32768

coredump(blocks) 0

nofiles(descriptors) 2000

threads(per process) unlimited

processes(per user) unlimited

2、编辑/etc/security/limits文件,添加sde用户参数值

# vi /etc/security/limits

sde:

fsize = -1

core = -1

cpu = -1

data = -1

rss = -1

stack = -1

nofiles = -1

fsize_hard = -1

core_hard = -1

cpu_hard = -1

data_hard = -1

rss_hard = -1

stack_hard = -1

nofiles_hard = -1

3、重启数据库监听

# su - oracle

$ lsnrctl stop

$ lsnrctl start

监听启动后,重新执行应用,应用成功执行。至此,问题解决。

以上就是关于简述Oracle表空间,断,盘区和数据块之间的关系!全部的内容,包括:简述Oracle表空间,断,盘区和数据块之间的关系!、求大神帮忙解释一下这段数据库代码的意思,越详细越好,感激不尽!、php 如何把两段数据库内容拼接等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9424785.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存