찾다
데이터 베이스MySQL 튜토리얼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으로 문의하세요.
MySQL에서 뷰를 사용하는 한계는 무엇입니까?MySQL에서 뷰를 사용하는 한계는 무엇입니까?May 14, 2025 am 12:10 AM

mysqlviewshavelimitations : 1) 그들은 upportallsqloperations, datamanipulation throughviewswithjoinsorbqueries를 제한하지 않습니다

MySQL 데이터베이스 확보 : 사용자 추가 및 권한 부여MySQL 데이터베이스 확보 : 사용자 추가 및 권한 부여May 14, 2025 am 12:09 AM

적절한 usermanagementInmysqliscrucialforenhancingsecurityandensuringfefficientDatabaseOperation.1) USECREATEUSERTOWDDUSERS,@'localHost'or@'%'.

MySQL에서 사용할 수있는 트리거 수에 영향을 미치는 요인은 무엇입니까?MySQL에서 사용할 수있는 트리거 수에 영향을 미치는 요인은 무엇입니까?May 14, 2025 am 12:08 AM

mysqldoes notimposeahardlimitontriggers, butpracticalfactorsdeteirefectiveuse : 1) ServerConfigurationimpactStriggerManagement; 2) 복잡한 트리거 스케일 스케일 사이드로드; 3) argertableSlowtriggerTriggerPerformance; 4) High ConconcercencyCancaUspriggerContention; 5) m

MySQL : Blob을 저장하는 것이 안전합니까?MySQL : Blob을 저장하는 것이 안전합니까?May 14, 2025 am 12:07 AM

예, It 'safetostoreBlobdatainmysql, butconsidertheStefactors : 1) StoragesPace : BlobScanconSumeSignificantspace, 잠재적으로 증가하는 CostsandSlownperformance

MySQL : PHP 웹 인터페이스를 통해 사용자 추가MySQL : PHP 웹 인터페이스를 통해 사용자 추가May 14, 2025 am 12:04 AM

PHP 웹 인터페이스를 통해 MySQL 사용자를 추가하면 MySQLI 확장 기능을 사용할 수 있습니다. 단계는 다음과 같습니다. 1. MySQL 데이터베이스에 연결하고 MySQLI 확장자를 사용하십시오. 2. 사용자를 생성하고 CreateUser 문을 사용하고 Password () 함수를 사용하여 암호를 암호화하십시오. 3. SQL 주입 방지 및 MySQLI_REAL_ESCAPE_STRING () 함수를 사용하여 사용자 입력을 처리하십시오. 4. 새 사용자에게 권한을 할당하고 보조금 명세서를 사용하십시오.

MySQL : Blob 및 기타없는 SQL 스토리지, 차이점은 무엇입니까?MySQL : Blob 및 기타없는 SQL 스토리지, 차이점은 무엇입니까?May 13, 2025 am 12:14 AM

mysql'sblobissuilableforstoringbinarydatawithinareldatabase, whilenosqloptionslikemongodb, redis, and cassandraofferflexible, scalablesolutionsforunstuctureddata.blobissimplerbutcanslowwownperformance를 사용하는 것들보업 betterscal randaysand

MySQL 추가 사용자 : 구문, 옵션 및 보안 모범 사례MySQL 추가 사용자 : 구문, 옵션 및 보안 모범 사례May 13, 2025 am 12:12 AM

TOADDAUSERINMYSQL, 사용 : CreateUser'UserName '@'host'IdentifiedBy'Password '; 여기서'showTodoitseciRely : 1) ChoosetheHostCareLyTocon trolaccess.2) setResourcelimitswithOptionslikemax_queries_per_hour.3) Usestrong, iriquepasswords.4) enforcessl/tlsconnectionswith

MySQL : 문자열 데이터 유형을 피하는 방법 일반적인 실수?MySQL : 문자열 데이터 유형을 피하는 방법 일반적인 실수?May 13, 2025 am 12:09 AM

toavoidcommonmistakeswithstringdatatypesinmysql, stroundStringTypenuances, chooseTherightType, andManageEncodingAndCollationSettingSefectively.1) usecharforfixed-lengthstrings, varcharvariable-length, andtext/blobforlargerdata.2) setcarcatter

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구