ORALCE DBA学习1

1 oracle的服务架构
    服务器启动监听进程,用户进程发出请求,到达该监听进程,监听进程收到请求后,派生出一个
服务进程出来(可以重新建一个,也可以从服务器进程池中拿出来),监听进程把用户请求转发给
服务进程后,继续去监听其他请求
    ORACLE 有NET 8协议,实现了OSI中的上三层,负责客户和服务器之间建立完整的SQL会话,解析SQL语句,执行

SQL等

2 服务端的listner.ora,有专有模式和共享模式两种,区别为:
    专有模式:为每个用户连接启动一个单独的进程,而共享模式为多个用户连接共享一个进程,也就是多个用户共

享一个会话通道

3 监听器进程的静态注册和动态注册
   静态注册,配置监听器时,明确告诉监听器某个数据库的信息,告诉需要连接哪个SID的信息
    动态注册:由数据库动态向监听器注册,由PMON进程完成的,也可以用
      alter system register,命令马上强制pmon立即注册
    动态注册的话,在lsnrctl status中,可以看到静态的是unknown状态,动态的能准确监视其数据库状态

4 lsnrctl命令
   lsnrctl status,lsnrctl start,lsnrctl stop
5 在10g中,可以使用easy connect naming method,客户端不再需要配置
tnsname.ora,格式为
   sqlplus xxx/xxxx@//host/sid

6 数据库物理结构:分为数据文件,控制文件,日志文件,最重要三种

7 联机日志组: LGWR进程会不断的向redo log中写入日志内容,当一组日志文件被写满时,会触发log switch,然

后lgwr继续向另外一组日志写入
会覆盖掉以前的;如果要保留全部日志,必须用归档日志。

8 归档日志,当一组联机日志写满后,在触发日志切换的同时,还触发arcn进程,将写满的日志copy到另外一个位置


即使在rac环境中,每个日志线程的要求也是一样的
9 trace文件 分别是内核跟踪文件,后台进程跟踪文件,用户追踪文件。

10 OMF:
   实际上就是设置了一些预先的参数位置,让比如创建相关操作时,不用进行指定文件路径等;
11 数据块:一般OLTP设置为8KB比较好,OLAP可以适当设置大点。
         数据块分为数据块头(block header):包括数据块地址,数据块类型(索引块,undo),事务表(ITL)
     row directory:为数据块内部的一个指针表,找某条记录时,不需要再遍历整个
数据块
    free space:空闲的空间 used space:数据记录占用的空间
   分区:为了更好地管理数据块,分区数量可多可少,是连续的空间,但会产生空间碎片
    段:每个表或索引都对应一个段,段不要求连续
  表空间:分为永久表空间,临时表空间和undo表空间。永久表空间为system,sysaux,user表空间;sysaux为10G以

后辅助功能而设置的表空间
   临时表空间组:一个临时表空间组至少包含一个临时表空间(10g开始提供)
    select * from dba_tablespace_groups;
    移动临时表空间到新的临时表空间组:
     alter tablespace temp tablespace group tmpgroup1;
    undo表空间:一个数据库中可存在多个undo表空间,但任一时间只有一个UNDO
表空间被激活

12 段空间管理
    在手动创建segments时,手动空间管理方式中,oracle通过一个freelist链表来记录
数据块的使用,但容易引起DML时的竞争
   因此9I开始,使用自动空间管理方式,ASSM,不再使用freelist,而是通过位图方式记录每个数据块的使用情况,

用来记录数据块的位图的数据块叫bitmapped block(BMB),
分散在段中,减少了竞争。
   oracle对于extent的管理分字典管理和本地管理,本地管理使用位图,比较快和好

13  desc dba_objects
     两者可以这样区别:object_id可以看做是对象的一个逻辑id,在对象创建时分配,一经分配即不再改变;而

data_object_id为一个物理id,在对象物理存储变化时可能发生改变。
    
14  后台进程
    1) DBWN:负责把sga被修改的数据同步到磁盘中去;写的时机包括:检查点,每3秒唤醒一次,数据库最多有20

个dbwn进程
   2)LGWR:将log buffer中的日志内容写到联机日志文件中去。当DBWR试图把一个脏数据块写到磁盘前,先确定其

REDO记录是否写到联机日志文件中,如果没有,则通知LGWR进程去写入。
  3)PMON:监视用户进程,负责发现用户进程异常后清理资源等工作
  4)SMON:负责实例的恢复工作
  5)ARCN:归档日志进程
  6)MMON,MMNL,MMAN:10G中的AWR进程收集
  7)CJQO:负责定时任务
  8)RVWR:10G中负责flashback功能
15 SGA:共享进程,适用OLTP,PGA对与OLAP比较重要
    1)data buffer  cache,分为keep buffer pool,recycle buffer ppol,
default buffer ppol,其中keep buffer pool的初始化参数为db_keep_cache size,
该区域内的数据会尽可能保留在内存中
       recycle buffer pool:一用完就会被移走,比如体积大的日志表等,可以考虑用这个
       default_buffer_pool:db_cache_size 缺省的cache
     2)shardpool:存放的为代码,分为library cache和dictionary cache两个
区域,library中存放代码部分,dicitionary存放数据字典部分,加快解析用。
    3)redo log  buffer:存放redo记录
    4)大对象池,JAVA池
16 PGA:完成排序,HASH,连接等
17 归档模式和非归档模式
    1) 切换为归档模式:alter database archivelog;
      定义归档位置: alter system set log_archive_dest="location=d:\....."
scope=both;

    2) RMAN介绍:
       targetdatabase:要进行备份的数据库叫做targetdatabase.
       catalog database:rman的备份信息可以保存在控制文件中,也可以保存在一个
单独的数据库中,方便管理
      通道channel:是一个命令行接口,它指引一个target database的一个服务进程
进行数据库备份,还原和恢复。
      备份集和COPY:有备份集和COPY方式,备份集象ZIP的方式,备份集的方式包括要还原和恢复 ,恢复为恢复相

关的归档日志和联机日志,占用时间多点;而COPY方式则可以忽略还原的操作,不需要额外的空间
       RMAN连接到目标数据库,其中有2个通道用来对数据库进行调用,用自己的PL/SQL执行RMAN命令,调用数据库

进行备份。

     操作:
   1) rman target '用户名/xxxxx@sid'
   注意,有时会报:找不到recover.bsq文件,要把服务端rdmbs\admin下的复制到客户端
     看所有配置  show all;
       
  2) 配置控制文件的自动备份
    configure controlfile autobackup on;
  3) 缺省的备份格式为backupset,为压缩的,配置磁盘备份
      configure default device type to disk;
     配置为压缩方式backup
          configure device type disk backup type to compressesd backupset;
  4) 基于时间窗口的备份策略
      比如设置了configure retention policy to recovery window of 7 days;
     设置了7天,则假如1,14号分别作了一次全备,恢复时间是7天,现在是23号,
就要保证恢复到16号,则需要14号的全备+14号以后的归档日志,而14号之前的,都可以删除
   5) 基于冗余的策略
       configure retention policy to redundancy 2;
      定义每个文件至少保留2个备份。
   6)查看策略
       show retention policy;
    7) 查看过期的备份文件
        report obsolete;
    删除过期文件
          delete obsolete;
    9)完全备份: 
       backup database;
       采用压缩备份:backup as compressed backupset database;
       采用image copy方式备份:backup as copy database;
    10)增量备份:在做完全备份后,比如周二备份的只是周二的,每天都是当天的备份;
   backup incremental level 1 database;
    累加增量备份:比如周二的是周一到周二之间共2天的变化
    backup incremental level1 cumulative database;
关于RMAN的练习,参考更多的;http://www.cnblogs.com/shishanyuan/archive/2010/03/01/1675349.html
11)提升增量备份的性能,有一个特殊文件叫数据块变化跟踪文件,减少数据的遍历;
当数据块发生变化时,将相关信息记录到这个文件中,当RMAN增量备份时,利用这个
文件就可以获得需要备份的数据块列表,而不必所有数据块遍历
启用:
     alter datbase enable block change tracking using file 'xxx/bcl';
select * from v$block_change_tracking;
  关闭
     alter database disable block change tracking;
18   一个REDO记录号包括:事务号,被修改数据的位置,数据块号,修改后的值
     日志文件SCN:每个日志文件都有一个低SCN,高SCN。当一个日志文件存
满后,新的日志文件低SCN就用上一个日志文件的高SCN+1来表示。每个正被
使用的日志文件的高SCN无穷大。
    每个数据文件的文件头记录启动SCN,而控制文件会记录每个数据文件的终止
SCN,正常运行的开始SCN都设置一样,终止被设置无穷大
    重要:正常数据库关闭后,每个数据文件的终止SCN被设置为成功启动的SCN


19 oracle 的database control是BS结构去管理一个数据库,grid control是管理多个数据库;
 在oracle_home\bin目录下,有emctl的启动文件
   oracle10g\oc4j\j2ee\OC4J_DBConsole为模版目录,每一个被管理的数据库都会在下面生成一个
oc4j_dbconsole_hostname_sid的目录,一个database control只能管理一个数据库实例。
   重新配置databasecontrol:
      emca -config dbcontrol db -repos create


20  pga:为每个用户的连接请求分配一个服务进程,而这个服务进程分配的内存区域就叫PGA。PGA是独占的方式,
进程访问时不需要latch,lock等保护机制,不会发生竞争。
   PGA包括session area(包含会话特有的信息,如会话跟踪信息等),private sql area(即通常所说的
cursor),又分为persistent area(保存绑定变量等)和run-time area(SQL运行过程中使用的空间,执行完SQL后,

这部分空间会被释放)

21 parent cursor和child cursor的概念
    parent cursor:保存的是SQL的原始执行文本
    child cursor:保存的是执行计划和环境信息
    v$SQLAREA:从parent cursor级别上统计SQL语句的执行信息;
    v$sql:从child cursor级别上统计的语句执行信息
   open_cursor参数控制每个session 最多能同时打开的cursor数量,如果超过遇到ora-1000错误
   session_cached_cursors:定义后,如果一个SQL被频繁执行,这个cursor就会被cache掉,提高效果。
   
22 查看执行计划: explain plann for ...........
    查看执行计划     select  * from table(dbms_xplan.display);
    系统级别设置10046事件 :
      alter system set event='10046 trace name context forever,level 8';
      alter system set event='10046 trace name context off';
23 sql>oradebug setospid 操作系统的id
    sql>oradebug setorapid oracle进程的id
24 library cache中获得执行计划
    使用dbmx_xplan包,其中display方法为9i用,display_cursor为10G用
    在10G中推荐用display_cursor,其参数说明为:
                          sql_id:代表sql语句的id,其实为一个哈希值
                          child_number:一个SQL中的多个子游标,可以为null,则列出所有子游标计划
   1) 确定语句的sql_id:比如
      select sql_text,sql_id from v$sql where sql_text like '%..要分析的SQL语句....%'
      获得其哈希值,
    2)select * from table(dbms_xplan.display_cursor('哈希值',null,'basic'));
       select * from table(dbms_xplan.display_cursor('哈希值',null,'typical'));
      select /* +gather_plan_statistics */ count(*) from ......

       查看执行计划
       select * from table(dbms_xplan.display_cursor9('哈希值',null,'TYPICAL,+iostats,+memstats');
     则在显示的列中,E-ROWS,A-ROW分别代表估计和真正执行的花费
   3)display_awr
     在awr报告中,有一列sql_id,
      select * from table(dbmx_xplan.display_awr('来自AWR报告中的sql_id列'));

25 阅读SQL执行计划
    1)概要部分,输出SQL ID及文本
    2) 执行计划
    3) QUERY BLOCK分为简单的SQL和复杂的SQL
        对于简单的sql,在query block部分,用:
        1---SEL$1 来表示,而象 $DEL$:删除,系统生成的名字不够人性化,可以自定义:
      select /*+ qb_name(abc) */ b1.id,b2.id from b b1,b b2

你可能感兴趣的:(oracle)