目录
1 物理结构(文件)
2 逻辑结构
2.1 实例
2.2实例的管理
2.3 参数的粗略概述
2.4 session(process)
3 深入逻辑结构
3.1 表空间
3.2 表空间和数据文件的管理
3.3 undo表空间
首页 数据库 mysql教程 Oracle的体系结构概览

Oracle的体系结构概览

Jun 07, 2016 pm 04:35 PM
oracle 体系结构 声明 版本

声明:版本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$logfileselect * from v$log (4)password file

声明:版本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三个阶段


l? 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’;
登录后复制

l? mount阶段

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

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

show parameter control_files
登录后复制

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

show parameter background
登录后复制

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

l? 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(默认)

>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的体系结构概览

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
oracle打不开怎么办 oracle打不开怎么办 Apr 11, 2025 pm 10:06 PM

Oracle 打不开的解决办法包括:1. 启动数据库服务;2. 启动监听器;3. 检查端口冲突;4. 正确设置环境变量;5. 确保防火墙或防病毒软件未阻止连接;6. 检查服务器是否已关闭;7. 使用 RMAN 恢复损坏的文件;8. 检查 TNS 服务名称是否正确;9. 检查网络连接;10. 重新安装 Oracle 软件。

oracle游标关闭怎么解决 oracle游标关闭怎么解决 Apr 11, 2025 pm 10:18 PM

解决 Oracle 游标关闭问题的方法包括:使用 CLOSE 语句显式关闭游标。在 FOR UPDATE 子句中声明游标,使其在作用域结束后自动关闭。在 USING 子句中声明游标,使其在关联的 PL/SQL 变量关闭时自动关闭。使用异常处理确保在任何异常情况下关闭游标。使用连接池自动关闭游标。禁用自动提交,延迟游标关闭。

oracle怎么循环创建游标 oracle怎么循环创建游标 Apr 12, 2025 am 06:18 AM

Oracle 中,FOR LOOP 循环可动态创建游标, 步骤为:1. 定义游标类型;2. 创建循环;3. 动态创建游标;4. 执行游标;5. 关闭游标。示例:可循环创建游标,显示前 10 名员工姓名和工资。

oracle日志写满怎么办 oracle日志写满怎么办 Apr 12, 2025 am 06:09 AM

Oracle 日志文件写满时,可采用以下解决方案:1)清理旧日志文件;2)增加日志文件大小;3)增加日志文件组;4)设置自动日志管理;5)重新初始化数据库。在实施任何解决方案前,建议备份数据库以防数据丢失。

oracle视图怎么导出 oracle视图怎么导出 Apr 12, 2025 am 06:15 AM

可以通过 EXP 实用程序导出 Oracle 视图:登录 Oracle 数据库。启动 EXP 实用程序,指定视图名称和导出目录。输入导出参数,包括目标模式、文件格式和表空间。开始导出。使用 impdp 实用程序验证导出。

甲骨文在商业世界中的作用 甲骨文在商业世界中的作用 Apr 23, 2025 am 12:01 AM

Oracle不仅是数据库公司,还是云计算和ERP系统的领导者。1.Oracle提供从数据库到云服务和ERP系统的全面解决方案。2.OracleCloud挑战AWS和Azure,提供IaaS、PaaS和SaaS服务。3.Oracle的ERP系统如E-BusinessSuite和FusionApplications帮助企业优化运营。

HDFS配置CentOS需要哪些步骤 HDFS配置CentOS需要哪些步骤 Apr 14, 2025 pm 06:42 PM

在CentOS系统上搭建Hadoop分布式文件系统(HDFS)需要多个步骤,本文提供一个简要的配置指南。一、前期准备安装JDK:在所有节点上安装JavaDevelopmentKit(JDK),版本需与Hadoop兼容。可从Oracle官网下载安装包。环境变量配置:编辑/etc/profile文件,设置Java和Hadoop的环境变量,使系统能够找到JDK和Hadoop的安装路径。二、安全配置:SSH免密登录生成SSH密钥:在每个节点上使用ssh-keygen命令

oracle数据库怎么停止 oracle数据库怎么停止 Apr 12, 2025 am 06:12 AM

要停止 Oracle 数据库,请执行以下步骤:1. 连接到数据库;2. 优雅关机数据库(shutdown immediate);3. 完全关机数据库(shutdown abort)。

See all articles