Oracle的体系结构概览

标签: oracle 体系结构 | 发表时间:2013-06-21 15:07 | 作者:elvis_dataguru
出处:http://blog.csdn.net

声明:版本11gR2,CentOS5.8

1 物理结构(文件)

主要性能影响在IO上

(1)controlfile

select * from v$controlfile

(2)datafile

select * from dba_data_files

(3)redo (online logfile)

select * from v$logfile
select * from v$log

(4)password file(sys)

select * from dba_users

(从11g开始password项里变为空了,以免被破解)

2 逻辑结构

2.1 实例

instance(memory[sga]+process[background])

实例=内存(sga)+后台进程(background)

查看内存,可以通过以下视图

select * from v$sga_dynamic_components


 后台进程,可以通过下面视图查看

  select * fromv$bgprocess where paddr!='00';

  我们只关心paddr不等于0的就可以了,等于0的都是没启用

2.2实例的管理

参数文件spfilesid.ora,initsid.ora

两个文件可以互相转化

create spfile from pfile;
create pfile from spfile;

(1)开启实例分为nomount,mount,open三个阶段


nomount阶段

在开启到nomount阶段需要使用到参数文件,而从9i版本开始默认优先使用spfile参数文件,如果spfile文件没有就去使用pfile文件,如果pfile文件还没有,就会报找不到pfile文件的错误。

11g有一个新功能,也许是我才发现吧!!!首先先说下数据库开启时,如果参数文件丢失或者损坏,不会导致数据库直接宕掉,但是如果数据库重新启动的话,就会报错,而且如果要是没有个好的备份的话,那是非常麻烦的事情,如果数据库在运行时及时发现了参数文件丢失或者损坏,可以使用如下方法处理:

create pfile from memory;

所以参数文件一定要有个良好的备份。

可以通过v$instance视图查看数据库状态

select status from v$instance;

通过v$bgprocess视图可以查看后台进程的情况

select * from v$bgprocess where paddr<>’00’;


mount阶段

开启mount阶段需要用到控制文件

可以使用参数control_files查看控制文件所在位置:

show parameter control_files

如果控制文件损坏,在开启数据库的时候就会报错,而且告诉你去alert_sid.log里看具体错误信息,而这个文件所在位置,可以通过background_dump_dest参数去查看:

show parameter background

注:alert_sid.log最大支持到2G大小,所以当业务特殊繁忙或者文件变的比较大的时候需要备份。

open阶段

11gR2版本—经测试,其他版本不确定

可以从open阶段到mount阶段在到nomount阶段

alter database close;
alter database dismount;
shutdown immediate

(2)关闭实例

1.normal

2.transactional

系统有事务的时候就关闭不了

系统有没有事务可以查看v$transaction视图

3.immediate

4.abort

2.3 参数的粗略概述

用db_cache_size和processes两个参数举例

首先查看v$parameter视图可以查看是否是静态参数或者是动态

select name,issys_modifiablefromv$parameter wherename in ('db_cache_size','processes');
NAME             ISSYS_MOD
--------------------      ---------
processes            FALSE
db_cache_size        IMMEDIATE

从ISSYS_MOD字段可以看出db_cache_size参数是立即生效,所以从这个可以看出db_cache_size字段是动态参数。

注意:其中processes参数如果过多比如更改为50000个数量的时候,数据库在重新启动的时候会挂住。

 

2.4 session(process)

A)process

select * from v$process;

包含v$bgprocess

l  通过如下以下方法可以追溯到OS系统的进程

SQL> select distinct sid fromv$mystat;
       SID
----------
        37
SQL> select sid,paddr fromv$session where sid=37;
       SID PADDR
---------- --------
        37 43BC365C
SQL> select addr,pid,spidfrom v$process where addr='43BC365C';
ADDR            PID SPID
-------- ----------------------------------
43BC365C         20 11633
[root@elvis ~]# ps -ef | grepora
root      3762 3732  0 May30 ?        00:01:02 hald-addon-storage: polling/dev/hdc
oracle    4604    1  0 May30 ?        00:00:02/u01/oracle/product/11.2.0/dbhome_1/bin/tnslsnr LISTENER -inherit
oracle    7624    1  0 06:22 ?        00:00:07 ora_pmon_elvis
oracle    7628    1  0 06:22 ?        00:00:35 ora_vktm_elvis
oracle    7634    1  0 06:22 ?        00:00:00 ora_gen0_elvis
oracle    7638    1  0 06:22 ?        00:00:01 ora_diag_elvis
oracle    7642    1  0 06:22 ?        00:00:00 ora_dbrm_elvis
oracle    7646    1  0 06:22 ?        00:00:01 ora_psp0_elvis
oracle    7650    1  0 06:22 ?        00:00:35 ora_dia0_elvis
oracle    7654    1  0 06:22 ?        00:00:05 ora_mman_elvis
oracle    7658    1  0 06:22 ?        00:00:03 ora_dbw0_elvis
oracle    7662    1  0 06:22 ?        00:00:02 ora_lgwr_elvis
oracle    7666    1  0 06:22 ?        00:00:16 ora_ckpt_elvis
oracle    7670    1  0 06:22 ?        00:00:06 ora_smon_elvis
oracle    7674    1  0 06:22 ?        00:00:00 ora_reco_elvis
oracle    7678    1  0 06:22 ?        00:00:11 ora_mmon_elvis
oracle    7682    1  0 06:22 ?        00:00:07 ora_mmnl_elvis
oracle    7686    1  0 06:23 ?        00:00:00 ora_d000_elvis
oracle    7690    1  0 06:23 ?        00:00:00 ora_s000_elvis
oracle    9125    1  0 10:26 ?        00:00:00 ora_arc0_elvis
oracle    9129    1  0 10:26 ?        00:00:00 ora_arc1_elvis
oracle    9133    1  0 10:26 ?        00:00:00 ora_arc2_elvis
oracle    9137    1  0 10:26 ?        00:00:00 ora_arc3_elvis
oracle    9177    1  0 10:31 ?        00:00:00 ora_smco_elvis
root     11596 11564  0 16:36 pts/0    00:00:00 su - oracle
oracle   11597 11596 0 16:36 pts/0    00:00:00 -bash
oracle   11629 11597 0 16:36 pts/0    00:00:00 rlwrapsqlplus / as sysdba
oracle   11630 11629 0 16:36 pts/1    00:00:00sqlplus   as sysdba
oracle   11633 11630 0 16:36 ?        00:00:00oracleelvis (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   11637    1  0 16:36 ?        00:00:01 oracleelvis (LOCAL=NO)
oracle   11678    1  0 16:38 ?        00:00:00 oracleelvis (LOCAL=NO)
oracle   11682    1  0 16:39 ?        00:00:00 ora_w000_elvis
root     11735 11695  0 16:42 pts/2    00:00:00 grep ora

注:如果是windows环境下情况较复杂,具体的进程ID需要去查看线程,而Windows不能直接查看进程下的线程必须通过第三方工具去查看。

l  从进程资源占用情况追溯到session

这种情况下,可以查找到是哪个session在占用大量资源,甚至能查找到

B)session

l  资源视图—重要

select * from v$resource_limit;

l  命令类型视图,根据v$session视图里的command列判断

select * from audit_actions;

l 通过session视图的sql_id列,查看到sql语句

select * from v$sql where sql_id=’  ’;

模拟消耗资源的死循环的语句

declare
number:=0;
begin loop
i:=1;
end loop:
end;

找到后Kill掉session

alter system kill session ’67,23’;

或者直接Kill掉进程

Window下是orakill命令,服务器端具备

Linux下是kill,top,ps –ef | grep ora等命令

Kill用法

--kill -9 sid 强制kill掉

C)connection

专有连接

共享连接

基本不使用,了解即可

池中连接

3 深入逻辑结构

3.1 表空间

database->tablespace->segments->extents->osblocks

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

 selelct * from dba_tablespaces;
 select * from dba_data_files;
 select * from dba_temp_files;
 select * from dba_segment;

 --一个表空间可以包含最多1023个数据文件

注:从11g开始有延迟段的概念,就是表中无数据的话,Oracle不分配空间

通过参数deferred_segment_creation查看延迟段的开启情况

--show parameterdeferred_segment_creation

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

创建一个表空间

 create tablespace orcl datafile 'E:\ORADATA\orcl\orcl01.dbf' size 10M;

然后创建一个表并指定存到orcl表空间中

 create table t(id int) tablespace orcl;

表空间的分配方式 (extent为单位)

autoallocate(默认)

<=1m    64k   8blocks

<=64m   1m   128blocks

<=1g    8m    1024blocks

>1g     64m   8096blocks

Uniform [指定增长大小]

始终都会按指定的大小增长

分配方式可以查看dba_tablespace视图中allocate_type字段为system就是默认  

在关掉这个表空间

 alter tablespace orcl offline;

->notes:虽然表不能访问和修改了,但可以删除,相当于数据库

  关闭了,只不过这是局部关闭。

回收站命令 show recyclebin 可以查询,但不可以对回收站里的表执行DDL/DML

 select * from " BIN$wHUg/RiVRxuXtwyypSxnTw==$0 TABLE" ;

从回收站里拿出来 闪回

flashback table t to before drop;

 

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

可以使用EM来观察表空间的使用率

 --登录->administration->tablespace

3.2 表空间和数据文件的管理

创建一个表

 create table tt tablespace orcl as select * from dba_objects;

持续插入数据

insert into tt select * from tt;

当表空间大小不足时,扩展表空间大致有以下几种方式:

1.直接扩展数据文件大小

 alter database datafile file_id resize 20M;

2.自动扩展数据文件大小

 alter database datafile 5 autoextend on next 1M maxsize 1024M;

3.手动扩展表空间的大小

alter tablespace orcl add datafile 'D:\oradata\orcl\orcl02.dbf'
 autoextend on next 1M maxsize 1024M;

为tt表分配了40M的空间大小且会显示但里面没有数据是空的(插入会遵循有空间的优先插入)

alter table tt allocate extent(datafile'D:\oradata\orcl\orcl02.dbf' size 40M);

查看表中块的使用情况方法:

1.包的方式

execdbms_stats.gather_table_stats(‘table’,’TEST’);

2.分析表—这种更准确

analyze table tt computestatistics;

从10g开始可以为tt表紧缩

alter table t shrink space;

但紧缩需要行移动(row movement)

alter table t shrink space;

这样就可以紧缩了。。。

查看row movement 是否可以移动

select * from dba_tables where table_name='T';

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

把表t移动到表空间2里,观察会有什么变化

alter table t move tablespace orcl02;

案例一:

 优化问题,观察磁盘读取速率及各个文件的读取情况。

 视图:

 --dba打头的属于静态数据来自于system里的数据字典

  --v$打头的属于动态,一般来自于控制文件等,且存储在内存中,所以服务器尽量不要重启,重启后,动态信息会消失,当然从10g

 开始oracle已经每隔一个小时会存储下动态信息

select * from v$filestat;

3.3 undo表空间

创建undo表空间

create undo tablespace undotbs2 database'E:\oradata\orcl\undotbs02.dbf' size 10M;

在表t中加入一列

alter table t add name varchar2(10) default 'a';
 insert into t values(1,'elvis');
 insert into t values(2,'elvis');
 commit;

然后更新下列值

 updata t set name='c' where id=1;
 select * from t;

不提交通过另外一个窗口同一个用户身份去查询观察。

 --当然不会看到,因为没有提交


作者:elvis_dataguru 发表于2013-6-21 15:07:40 原文链接
阅读:38 评论:0 查看评论

相关 [oracle 体系结构] 推荐:

【Oracle】物理体系结构

- - CSDN博客推荐文章
一、ORACLE 物理体系结构. PGA: 私有内存区,仅供当前发起用户使用. 用户登录后的session信息会保存在PGA. 执行排序,如果内存不够,oracle会在临时表空间中完成. SGA: 包含共享池,数据缓冲区,日志缓冲区以及一些相关的进程. DATABASE: 数据最终存放的地方,其中一块区域是日志存放区.

oracle 数据库体系结构

- - Oracle - 数据库 - ITeye博客
       任何硬件平台或操作系统下的ORACLE体系结构都是相同的,包括如下四个方面:.         数据文件,日志文件,控制文件,参数文件.         表空间、段、区间、数据块.         共享池,数据缓冲区,日志缓冲区,PGA.         用户进程、服务器进程、后台进程.

Oracle的体系结构概览

- - CSDN博客数据库推荐文章
声明:版本11gR2,CentOS5.8. (从11g开始password项里变为空了,以免被破解). 实例=内存(sga)+后台进程(background). 查看内存,可以通过以下视图.  后台进程,可以通过下面视图查看.   我们只关心paddr不等于0的就可以了,等于0的都是没启用. 参数文件spfilesid.ora,initsid.ora.

JVM学习 - 体系结构

- - CSDN博客推荐文章
一:Java技术体系模块图. 二:JVM运行时内存区域模型. 也称"永久代” 、“非堆”,  它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域. 可以通过-XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小. 运行时常量池:是方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加载后放到方法区的运行时常量池中.

java之classloader体系结构

- - 非技术 - ITeye博客
原文出处: http://www.iteye.com/topic/136427. a, Bootstrap ClassLoader/启动类加载器. 主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作.. b, Extension ClassLoader/扩展类加载器.

Jetty8.0.4的ClassLoader的体系结构

- - 龙浩的blog
    1:JDK的ClassLoader基础. Bootstrap ClassLoader/启动类加载器 . 主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作. Extension ClassLoader/扩展类加载器 . 主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作.

计算机网络体系结构

- - CSDN博客推荐文章
OSI/RM 开放系统互连参考模型. OSI/RM 与TCP/IP参考模型的比较. 开放式系统互连基本参考模型是由国际标准化组织(ISO)指定的. OSI包括了体系结构,服务定义和协议规范三级抽象. 注意OSI参考模型并非具体实现的描述,它只是一个为制定标准而提供的概念性框架. 在OSI中,只有各种协议是可以实现的,网络中的设备只有与OSI的有关协议相一致时才能互连.

图解EJB的体系结构

- - 企业架构 - ITeye博客
本文对EJB的体系结构作一个全面介绍:. EJB在J2EE体系结构中的位置. EJB是Enterprise JavaBeans的简称. 本文对EJB技术的体系结构作一个全面深入地介绍. EJB在J2EE体系结构中的位置. 视图层或表现层:提供用户界面;接收用户输入;数据输出. WEB应用的情况,JSP以及SERVLET属于视图层组件.

常见体系结构介绍

- - C++博客_首页
概念:以算法和数据结构为中心, 像管道和过滤器般处理数据,每个组件都有相对独立的数据处理功能,数据依次经过各个组件,最后形成完整的数据处理系统. 优点:各个组件都是独立的, 可以放方便的组合、重用和扩展,流水线式的执行,支持大规模并行处理. 缺点:流水线式的处理, 所以一般要求数据有比较统一的输入和输出格式;各个组件都是独立的, 因此的很难提取共性;批处理方式,所以不适合和用户交互.

理解Java虚拟机体系结构

- - ImportNew
众所周知,Java支持平台无关性、安全性和网络移动性. 而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么. 正是得益于Java虚拟机,它号称的“一次编译,到处运行”才能有所保障. 1.1 Java程序执行流程. Java程序的执行依赖于编译环境和运行环境.