您的位置:首页 > 数据库 > Oracle

oracle个人总结

2015-11-24 15:30 411 查看
转自: http://space.itpub.net/10710960/viewspace-553420
1.Oracle体系结构

oracle包含:实例(instance)和数据库(相关文件)

oracle分为:内存结构和物理结构

逻辑结构:为每个连接来的实例分配内存区域

物理结构:存放数据和相关数据库信息的文件

Insatance:包括SGA和一些后台进程

SGA:参数:sga_max_size。包含share_pool,large_pool,java_pool,db buffer cache,redo buffer cache

shared_pool:存放最近使用的SQL,PL/SQL。shared_pool_size

db buffer cache:存放一些查询结果。db_block_size * db_cache_size

redo buffer cache:存放对数据库操作的记录.

large_pool:large_pool_size

java_pool:存放一些java代码.java_pool_size

background:实例需要的进程,5个必须进程,其他为可选进程

SMON:系统监督进程

当实例崩溃,自动做实例恢复。主要做前滚(将db buffer cache中的脏数据写到数据文件中)和回滚(没提交的数据)。

PMON:进程监督进程

在没有正确退出oracle等造成的进程崩溃,PMON会做清理工作:如释放资源,释放锁,回滚事务,重启dispatcher等。

LGWR:日志写进程

工作原理:将redo buffer cache中的redo记录,顺序的 写到redo log file里

触发LGWR的条件:

1.每3秒

2.redo buffer cache里的数据,超过1MB

3.redo buffer cache里的数据超过总容量的1/3。

4.在DBWR写之前,会写

5.当事务commit时

DBWR/DBWn:数据库写进程

工作原理:将db buffer cache中的脏数据,写到数据文件中

触发DBWR的条件:

1.当发生checkpoint

2.db buffer cache中的脏数据到达规定的限度

3.超时3秒(在db buffer cache中里3秒没有找到空闲空间时)

4.truncate或delete表中数据时

5.将表空间设置为read only时

6.使用alter tablespace users begin backup进行联机备份

7.当表空间被offline或重新修改成online时

CKPT:检验点进程

工作原理:产生校验点,保持数据的一致性。

CKPT:下面情况出发CKPT进程

A checkpoint occurs, for example, in the following situations:

1 At every log switch. --当日志切换时

2 When an instance has been shut down with the normal, transactional, or immediate option. --当一个实例正常关闭时(除了使用abort来关闭)

3 When forced by setting the initialization parameter FAST_START_MTTR_TARGET. --强制设置9i新增的FAST_START_MTTR_TARGET参数

4 When manually requested by the database administrator. --DBA手工发出请求

5 When the ALTER TABLESPACE [OFFLINE NORMAL|READ ONLY|BEGIN BACKUP] cause checkpointing on specificdata files. --对表空间做offline,只读,热备等操作时,检查点会发生在指定的数据文件上

A checkpoint can be forced using the FAST_START_MTTR_TARGET parameter.

--checkpoint可以使用FAST_START_MTTR_TARGET强制设置。

FAST_START_MTTR_TARGET is a shortcut to the deprecated parameters FAST_START_IO_TARGET and LOG_CHECKPOINT_TIMEOUT.

--FAST_START_MTTR_TARGET取代了后面2个参数。

FAST_START_MTTR_TARGET = 600 indicates that instance recovery should not take more than 600 seconds, and the database will adjust the other parameters to this goal.

--FAST_START_MTTR_TARGET指出实例恢复不能超过600秒,并且数据库将调整其他参数以达到目标。

FAST_START_IO_TARGET and LOG_CHECKPOINT_TIMEOUT must not be used if FAST_START_MTTR_TARGET is used.

--如果FAST_START_IO_TARGET被使用,则FAST_START_IO_TARGET和LOG_CHECKPOINT_TIMEOUT就不会被使用。

可选进程:

ARCH/ARCn:归档日志进程

工作原理:备份redo log file。

触发机制:当redo log file进行完switch log后,将写满的redo log file写到归档日志文件中。

数据库:数据文件,控制文件,重做日志文件

数据文件:存放业务数据和数据库系统数据的物理文件

控制文件:包含数据库文件的位置和数据库的相关参数

重做日志文件:存放redo buffer cache中的记录,即对数据库操作的记录。

oracle之外还包含3中文件:

初始化参数文件:实例在启动时,oracle会读取该文件中的参数,来配置实例。

静态参数文件(pfile):文本文件。存放启动实例时需要的参数:

1.db_name,instance_name

2.controlfile位置

3.SGA的配置

4.undo的配置

5.该实例能启动的最大进程数

6.db_block_size

7.是否允许DBA远程登录等。

动态参数文件(spfile):二进制文件。内容一样,不过该文件是oracle使用的,所以是二进制,用户不要用文本修改该文件

当pfile和spfile内容不一致时:可用命令更新。

create pfile 【file_name】 from spfile 【file_name】;

create spfile 【file_name】 from pfile 【file_name】;

oracle在启动实例时,会先寻找spfileSID.ora文件,如果没有会找initSID.ora文件,如果还没有找到会找pfile.ora文件来启动实例。

密码文件:保存数据库用户的用户名和密码。SYSDBA/SYSOPER用户。

归档日志文件:将redo log file里的内容,备份到操作系统上的指定目录下的文件。

2.数据库的启动,关闭及相应模式:

启动:startup 【nomount】【mount】【open】

nomount:非加载方式打开数据库

工作原理:

1.分配了SGA

2.打开所需的全部数据库后台进程

3.打开报警文件(alert file)和日志追踪文件(trace file)

mount:加载方式打开数据库

工作原理:

1.将db与instance关联起来

2.打开控制文件

3.读控制文件以获取数据文件和重做日志文件的名字,状态等信息,当不检查这些文件是否存在。

open:正常方式打开数据库

工作原理:

1.打开所有联机数据文件

2.打开所有联机重做日志文件

关闭:shutdown【abort】【immediate】【transactional】【normal】

abort:强制关闭数据库,要做实例恢复

immediate:立即关闭数据库,对数据库进行前滚和回滚,没提交的回滚,提交的写到数据文件中,不用做实例恢复

transactional:禁止新的session进入,对空间的session进行关闭,等待没提交的session提交事务后,才关闭数据库

normal:正常关闭数据库,如果有没提交的事务,数据库会等待所有事务提交后,才关闭。

如何查询到那些session的事务没有提交或其他造成数据库挂起状态的event?

可以查询blocking_session得到等待session的sid,通过blocking_session中的相关信息,然后再通过查询v$session里的sid,serial#得到准确的session信息,最后使用alter system kill session'sid,serial#';

限制模式:oracle以限制模式启动时,只有拥有DBA权限的用户才能连接到数据库

用途:DBA要对数据库做备份,修改等操作时。

方式:startup restrict或alter system enable restricted session;

对于已经连接到oracle的非DBA用户,可以使用alter system kill session命令,强制杀掉。

只读模式:将oracle设置为只读模式,不能做任何修改

用途:只能做查询操作,将数据文件offline或改回online。不能对表空间做offline的操作。

方式:alter database read only; 设置成只读模式

alter database read write; 设置成读写模式

3.数据字典和控制文件

数据字典分为:基表和动态视图(v$开头的)

数据字典存储信息包含:

1.数据库逻辑和物理结构。

2.所有数据库对象信息。

3.所有数据库对象的磁盘空间分配信息。

4.oracle相关信息。db_name,instance_name,参数等。

5.用户权限,角色信息。

6.完整的约束信息

7.审计信息。

8.列的默认值。

DDL语句和某些DML语句(修改了磁盘的空间等操作)会引起数据字典的修改。

数据字典:

DBA_*:包含数据库中所有对象的信息。

ALL_*:有关用户可以访问的对象的信息。

USER_*:用户拥有的对象信息。

动态性能视图:是一组虚表。存在内存中的。是不允许DML操作的。

控制文件:

内容:db_name,SID,时间戳,当前日子的序列号,日志的历史信息,归档日志文件的位置和状态,联机重做日志文件的位置,数据文件的名字和位置,表空间信息,备份的位置和信息,校验点信息等。

用途:当数据加载时,oracle会读取控制文件中的信息,如读取数据文件的准备位置和名字,联机重做日志文件的准确位置和状态,这样才能正常代开实例。

相关视图:v$controlfile,v$controlfile_record_section

查看控制文件配置:通过查询v$controlfile_record_section视图

移动控制文件:alter system set control_files '/path/file_name','/path1/file_name1' ...scope = spfile;

安全方面:控制文件对于oracle数据库是非常重要的,所以为了安全,应该复制多份,并保存到不同的磁盘上。

alter system set control_file = '/path1/file_name1','/path2/file_name2',...;

使用RMAN进行控制文件的备份:

配置成自动备份控制文件:configure controlfile autobackup on; 在做数据库备份时,会自动把控制文件备份到备份集中。

使用命令:backup current controlfile format '/path/file_name';

sqlplus下通过:alter database backup controlfile to '/path/file_name';

如果控制文件损坏要进行恢复:

recover database using backup controlfile until cancel;

alter database open resetlogs;

4.重做日志文件:

内容:记录用户在oracle数据库中的操作过程的记录。

用途:可以通过重做日志文件,进行数据库的恢复。

需要注意的问题:

1. An instance requires at least two groups of online redo log files.

一个实例至少需要两组联机重做日志文件。

2. An active or current group cannot be dropped.

active或current状态的组,不能被删除。

3. When an o 1 If the member you want to drop is the last valid member of the group, you cannot drop that member.

4. --无法删除组里最有一个有效成员。

5. If the group is current, you must force a log file switch before you can drop the member.

--要删除当前成员前,必须要先强制切换日志。

6. If the database is running in ARCHIVELOG mode and the log file group to which the member belongs is not archived, then the member cannot be dropped.

--在归档模式下,无法删除还没有归档的重做日志。

7. When an online redo log member is dropped, the operating system file is not deleted

--当成员被删除时,操作系统上的文件没有被删除。

8. clear可以删除一个没有归档的日志组,要使用unarchived关键字。

9. 使用rename命令来更改redo log file,需要将数据库以mount方式打开。

重做日志文件组:组里的每个日志文件都是完全的镜像,当其中有一个损坏时,并不影响。所以每个日志文件组最少有2个以上的日志文件成员,并发在不同磁盘。

相关视图:v$log,v$logfile

操作:

1.为日志文件添加/删除组:

alter database add logfile '/path/redologfile1','/path1/redologfile2' size n MB;

alter database drop logfile group num;

如果不指定组号,系统会自动添加。

2.为日志文件添加/删除成员:

alter database add logfile member 'file_name' to group group_num;

alter database drop logfile member 'file_name' to group group_num;

3.清空联机重做日志文件:

ALTER DATABASE [database] CLEAR [UNARCHIVED] LOGFILE

{GROUP integer|('filename'[, 'filename']...)}

[,{GROUP integer|('filename'[, 'filename']...)}]...

4.强制切换日志文件和强制生成检查点:

1.alter system switch logfile;

2.alter system checkpoint;

5.数据文件和表空间

表空间:数据库的逻辑存储

相关视图:dba_tablespaces,v$tablespace

分类:本地管理的表空间(lmt),数据字典管理的表空间(dmt)

lmt:可以避免表空间的碎片。

表空间类型:系统表空间,用户表空间,undo表空间,临时表空间。

系统表空间:保存系统信息,数据字典等信息。system,sysaux表空间

用户表空间:存放业务数据。

创建:create tablespace tbs_name

datafile '/path/data_file_name1' size n M,

'/path/data_file_name2' size n M, ...

extent management local

uniform. size n M [segment space management auto];

删除:drop tablespace tbs_name;

还原表空间:存放旧数据。oracle自动管理还原数据。

创建:create undo tbs_name

datafile '/path/undo_file_name' size n M;

修改默认undo表空间:

alter system set undo_tablespace = tbs_name scope=both;

修改undo表空间保存机制:

alter tablespace undo_tbs_name retention guarantee/noguarantee;

临时表空间:存放临时数据,大的排序过程的中间结果。

特性:

1.不能置为只读

2.不能将临时数据文件重命名。

3.临时数据文件总是置为nologging状态。

4.不能使用alter database 命令创建临时数据文件

5.以只读方式运行的数据库需要临时数据文件

6.介质恢复是不能回复临时数据文件的

7.备份是不需备份临时数据文件

创建:

create temporary tablespace tbs_name

tempfile '/path/temp_file_name' size n M,

extent management local

uniform. size n M [segment space management auto];

默认临时表空间:数据库创建后随之建立的。

相关视图:database_properties

修改默认临时表空间:

alter database default temporary tablespace tbs_name;

设置表空间为脱机:alter tablespace tbs_name offline;

注意:默认temporary,系统表空间,有活动的undo表空间不能置为只读。

改回联机状态:alter tablespace tbs_name online;

脱机目的:

1.在打开数据库的状态下,移动数据文件

2.恢复表空间或数据文件

3.使被offline的表空间无法被访问。

设置表空间为只读:alter tablespace tbs_name read only;

改回读写状态:alter tablespace tbs_name read write;

目的:不能做修改操作,可以保护数据。

注意:可以手工修改表空间的存储参数,不过从9i后,最好还是通过segment space management auto让oracle自动管理。

重新设置表空间的大小:

alter database datafile '/path/data_file_name' autoextend on next n M;

OMF自动管理表空间(9i开始引入的)

设定:DB_CREATE_FILE_DEST,然后就可以创建不带自句而创建表空间了。

alter system set db_create_file_dest = 'path';

删除表空间时可级联删除数据文件:

drop tablespace tbs_name include contents and datafiles;

数据文件:存放系统数据和业务数据的文件。

为表空间添加数据文件:

alter tablespace add datafile '/path/data_file_name' size n M;

重新设置数据文件的大小:

alter database datafile '/path/data_file_name' resize n M;

移动数据文件:要先将表空间置为脱机状态

方法一:alter tablespace方法适用于非系统表空间或没有活动的undo表空间或临时表空间

步骤:

1.将对应的表空间置为offline

2.使用os命令,将数据文件拷贝到新位置。

3.alter tablespace tbs_name rename datafile 'old_path/name' to 'new_path/name1';

4.将该表空间置为online。

方法二:alter database方法适用于系统表空间和不能置为offline的表空间的数据文件

步骤:

1.shutdown 数据库

2.使用os命令,将数据文件拷贝到新位置

3.startup mount

4.alter database db_name rename file 'old_path/name1' to 'new_path/name2';

5.alter database open;

6数据库的存储结构

段(segment):在磁盘空间中存储对象的空间。

包括:表,分区表,索引,簇,索引表,临时段,还原段,大对象段,嵌套表等。一个段可以有多个区

区(extent):一个区有多个数据块。是某个段中的一块空间。

可以指定扩展段的每个区的大小:uniform. size

使用自动段空间管理segment space manager auto

分配区:

1.当一个段被创建时

2.当一个段被扩展时

3.当一个段被改大时

回收区

1.当一个段被删除时

2.当一个段被truncate时

3.当一个段被改小时

块 (db_block):是数据库中最小的存储单元,一个数据块包含多个os块。

关键参数:DB_BLOCK_SIZE,在数据库创建时设定。

数据块头信息:

PCTFREE:为update保留的空间。

INITRANS:定义创建数据块或索引块时事务槽的初始值。

MAXTRANS:定义了创建数据块或索引块时事务槽的最大值。

7.还原段

管理方法:自动管理,手工管理

自动管理:oracle自动管理还原段的创建,分配和优化等

手工管理:手工管理还原的创建,分配和优化等

引入目的:

1.事务回滚:将还原段中的原始数据回写到原来的数据行中。

2.事务恢复:还原所有没提交的数据。

3.读一致性:

undo类型:

系统还原段:

非系统还原段:

私有还原段:只为一个instance服务

公有还原段: 为任何一个instance服务

重要参数:

undo_mangement:设置手动还是自动管理还原段(静态参数)

undo_retention:设置还原段中的旧数据的保留时间。

注意:加大undo_retention参数是

undo_tablespace:默认undo表空间。

undo_supperss_errors:在还原数据管理的自动模式中试图执行手动操作时,将不显示错误信息

alter system set 参数=value;修改动态参数。

相关命令:

创建:

create undo tablespace tbs_name

datafile 'path' size n M;

删除:

drop tablespace

注意:不能删除当前活动的undo表空间,必须改变默认undo表空间,等所有事务都完成了,再删除。

alter system set undo_tablespace = ‘new undo tablespace path’;

相关数据字典:

v$undostat,v$rollname,v$rollstat,v$session,v$transaction,dba_roolback_segs

8.表

管理方式:逻辑存储数据。

表的分类:普通表,分区表,簇,索引组织表,外部表,临时表。。。

相关操作:

创建:

create table tb_name (col type,col2 type…)

tablespace tbs_name;

截断表:

truncate table tb_name;

删除:

drop table tb_name [purge][cascade constraints];

修改字段名:

alter table tb_name rename old_name to new_name;

修改字段类型:

alter table tb_name modify(col newtype,….);

添加字段:

alter table tb_name add(col type,….);

添加时注意:

将某一列置为无效:

alter table tb_name set unused col_name cascade constraints;

删除字段:

alter table tb_name drop col_name cascade constraints checkpoint 行数;

删除时注意:

1. 使用alter table一次只能删除一个字段。

2. 表中至少还存在一列

3. 删除的列无法恢复

4. 所删除的列可包含也可不包含数据

5. 8i以上才能使用此命令

移动表:

alter table tb_name move tablespace tbs_name;

分析表:

analyze table table_name compute statistics;

收缩表:

alter table tb_name shrink

9.索引

引入目的:为了调高效率,按索引关键字的顺序存放记录。在索引记录中存有的索引关键字和指向表中真正的数据的指针,利用算法迅速找出所需记录,并根据指针找到数据。

内部原理:一种允许直接访问表中某一数据行的树状结构。

优点:提高查询效率

管理方式:

1. 平衡查询和DML的需要。在DML操作较多的表或字段上,尽量少加索引。因为索引会导致查询快,但DML操作效率会降低。

2. 将数据库中的索引放入到单独的表空间中,降低段的I/O竞争。

3. 使用统一的extent尺寸,这样是为了减少系统的转换空间。

4. 对大索引可考虑nologging方式,这样可以减少redo操作,提高系统效率。

类型:

按逻辑分类:

单列索引:基于一列的索引。

多列索引:基于多列的索引。最多32列

唯一索引:保证表中任何数据行上的索引都不能重复。

非唯一索引:表中数据行的索引列的值可以相同。

函数索引:利用表中字段的一列或多列使用函数或表达式创建的索引。

按物理分类:

b-tree索引:

bitmap索引:

分区或非分区索引:

相关操作:

创建:

create [unique|bitmap] index ind_name on tb_name(col,…);

删除:

drop index ind_name;

回收索引段的没用的空间:

alter index tb_name deallocate unused;

重建索引:

alter index ind_name rebuild;

开启对索引的监督:

alter index ind_name monitoring usage;

关闭对索引的监督:

alter index ind_name nomonitoring usage;

10.视图

引入原理:

管理方式:

分类:普通视图和物化视图。

相关操作:

创建:

create or replace view view_name

删除:

drop view view_name;

11.序列和同义词

12. 用户和模式

用户:连接数据库,并可以操作数据库的对象。

模式:

用户的相关操作:

创建:

create user user_name identified by password

default tablespace tbs_name

default profile;

删除:

drop user user_name [cascade];

13.角色

定义:角色是一个权限的集合,它可以授予用户或其它角色。

引入目的:更加方面的管理权限。并可以根据不同的用户通过自定义的角色,进行权限的分配。

相关操作:

创建:

create role role_name

删除:

14.权限

定义:执行某些特定SQL的权利。

引入目的:保护数据库。限制不同连接人员可使用的范围。

分类:

系统权限:访问数据库的全力,使用户在数据库中能执行一些特定的操作。

对象权限:维护数据库中的对象的权力,使用户能访问和维护某一特定的对象。

相关操作:

授权:

grant privs_name to user_name [with admin option];

grant role_name to user_name [with admin option];

回收:

revoke privs_name from user_name;

grant role_name from user_name;

15.数据的完整性和一致性

维护数据的完整性的方法:

1.oracle的完整性约束

2.数据库的触发器

3.应用代码

oracle中的约束:

1.非空约束 not null:所定义的列不能为空。

2.唯一约束 unique:所定义的列不能有重复数据。

3.主键约束 primary key:指明一列或多列的组合为该表的主键,且唯一非空。

4.外键约束 foreign key:

5.条件约束 check:

oracle约束的4中状态:

1.disable novalidate 禁止而无效:

2.disable validate 禁止而有效:

3.enable novalidate 激活而无效:

4.enable validate 激活而有效:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: