导航:首页 > 废水知识 > 回滚段争用

回滚段争用

发布时间:2023-01-02 06:36:18

① oracle性能检测sql语句

监控事例的等待

select event sum(decode(wait_Time )) Prev

sum(decode(wait_Time )) Curr count(*) Tot

from v$session_Wait

group by event order by ;

回滚段的争用情况

select name waits gets waits/gets Ratio

from v$rollstat a v$rollname b

where a usn = b usn;

监控表空间的 I/O 比例

select df tablespace_name name df file_name file f phyrds pyr

f phyblkrd pbr f phywrts pyw f phyblkwrt pbw

from v$filestat f dba_data_files df

where f file# = df file_id

order by df tablespace_name;

监控文件系统的 I/O 比例

select substr(a file# ) # substr(a name ) Name

a status a bytes b phyrds b phywrts

from v$datafile a v$filestat b

where a file# = b file#;

在某个用户下找所有的索引

select user_indexes table_name user_indexes index_name uniqueness column_name

from user_ind_columns user_indexes

where user_ind_columns index_name = user_indexes index_name

and user_ind_columns table_name = user_indexes table_name

order by user_indexes table_type user_indexes table_name

user_indexes index_name column_position;

监控 SGA 的命中率

select a value + b value logical_reads c value phys_reads

round( * ((a value+b value) c value) / (a value+b value)) BUFFER HIT RATIO

from v$sysstat a v$sysstat b v$sysstat c

where a statistic# = and b statistic# =

and c statistic# = ;

监控 SGA 中字典缓冲区的命中率

select parameter gets Getmisses getmisses/(gets+getmisses)* miss ratio

( (sum(getmisses)/ (sum(gets)+sum(getmisses))))* Hit ratio

from v$rowcache

where gets+getmisses <>

group by parameter gets getmisses;

监控 SGA *** 享缓存区的命中率 应该小于 %

select sum(pins) Total Pins sum(reloads) Total Reloads

sum(reloads)/sum(pins) * libcache

from v$librarycache;

select sum(pinhits reloads)/sum(pins) hit radio sum(reloads)/sum(pins) reload percent

from v$librarycache;

显示所有数据库对象的类别和大小

select count(name) num_instances type sum(source_size) source_size

sum(parsed_size) parsed_size sum(code_size) code_size sum(error_size) error_size

sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size) size_required

from dba_object_size

group by type order by ;

监控 SGA 中重做日志缓存区的命中率 应该小于 %

SELECT name gets misses immediate_gets immediate_misses

Decode(gets misses/gets* ) ratio

Decode(immediate_gets+immediate_misses

immediate_misses/(immediate_gets+immediate_misses)* ) ratio

FROM v$latch WHERE name IN ( redo allocation redo );

监控内存和硬盘的排序比率 最好使它小于 增加 sort_area_size

SELECT name value FROM v$sysstat WHERE name IN ( sorts (memory) sorts (disk) );

监控当前数据库谁在运行什么SQL语句

SELECT osuser username sql_text from v$session a v$sqltext b

where a sql_address =b address order by address piece;

监控字典缓冲区

SELECT (SUM(PINS RELOADS)) / SUM(PINS) LIB CACHE FROM V$LIBRARYCACHE;

SELECT (SUM(GETS GETMISSES USAGE FIXED)) / SUM(GETS) ROW CACHE FROM V$ROWCACHE;

SELECT SUM(PINS) EXECUTIONS SUM(RELOADS) CACHE MISSES WHILE EXECUTING FROM V$LIBRARYCACHE;

后者除以前者 此比率小于 % 接近 %为好

SELECT SUM(GETS) DICTIONARY GETS SUM(GETMISSES) DICTIONARY CACHE GET MISSES

FROM V$ROWCACHE

找ORACLE字符集

select * from sys props$ where name= NLS_CHARACTERSET ;

监控 MTS

select busy/(busy+idle) shared servers busy from v$dispatcher;

此值大于 时 参数需加大

select sum(wait)/sum(totalq) dispatcher waits from v$queue where type= dispatcher ;

select count(*) from v$dispatcher;

select servers_highwater from v$mts;

servers_highwater接近mts_max_servers时 参数需加大

碎片程度

select tablespace_name count(tablespace_name) from dba_free_space group by tablespace_name

having count(tablespace_name)> ;

alter tablespace name coalesce;

alter table name deallocate unused;

create or replace view ts_blocks_v as

select tablespace_name block_id bytes blocks free space segment_name from dba_free_space

union all

select tablespace_name block_id bytes blocks segment_name from dba_extents;

select * from ts_blocks_v;

select tablespace_name sum(bytes) max(bytes) count(block_id) from dba_free_space

group by tablespace_name;

查看碎片程度高的表

SELECT segment_name table_name COUNT(*) extents

FROM dba_segments WHERE owner NOT IN ( SYS SYSTEM ) GROUP BY segment_name

HAVING COUNT(*) = (SELECT MAX( COUNT(*) ) FROM dba_segments GROUP BY segment_name);

表 索引的存储情况检查

select segment_name sum(bytes) count(*) ext_quan from dba_extents where

tablespace_name= &tablespace_name and segment_type= TABLE group by tablespace_name segment_name;

select segment_name count(*) from dba_extents where segment_type= INDEX and owner= &owner

group by segment_name;

找使用CPU多的用户session

是cpu used by this session

select a sid spid status substr(a program ) prog a terminal osuser value/ / value

from v$session a v$process b v$sesstat c

where c statistic#= and c sid=a sid and a paddr=b addr order by value desc;

lishixin/Article/program/Oracle/201311/17800

② 如何使用Oracle回滚段

Oracle缺省用的是专用服务器模式,也就是说一个用户连接进程对应一个服务器的进程.
记得某大医院刚启用的时候,我们曾经试过MTS.因为听说MTS在不增加内存和CPU的情况下连接更多的客户端,结果并不是我们预期的那样.
因为我们对MTS不了解,并不是它有问题,而是它不是用来在这种情况下做这件事的.

③ 什么是 回滚段争用

很简单,事务并发太多,回滚段不够用了。

④ oracle与sqlserver区别

体系结构

ORACLE的文件体系结构为

数据文件 DBF (真实数据)

日志文件 RDO

控制文件 CTL

参数文件 ORA

SQL SERVER的文件体系结构为

MDF (数据字典)

NDF (数据文件)

LDF (日志文件)

ORACLE存储结构

在ORACLE里有两个块参数PCTFREE(填充因子)和PCTUSED(复用因子) 可控制块确定块本身何时有 何时没有足够的空间接受新信息(对块的存储情况的分析机制)

这样可降低数据行连接与行迁移的可能性 块的大小可设置(OLTP块和DSS块)

在ORACLE中 将连续的块组成区 可动态分配区(区的分配可以是等额的也可以是自增长的)可减少空间分配次数

在ORACLEl里表可以分为多个段 段由多个区组成 每个段可指定分配在哪个表空间里(段的类型分为 数据段 索引段 回滚段 临时段 CASH段 ORACLE里还可对表进行分区 可按照用户定义的业务规则 条件或规范 物理的分开磁盘上的数据

这样大大降低了磁盘争用的可能性

ORACLE有七个基本表空间

·SYSTEM表空间(存放数据字典和数据管理自身所需的信息)

·RBS回滚表空间

·TEMP临时表空间

·TOOLS交互式表空间

·USERS用户默认表空间

·INDX索引表空间

·DBSYS福数据表空间

不同的数据分别放在不同的表空间(数据字典与真实数据分开存放) 在ORACLE里基表(存储系统参数信息)是加密存储 任何人都无法访问 只能通过用户可视视图查看

SQL SERVER 存储结构

以页为最小分配单位 每个页为 K(不可控制 缺乏对页的存储情况的分析机制)

可将 个连续的页的组成一个 扩展 以进一步减少分配时所耗用的资源 (分配缺乏灵活性) 在SQL SERVER里数据以表的方式存放 而表是存放在数据库里

SQL SERVER有五个基本数据库

·master(数据字典)

·mode(存放样版)

·tempdb(临时数据库)

·msdb(存放调度信息和日志信息)

·pubs(示例数据库)

真实数据与数据字典存放在一起 对系统参数信息无安全机制

ORACLE登入管理

·SYSTEM/MANAGER (初始帐户)

·SYS/CHANGE_ON_NSTALL

·INSTALL/ORACLE(安装帐户)

·SCOTT/TIGER(示例数据库 测试用)

在ORACLE里默认只有三个系统用户 ORACLE是通过用户登入

SQL SERVER登入管理

·SQL SERVER身份验证

·WINDOWS 身份验证

在SQL SERVER里是通过WINDOWS用户帐户或是用SQL SERVER身份验证连接数据库的

SQL不是一种语言 而是对ORACLE数据库传输指令的一种方式

SQL中NULL既不是字符也不是数字 它是缺省数据 ORACLE提供了NVL函数来解决

ORACLE中的字符串连接为 string ‖string SQL中为string +string

集合操作 在SQL中只有UNION(并操作) ORACLE中包含MINUS(差操作)

INTERECT(交操作) UNION(并操作)

索引 SQL的索引分为聚集索引和非聚集索引 还包括全文索引

ORACLE的索引包括 B+树索引 Bitmap位图索引 函数索引 反序索引

主键索引 散列索引 本地索引

ORACLE的数据类型比较复杂 有基本数据类型 衍生型 列对象型 表对象型 结构体型 SQL中的数据比较简单 只有一些简单的基本数据类型无法提供事务操作

在SQL中如果一个事务从开始执行到结束时了错了 它就会回滚到开始之前

在ORACLE中它采用的是定点回滚 就是该事务函数化和精确错误定位 用savepoint标记保存点 用Rollback标记回滚错误的保存点

在SQL中循环只有WHILE一种这用起来不灵活 在ORACLE中有多种循环(LOOP循环 WHILE循环 FOR循环)

在SQL中游标的使用比较复杂 不能同时打开一个以上的游标 因为它只有一个全局变量@@Fast_statues而且声明游标也麻烦 关闭游标时也不清除内存的 ORACLE中游标是以提高速度全部统一的单项游标 可以允许多用户异步读取 而且声明比较简单 就一句declare cursor游标名 is select 语句就可以了

容错机制 SQL中的错误机制比较复杂 没有提供错误描述 ORACLE中容错类型有三种 一个是预定义错误 一个是非预定义错误 一个是用户自定义 其中在自定义错误中它有两个是在SQL中不有的 那就是SQLCODE 错误号 SQLERRM错误描述

文件体系结构 SQL中有 MDF(主要数据文件) NDF(扩展文件 可以有多个)

LDF(日志文件 可以有多个 存放在联机重做日志数据 这里的日志文件有一个缺点就是如果日志文件已填小巧玲珑的话 SQL将自动停止运行并等待人工干预 所以要经常监控日志的情况保证系统的稳定运行) ORACLE中有 DBF(主要数据文件) RDO(日志文件 用来做灾难性的数据备份) CTL(控制文件 将数据库的物理文件映射到了数据字典中的逻辑表空间和连机重做日志文件上去 确保数据的一致性) ORA(参数文件)

SQL只能是本机备份本机的数据库 无法联机备份 而且备份压缩很低 占用了大量空间 ORACLE提供了 种备份机制 具有联机备份功能 有志门的备份机子

Oracle的日志默认有 个 先写入 号日志 满了后再写入 号日志 号满了再写入 号日志 号满了后Oracle将自动备分 号日志的内容 然后清空后写入新的日志信息 且Oracle的日志有多路复用功能 我们可以为日志创建多个镜像 把相同的日志信息同时写入多个日志文件中 这样可以防止磁盘损坏造成的数据丢失

SQL Server对每个数据库只能分配一个日志文件 且当日志填满后 日志将停止工作 等待人工干预 而无法自动重用

Oracle的控制文件记录了数据库文件的物理位置和有效性 在每次打开Oracle系统都将自动对数据进行验证 查看其有效性 防止数据的丢失 这体现了Oracle对数据管理的严密性

SQL Server无此安全机制 只用在使用到了数据库的信息后 系统才去查找数据是否存在

Oracle的参数文件init ora是可调的 既我们可以根据数据库的规模调整Oracle对系统资源的使用情况 以达到最合理的资源分配 让Oracle达到最佳的性能

SQL Server的配置参数是内定的不可调整 它对系统资源的分配是固定的 不受拥护控制 因此无法同时处理大量用户的需求 这限制了它只能作为中 小型数据库

Oracle以块为最小存储单位 以区为单位分配空间 用户可以根据需要自己定义块的大小 且区可以按等额或递增进行分配 这可以大大减少系统的I/O操作提高数据库的性能

SQL Server中以页为单位或使用扩展类型以 页为一单位进行空间分配而无法人工干预 当遇到频繁存储或大数据量存储时 系统将频繁进行I/O操作使工作效率低下

Oracle中的SQL语句书写规范且提供了完整的函数和数据类型 Oracle提供了健全的错误机制 用户可以轻松的获得错误位置和错误原因而加以修改 用户还可以自己定义所须的错误类型 用以检查逻辑错误 Oracle中对数据类型的转换和游标的定义也十分方便 因此 我们对代码的书写和维护也比SQL Server方便许多

SQL Server使用类C语言 不易维护和查看代码 SQL Server包含的数据类型太少 无法定义结构体 数组 对象 SQL Server无法定义流程机制 类型转换也极不方便 SQL Server中对游标定义十分复杂 且当用户定义的多个游标同时打开时系统却只有一个游标变量 这是SQL SERVER中一个严重的缺陷

ORACLE中用户可以根据数据需要在创建块时定义填充因子(空闲空间的百分比)和复用因子(当块的存储数据所占的空间下降到这个百分比之下时 块才重新标记为可用) 用户可以根据记录变化频率和数据量的大小设置合适的填充因子和空闲因子

SQL SERVER只有填充因子 而它的定义与ORACLE刚好相反 它定义的是剩余可用空间的百分比 而SQL SERVER中没有复用因子 当页中数据低于填充因子 但剩余的空间已经不可能再插入新的数据 但页还是标记为可用的 当系统要写入新数据都要访问这个页而浪费时间 这种页称为废页 将使系统插入新数据时浪费大量时间查找可用的页

ORACLE在创建表时用户可以精确定义数据存放的表空间 甚至可以把一张表分开存放在多个表空间中 这样可以将数据量庞大的表按某些字段分开存放 这将给查询带来极高的效率

=========================================================================================

随着信息技术的飞速发展 数据处理不仅在数量上要求越来越大 而且在质量上也要求越来越高

操作系统的稳定对数据库来说是十分紧要的 在数据库可操作平台上 Oracle可在所有主流平台上运行 Oracle数据库采用开放的策略目标 它使得客户可以选择一种最适合他们特定需要的解决方案 客户可以利用很多种第三方应用程序 工具 对开发商来说是很大的支持 而SQL Server却只能在Windows上运行了 这个就显得比较单调了 但SQL Sever在Window平台上的表现 和Windows操作系统的整体结合程度 使用方便性 和Microsoft开发平台的整合性都比Oracle强的很多 但Windows操作系统的稳定性及可靠性大家是有目共睹的 再说Microsoft公司的策略目标是将客户都锁定到Windows平台的环境当中 只有随着Windows性能的改善 SQL Server才能进一步提高 从操作平台这点上Oracle是完全优胜于SQL Server的了

从资料上可以看到 Oracle的安全认证获得最高认证级别的ISO标准认证 而SQL Server并没有获得什么安全认证 这方面证明了Oracle的安全性是高于SQL Server的

购买一个产品 首先考虑的当然是产品的性能了 当考虑性能的同时当然少不了究竟要花多少钱在这产品也是个很关键的问题 要建立并运行一个数据库系统 不仅仅包含最初购置软件 硬件的费用 还包含了培训及以后维护的费用 Orcale数据库的价格是远比SQL Server数据库要高 为什么Oracle数据库比SQL Server数据库价格上要高出那么多 一方面Oracle的初始花费相对较高 特别是在考虑工具软件的时候 Oracle很多工具软件需要另外购买 与Microsoft提供免费的SQL Server工具软件相比 Oracle更显价格的不菲 但由于SQL Server只能在Windows下运行的原因 普遍认为SQL Server数据库的可靠性是比较差的 Oracle的性能优势体现在他的多用户上 而SQL Server的性能优势在多用户上就显得力不从心了

操作上SQL Server明显要比Orcale简单 如果你用过Java和DOTNET的开发平台 区别的基本就是Oracle和SQL Server不同 Oracle的界面基本是基于Java的 大部分的工具是Dos界面的 甚至SQLPlus也是 SQL Server是跟VB一样 全图形界面 很少见到DOS窗口 SQL Server中的企业管理器给用户提供一个全图形界面的集成管理控制台来集中管理多个服务器 Oracle也有自己的企业管理器 而且它的性能在某些方面甚至超过了SQL Server的企业管理器 但它安装较为困难

Orcale数据库和SQL Server数据库那个更快?其实是一个很难答的问题 因为存在许多不定因素 包括处理类型 数据分布以及硬件基础设施等

SQL Server 是一个具备完全Web支持的数据库产品 提供了可扩展标记语言核心支持以及Internet上和防火墙外进行查询的能力 具有可伸缩性 灵活性 扩充性好 而且价格便宜等特点 而Oracle则有着可靠安全性 速度比SQL Server快上百倍 但其价格在实施中却比SQL Server它高出了几百倍

lishixin/Article/program/Oracle/201311/18988

⑤ 在不自动提交的情况下,回滚段有什么用。

回滚段用于容纳update, insert, delete语句时产生的中间数据,这些中间数据就是用于“回滚”(rollback)的。
如果回滚段设置过小,你在对大表执行update, insert, delete语句时可能会一直卡死在一个地方,你这时通过DBA工具查看回滚段表空间,使用率会达到99%,这时只能通过扩大回滚段表空间来解决。
没有回滚段是不可想像的。

⑥ oracle数据库和sql server的区别

ORACLE与SQL SERVER的区别

ORACLE的文件体系结构为:

数据文件 .DBF (真实数据)

日志文件 .RDO

控制文件 .CTL

参数文件 .ORA

SQL SERVER的文件体系结构为:

.MDF (数据字典)

.NDF (数据文件)

.LDF (日志文件)


ORACLE存储结构:

在ORACLE里有两个块参数PCTFREE(填充因子)和PCTUSED(复用因子),可控制块确定块本身何时有,何时没有足够的空间接受新信息(对块的存储情况的分析机制)这样可降低数据行连接与行迁移的可能性。块的大小可设置(OLTP块和DSS块)

在ORACLE中,将连续的块组成区,可动态分配区(区的分配可以是等额的也可以是自增长的)可减少空间分配次数。

在ORACLEl里表可以分为多个段,段由多个区组成,每个段可指定分配在哪个表空间里(段的类型分为:数据段、索引段、回滚段、临时段、CASH段。ORACLE里还可对表进行分区,可按照用户定义的业务规则、条件或规范,物理的分开磁盘上的数据。

这样大大降低了磁盘争用的可能性。

ORACLE有七个基本表空间:

·SYSTEM表空间(存放数据字典和数据管理自身所需的信息)

·RBS回滚表空间

·TEMP临时表空间

·TOOLS交互式表空间

·USERS用户默认表空间

·INDX索引表空间

·DBSYS福数据表空间

不同的数据分别放在不同的表空间(数据字典与真实数据分开存放),在ORACLE里基表(存储系统参数信息)是加密存储,任何人都无法访问。只能通过用户可视视图查看。


SQL SERVER 存储结构

以页为最小分配单位,每个页为8K(不可控制,缺乏对页的存储情况的分析机制),

可将8个连续的页的组成一个‘扩展’,以进一步减少分配时所耗用的资源。(分配缺乏灵活性),在SQL SERVER里数据以表的方式存放,而表是存放在数据库里。

SQL SERVER有五个基本数据库:

·master(数据字典)

·mode(存放样版)

·tempdb(临时数据库)

·msdb(存放调度信息和日志信息)

·pubs(示例数据库)

真实数据与数据字典存放在一起。对系统参数信息无安全机制。

ORACLE登入管理:

·SYSTEM/MANAGER (初始帐户)

·SYS/CHANGE_ON_NSTALL

·INSTALL/ORACLE(安装帐户)

·SCOTT/TIGER(示例数据库,测试用)

在ORACLE里默认只有三个系统用户,ORACLE是通过用户登入。


SQL SERVER登入管理:

·SQL SERVER身份验证

·WINDOWS 身份验证

在SQL SERVER里是通过WINDOWS用户帐户或是用SQL SERVER身份验证连接数据库的。

SQL不是一种语言,而是对ORACLE数据库传输指令的一种方式。

SQL中NULL既不是字符也不是数字,它是缺省数据。ORACLE提供了NVL函数来解决。


ORACLE中的字符串连接为 string1‖string2 ,SQL中为string1+string2.

集合操作:在SQL中只有UNION(并操作),ORACLE中包含MINUS(差操作)、 INTERECT(交操作)、UNION(并操作)。


索引

SQL的索引分为聚集索引和非聚集索引,还包括全文索引;

ORACLE的索引包括:B+树索引,Bitmap位图索引,函数索引,反序索引,主键索引,散列索引,本地索引。

ORACLE的数据类型比较复杂,有基本数据类型,衍生型,列对象型,表对象型,结构体型;

SQL中的数据比较简单,只有一些简单的基本数据类型无法提供事务操作。

⑦ 如何用LoadRunner分析资源占用率

软件测试工具LoadRunner分析页面:

平均事务响应时间

Average Transation Response Time
优秀:<2s

良好:2-5s

及格:6-10s

不及格:>10s

每秒点击率

Hits per
Second

当增大系统的压力(或增加并发用户数)时,吞吐率和TPS的变化曲线呈大体一致,则系统基本稳定。若压力增大时,吞吐率的曲线增加到一定程度后出现变化缓慢,甚至平坦,很可能是网络出现带宽瓶颈,同理若点击率/TPS曲线出现变化缓慢或者平坦,很可能是服务器响应时间增加,观察服务器资源使用情况,确定是否是服务器问题。

请求响应时间

Time
to Last Byte

每秒系统处理事务数

Transaction per
second

吞吐量

Throughout

CPU利用率

Processor / %Processor Time
好:70%

坏:85%

很差:90%+

数据库操作消耗的CPU时间

Processor / %User Time
如果该值较大,可以考虑是否能通过友好算法等方法降低这个值。如果该服务器是数据库服务器, Processor\%User Time
值大的原因很可能是数据库的排序或是函数操作消耗了过多的CPU时间,此时可以考虑对数据库系统进行优化。

核心态CPU平均利用率

Processor
/%Privileged Time 如果该参数值和"Physical
Disk"参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统

处理队列中的线程数

Processor / Processor Queue
Length 如果该值保持不变(>=2)个并且%Processor Time
超过90%,那么可能存在处理器瓶颈。如果发现超过2,而处理器的利用率却一直很低,那么或许更应该去解决处理器阻塞问题,这里处理器一般不是瓶颈。

文件系统缓存

Memory
/ Cache Bytes 50%的可用物理内存

剩余的可用内存

Memory / Avaiable Mbytes 至少要有10%
的物理内存值

每秒下载页数

Memory / pages/sec
好:无页交换

坏:CPU每秒10个页交换

很差:更多的页交换

页面读取操作速率

Memory / page read/sec
如果页面读取操作速率很低,同时 % Disk Time 和 Avg.Disk Queue
Length的值很高,则可能有磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。

物理磁盘利用率

Physical
Disk / %Disk Time
好:<30%

坏:<40%

很差:<50%+

物理磁盘平均磁盘I/O队列长度

Physical Disk /
Avg.Disk Queue Length 该值应不超过磁盘数的1.5~2 倍。要提高性能,可增加磁盘

网络吞吐量

Network
Interface / Bytes Total/sec
判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽,结果应该小于50%

数据高速缓存区命中率
命中率应大于0.90最好

共享区库缓存区命中率 命中率应大于0.99

监控 SGA 中字典缓冲区的命中率
命中率应大于0.85

检测回滚段的争用 小于1%

监控 SGA
中重做日志缓存区的命中率应该小于1%

监控内存和硬盘的排序比率 最好使它小于 10%

⑧ oracle 体系结构怎么样 去理解


1、 ORACLE 实例――包括内存结构与后台进程 2、 ORACLE 数据库――物理操作系统文件的集合 3、 了解内存结构的组成 4、 了解后台进程的作用

1、 Oracle 实例――包括内存结构与后台进程
2、 Oracle 数据库――物理操作系统文件的集合
3、 了解内存结构的组成
4、 了解后台进程的作用
5、 了解数据库的物理文件
6、 解释各种逻辑结构

一、Oracle实例

1、Oracle 实例

System Global Area(SGA) 和 Background Process 称为数据库的实例。

2、Oracle 数据库

一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等)

3、系统全局共享区System Global Area(SGA)

System Global Area 是一块巨大的共享内存区域,他被看做是Oracle 数据库的一个大缓冲池,这里的数据可以被Oracle的各个进程共用。其大小可以通过如下语句查看:
SQL> select * from v$sga;
NAME VALUE
-------------------- ---------
Fixed Size 39816
Variable Size 259812784
Database Buffers 1.049E+09
Redo Buffers 327680

更详细的信息可以参考V$sgastat、V$buffer_pool

主要包括以下几个部分:

a、 共享池(Shared pool)

共享池是SGA中最关键的内存片段,特别是在性能和可伸缩性上。一个太小的共享池会扼杀性能,使系统停止,太大的共享池也会有同样的效果,将会消耗大量的CPU来管理这个共享池。不正确的使用共享池只会带来灾难。共享池主要又可以分为以下两个部分:

SQL语句缓冲(Library Cache)

当一个用户提交一个SQL语句,Oracle会将这句SQL进行分析(parse),这个过程类似于编译,会耗费相对较多的时间。在分析完这个SQL,Oracle会把他的分析结果给保存在Shared pool的Library Cache中,当数据库第二次执行该SQL时,Oracle自动跳过这个分析过程,从而减少了系统运行的时间。这也是为什么第一次运行的SQL 比第二次运行的SQL要慢一点的原因。

下面举例说明parse的时间
SQL> select count(*) fromscpass ;
COUNT(*)
----------
243
Elapsed: 00:00:00.08

这是在Share_pool 和Data buffer 都没有数据缓冲区的情况下所用的时间
SQL> alter system flush SHARED_POOL;
System altered.

清空Share_pool,保留Data buffer
SQL> select count(*) from scpass ;
COUNT(*)
----------
243
Elapsed: 00:00:00.02
SQL> select count(*) from scpass ;
COUNT(*)
----------
243
Elapsed: 00:00:00.00

从两句SQL 的时间差上可以看出该SQL 的Parse 时间约为00:00:00.02

对于保存在共享池中的SQL语句,可以从V$Sqltext、v$Sqlarea中查询到,对于编程者来说,要尽量提高语句的重用率,减少语句的分析时间。一个设计的差的应用程序可以毁掉整个数据库的Share pool,提高SQL语句的重用率必须先养成良好的变成习惯,尽量使用Bind变量。

数据字典缓冲区(Data Dictionary Cache)

显而易见,数据字典缓冲区是Oracle特地为数据字典准备的一块缓冲池,供Oracle内部使用,没有什么可以说的。

b、块缓冲区高速缓存(Database Buffer Cache)

这些缓冲是对应所有数据文件中的一些被使用到的数据块。让他们能够在内存中进行操作。在这个级别里没有系统文件,,户数据文件,临时数据文件,回滚段文件之分。也就是任何文件的数据块都有可能被缓冲。数据库的任何修改都在该缓冲里完成,并由DBWR进程将修改后的数据写入磁盘。

这个缓冲区的块基本上在两个不同的列表中管理。一个是块的“脏”表(Dirty List),需要用数据库块的

书写器(DBWR)来写入,另外一个是不脏的块的列表(Free List),一般的情况下,是使用最近最少使用 (Least Recently Used,LRU)算法来管理。块缓冲区高速缓存又可以细分为以下三个部分(Default pool,Keep pool,Recycle pool)。如果不是人为设置初始化参数(Init.ora),Oracle将默认为Default pool。由于操作系统寻址能力的限制,不通过特殊设置,在32位的系统上,块缓冲区高速缓存最大可以达到1.7G,在64位系统上,块缓冲区高速缓存最大可以达到10G。

c、重做日志缓冲区(Redo log buffer)

重做日志文件的缓冲区,对数据库的任何修改都按顺序被记录在该缓冲,然后由LGWR进程将它写入磁盘。这些修改信息可能是DML语句,如(Insert,Update,Delete),或DDL语句,如(Create,Alter,Drop等)。 重做日志缓冲区的存在是因为内存到内存的操作比较内存到硬盘的速度快很多,所以重作日志缓冲区可以加快数据库的操作速度,但是考虑的数据库的一致性与可恢复性,数据在重做日志缓冲区中的滞留时间不会很长。所以重作日志缓冲区一般都很小,大于3M之后的重作日志缓冲区已经没有太大的实际意义。

d、Java程序缓冲区(Java Pool)

Java 的程序区,Oracle 8I 以后,Oracle 在内核中加入了对Java的支持。该程序缓冲区就是为Java 程序保留的。如果不用Java程序没有必要改变该缓冲区的默认大小。

e、大池(Large Pool)

大池的得名不是因为大,而是因为它用来分配大块的内存,处理比共享池更大的内存,在8.0开始引入。

下面对象使用大池:

MTS――在SGA的Large Pool中分配UGA

语句的并行查询(Parallel Executeion of Statements)――允许进程间消息缓冲区的分配,用来协调 并行查询服务器

备份(Backup)――用于RMAN磁盘I/O缓存

4、后台进程(Background process)

后台进程是Oracle的程序,用来管理数据库的读写,恢复和监视等工作。Server Process主要是通过他和user process进行联系和沟通,并由他和user process进行数据的交换。在Unix机器上,Oracle后台进程相对于操作系统进程,也就是说,一个Oracle后台进程将启动一个操作系统进程;在Windows机器上, Oracle后台进程相对于操作系统线程,打开任务管理器,我们只能看到一个Oracle.EXE的进程,但是通过另外的工具,就可以看到包含在这里进程中的线程。

在Unix上可以通过如下方法查看后台进程:

ps ?ef | grep ora_
# ps -ef | grep ora_ | grep XCLUAT
Oracle 29431 1 0 Sep 02 2:02 ora_dbwr_SID
Oracle 29444 1 0 Sep 02 0:03 ora_ckpt_SID
Oracle 29448 1 0 Sep 02 2:42 ora_smon_SID
Oracle 29442 1 0 Sep 02 3:25 ora_lgwr_SID
Oracle 29427 1 0 Sep 02 0:01 ora_pmon_SID

a、Oracle系统有5 个基本进程他们是
DBWR(数据文件写入进程)
LGWR(日志文件写入进程)
SMON(系统监护进程)
PMON(用户进程监护进程)
CKPT(检查点进程,同步数据文件, 日志文件,控制文件)

b、DBWR
将修改过的数据缓冲区的数据写入对应数据文件
维护系统内的空缓冲区
这里指出几个容易错误的概念:
当一个更新提交后,DBWR把数据写到磁盘并返回给用户提交完成.
DBWR会触发CKPT 后台进程
DBWR不会触发LGWR 进程
上面的概念都是错误的.
DBWR是一个很底层的工作进程,他批量的把缓冲区的数据写入磁盘。和任何前台用户的进程几乎没有什么关系,也不受他们的控制。至于DBWR会不会触发LGWR和CKPT进程,我们将在下面几节里讨论。
DBWR工作的主要条件如下
DBWR 超时
系统中没有多的空缓冲区用来存放数据
CKPT 进程触发DBWR 等

c、LGWR
将重做日志缓冲区的数据写入重做日志文件,LGWR是一个必须和前台用户进程通信的进程。当数据被修改的时候,系统会产生一个重做日志并记录在重做日志缓冲区内。这个重做日志可以类似的认为是以下的一个结构:
SCN=000000001000
数据块ID
对象ID=0801
数据行=02
修改后的数据=0011
提交的时候,LGWR必须将被修改的数据的重做日志缓冲区内数据写入日志数据文件,然后再通知前台进程提交成功,并由前台进程通知用户。从这点可以看出LGWR承担了维护系统数据完整性的任务。
LGWR 工作的主要条件如下
用户提交
有1/3 重做日志缓冲区未被写入磁盘
有大于1M 重做日志缓冲区未被写入磁盘
超时
DBWR需要写入的数据的SCN号大于LGWR 记录的SCN号,DBWR 触发LGWR写入

d、SMON
工作主要包含
清除临时空间
在系统启动时,完成系统实例恢复
聚结空闲空间
从不可用的文件中恢复事务的活动
OPS中失败节点的实例恢复
清除OBJ$表
缩减回滚段
使回滚段脱机

e、PMON
主要用于清除失效的用户进程,释放用户进程所用的资源。如PMON将回滚未提交的工作,释放锁,释放分配给失败进程的SGA资源。

f、CKPT
同步数据文件,日志文件和控制文件,由于DBWR/LGWR的工作原理,造成了数据文件,日志文件,控制文件的不一至,这就需要CKPT进程来同步。CKPT会更新数据文件/控制文件的头信息。
CKPT工作的主要条件如下
在日志切换的时候
数据库用immediate ,transaction , normal 选项shutdown 数据库的时候
根据初始话文件LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的设置的数值来确定
用户触发
以下进程的启动需要手工配置

g、ARCH
当数据库以归档方式运行的时候,Oracle会启动ARCH进程,当重做日志文件被写满时,日志文件进行切换,旧的重做日志文件就被ARCH进程复制到一个/多个特定的目录/远程机器。这些被复制的重做日志文件被叫做归档日志文件。

h、RECO
负责解决分布事物中的故障。Oracle可以连接远程的多个数据库,当由于网络问题,有些事物处于悬而未决的状态。RECO进程试图建立与远程服务器的通信,当故障消除后,RECO进程自动解决所有悬而未决的会话。
i、服务进程Server Process
服务进程的分类
专用服务进程(Dedicated Server Process)
一个服务进程对应一个用户进程
共享服务进程(MultiTreaded Server Process)
一个服务进程对应多个用户进程,轮流为用户进程服务。
PGA & UGA
PGA = Process Global Area
UGA = User Global Area
他保存了用户的变量、权限、堆栈、排序空间等用户信息,对于专用服务器进程,UGA在PGA中分配。对于多线程进程,UGA在Large pool中分配。

j、用户进程User Process
在客户端,将用户的SQL 语句传递给服务进程

5、一个贯穿数据库全局的概念----系统改变号SCN(System Change Number)
系统改变号,一个由系统内部维护的序列号。当系统需要更新的时候自动增加,他是系统中维持数据的一致性和顺序恢复的重要标志。

a. 查询语句不会使SCN增加,就算是同时发生的更新,数据库内部对应的SCN也是不同的。这样一来就保证了数据恢复时候的顺序。

b. 维持数据的一致性,当一

二、Oracle 数据库

Oracle数据库的组成――物理操作系统文件的集合。主要包括以下几种。

1、控制文件(参数文件init.ora记录了控制文件的位置)
控制文件包括如下主要信息
数据库的名字,检查点信息,数据库创建的时间戳
所有的数据文件,联机日志文件,归档日志文件信息
备份信息等
有了这些信息,Oracle就知道那些文件是数据文件,现在的重做日志文件是哪些,这些都是系统启动和运行的基本条件,所以他是Oracle运行的根本。如果没有控制文件系统是不可能启动的。控制文件是非常重要的,一般采用多个镜相复制来保护控制文件,或采用RAID来保护控制文件。控制文件的丢失,将使数据库的恢复变的很复杂。
控制文件信息可以从V$Controlfile中查询获得

2、数据文件(数据文件的详细信息记载在控制文件中)
可以通过如下方式查看数据文件
SQL> select name from v$datafile;
NAME
---------------------------------------------
/u05/dbf/PROD/system_01.dbf
/u06/dbf/PROD/temp_01.dbf
/u04/dbf/PROD/users_01.dbf
/u09/dbf/PROD/rbs_01.dbf
/u06/dbf/PROD/applsys_indx_01.dbf
/u05/dbf/PROD/applsys_data_01.dbf
从以上可以看出,数据文件大致可以分为以下几类:

i. 系统数据文件(system_01.dbf)
存放系统表和数据字典,一般不放用户的数据,但是用户脚本,如过程,函数,包等却是保存在数据字典中的。
名词解释:数据字典 数据字典是一些系统表或视图,他存放系统的信息,他包括数据库版本,数据文件信息,表与索引等段信息,系统的运行状态等各种和系统有关的信息和用户脚本信息。数据库管理员可以通过对数据字典的查询,就可以了解到Oracle的运行状态。

ii. 回滚段文件(rbs_01.dbf)
如果数据库进行对数据的修改,那么就必须使用回滚段,回滚段是用来临时存放修改前的数据(Before Image)。回滚段通常都放在一个单独的表空间上(回滚表空间),避免表空间碎片化,这个表空间包含的数据文件就是回滚数据文件。

iii. 临时数据文件(temp_01.dbf)
主要存放用户的排序等临时数据,与回滚段相似,临时段也容易引起表空间碎片化,而且没有办法在一个永久表空间上开辟临时段,所以就必须有一个临时表空间,它所包含的数据文件就是临时数据文件,主要用于不能在内存上进行的排序操作。我们必须为用户指定一个临时表空间。

iv. 用户数据文件(/applsys_data_01.dbf ,applsys_indx_01.dbf)
存放用户数据,这里列举了两类常见的用户型数据,一般数据和索引数据,一般来说,如果条件许可的话,可以考虑放在不同的磁盘上。

3、重做日志文件(联机重做日志)
用户对数据库进行的任何操作都会记录在重做日志文件。在了解重做日志之前必须了解重做日志的两个概念,重做日志组和重做日志组成员(Member),一个数据库中至少要有两个日志组文件,一组写完后再写另一组,即轮流写。每个日志组中至少有一个日志成员,一个日志组中的多个日志成员是镜相关系,有利于日志文件的保护,因为日志文件的损坏,特别是当前联机日志的损坏,对数据库的影响是巨大的。
联机日志组的交换过程叫做切换,需要特别注意的是,日志切换在一个优化效果不好的数据库中会引起临时的“挂起”。挂起大致有两种情况:
在归档情况下,需要归档的日志来不及归档,而联机日志又需要被重新利用
检查点事件还没有完成(日志切换引起检查点),而联机日志需要被重新利用
解决这种问题的常用手段是:

i.增加日志组

ii.增大日志文件成员大小
通过v$log可以查看日志组,v$logfile可以查看具体的成员文件。

4、归档日志文件
Oracle可以运行在两种模式之中,归档模式和不归档模式。如果不用归档模式,当然,你就不会有归档日志,但是,你的系统将不会是一个实用系统,特别是不能用于生产系统,因为你可能会丢失数据。但是在归档模式中,为了保存用户的所有修改,在重做日志文件切换后和被覆盖之间系统将他们另外保存成一组连续的文件系列,该文件系列就是归档日志文件。
有人或许会说,归档日志文件占领我大量的硬盘空间,其实,具体想一想,你是愿意浪费一点磁盘空间来保护你的数据,还是愿意丢失你的数据呢?显而义见,我们需要保证我们的数据的安全性。其实,归档并不是一直占领你的磁盘空间,你可以把她备份到磁带上,或则删除上一次完整备份前的所有日志文件。

5、初始化参数文件
initSID.ora或init.ora文件,因为版本的不一样,其位置也可能会不一样。在8i中,通常位于$Oracle_HOME/admin//Pfile下,初始化文件记载了许多数据库的启动参数,如内存,控制文件,进程数等,在数据库启动的时候加载(Nomount时加载),初始化文件记录了很多重要参数,对数据库的性能影响很大,如果不是很了解,不要轻易乱改写,否则会引起数据库性能下降。

6、其他文件
i . 密码文件
用于Oracle 的具有sysdba权限用户的认证.
ii. 日志文件
报警日志文件(alert.log或alrt.ora)
记录数据库启动,关闭和一些重要的出错信息。数据库管理员应该经常检查这个文件,并对出现的问题作出即使的反应。你可以通过以下SQL 找到他的路径select value from v$PARAMETER where name ="background_mp_dest";
后台或用户跟踪文件
系统进程或用户进程出错前写入的信息,一般不可能读懂,可以通过Oracle的TKPROF工具转化为可以读懂的格式。对于系统进程产生的跟踪文件与报警日志文件的路径一样,用户跟踪文件的路径,你可以通过以下SQL找到他的路径select value from v$PARAMETER where name ="user_mp_dest";

三、Oracle逻辑结构

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

2、 段(Segment)
段是对象在数据库中占用的空间,虽然段和数据库对象是一一对应的,但段是从数据库存储的角度来看的。一个段只能属于一个表空间,当然一个表空间可以有多个段。
表空间和数据文件是物理存储上的一对多的关系,表空间和段是逻辑存储上的一对多的关系,段不直接和数据文件发生关系。一个段可以属于多个数据文件,关于段可以指定扩展到哪个数据文件上面。
段基本可以分为以下四种
数据段(Data Segment)
索引段(Index Segment)
回滚段(Rollback Segment)
临时段(Temporary Segment)

3、区间(Extent)
关于Extent的翻译有多种解释,有的译作扩展,有的译作盘区,我这里通常译为区间。在一个段中可以存在多个区间,区间是为数据一次性预留的一个较大的存储空间,直到那个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区间,一直到段的最大区间数(Max Extent)或没有可用的磁盘空间可以申请。 在Oracle8i以上版本,理论上一个段可以无穷个区间,但是多个区间对Oracle却是有性能影响的,Oracle建议把数据分布在尽量少的区间上,以减少Oracle的管理与磁头的移动。

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

5、基本表空间介绍

a. 系统表空间
主要存放数据字典和内部系统表基表
查看数据数据字典的SQL
select * from dict
查看内部系统表的SQL
select * from v$fixed_view_definition
DBA对系统的系统表中的数据字典必须有一个很深刻的了解,他们必须准备一些基础的SQL语句,通过这些SQL可以立即了解系统的状况和数据库的状态,这些基本的SQL包括
系统的剩余空间
系统的SGA
状态系统的等待
用户的权限
当前的用户锁
缓冲区的使用状况等
在成为DBA 的道路上我们不建议你过分的依赖于OEM/Quest 等优秀的数据库管理工具,因为他们不利于你对数据数据字典的理解,SQL语句可以完成几乎全部的数据库管理工作。
大量的读少量的写是该表空间的一个显著的特点。

b. 临时表空间.
临时表空间顾名思义是用来存放临时数据的,例如排序操作的临时空间,他的空间会在下次系统启动的时候全部被释放。

c. 回滚段表空间

i. 回滚段在系统中的作用
当数据库进行更新插入删除等操作的时候,新的数据被更新到原来的数据文件,而旧的数据(Before Image)就被放到回滚段中,如果数据需要回滚,那么可以从回滚段将数据再复制到数据文件中。来完成数据的回滚。在系统恢复的时候, 回滚段可以用来回滚没有被commit 的数据,解决系统的一至性。
回滚段在什么情况下都是大量的写,一般是少量读,因此建议把回滚段单独出来放在一个单独的设备(如单独的磁盘或RAID),以减少磁盘的IO争用。

ii. 回滚段的工作方式
一个回滚表空间可以被划分成多个回滚段.
一个回滚段可以保存多个会话的数据.
回滚段是一个圆形的数据模型
假设回滚段由4 个区间组成,他们的使用顺序就是区间1à区间2à区间3à区间4à区间1。也就是说,区间是可以循环使用的,当区间4到区间1的时候,区间1里面的会话还没有结束, 区间4用完后就不能再用区间1,这时系统必须分配区间5,来继续为其他会话服务服务。
我们分析一个Update 语句的完成

①. 用户提交一个Update 语句

②. Server Process 检查内存缓冲.
如果没有该数据块的缓冲,则从磁盘读入

i. 如果没有内存的有效空间,DBWR被启动将未写入磁盘的脏缓冲写入磁盘

ii. 如果有有效空间,则读入

③. 在缓冲内更新数据

i. 申请一个回滚段入口,将旧数据写如回滚段

ii. 加锁并更新数据

iii. 并在同时将修改记录在Redo log buffer中

⑨ Oracle中逻辑结构和物理结构,他们之间的关系是什么

1.1、物理结构:由构成数据库的操作系统文件组成,它是从操作系统的角度来分析数据库的组成,在操作系统中可以看得到的文件,也就是说它是数据库在操作系统中的存储位置。常见的物理结构包括:控制文件、数据文件、重作日志文件、归档日志文件、初始化参数文件、还有其它文件(密码文件、报警日志文件和后台及用户跟踪文件)。
1.2、逻辑结构:描述数据库从逻辑上如何存储数据库中的数据。它是从数据库的角度来分析数据的逻辑存储。常见的逻辑结构包括:表空间、数据段、扩展区间、块构成。需要明白的是:
*1、数据库逻辑上是由一个或多个表空间组成的,常见的表空间包括:系统表空间、系统辅助表空间、UNDO表空间、临时表空间、用户表空间
*2、表空间与数据文件是物理上的一对多的关系,既一个表空间对应一个或多个数据文件,但是一个数据文件只能属于一个表空间
*3、表空间将数据库的物理结构与逻辑结构相连接
2、物理结构
2.1、控制文件 (Control files):主要记录数据库的物理结构及其他的一些控制信息,如数据库的名称、数据文件、日志文件的名称及位置。通常oracle会保留多个控制文件副本,并分别放在不同的物理位置,一旦其中的某个控制文件损坏,则可以通可其它的副本进行启动。
参数文件init.ora记录了控制文件的位置
控制文件包括如下主要信息
�6�1数据库的名字,检查点信息,数据库创建的时间戳
�6�1所有的数据文件,联机日志文件,归档日志文件信息
�6�1备份信息等
有了这些信息,Oracle就知道那些文件是数据文件,现在的重做日志文件是哪些,这些都是系统启动和运行的基本条件,所以他是Oracle运行的根本。如果没有控制文件系统是不可能启动的。控制文件是非常重要的,一般采用多个镜相复制来保护控制文件,或采用RAID来保护控制文件。控制文件的丢失,将使数据库的恢复变的很复杂。
控制文件信息可以从v$controlfile中查询获得
SQL> select * from v$controlfile;
STATUS NAME
------- --------------------------------------------------------------------------------
C:\ORACLE\ORADATA\ORCL\CONTROL01.CTL
C:\ORACLE\ORADATA\ORCL\CONTROL02.CTL
C:\ORACLE\ORADATA\ORCL\CONTROL03.CTL2.2、数据文件(Data files),注意可以与后面讲到的表空间进行对比,数据文件的详细信息记载在控制文件中。注意:SYSTEM表空间是不允许脱机的。在进行数据库恢复时,很多时候需要先将故障数据文件脱机。
可以通过如下方式查看数据文件:
SQL> select name,status,enabled from v$datafile;
NAME STATUS ENABLED
-------------------------------------------------------------------------------- ------- ----------C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSTEM01.DBF ONLINE READ WRITE
C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\UNDOTBS01.DBF ONLINE READ WRITE
C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSAUX01.DBF ONLINE READ WRITE
C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\USERS01.DBF ONLINE READ WRITE
C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\EXAMPLE01.DBF ONLINE READ WRITE
C:\ORACLE\ORADATA\ORCL\TEMP01.DBF ONLINE READ WRITE
2.3、重做日志文件(Redo files)用户对数据库进行的任何操作都会记录在重做日志文件。在了解重做日志之前必须了解重做日志的两个概念,重做日志组和重做日志组成员(Member),一个数据库中至少要有两个日志组文件,一组写完后再写另一组,即轮流写。每个日志组中至少有一个日志成员,一个日志组中的多个日志成员是镜相关系,有利于日志文件的保护,因为日志文件的损坏,特别是当前联机日志的损坏,对数据库的影响是巨大的。
联机日志组的交换过程叫做切换,需要特别注意的是,日志切换在一个优化效果不好的数据库中会引起临时的“挂起”。挂起大致有两种情况:
�6�1在归档情况下,需要归档的日志来不及归档,而联机日志又需要被重新利用
�6�1检查点事件还没有完成(日志切换引起检查点),而联机日志需要被重新利用
解决这种问题的常用手段是:
i.增加日志组
ii.增大日志文件成员大小
通过v$log可以查看日志组,v$logfile可以查看具体的成员文件。SQL> select group#,thread#,bytes,archived,members,archived,status from v$log; GROUP# THREAD# BYTES ARC MEMBERS ARC STATUS
---------- ---------- ---------- --- ---------- --- ----------------
1 1 10485760 NO 1 NO CURRENT
2 1 10485760 NO 1 NO INACTIVE
3 1 10485760 NO 1 NO INACTIVE2.4、归档日志文件(Archived files)Oracle可以运行在两种模式之中,归档模式和不归档模式。如果不用归档模式,当然,你就不会有归档日志,但是,你的系统将不会是一个实用系统,Oracle不能保证数据能够被正确恢复,因为你可能会丢失数据。但是在归档模式中,为了保存用户的所有修改,在重做日志文件切换后和被覆盖之间系统将他们另外保存成一组连续的文件系列,该文件系列就是归档日志文件。
有人或许会说,归档日志文件占领我大量的硬盘空间,其实,具体想一想,你是愿意浪费一点磁盘空间来保护你的数据,还是愿意丢失你的数据呢?显而义见,我们需要保证我们的数据的安全性。其实,归档并不是一直占领你的磁盘空间,你可以把她备份到磁带上,或则删除上一次完整备份前的所有日志文件。2.5、初始化参数文件(Parameter file)initSID.ora或init.ora文件,因为版本的不一样,其位置也可能会不一样。在8i或10g中,通常位于$ORACLE_HOME/admin/<SID>/Pfile下
初始化文件记载了许多数据库的启动参数,如内存,控制文件,进程数等,在数据库启动的时候加载(Nomount时加载),初始化文件记录了很多重要参数,对数据库的性能影响很大,如果不是很了解,不要轻易乱改写,否则会引起数据库性能下降。2.6、其他文件i . 密码文件。用于Oracle 的具有sysdba权限用户的认证。文件一般位于
$ORACLE_HOME/database/PWD<sid>.ora。
ii. 日志文件�6�1报警日志文件(alert.log或alrt<SID>.ora)
记录数据库启动,关闭和一些重要的出错信息。数据库管理员应该经常检查这个文件,并对出现的问题作出即使的反应。你可以通过以下SQL 找到他的路径
select value from v$PARAMETER where name ='background_mp_dest';
VALUE
--------------------------------------------------------------------------------
C:\oracle\admin\orcl\bmp
�6�1后台或用户跟踪文件
系统进程或用户进程出错前写入的信息,一般不可能读懂,可以通过ORACLE的TKPROF工具转化为可以读懂的格式。对于系统进程产生的跟踪文件与报警日志文件的路径一样,用户跟踪文件的路径,你可以通过以下SQL找到他的路径
select value from v$PARAMETER where name ='user_mp_dest';
SQL> select value from v$PARAMETER where name ='user_mp_dest';VALUE
--------------------------------------------------------------------------------
C:\oracle\admin\orcl\ump3、逻辑结构
3.1、表空间(tablespace)
表空间是数据库中的基本逻辑结构,一系列数据文件的集合。一个表空间可以包含多个数据文件,但是一个数据文件只能属于一个表空间。3.2、 段(Segment)
段是对象在数据库中占用的空间,虽然段和数据库对象是一一对应的,但段是从数据库存储的角度来看的。一个段只能属于一个表空间,当然一个表空间可以有多个段。
表空间和数据文件是物理存储上的一对多的关系,表空间和段是逻辑存储上的一对多的关系,段不直接和数据文件发生关系。一个段可以属于多个数据文件,关于段可以指定扩展到哪个数据文件上面。
段基本可以分为以下四种
�6�1数据段(Data Segment)
�6�1索引段(Index Segment)
�6�1回滚段(Rollback Segment)
�6�1临时段(Temporary Segment)3.3、区间(Extent)
在一个段中可以存在多个区间,区间是为数据一次性预留的一个较大的存储空间,直到那个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区间,一直到段的最大区间数(Max Extent)或没有可用的磁盘空间可以申请。
在ORACLE8i以上版本,理论上一个段可以无穷个区间,但是多个区间对ORACLE却是有性能影响的,ORACLE建议把数据分布在尽量少的区间上,以减少ORACLE的管理与磁头的移动,但是在某些特殊情况下,需要把一个段分布在多个数据文件或多个设备上,适当的加多区间数也是有很大好处的。3.4、Oracle数据块(Block)
ORACLE最基本的存储单位,他是OS数据块的整数倍。ORACLE的操作都是以块为基本单位,一个区间可以包含多个块(如果区间大小不是块大小的整数倍,ORACLE实际也扩展到块的整数倍)。3.5、基本表空间介绍
3.5.1、系统辅助表空间(sysaux)
SYSAUX表空间在Oracle Database 10g中引入,作为SYSTEM表空间的辅助表空间.
以前一些使用独立表空间或系统表空间的数据库组件现在在SYSAUX表空间中创建.
通过分离这些组件和功能,SYSTEM表空间的负荷得以减轻.反复创建一些相关对象及组件引起SYSTEM表空间的碎片问题得以避免。
3.5.2、系统表空间(System)
该表空间包含的数据文件称为系统数据文件。
该存放系统表和数据字典,一般不放用户的数据,但是用户脚本,如过程,函数,包等却是保存在数据字典中的。
名词解释:数据字典
数据字典是一些系统表或视图,他存放系统的信息,他包括数据库版本,数据文件信息,表与索引等段信息,系统的运行状态等各种和系统有关的信息和用户脚本信息。数据库管理员可以通过对数据字典的查询,就可以了解到Oracle的运行状态。
查看数据数据字典的SQL
select * from dict;
查看内部系统表的SQL
select * from v$fixed_view_definition;
大量的读少量的写是该表空间的一个显著的特点。再次提醒:该表空间不能脱机
3.5.3、 临时表空间(Temporary)
该表空间包含的数据文件称为临时数据文件
主要存放用户的排序等临时数据,因为没有办法在一个永久表空间上开辟临时段,所以就必须有一个临时表空间,主要用于不能在内存上进行的排序操作。我们必须为用户指定一个临时表空间。
临时段占有的空间会在下次系统启动的时候全部被释放。
3.5.4、回滚段表空间(Rollback)
如果数据库进行对数据的修改,那么就必须使用回滚段,回滚段是用来临时存放修改前的数据(UNDO)。回滚段通常都放在一个单独的表空间上(回滚表空间),避免表空间碎片化,这个表空间包含的数据文件就是回滚数据文件。在Oracle9i中,提供了单独的表空间用于保存回滚段,不再需要手工干预。
*1回滚段在系统中的作用
当数据库进行更新插入删除等操作的时候,新的数据被更新到原来的数据文件,而旧的数据(Before Image)就被放到回滚段中,如果数据需要回滚,那么可以从回滚段将数据再复制到数据文件中。来完成数据的回滚。在系统恢复的时候, 回滚段可以用来回滚没有被commit 的数据,解决系统的一直性读。
回滚段在什么情况下都是大量的写,一般是少量读,因此建议把回滚段单独出来放在一个单独的设备(如单独的磁盘或RAID),以减少磁盘的IO争用。
*2、回滚段的工作方式
�6�1一个回滚表空间可以被划分成多个回滚段.
�6�1一个回滚段可以保存多个会话的数据.
�6�1回滚段是一个圆形的数据模型
3.5.5、用户表空间(User)
其包含的数据文件称为用户数据文件
一般是由用户建立,来存取用户数据的表空间,一般有两类常见的用户型数据,数据和索引,一般来说,如果条件许可的话,可以考虑放在不同的磁盘上。
3.5.6 例子表空间(example):例子表空间,可以不管。,它是数据库在操作系统中的存储位置。常见的物理结构包括:控制文件、数据文件、重作日志文件、归档日志文件、初始化参数文件、还有其它文件(密码文件、报警日志文件和后台及用户跟踪文件)。

⑩ SQL数据库打开的问题

能打开的,一种是安装你的那种软件,在就是直接在数据库中就可以查看数据了。

阅读全文

与回滚段争用相关的资料

热点内容
卧式机油滤芯如何安装 浏览:469
德国生活污水处理 浏览:988
超滤浓缩膜包进液出液区分 浏览:384
欧琳滤芯怎么换 浏览:826
沃尔沃怎么更换空调滤芯 浏览:190
什么地方有卖饮水机 浏览:762
金利源净水机RO膜 浏览:820
开一家净水器店需要投多少钱 浏览:740
溶剂含水怎么蒸馏 浏览:172
污水处理的6s是什么意思 浏览:431
什么东西可以去保温杯的水垢 浏览:285
纯水导电率为零什么原因 浏览:531
摩托车空气滤芯进油怎么回事视频 浏览:144
氧化型酵母菌处理什么废水 浏览:660
农村生活污水处理文件 浏览:946
净水器为什么变浑浊 浏览:547
迪奥二回礼可以用几次 浏览:680
apha的水和废水监测方法 浏览:445
蒸馏水的保质期是多久 浏览:718
直饮水机卡掉了不给补怎么办 浏览:446