oracle个人总结

来源:互联网 发布:mac地址软件下载 编辑:程序博客网 时间:2024/06/05 19:16

转自: 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 激活而有效:



0 0