Oracle体系结构

内存结构

一、SGA
    
     select name,bytes/1024/1024||'M',resizeable from v$sgainfo ;
     NAME                              BYTES/1024/1024||'M'           RES
     ------------------------         -------- -----------------------------------
     Fixed SGA Size                     2.12664031982421875M           No 
     固定sga区:存储数据库和实例的状态信息等通用信息,不存储用户数据 内部的管理区域,进程间通信的信息;
     Redo Buffers                     3.62890625M                   No
     日志缓冲区
         redo 是sga当中一个循环使用的buffer ,存放描述数据库变化的redo entries(包含用于重建、重做和DML
         或DDL语句造成的数据变化)
         生产环境中一般设置为8-10M
         当redo buffer 记录数达到一定程度时,由LGWR进程写入重做日志
        
         先记录undo 在记录redo
        
     Buffer Cache Size                 92M                           Yes
     存储来自数据库文件的数据块副本 款大小默认8K 8192
         default pool
         keep pool
         recycle pool
     Shared Pool Size                 192M                              Yes
     共享池 -----缓存不同类型的数据
         library cache  缓存了可执行的sql和pl/sql代码
         data dictionary cache  数据字典 users privs tables columns 用户、权限、表、某个表的字段
         server result cache  服务器结果缓存,可以手动设置缓存哪些sql
         reserverd pool 解决内存碎片而无法分配内存空间的问题
         chunk 内存块 默认4M;
        
         遵循LRU算法
        
         library cache 共享SQL area 核心部分,存放执行计划和解析树
             SQL AREA
                 SQL语句文本
                 分析树语句的已编译版本
                 执行计划执行时要采取的步骤
             共享PL/SQL AREA 存放编译代码,调试代码,解析树
         data dictonsry cache
             DC_USERS  用户列表
             DC_PRIVS  权限列表
             DC_TABLES 表的列表
             DC_COLUMNS 某表的字段列表
        
         v$rowcache     查看缓存区数据
        
        
        
     Large Pool Size                  4M                               Yes
     大池
    
     大池不是因为它大而得名
    
         应用: 共享服务器的UGA
                并行执行语句中使用的消息缓冲区
                恢复管理器(RMAN) I/O从属进程的缓冲区
     Java Pool Size                     4M                               Yes
     java池
     Streams Pool Size                 0M                               Yes
     流池
     使用stream流复制的时候使用
     Shared IO Pool Size                 0M                               Yes
    
     Sort Extent Pool
         在这个表空间中创建的临时段不会在排序的结束的时候取消分配。 而是记为空闲,
         不放回空闲列表,并保留再利用。
         就是在内存中保存临时段的。
     Granule Size                     4M                               No
     Maximum SGA Size                 497.7578125M                   No
     Startup overhead in Shared Pool  84.3122100830078125M           No

    flashback buffer 按照一定时间间隔存储变化的数据
    
    
     算法 LRU least recently used 最近最少使用
    
    
    
    
     oracle会将访问最不频繁的block提供出去
    
     搜索buffer block 的步骤
    
    
         1.根据进程需要访问的文件号、块号,计算hash值
         2.根据hash值在hash表中找到hash bucket
         3.搜索bucket后的CBC(cache buffers chains 缓冲链)链表,查找哪个block header是需要的
             目标block header
         4.找到目标block header,从中读取buffer的 block address
         5.按照block address 访问buffer
        
        
     CR块实验
     select owner,object_name,object_id,data_object_id,object_type from dba_objects where object_name='EMP';

        OWNER        OBJECT_NAME   OBJECT_ID DATA_OBJECT_ID  OBJECT_TYPE

        SCOTT        EMP             13904        13904        TABLE

    select BLOCK#,STATUS,OBJD from v$bh where OBJD=13904;

        BLOCK# STATUS        OBJD
         ------ ---------- ----------
            144 cr           13904
            144 xcur        13904
            145 xcur        13904

   
     当我们修改数据时,如
     update emp set sal=sal+1000;
    
     select BLOCK#,STATUS,OBJD from v$bh where OBJD=13904;

        BLOCK# STATUS        OBJD
     ---------- ---------- ----------
            144 cr           13904
            144 xcur        13904
            145 cr           13904
            145 xcur        13904

    oracle会生成相应块的block#的CR块来保证一致性读
        
     最高会创建5个CR块
    
     解析:查看sql语句的语法,语义部分,将这个sql做hash运算,变成一段hash代码,用这个hash代码去shared pool
     里面
           的library cache找
           查找是否有相同的hash值
           如果存在,说明这个语句被执行过,直接重用即可;
           如果不存在,需要解析这条语句
    
     硬解析和软解析
         硬解析:oracle根据这条语句的具体信息,找出一个最优化的执行计划,并将该执行计划放到shared Pool里
         的library cache中
         软解析:oracle倾向于使用已经解析过,存放在library cache中的代码,这个重用的过程称之为软解析;
        
         sql最好使用硬解析
        
     查看硬解析的数据字典
    
         select name,value from v$sysstat where name like 'parse%';

                NAME                                      VALUE
                 ---------------------------------------------------------------- ----------
                 parse time cpu                                157
                 parse time elapsed                            273
                 parse count (total)                            3370
                 parse count (hard)                            1134
                 parse count (failures)                        7
                 parse count (describe)                        12

               
                
二、PGA (只讨论专有模式 dedicated mode)
    
     PGA是一个非共享的内存区域,包含专门供server process进程使用的数据和控制信息
    
     oracle会为每一个用户的请求,分配一个serverprocess 进程
    
     PGA 内容
             1.Sort Area 排序
             2.Hash Area 用于多表连接
             3.Bitmap Merge Area 位图合并
                     SQL work area 以上
             4.session memory
             5.Persistent Area
             6.Runtime Area
                     5、6 称为 private SQL area
                    
         作用:
             1.保存用户的连接信息和绑带变量的信息,查询执行计划状态信息;
             2.保存用户权限信息,当用户和数据库建立会话的时候 server process 会将用户的相关权限查询出来
             3.当需要排序的时候,或者是要建立大的索引的时候,会在PGA 的sort area进行排序
                 如果内存空间放不下需要排序的数据大小,溢出部分会在临时表空间内完成
     UGA user global area
         UGA是与某个用户会话相关联的内存区,UGA是为会话变量分配的会话内存,如登录信息和数据库会话所需的
         其他信息。
        
进程结构
     一、后台进程
         1.client process
             用户使用一个应用程序,如sqlplus 连接数据库,产生的操作系统进程,就是客户端进程;
         2.server process
             用来处理相应的用户请求
            
             作用;
                 1)解析和运行应用程序执行提交的sql语句,包括创建执行计划;
                 2)执行PLSQL代码
                 3)从数据文件读取数据块到 database buffer pool中
                 4)返回结果
                
     二、详细:
         查询后台进程
             select name,description from v$bgprocess; 查看后台进程

        NAME  DESCRIPTION
         ----- ----------------------------------------------------------------
         PMON  process cleanup                           process monitor process 进程监视器
             作用:
                 1.负责监视其他进程,如果其他的进程出现异常关闭,其负责进程恢复
                 2.负责清理客户端进程所对应的server process 的数据库缓存和释放资源
                 3.负责数据库实例的动态注册 每一分钟进行一次 数据库将自己的信息告知给监听器
                    
         VKTM  Virtual Keeper of TiMe process
                 时间管理
                
         GEN0  generic0
         DIAG  diagnosibility process
         DBRM  DataBase Resource Manager
         VKRM  Virtual sKeduler for Resource Manager
         RSMN  Remote Slave Monitor
         PING  interconnect latency measurement
         FMON  File Mapping Monitor Process
         PSP0  process spawner 0
         ACMS  Atomic Controlfile to Memory Server
         DSKM  slave DiSKMon process
         DIA0  diagnosibility process 0
         LMON  global enqueue service monitor
         LMD0  global enqueue service daemon 0
         LMS0  global cache service process 0

        RMS0  rac management server
         LMHB  lm heartbeat monitor
         MMAN  Memory Manager
         DBW0  db writer process 0
                                 35
              database writer process 数据库写进程 负责将database buffer pool 里面的脏块写回数据文件
                 数据库写进程一般一个就够了,但情况不同可以进行调节;
                 最多35个
                
             show parameter writer

            NAME                     TYPE     VALUE
             ------------------------------------ ----------- ------------------------------
             db_writer_processes             integer     1
    
             触发条件:
                 1.server process 扫描一定数量的buffer之后,仍然没有找到可用的buffer(40%)
                 2.根据检查点信息,定期触发
                 3.发生drop或者truncate行为
                 4.表空间置为read only;
                 5.表空间 offline
                 6.当begin backup的时候
                 7.alter system checkpoint;
            
             
                                
         MRP0  Managed Standby Recovery
         RECO recovery process
             负责分布式数据库的分布式事务的恢复;(需要一个数据库对象dblink)
             操作的数据来源于两个或多个数据库,此时需要dblink将两个数据库连接
             网络中断后事务会中断,RECO进程负责恢复此类事务
         ARC0  Archival Process 0
                             total 30
         NSA1  Redo transport NSA1
         LGWR  Redo etc.
             log writer process
             负责管理日志缓冲区,将一段连续的日志缓冲区的内容写到日志文件
            
             触发条件:
                 1.用户提交
                 2.日志切换
                 3.每隔3s触发一次
                 4.日志缓冲区达到1/3时,或者容量达到1M
                 5.DBWn进程触发的时候,首先触发LGWR
                
             注意:只有将redo log buffer 里的日志信息写回到redo log,commit命令才能提交;
            
         LCK0  Lock Process 0 检查点   (队列概念)
         CKPT  checkpoint
             checkpoint process
             检查点进程会按照时间先后顺序来更新控制文件和数据头文件的检查点信息(SCN)
             还负责驱动DBWn进程区写脏块
                 checkpoint 检查点是一个事件
                     他是一个重要的机制,一致性的数据库关闭,实例恢复,以及数据库的正常运行
                     用来确定实例恢复所需要的redo block的起始位置
                     正常运行中,用于控制数据库的buffer 和数据文件的同步行为
                    
                     意义:
                         1.保证数据一致性,定期让脏块和数据文件按照时间顺序同步;
                         2.推进数据库状态,减少实例恢复时间,实例崩溃后已经提交的但没有邂逅数据文件的
                         块需要实例恢复
                         3.定期通知DBWn将脏块写回数据文件
                     出现时机
                         1.一致性关库;
                         2.手动发生完全检查点 alter system checkpoint;
                         3.日志自动切换(完全检查点)
                         4.热备份
                         5.表空间和数据文件检查点
                         将某个表空间或者数据文件对应的脏块写回数据文件;
                             出现的时机:
                                 表空间read only;
                                 表空间offline normal;
                                 shrinking a data file;
                                 ALTER TABLESPACE BEGIN BACKUP
                     完全检查点:
                             一次性将所有redo buffer 写入磁盘
                                 触发条件:   
                                     alter system checkpoint
                                     shutdown(shu abort 除外)
                                     日志切换不做完全检查点
                     增量检查点
                             将脏块按时间排成一个队列(链表),每次写一部分;
                             目的是为了避免一次性大量的磁盘写入,oracle每3s触发一次增量检查点
    
                     检查点队列
                         checkpoint queue
                             检查点队列连接脏块,按照块第一次脏的时间进行排序
         ABMR  Auto BMR Background Process
         LSP1  Dictionary build process for Logical Standby
         LSP0  Logical Standby
         LSP2  Set Guard Standby Information for Logical Standby
         CTWR  Change Tracking Writer
         RVWR  Recovery Writer
         FBDA  Flashback Data Archiver Process
         ARCn 归档进程
             当在线重做日志发生切换后,如果数据库是处于归档模式,
             那么ARCn进程负责将在线重做日志拷贝到归档位置;
             而且ARCn进程,还负责向standby database传递日志;
        
         SMON  System Monitor Process
                 系统监视器进程
                 负责一系列的清理职责
                     1.执行实例恢复
                     2.恢复中断的事务
                     3.清理不再使用的临时段 清理undo表空间
                     4.字典管理的表空间中负责回收连续的空闲的区(基本不再使用)
    
         SMCO  Space Manager Process
         RECO  distributed recovery
         GTX0  Global Txn process 0 事务
                                 total 20
         CJQ0  Job Queue Coordinator 工作队列
         RCBG  Result Cache: Background
         EMNC  EMON Coordinator
         QMNC  AQ Coordinator
         DMON  DG Broker Monitor Process
         RSM0  Data Guard Broker Resource Guard Process 0
         NSV0  Data Guard Broker NetSlave Process 0
         NSV1  Data Guard Broker NetSlave Process 1
         INSV  Data Guard Broker INstance SlaVe Process
         FSFP  Data Guard Broker FSFO Pinger
         RBAL  ASM Rebalance master
         ARB0  ASM Rebalance 0
         ASMB  ASM Background
         MARK  mark AU for resync koordinator
         GMON  diskgroup monitor
         VBG0  Volume BG 0
         VDBG  Volume Driver BG
         VMB0  Volume Membership 0
         ACFS  ACFS CSS
         MMON  Manageability Monitor Process
                 管理监视进程
                 每隔一定时间间隔(默认是一个小时),会将oracle负载情况做一个报告
    
         MMNL  Manageability Monitor Process 2
         XDMG  cell automation manager
         XDWK  cell automation worker actions
                
        
数据库结构

    一、物理存储结构
         核心文件:
             control file
                 show parameter control_file
                 select value,name from v$parameter where name like 'control_file';
                 select * from v$controlfile;
                     TATUS    NAME                                 IS_ BLOCK_SIZE FILE_SIZE_BLKS
                 ------- ------------------------------------------------------------ --- ---------- --------------
                     /u01/app/oracle/oradata/ykyk/control01.ctl             NO       16384           612
                     /u01/app/oracle/fast_recovery_area/ykyk/control02.ctl         NO       16384           612
                     视图:v$database、 v$log、 v$logfile、 v$datafile、 v$tempfile
            
                 控制文件最多可以有八个;   
                
                 进程读的总是第一个控制文件,当第一个控制文件损坏时,读写操作都会出错,当第一个控制
                 文件之外的其他控制文件出问题时,只有一写操作才会出错,读操作正常。
                
                 增加控制文件:
                     alter system sewt control_files='to/path/control_file.ctl',scope=spfile;
                
                
             data file
                 类型:
                     系统数据,oracle内部元数据信息
                     用户数据:用户自己业务相关的数据
                 查看数据文件信息
                     select file_id,file_name from dba_data_files  order by 1;

                       FILE_ID FILE_NAME
                     ---------- --------------------------------------------------
                          1 /u01/app/oracle/oradata/ykyk/system01.dbf
                          2 /u01/app/oracle/oradata/ykyk/sysaux01.dbf
                          3 /u01/app/oracle/oradata/ykyk/undotbs01.dbf
                          4 /u01/app/oracle/oradata/ykyk/users01.dbf
                          5 /u01/app/oracle/oradata/ykyk/example01.dbf
                          6 /u01/app/oracle/oradata/oracle11g/tbs01.dbf
                          7 /u01/app/oracle/oradata/oracle11g/tbs02.dbf
                          8 /u01/app/oracle/oradata/oracle11g/undotbs2.dbf
                          9 /u01/app/oracle/oradata/oracle11g/tbs03.dbf
                    
                     select file#,name from v$datafile order by 1;

                         FILE# NAME
                     ---------- ----------------------------------------------------------------------------------------------------
                          1 /u01/app/oracle/oradata/ykyk/system01.dbf
                          2 /u01/app/oracle/oradata/ykyk/sysaux01.dbf
                          3 /u01/app/oracle/oradata/ykyk/undotbs01.dbf
                          4 /u01/app/oracle/oradata/ykyk/users01.dbf
                          5 /u01/app/oracle/oradata/ykyk/example01.dbf
                          6 /u01/app/oracle/oradata/oracle11g/tbs01.dbf
                          7 /u01/app/oracle/oradata/oracle11g/tbs02.dbf
                          8 /u01/app/oracle/oradata/oracle11g/undotbs2.dbf
                          9 /u01/app/oracle/oradata/oracle11g/tbs03.dbf

                        
                         
             online redo log file
                 在线重做日志是用于recovery的最重要的结构;
                 里面包含了两个或者更多的预分配的文件,来存放数据库的变化情况;
                 记录了数据文件的变化;
                 以组为单位;
                 组的大小决定里面每个成员的大小;
                 日志组的每个成员之间是镜像关系;
                 每个组可以有多个日志文件;生产中每组两个
                
                 作用;
                     1.系统崩溃后的实例恢复
                     2.通过备份恢复数据文件之后恢复介质
                     3.备用数据库处理;
                     4.通过日志挖掘实现数据恢复
                
                 日志组切换:
                     增加日志组:
                         alter database add logfile group 4 '/u01/app/oracle/oradata/oracle11g/redo04.log' size 50m;
                     增加成员:
                         alter database add logfile member '/u01/app/oracle/oradata/oracle11g/redo042.lgo' to group 4;
                     删除日志组成员:
                         alter database drop logfile member '/u01/app/oracle/oradata/oracle11g/redo042.log' ;
                     删除日志组:
                         alter database drop logfile group 4;
                        
                 注意: 当前状态和active状态的日志组的成员或者整个日志组不能被删除;
                        当日志组是 active的状态的时候,如果有多个成员,可以删除其中的成员,
                        但是不可以将整个组删除(删除时会报错);
                        日志组的个数至少2个;
                        日志组成员的个数至少一个,即第一个成员不能删除,要和组一并删除
                        删除日志组或者是成员的时候,其实是删除了该日志组或是成员在数据字典里的信息,
                        实际上的在磁盘上的物理文件没有被删除,如果重建同名的日志组会报错,
                        需要先删除该文件,然后在创建.
                 日志切换:
                     自动切换:日志组被写满后,自动发生切换
                     手动切换:alter system switch logfile;
                    
                     改变日志组的状态:
                         alter system flush buffer_cache/alter system checkpoint> inactive
                     查看日志切换时间
                    
                         select sequence#,first_time from v$log_history order by  1 ;
                    
                     查看日志组大小
                         select group#,bytes/1024/1024 from v$log;
                    
                     切换频率:8-10分钟 业务繁忙
                                 20 分钟 业务空闲时间
            
            
            
         辅助性的非关键性文件:
             password files
                     验证具有sysdba、sysoper权限的用户登录时的密码校验;
                     保存超级用户sysdba的用户名和口令;
                     超级用户的密码审核不能依赖数据库内部;
                     超级用户,具有启动数据库的能力,如果数据库没有启动,就无法验证
                 密码文件生成命令:
                     orapwd file=orapw+sid password=password_name
            
             parameter files
                 作用; 控制数据库的属性和行为的一些设置参数
                 位置;$ORACLE_HOME
                 类型:静态 pfile
                       动态 spfile
            
                 搜索规则:
                     spfile+sid.ora --> spfile.ora --> init+sid.ora
                 视图:
                     select name,values,isses_modifiable,issys_modifiable
                     from v$parameter;
                 转换;
                     create pfile from spfile;
                     create spfile from pfile;
                     create pfile from memory;
                 查看启动参数:
                     show parameter spfile
                     如果不存在,就是静态参数文件
                
             archived redo log file 15天或者30天删除一次
                 在线重做日志的运行机制是循环使用,会导致日志被覆盖,为了保证数据不被覆盖
                 更长时间的保留,那么在线重做日志切换之后,要将写满的在线重做日志,保存在另一个
                 存储位置
                 注意:
                     ARCn这个进程只负责归档操作;
                    
                 如何查询当前数据库的归档模式?
                     SYS@lyl>archive log list;
                         Database log mode           Archive Mode
                         Automatic archival           Enabled
                         Archive destination           /u01/app/oracle/arch2 默认存放arch日志路径在flash area
                         Oldest online log sequence     135
                         Next log sequence to archive   137 下一个要被归档的日志序列号
                         Current log sequence           137  当前正在归档的序列号
                     select log_mode from v$database;

                        LOG_MODE
                         ------------
                         ARCHIVELOG

                       
                 打开归档模式:
                     alter database archivelog;
                    
                 归档日志要放在较快的存储介质上;如果Current log sequence大于Next log sequence to archive说明归档速度慢;
                 如何提高日志组归档速度:减少日志组切换时间
                 如果要求归档,归档不成功数据库会hang住,等归档完成,才会正常运行;

                查看归档位置:
                     show parameter log_archive_dest_
                 数据字典:
                     v$archived_log
                 归档日志路径:
                     select sequence#,name from v$archived_log order by 1;

               
             alter log and trace file
                 警告日志文件
                     grep  -i ERR alter_<ORACLE_SID>.log 关注报错信息
            
                 跟踪文件的类型
                     1、每个服务器和后台进程可以定期写一个相关的跟踪文件;
                     2、与后台进程相关的trace file;
                         orcl11g_lgwr_22285.trc        --实例名_进程名_PID
                         orcl11g_ckpt_22077.trc
        
             backup file
        
        
     二、逻辑存储结构
         1. data block
             块 默认8192
             [root@ljr ~]# dumpe2fs -h /dev/sda5|grep "Block size"
                 dumpe2fs 1.41.12 (17-May-2010)
                 Block size:               4096
             根据业务需求配置块的大小需求,2k\4k\8k\16k\32k
            
             块的开销 block header 描述这个数据块的基本信息,包括磁盘地址,块所属段的类型
                 对于事物管理的块,块头包含有当前活动的和历史事物信息
            
             oracle ITL(事务槽):
 
                 ITL描述:
                 
                 ITL(Interested Transaction List)是Oracle数据块内部的一个组成部分,
                 位于数据块头(block header),itl由xid,uba,flag,lck和scn/fsc组成,
                 用来记录该块所有发生的事务。
                 
                 一个itl可以看作是一条事务记录,如果这个事务已经提交,
                 那么这个itl的位置就可以被反复使用了。
                 
                 因为itl类似记录,所以也叫itl槽位。
                 
                 如果一个事务一直没有提交,那么,这个事务将一直占用一个itl槽位,
                 itl里面记录了事务信息,回滚段的入口,事务类型等等。如果这个事务已经提交,
                  那么,itl槽位中还保存的有这个事务提交时候的SCN号。
                 
                 
                 ITL个数其最小值为1,
                 由参数initrans控制(由于兼容性的原因,oracle会在对象的存储块分配两个itl,
                 所以initrans的最小值实际上为2),最大值为255,由参数maxtrans控制,
                 最大值参数在10g以后不能被修改,
                 
                 itl是block级的概念,一个itl占用块46B的空间,
                 参数initrans意味着块中除去block header外一部分存储空间无法被记录使用(46B*initrans),
                 
                 当块中还有一定的free space时,oracle可以使用free space构建itl供事务使用,
                 如果没有了free space,那么,这个块因为不能分配新的itl,所以就可能发生itl等待。
                 
                 如果在并发量特别大的系统中,最好分配足够的itl个数,其实它并浪费不了太多的空间,
                 或者,设置足够的pctfree,保证itl能扩展,但是pctfree有可能是被行数据给消耗掉的,
                 如update,所以,也有可能导致块内部的空间不够而导致itl等待。
                 
                 ===============================================
                 事务槽里面主要包括:
                       Itl:事务槽编号
                     Xid:指向事务表
                     Uba:指向具体的回滚块
                      Flag:是否已提交
                      Lck:锁定的标志
                      Scn/Fsc:提交的时间点
             table directory 表目录 描述这个数据块存放的是那个表的信息
                 对于堆表 这个目录包含其行存储在该块中的表的元数据,多个表可以将行存储在相同的块中
            
             row directory
                 行记录 行的描述信息,这是一个指针数组,指向块中数据部分的行
                
             rowid oracle的记录的具体地址,每一行记录都有自己唯一rowid
                 rowid,也是表中的一个伪列,oracle数据库使用一个rowid来标识一个行;
                    
                 rowid 包括 数据对象编号,相对文件的编号,块的编号,行号
                
                 select rowid from test where id=1;

                    ROWID
                     ------------------
                     AAASydAAKAAAACXAAA
                    
                    
             获取对象的创建语句
                 SYS@ykyk > select dbms_metadata.get_ddl('TABLE','TEST','SYS') from dual;

                    DBMS_METADATA.GET_DDL('TABLE','TEST','SYS')
                     --------------------------------------------------------------------------------

                      CREATE TABLE "SYS"."TEST"
                        (    "ID" NUMBER(*,0)
                        ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
                      NOCOMPRESS LOGGING
                       STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
                       PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
                       BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
                       TABLESPACE "TBS04"
             行迁移
             行链接 具体概念不解释
                    
                     如何消除行链接
                         将表迁移到有更大blocksize的表空间
                         拆分表字段到多个表中

                        如何消除行迁移
                         使用shrink或move进行段重组。
                         导出再导入段


         2.extent 
             区是oracle数据库存储空间分配的逻辑单元,由连续的oracle数据块组成;
             连续的效果是能够减少磁盘寻道次数,提高读取的效率。
             oracle给一个表分配段的时候是以区为单位
            
             查看表相关信息
             select
               (select name from v$datafile
               where file#=e.file_id) file_name,
               file_id,block_id,blocks
               from dba_extents e
               where owner='SYS' and segment_name='TEST';

              FILE_NAME                                     FILE_ID   BLOCK_ID      BLOCKS

                /u01/app/oracle/oradata/oracle11g/tbs04.dbf   10      144           8

            分配形式: auto allocate;自动分配
        
        
         3.segment 段
             每一个数据对象,都会对应一个存储单元;
             同一个数据对象所占用的存储空间就是一个段
            
            
             select segment_name,segment_type from dba_segments order by 1;
        
             oracle10g创建一个新表 默认分配8个块,64k空间
             oracle11g 不分配
            
             SYS@orcl11g> show parameter defer

                NAME                                    TYPE        VALUE
                 ------------------------------------ ----------- -------------
                 deferred_segment_creation  boolean     TRUE
                
                 延迟段的创建;
                 当创建一个新表之后,只有向表中插入数据,才会分配空间,创建段;
                 需要使用表空间的权限,grant unlimited tablespace to 用
        
        
        
         4.tablespace 表空间
        
             表空间是段的存储容器,在屋里层面,有一个或者多个数据文件或者临时文件组成;
             用于存放表、索引、回滚段等对象的磁盘存储空间
            
             select file_id,tablespace_name,file_name,bytes,status,autoextensible,
             increment_by,maxbytes
             from dba_data_files
             order by 2;

               FILE_ID TABLESPACE_NAME          FILE_NAME                          BYTES STATUS      AUT INCREMENT_BY   MAXBYTES
             ---------- ------------------------------ -------------------------------------------------- ---------- --------- --- ------------ ----------
                  5 EXAMPLE              /u01/app/oracle/oradata/ykyk/example01.dbf          362414080 AVAILABLE YES        80 3.4360E+10
                  2 SYSAUX              /u01/app/oracle/oradata/ykyk/sysaux01.dbf          597688320 AVAILABLE YES          1280 3.4360E+10
                  1 SYSTEM              /u01/app/oracle/oradata/ykyk/system01.dbf          796917760 AVAILABLE YES          1280 3.4360E+10
                  6 TBS01              /u01/app/oracle/oradata/oracle11g/tbs01.dbf         1048576000 AVAILABLE NO         0        0
                  7 TBS02              /u01/app/oracle/oradata/oracle11g/tbs02.dbf         1048576000 AVAILABLE NO         0        0
                  9 TBS03              /u01/app/oracle/oradata/oracle11g/tbs03.dbf          104857600 AVAILABLE NO         0        0
                 10 TBS04              /u01/app/oracle/oradata/oracle11g/tbs04.dbf           52428800 AVAILABLE NO         0        0
                  3 UNDOTBS1              /u01/app/oracle/oradata/ykyk/undotbs01.dbf          644874240 AVAILABLE YES           640 3.4360E+10
                  8 UNDOTBS2              /u01/app/oracle/oradata/oracle11g/undotbs2.dbf      524288000 AVAILABLE NO         0        0
                  4 USERS              /u01/app/oracle/oradata/ykyk/users01.dbf          889978880 AVAILABLE YES           160 3.4360E+10

            查看当前的表空间的信息            --dba_tablespaces

                select tablespace_name,block_size,STATUS,contents,
                 extent_management,segment_space_management,bigfile
                 from dba_tablespaces
                 order by 1;
        
                                     TABLESPACE_NAME            BLOCK_SIZE STATUS    CONTENTS  EXTENT_MAN SEGMEN BIG
                     ------------------------------ ---------- --------- --------- ---------- ------ ---
                     EXAMPLE                  8192 ONLINE    PERMANENT LOCAL     AUTO    NO
                     SYSAUX                     8192 ONLINE    PERMANENT LOCAL     AUTO    NO
                     SYSTEM                     8192 ONLINE    PERMANENT LOCAL     MANUAL NO
                     TBS01                     8192 ONLINE    PERMANENT LOCAL     AUTO    NO
                     TBS02                     8192 ONLINE    PERMANENT LOCAL     AUTO    NO
                     TBS03                     8192 ONLINE    PERMANENT LOCAL     AUTO    NO
                     TBS04                     8192 ONLINE    PERMANENT LOCAL     AUTO    NO
                     TEMP                     8192 ONLINE    TEMPORARY LOCAL     MANUAL NO
                     UNDOTBS1                 8192 ONLINE    UNDO      LOCAL     MANUAL NO
                     UNDOTBS2                 8192 ONLINE    UNDO      LOCAL     MANUAL NO
                     USERS                     8192 ONLINE    PERMANENT LOCAL     AUTO    NO

            表空间使用率:
            
                 with
                     free as (
                             select tablespace_name f1,sum(nvl(bytes,0)) f2 from dba_free_space group by tablespace_name),
                     used as (
                             select tablespace_name u1, sum(bytes) u2 from dba_data_files group by tablespace_name) ,
                     ext_mgr as (
                        select tablespace_name e1,contents e2,extent_management e3 from dba_tablespaces),
                     auto as (
                        select tablespace_name a1,autoextensible a2 from dba_data_files
                     )
                     select free.f1 T_name,ext_mgr.e2 E_content,ext_mgr.e3 E_management,lpad(auto.a2,4) Auto,round(used.u2/1024/1024,2) Total_M,
                     round((used.u2-free.f2)/1024/1024,2) "Used_M", substr((used.u2-free.f2)/used.u2*100,1,5)||'%' "Percent_Used"
                     from free,used,ext_mgr,auto
                     where free.f1=used.u1 and used.u1=ext_mgr.e1 and ext_mgr.e1=auto.a1
                     order by 7 desc
                     /
        
                     ---------- ---------------------
                     SYSAUX                   PERMANENT LOCAL         YES            570     537.81 94.35%
                     SYSTEM                   PERMANENT LOCAL         YES            760      714.5 94.01%
                     EXAMPLE                PERMANENT LOCAL         YES         345.63     310.13 89.72%
                     UNDOTBS1               UNDO     LOCAL         YES            615     470.6
        
             查询每个表空间的容量            --包含的所有数据文件的总和
                 select tablespace_name,sum(bytes) from dba_data_files
                    group by tablespace_name 
                     order by tablespace_name
                 TABLESPACE_NAME            SUM(BYTES)
                     ------------------------------ ----------
                     EXAMPLE             362414080
                     SYSAUX                597688320
                     SYSTEM                796917760
                     TBS01                   1048576000
                     TBS02                   1048576000
                     TBS03                104857600
                     TBS04                 52428800
                     UNDOTBS1            644874240
                     UNDOTBS2            524288000
                     USERS                889978880

            添加表空间
                 create tablespace tbs04
                 datafile '/u01/app/oracle/oradata/orcl11g/tbs04.dbf'
                 size 20m
                 extent management local autoallocate; 自动管理;
        
             undo表空间
                 select * from v$rollname;
                 查看undo段信息
             undo段的状态信息:
              desc v$rollstat;
                 名称                                      是否为空? 类型 
                  ----------------------------------------- -------- ---------------------------- 
                  USN                                                NUMBER                  回退段号 
                  LATCH                                              NUMBER                   
                  EXTENTS                                            NUMBER                  回退段中的区数 
                  RSSIZE                                             NUMBER                  回退段以字节极的尺寸 
                  WRITES                                             NUMBER                  写到回退段的字节数 
                  XACTS                                              NUMBER                  活动的事务处理数 
                  GETS                                               NUMBER                  标题获得的数目 
                  WAITS                                              NUMBER                  标题等待的数目 
                  OPTSIZE                                            NUMBER                  回退段的最佳尺寸 
                  HWMSIZE                                            NUMBER                  回退段尺寸的高水位标记 
                  SHRINKS                                            NUMBER                  回退段尺寸减少的倍数 
                  WRAPS                                              NUMBER                  回退段缠绕的倍数 
                  EXTENDS                                            NUMBER                  回退段段尺寸扩展的倍数 
                  AVESHRINK                                          NUMBER                  平均收缩尺寸 
                  AVEACTIVE                                          NUMBER                  活动区随时间平均的当前尺寸 
                  STATUS                                             VARCHAR2(15)                        回退段状态 
                  CUREXT                                             NUMBER                  当前区 
                  CURBLK                                             NUMBER                  当前块
             临时表空间
                
                 1.增加临时文件
            
                 SYS@orcl11g> alter tablespace temp2
                 add tempfile '/u01/app/oracle/oradata/orcl11g/temp202.dbf'
                 size 50m;

                2.重置文件的size
                
                 SYS@orcl11g> alter database tempfile
                 '/u01/app/oracle/oradata/orcl11g/temp202.dbf'
                 resize 55m;

                3.自动扩展
                
                 SYS@orcl11g> alter database
                 tempfile '/u01/app/oracle/oradata/orcl11g/temp202.dbf'
                 autoextend on next 5m maxsize 200m;

                4.删除临时文件
                
                 SYS@orcl11g> alter tablespace temp2
                 drop tempfile '/u01/app/oracle/oradata/orcl11g/temp2.dbf';

                5.删除临时表空间
                
                 SYS@orcl11g> drop tablespace temp2;


        
        
         200万  400M左右
        
         400万 一个G

转载于:https://www.cnblogs.com/ykyk1229/p/8916147.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值