shrink_shrinkwrap - CSDN
精华内容
参与话题
  • ORACLE 收缩表(shrink)简介

    千次阅读 2019-01-18 14:57:46
    shrink命令用于收缩表,降低高水位线,减少表所使用的块的个数. 特性: 1)可在线收缩表,基本不影响DML 2)收缩表的同时自动维护索引 3)不需要额外的磁盘空间   shrink同时全减少高水位线以上和以下未使用的空间....

    shrink命令用于收缩表,降低高水位线,减少表所使用的块的个数.

    特性:

    1)可在线收缩表,基本不影响DML

    2)收缩表的同时自动维护索引

    3)不需要额外的磁盘空间

     

    shrink同时全减少高水位线以上和以下未使用的空间.数据库会压缩段(表),将水位线降低到合适的位置,然后释放回收的空间.

    shrink命令需要开启row movement,因为在收缩表时,行的位置可能改变.

    shrinK命令只能用在自动管理的段空间(automatic segment space mangement)的表空间上.

     

    以下段不支持shrink命令:

    1)IOT mapping 表(?)

    2)rowid创建的物化视图的基表

    3)表上的函数索引

    4)securefile lobs

    5)压缩表

     

    shrink命令有两种执行方式:

    1)直接执行alter table shirnk space;

    2)先执行alter table shirnk space compact; 再执行alter table shirnk space.

    alter table shirnk space 会直接整理块碎片压缩表并重置高水位线.

    compact的作用是整理块碎片并压缩表,然后把压缩后的信息写在磁盘上,再次执行alter table shirnk space时, 重置高水位线并释放回收的空间.这样做的好处是避免大量锁定对大事务产生影响.

     

    在执行shrink命令时加上cascade,会同时收缩表相关的对象,如索引.

     

    例子:

    Shrink a table and all of its dependent segments (including BASICFILE LOB segments):

    ALTER TABLE employees SHRINK SPACE CASCADE;
    

    Shrink a BASICFILE LOB segment only:

    ALTER TABLE employees MODIFY LOB (perf_review) (SHRINK SPACE);
    

    Shrink a single partition of a partitioned table:

    ALTER TABLE customers MODIFY PARTITION cust_P1 SHRINK SPACE;
    

    Shrink an IOT index segment and the overflow segment:

    ALTER TABLE cities SHRINK SPACE CASCADE;
    

    Shrink an IOT overflow segment only:

    ALTER TABLE cities OVERFLOW SHRINK SPACE;

    来源: <http://docs.oracle.com/cd/E11882_01/server.112/e25494/schema.htm#ADMIN10161>

     

     

     

     

     

    展开全文
  • 收缩表段(shrink space)

    万次阅读 2011-07-25 09:26:27
    当表被创建后,随着记录的不断插入,组成表的区间会被填满,如果启用了自动扩展,则当区间填满后,会分配新的区间。假定高水 位线随着记录的增加从最左端往右端来移动,当到底部区间的尾端时,则新的区间将会被分配...
    --====================
    -- 收缩表段(shrink space)
    --====================


    一、表的增长方式
        当表被创建后,随着记录的不断插入,组成表的区间会被填满,如果启用了自动扩展,则当区间填满后,会分配新的区间。假定高水
        位线随着记录的增加从最左端往右端来移动,当到底部区间的尾端时,则新的区间将会被分配。
        
    二、表可收缩的原理
        随着记录的增加高水位线不断的右移,记录的删除不会导致高水位线往回(左)移动
        删除记录后的空闲空间(高水位线左侧)尽管可以使用,但其稀疏性导致空间空闲
        注:完整的表扫描所耗费的时间不会因为记录的减少(删除)而减少

    三、使用 alter table tbname shrink space 来收缩表段
        1. 实现原理
            实质上构造一个新表(在内部表现为一系列的DML操作,即将副本插入新位置,删除原来位置的记录)
            靠近末尾处(右端)数据块中的记录往开始处(左端)的空闲空间处移动(DML操作),不会引起DML触发器
            当所有可能的移动被完成,高水位线将会往左端移动(DDL操作)
            新的高水位线右边的空闲空间被释放(DDL操作)
            
        2. 实现前提条件
            必须启用行记录转移(enable row movement)
            仅仅适用于堆表,且位于自动段空间管理的表空间(堆表包括:标准表,分区表,物化视图容器,物化视图日志表)
        
        3. 不能实现收缩的表
            群集表
            具有LONG类型列的表
            LOB段(尽管表本身可以被缩小),注,10gR2以后版本支持对LOB段的收缩
            具有基于提交的物化视图的表(因为禁用了触发器)
            具有rowid物化视图的表(因为rowid发生了变化)
            IOT映射表IOT溢出段
            索引基于函数的表
            未启用行记录转移的堆表
            
        4. 段收缩的优点
            提高缓存利用率,提高OLTP的性能
             减少磁盘I/O,提高访问速度,节省磁盘空间
             段收缩是在线的,索引在段收缩期间维护,不要求额外的磁盘空间
             
        5. 两个选项
            cascade:缩小表及其索引,并移动高水位线,释放空间
            compact:仅仅是缩小表和索引,并不移动高水位线,不释放空间
            alter table tbname shrink space 相当于带cascade参数

    四、实战演习

    1. 查看需要收缩的表段的基本情况,此处为表big_table   
    SQL> col SEGMENT_NAME format a20                                                                                       
    SQL> select OWNER,SEGMENT_NAME,BYTES/1024/1024,BLOCKS from dba_segments                                                
      2  where owner='SCOTT' and SEGMENT_NAME='BIG_TABLE';                                                                 
                                                                                                                           
    OWNER                          SEGMENT_NAME         BYTES/1024/1024     BLOCKS                                         
    ------------------------------ -------------------- --------------- ----------                                         
    SCOTT                          BIG_TABLE                        120      15360                                         
                                                                                                                           
    SQL> select table_name,blocks,empty_blocks from dba_tables                                                             
      2  where table_name='big_table' and owner='scott';    -->未更新统计信息前BLOCKS,EMPTY_BLOCKS列为空                  
                                                                                                                           
    TABLE_NAME                         BLOCKS EMPTY_BLOCKS                                                                 
    ------------------------------ ---------- ------------                                                                 
    BIG_TABLE                                                                                                              
                                                                                                                           
    SQL> exec dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=>'BIG_TABLE',estimate_percent=>30);                   
                                                                                                                           
    PL/SQL procedure successfully completed.                                                                               
                                                                                                                           
    SQL> select TABLE_NAME,BLOCKS,EMPTY_BLOCKS from dba_tables                                                             
      2  where TABLE_NAME='BIG_TABLE' and owner='SCOTT';                                                                   
                                                                                                                           
    TABLE_NAME                         BLOCKS EMPTY_BLOCKS                                                                 
    ------------------------------ ---------- ------------                                                                 
    BIG_TABLE                           14590            0   -->使用gather_table_stats时不会统计EMPTY_BLOCKS块             
                                                                                                                           
    SQL> analyze table big_table compute statistics;         -->使用analyze更新统计信息后EMPTY_BLOCKS得到数据              
                                                                                                                           
    Table analyzed.                                                                                                        
                                                                                                                           
    SQL> select TABLE_NAME,BLOCKS,EMPTY_BLOCKS from dba_tables                                                             
      2  where TABLE_NAME='BIG_TABLE' and owner='SCOTT';                                                                   
                                                                                                                           
    TABLE_NAME                         BLOCKS EMPTY_BLOCKS                                                                 
    ------------------------------ ---------- ------------                                                                 
    BIG_TABLE                           14590          770                                                                 
                                                                                                                           
    SQL> set serveroutput on;                                                                                              
    SQL> exec show_space('BIG_TABLE','SCOTT');                -->使用show_space过程或的BIG_TABLE上的空间分配信息           
    Unformatted Blocks .....................               0                                                               
    FS1 Blocks (0-25) ......................               0  -->空闲度为0-25%的块数。FS1,FS2,FS3,FS4为空闲度所占的百分比  
    FS2 Blocks (25-50) .....................               0                                                               
    FS3 Blocks (50-75) .....................               0                                                               
    FS4 Blocks (75-100).....................               0                                                               
    Full Blocks ............................          14,427                                                               
    Total Blocks............................          15,360                                                               
    Total Bytes.............................     125,829,120                                                               
    Total MBytes............................             120                                                               
    Unused Blocks...........................             770                                                               
    Unused Bytes............................       6,307,840                                                               
    Last Used Ext FileId....................               4                                                               
    Last Used Ext BlockId...................          16,521                                                               
    Last Used Block.........................             254                                                               
                                                                                                                           
    PL/SQL procedure successfully completed.                                                                               
    
    2. 删除记录之后,进行收缩表段   
    SQL> delete from big_table where owner in ('SCOTT','SYSTEM');   -->删除记录                                 
                                                                                                                
    8715 rows deleted.                                                                                          
                                                                                                                
    SQL> commit;                                                                                                
                                                                                                                
    Commit complete.                                                                                            
                                                                                                                
    SQL> alter table big_table shrink space;                        -->实施shrink,提示没有启用ROW MOVEMENT      
    alter table big_table shrink space                                                                          
    *                                                                                                           
    ERROR at line 1:                                                                                            
    ORA-10636: ROW MOVEMENT is not enabled                                                                      
                                                                                                                
    SQL> alter table big_table enable row movement;                 -->开启row movement                         
                                                                                                                
    Table altered.                                                                                              
                                                                                                                
    SQL> alter table big_table shrink space;                        -->shrink成功                               
                                                                                                                
    Table altered.                                                                                              
                                                                                                                
    SQL> exec show_space('BIG_TABLE','SCOTT');         -->从下面的结果中可以看到块数以及总大小已经变小          
    Unformatted Blocks .....................               0                                                    
    FS1 Blocks (0-25) ......................               1                                                    
    FS2 Blocks (25-50) .....................               1                                                    
    FS3 Blocks (50-75) .....................               0                                                    
    FS4 Blocks (75-100).....................               0                                                    
    Full Blocks ............................          14,318                                                    
    Total Blocks............................          14,488                                                    
    Total Bytes.............................     118,685,696                                                    
    Total MBytes............................             113                                                    
    Unused Blocks...........................               5                                                    
    Unused Bytes............................          40,960                                                    
    Last Used Ext FileId....................               4                                                    
    Last Used Ext BlockId...................          16,521                                                    
    Last Used Block.........................             147                                                    
                                                                                                                
    PL/SQL procedure successfully completed.                                                                    
    
    3. 验证cascade与compact的差异   
    SQL> delete from big_table where rownum<8000;     -->再次删除一些记录                                                
                                                                                                                         
    7999 rows deleted.                                                                                                   
                                                                                                                         
    SQL> alter table big_table shrink space compact;  -->使用compact方式收缩表段                                         
                                                                                                                         
    Table altered.                                                                                                       
                                                                                                                         
    SQL> exec show_space('BIG_TABLE','SCOTT');                                                                           
    Unformatted Blocks .....................               0                                                             
    FS1 Blocks (0-25) ......................               1                                                             
    FS2 Blocks (25-50) .....................               2                                                             
    FS3 Blocks (50-75) .....................               0                                                             
    FS4 Blocks (75-100).....................             103                                                             
    Full Blocks ............................          14,214 --仅有的变化为14318-14214=104块,即完全填满的数据块减少了104块
    Total Blocks............................          14,488 --数据的总块数及总大小并没有减少,即未移动高水位线          
    Total Bytes.............................     118,685,696                                                             
    Total MBytes............................             113                                                             
    Unused Blocks...........................               5                                                             
    Unused Bytes............................          40,960                                                             
    Last Used Ext FileId....................               4                                                             
    Last Used Ext BlockId...................          16,521                                                             
    Last Used Block.........................             147                                                             
                                                                                                                         
    PL/SQL procedure successfully completed.                                                                             
                                                                                                                         
    SQL> alter table big_table shrink space cascade;  -->使用cascade方式收缩,                                           
                                                                                                                         
    Table altered.                                                                                                       
                                                                                                                         
    SQL> exec show_space('BIG_TABLE','SCOTT');                                                                           
    Unformatted Blocks .....................               0                                                             
    FS1 Blocks (0-25) ......................               1                                                             
    FS2 Blocks (25-50) .....................               2                                                             
    FS3 Blocks (50-75) .....................               0                                                             
    FS4 Blocks (75-100).....................               0                                                             
    Full Blocks ............................          14,214                                                             
    Total Blocks............................          14,384   -->总块数及总大小均已减少                                 
    Total Bytes.............................     117,833,728                                                             
    Total MBytes............................             112                                                             
    Unused Blocks...........................               4                                                             
    Unused Bytes............................          32,768                                                             
    Last Used Ext FileId....................               4                                                             
    Last Used Ext BlockId...................          16,521                                                             
    Last Used Block.........................              44                                                             
                                                                                                                         
    PL/SQL procedure successfully completed.                                                                             
                                                                                                                         
    -->收缩之后索引依然有效                                                                                              
    SQL> select OWNER,INDEX_NAME,STATUS from dba_indexes where TABLE_NAME='BIG_TABLE';                                   
                                                                                                                         
    OWNER                          INDEX_NAME                     STATUS                                                 
    ------------------------------ ------------------------------ --------                                               
    SCOTT                          BIG_TABLE_PK                   VALID                                                  
    
    五、语法总结:      
    ALTER TABLE <table_name> ENABLE ROW MOVEMENT   -->前提条件                                       
                                                                                                     
    ALTER TABLE <table_name> SHRINK SPACE [ <NULL> | COMPACT | CASCADE ];                            
                                                                                                     
    ALTER TABLE <table_name> SHRINK SPACE COMPCAT;  -->缩小表和索引,不移动高水位线,不释放空间      
                                                                                                     
    ALTER TABLE <table_name> SHRINK SPACE;     -->收缩表,降低高水位线;                              
                                                                                                     
    ALTER TABLE <table_name> SHRINK SPACE CASCADE; -->收缩表,降低高水位线,并且相关索引也要收缩一下 
                                                                                                     
    ALTER TABLE <table_name> MODIFY LOB (lob_column) (SHRINK SPACE);  -->收缩LOB段                   
                                                                                                     
    ALTER INDEX IDXNAME SHRINK SPACE;     -->索引段的收缩,同表段                                    
    

    六、批量收缩脚本
    1. 普通表(根据相应需求修改下面的语句生产相应脚本)   
    select'alter table '||table_name||' enable row movement;'                        
    ||chr(10)||'alter table '||table_name||' shrink space;'||chr(10)from user_tables;
                                                                                     
    select'alter index '||index_name||' shrink space;'||chr(10)from user_indexes;    
    
    2. 分区表的处理

        分区表进行shrink space时发生ORA-10631错误.shrink space有一些限制.

        在表上建有函数索引(包括全文索引)会失败。   
    --根据相应需求修改下面的语句生产相应脚本                                                                
    select 'alter table '||owner||'.'||table_name||' enable row movement;'                                  
    ||chr(10)||'alter table '||owner||'.'||table_name||' shrink space;'||chr(10) from dba_tables            
    where owner=upper('&input_owner');                                                                      
                                                                                                            
    select 'alter index '||owner||'.'||index_name||' shrink space;'                                         
    ||chr(10) from dba_indexes where uniqueness='NONUNIQUE' ;                                               
                                                                                                            
    select 'alter table '||owner||'.'||segment_name||' modify partition '||partition_name||' shrink space;' 
    ||chr(10) from dba_segments where segment_type='TABLE PARTITION';                                       
    
     3. 附show_space脚本(来自Tom大师)   
    CREATE OR REPLACE PROCEDURE show_space                                                        
    (                                                                                             
        p_segname IN VARCHAR2,                                                                    
        p_owner IN VARCHAR2 DEFAULT USER,                                                         
        p_type IN VARCHAR2 DEFAULT 'TABLE',                                                       
        p_partition IN VARCHAR2 DEFAULT NULL                                                      
    )                                                                                             
    -- this procedure uses authid current user so it can query DBA_*                              
        -- views using privileges from a ROLE, and so it can be installed                         
        -- once per database, instead of once per user who wanted to use it                       
    AUTHID CURRENT_USER AS                                                                        
        l_free_blks NUMBER;                                                                       
        l_total_blocks NUMBER;                                                                    
        l_total_bytes NUMBER;                                                                     
        l_unused_blocks NUMBER;                                                                   
        l_unused_bytes NUMBER;                                                                    
        l_LastUsedExtFileId NUMBER;                                                               
        l_LastUsedExtBlockId NUMBER;                                                              
        l_LAST_USED_BLOCK NUMBER;                                                                 
        l_segment_space_mgmt VARCHAR2(255);                                                       
        l_unformatted_blocks NUMBER;                                                              
        l_unformatted_bytes NUMBER;                                                               
        l_fs1_blocks NUMBER;                                                                      
        l_fs1_bytes NUMBER;                                                                       
        l_fs2_blocks NUMBER;                                                                      
        l_fs2_bytes NUMBER;                                                                       
        l_fs3_blocks NUMBER;                                                                      
        l_fs3_bytes NUMBER;                                                                       
        l_fs4_blocks NUMBER;                                                                      
        l_fs4_bytes NUMBER;                                                                       
        l_full_blocks NUMBER;                                                                     
        l_full_bytes NUMBER;                                                                      
        -- inline procedure to print out numbers nicely formatted                                 
        -- with a simple label                                                                    
        PROCEDURE p                                                                               
        (                                                                                         
            p_label IN VARCHAR2,                                                                  
            p_num IN NUMBER                                                                       
        ) IS                                                                                      
        BEGIN                                                                                     
            dbms_output.put_line(rpad(p_label, 40, '.') ||                                        
                                 to_char(p_num, '999,999,999,999'));                              
        END;                                                                                      
    BEGIN                                                                                         
        -- this query is executed dynamically in order to allow this procedure                    
        -- to be created by a user who has access to DBA_SEGMENTS/TABLESPACES                     
        -- via a role as is customary.                                                            
        -- NOTE: at runtime, the invoker MUST have access to these two                            
        -- views!                                                                                 
        -- this query determines if the object is an ASSM object or not                           
        BEGIN                                                                                     
            EXECUTE IMMEDIATE 'select ts.segment_space_management                                 
    from dba_segments seg, dba_tablespaces ts                                                     
    where seg.segment_name = :p_segname                                                           
    and (:p_partition is null or                                                                  
    seg.partition_name = :p_partition)                                                            
    and seg.owner = :p_owner                                                                      
    and seg.tablespace_name = ts.tablespace_name'                                                 
                INTO l_segment_space_mgmt                                                         
                USING p_segname, p_partition, p_partition, p_owner;                               
        EXCEPTION                                                                                 
            WHEN too_many_rows THEN                                                               
                dbms_output.put_line('This must be a partitioned table, use p_partition => ');    
                RETURN;                                                                           
        END;                                                                                      
        -- if the object is in an ASSM tablespace, we must use this API                           
        -- call to get space information, otherwise we use the FREE_BLOCKS                        
        -- API for the user-managed segments                                                      
        IF l_segment_space_mgmt = 'AUTO' THEN                                                     
            dbms_space.space_usage(p_owner,                                                       
                                   p_segname,                                                     
                                   p_type,                                                        
                                   l_unformatted_blocks,                                          
                                   l_unformatted_bytes,                                           
                                   l_fs1_blocks,                                                  
                                   l_fs1_bytes,                                                   
                                   l_fs2_blocks,                                                  
                                   l_fs2_bytes,                                                   
                                   l_fs3_blocks,                                                  
                                   l_fs3_bytes,                                                   
                                   l_fs4_blocks,                                                  
                                   l_fs4_bytes,                                                   
                                   l_full_blocks,                                                 
                                   l_full_bytes,                                                  
                                   p_partition);                                                  
            p('Unformatted Blocks ', l_unformatted_blocks);                                       
            p('FS1 Blocks (0-25) ', l_fs1_blocks);                                                
            p('FS2 Blocks (25-50) ', l_fs2_blocks);                                               
            p('FS3 Blocks (50-75) ', l_fs3_blocks);                                               
            p('FS4 Blocks (75-100)', l_fs4_blocks);                                               
            p('Full Blocks ', l_full_blocks);                                                     
        ELSE                                                                                      
            dbms_space.free_blocks(segment_owner => p_owner,                                      
                                   segment_name => p_segname,                                     
                                   segment_type => p_type,                                        
                                   freelist_group_id => 0,                                        
                                   free_blks => l_free_blks);                                     
            p('Free Blocks', l_free_blks);                                                        
        END IF;                                                                                   
        -- and then the unused space API call to get the rest of the                              
        -- information                                                                            
        dbms_space.unused_space(segment_owner => p_owner,                                         
                                segment_name => p_segname,                                        
                                segment_type => p_type,                                           
                                partition_name => p_partition,                                    
                                total_blocks => l_total_blocks,                                   
                                total_bytes => l_total_bytes,                                     
                                unused_blocks => l_unused_blocks,                                 
                                unused_bytes => l_unused_bytes,                                   
                                LAST_USED_EXTENT_FILE_ID => l_LastUsedExtFileId,                  
                                LAST_USED_EXTENT_BLOCK_ID => l_LastUsedExtBlockId,                
                                LAST_USED_BLOCK => l_LAST_USED_BLOCK);                            
        p('Total Blocks', l_total_blocks);                                                        
        p('Total Bytes', l_total_bytes);                                                          
        p('Total MBytes', trunc(l_total_bytes / 1024 / 1024));                                    
        p('Unused Blocks', l_unused_blocks);                                                      
        p('Unused Bytes', l_unused_bytes);                                                        
        p('Last Used Ext FileId', l_LastUsedExtFileId);                                           
        p('Last Used Ext BlockId', l_LastUsedExtBlockId);                                         
        p('Last Used Block', l_LAST_USED_BLOCK);                                                  
    END;                                                                                          
    

    七、快捷参考

    有关性能优化请参考

        Oracle硬解析与软解析

        共享池的调整与优化(Sharedpool Tuning)

        Buffercache 的调整与优化(一)

        Oracle表缓存(cachingtable)的使用

     

    有关ORACLE体系结构请参考

        Oracle表空间与数据文件

        Oracle密码文件

        Oracle参数文件

        Oracle联机重做日志文件(ONLINE LOG FILE)

        Oracle控制文件(CONTROLFILE)

        Oracle归档日志

        Oracle回滚(ROLLBACK)和撤销(UNDO)

        Oracle数据库实例启动关闭过程

        Oracle10g SGA 的自动化管理

        Oracle实例和Oracle数据库(Oracle体系结构)

     

    有关闪回特性请参考

        Oracle闪回特性(FLASHBACK DATABASE)

        Oracle闪回特性(FLASHBACK DROP & RECYCLEBIN)

        Oracle闪回特性(Flashback Query、FlashbackTable)

        Oracle闪回特性(Flashback Version、Flashback Transaction)

     

    有关基于用户管理的备份和备份恢复的概念请参考

        Oracle冷备份

        Oracle热备份

        Oracle备份恢复概念

        Oracle实例恢复

        Oracle基于用户管理恢复的处理(详细描述了介质恢复及其处理)

        SYSTEM表空间管理及备份恢复

        SYSAUX表空间管理及恢复

     

    有关RMAN的备份恢复与管理请参考

        RMAN 概述及其体系结构

        RMAN 配置、监控与管理

        RMAN 备份详解

        RMAN 还原与恢复

        RMANcatalog 的创建和使用

        基于catalog 创建RMAN存储脚本

    基于catalog 的RMAN 备份与恢复

    使用RMAN迁移文件系统数据库到ASM

        RMAN 备份路径困惑(使用plus archivelog时)

     

    有关ORACLE故障请参考

        ORA-32004的错误处理

        ORA-01658错误

        CRS-0215错误处理

        ORA-00119,ORA-00132 错误处理

        又一例SPFILE设置错误导致数据库无法启动

        对参数FAST_START_MTTR_TARGET= 0 的误解及设定

        SPFILE错误导致数据库无法启动(ORA-01565)

     

    有关ASM请参考

        创建ASM实例及ASM数据库

        ASM 磁盘、目录的管理

        使用 ASMCMD 工具管理ASM目录及文件

     

    有关SQL/PLSQL请参考

        SQLPlus常用命令

        替代变量与SQL*Plus环境设置

        使用Uniread实现SQLplus翻页功能

        SQL 基础-->SELECT 查询

        SQL 基础--> NEW_VALUE的使用

        SQL 基础--> 集合运算(UNION与UNION ALL)

        SQL 基础--> 常用函数

        SQL 基础--> 视图(CREATEVIEW)

        SQL 基础--> 创建和管理表

        SQL 基础--> 多表查询

        SQL 基础--> 过滤和排序

        SQL 基础--> 子查询

        SQL 基础--> 分组与分组函数

        SQL 基础--> 层次化查询(STARTBY ... CONNECT BY PRIOR)

        SQL 基础--> ROLLUP与CUBE运算符实现数据汇总

        PL/SQL--> 游标

        PL/SQL--> 异常处理(Exception)

        PL/SQL--> 语言基础

        PL/SQL--> 流程控制

        PL/SQL--> PL/SQL记录

        PL/SQL--> 包的创建与管理

        PL/SQL--> 隐式游标(SQL%FOUND)

        PL/SQL--> 包重载、初始化

        PL/SQL--> DBMS_DDL包的使用

        PL/SQL--> DML 触发器

        PL/SQL--> INSTEAD OF 触发器

        PL/SQL--> 存储过程

        PL/SQL--> 函数

        PL/SQL--> 动态SQL

        PL/SQL--> 动态SQL的常见错误

     

    有关ORACLE其它特性

        Oracle常用目录结构(10g)

        使用OEM,SQL*Plus,iSQL*Plus 管理Oracle实例

        日志记录模式(LOGGING、FORCE LOGGING 、NOLOGGING)

        表段、索引段上的LOGGING与NOLOGGING

        OralceOMF 功能详解

        Oracle用户、对象权限、系统权限  

        Oracle角色、配置文件

        Oracle分区表

        Oracle外部表

        使用外部表管理Oracle 告警日志(ALAERT_$SID.LOG)

        簇表及簇表管理(Index clustered tables)

        数据泵 EXPDP 导出工具的使用

        数据泵 IMPDP 导入工具的使用

        导入导出 Oracle 分区表数据

        SQL*Loader使用方法

        启用用户进程跟踪

        配置非默认端口的动态服务注册

        配置ORACLE 客户端连接到数据库

        systemsys,sysoper sysdba 的区别

        ORACLE_SID、DB_NAME、INSTANCE_NAME、DB_DOMIAN、GLOBAL_NAME

        Oracle补丁全集 (Oracle 9i 10g 11g Path)

        Oracle10.2.0.1 升级到10.2.0.4

        Oracle彻底 kill session




              


    展开全文
  • shrink

    2013-06-23 22:52:29
    开发过程中有时会遇到这样的问题:表的数据并不多,但是全表扫描时为什么耗时那么久?这时候你就需要看看HWM的情况了,因为影响全表扫描的一个重要因素就是HWM,每次全表扫描就是扫描HWM以下的数据块。...

    开发过程中有时会遇到这样的问题:表的数据并不多,但是全表扫描时为什么耗时那么久?这时候你就需要看看HWM的情况了,因为影响全表扫描的一个重要因素就是HWM,每次全表扫描就是扫描HWM以下的数据块。来做个试验:

    1. 建个表test,用show_space看数据块的分布情况:可以看到刚刚建立的表数据块还是分布的很结实的

    total_blocks: 24576
    total_bytes: 201326592
    unused_blocks: 869
    unused_bytes: 7118848
    last_used_extent_file_id: 4
    last_used_extent_block_id: 208649
    last_used_block: 155
    unformatted_blocks: 0
    unformatted_bytes: 0
    0%-25% block: 0
    0%-25% bytes: 0
    25%-50% block: 0
    25%-50% bytes: 0
    50%-75% block: 0
    50%-75% bytes: 0
    75%-100% blocks: 0
    75%-100% bytes: 0
    full_blocks: 23508

    full_bytes: 192577536

    2. delete一半的数据后再看数据块的分布情况:可以看到有空闲空间的数据块明显增多,而总共数据块(HWM)仍然为24576,并没有减少,也就是说,删除数据后全表扫描的性能不会得到优化

    total_blocks: 24576
    total_bytes: 201326592
    unused_blocks: 869
    unused_bytes: 7118848
    last_used_extent_file_id: 4
    last_used_extent_block_id: 208649
    last_used_block: 155
    unformatted_blocks: 0
    unformatted_bytes: 0
    0%-25% block: 0
    0%-25% bytes: 0
    25%-50% block: 169
    25%-50% bytes: 169
    50%-75% block: 7284
    50%-75% bytes: 7284
    75%-100% blocks: 5978
    75%-100% bytes: 5978
    full_blocks: 10077

    full_bytes: 82550784

    3. 执行shrink后,在再看数据块的分布情况:可以看到数据块又被打结实了,而且总数据块的数据减少为13152,此时全表扫描的性能得到提升!!!!

    SQL> alter table test enable row movement;

    SQL> alter table test shrink space;

    total_blocks: 13152
    total_bytes: 107741184
    unused_blocks: 2
    unused_bytes: 16384
    last_used_extent_file_id: 4
    last_used_extent_block_id: 197385
    last_used_block: 862
    unformatted_blocks: 0
    unformatted_bytes: 0
    0%-25% block: 0
    0%-25% bytes: 0
    25%-50% block: 1
    25%-50% bytes: 1
    50%-75% block: 0
    50%-75% bytes: 0
    75%-100% blocks: 2
    75%-100% bytes: 2
    full_blocks: 12992

    full_bytes: 106430464

    所以说提升全表扫描性能的一个好办法就是收缩表的空隙,降低表的高水位线!!!!

    展开全文
  • Android shrinkResources true 引发的血案

    万次阅读 2015-09-23 23:50:55
    Android shrinkResources true 引发的血案 今天在众测我的App,发现我在代码里面动态调去取之前的图片资源时 一直报 Resources$NotFoundException: Resource ID #0x4 异常 。 但是我在正常debug情况下却没有这个...

    Android shrinkResources true 引发的血案


    1. 今天在众测我的App,发现我在代码里面动态调去取之前的图片资源时
      一直报 Resources$NotFoundException: Resource ID #0x4 异常

      但是我在正常debug情况下却没有这个问题
        STEPS TO REPRODUCE:
    1. Create a dummy app that uses appcompat (so there are resources to be removed)
    2. In build.grade set 'minifyEnabled true' and 'shrinkResource true' 
    3. Create the APK where unused resources are removed
    
    EXPECTED RESULTS:
    Application should start normally.
    
    OBSERVED RESULTS:
    Application crashes with following stacktrace:
    android.content.res.Resources$NotFoundException: File res/drawable-xxhdpi-v4/abc_list_pressed_holo_light.9.png from drawable resource ID #0x7f020020
        at android.content.res.Resources$CRunnable_openmp.doOpenMP(Resources.java:1111)
        at android.content.res.Resources$__ompClass0.__doWork(Resources.java:1043)
        at com.samsung.javaomp.runtime.__OMPThread.run(Unknown Source)
    Caused by: java.io.FileNotFoundException: res/drawable-xxhdpi-v4/abc_list_pressed_holo_light.9.png
        at android.content.res.AssetManager.openNonAssetNative(Native Method)
        at android.content.res.AssetManager.openNonAsset(AssetManager.java:408)
        at android.content.res.Resources$CRunnable_openmp.doOpenMP(Resources.java:1106)
        ... 2 more
    java.io.FileNotFoundException: res/drawable-xxhdpi-v4/abc_list_pressed_holo_light.9.png
        at android.content.res.AssetManager.openNonAssetNative(Native Method)
        at android.content.res.AssetManager.openNonAsset(AssetManager.java:408)
        at android.content.res.Resources$CRunnable_openmp.doOpenMP(Resources.java:1106)
        at android.content.res.Resources$__ompClass0.__doWork(Resources.java:1043)
        at com.samsung.javaomp.runtime.__OMPThread.run(Unknown Source)
    1. 后来我反编译我的apk,找到资源文件夹发现,我需要的图片资源被移除了。我想到我在代码里开启了shrinkResources

    
             buildTypes {
            release {
                // 不显示Log
                buildConfigField "boolean", "LOG_DEBUG", "false"
                shrinkResources true
                minifyEnabled true
                zipAlignEnabled true
                // 移除无用的resource文件
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    
                applicationVariants.all { variant ->
                    variant.outputs.each { output ->
                        def outputFile = output.outputFile
                        if (outputFile != null && outputFile.name.endsWith('.apk')) {
                            // 输出apk名称为boohee_v1.0_2015-01-15_wandoujia.apk
                            def fileName = "${variant.productFlavors[0].name}${defaultConfig.versionName}.apk"
                            output.outputFile = new File(outputFile.parent, fileName)
                        }
                    }
                }
            }
    
    

    google 翻墙找了一堆答案:https://code.google.com/p/android/issues/detail?id=79325

    写在最后:

    • 现在依然无法解决这个问题:因为我的资源需要在服务端返回后动态绑定,现在不需要,我不可能在代码里预定义这个资源引用
    • 发现关闭之后,程序打包出来增加了1M多,显然这不是我想要的结果,但面对崩溃,我只能先忍受解决崩溃带来的程序包体积增加。
    展开全文
  • shrink_page_list

    2017-02-11 22:37:47
    static unsigned longshrink_page_list(struct list_head *page_list, struct zone *zone,  struct scan_control *sc,enum ttu_flagsttu_flags,  
  • shrink space

    2017-08-08 16:45:50
    从10g开始,oracle开始提供Shrink的命令,假如我们的表空间中支持自动段空间管理 (ASSM),就可以使用这个特性缩小段,即降低HWM。这里需要强调一点,10g的这个新特性,仅对ASSM表空间有效,否则会报 ORA-10635: ...
  • 通过使用 Shrink API 使用更少的主碎片来调整 Elasticsearch 索引的大小。在 Elasticsearch 中,每个索引都包含多个分片,而 Elasticsearch 集群中的每个分片都有助于使用cpu,内存,文件描述符等。这无疑有助于并行...
  • shrink-to-fit和shrink-to-fit=no

    万次阅读 2017-03-12 20:26:17
    在Bootstrap v4-alpha看到了shrink-to-fit=no,又出现了一个新的幺蛾子, initial-scale=1, shrink-to-fit=no"> 于是各种查,这一查,就是两天,因为shrink-to-fit和shrink-to-fit=no不一样,一个是没值的,一个有值...
  • 本文实现参考matlab实现方式,将m语言转换成C实现。...matlab中这样调用BW = bwmorph(BW1,‘skel’,n);...matlab中这样描述shrink操作:With n = Inf, shrinks objects to points. It removes pixe...
  • 数据文件shrink This article explores the usage of TempDB and different ways to shrink the TempDB database in SQL Server 本文探讨了TempDB的用法以及在SQL Server中缩小TempDB数据库的不同方法 ...
  • 测试3——探究shrink和move原理

    千次阅读 2014-04-10 20:53:01
    我们接下来讨论一下shrink的实现机制,我们同样使用讨论move机制的那个实验来观察. SQL> create table TEST_HWM (id int ,name char(2000)) tablespace ASSM; Table created 往table test_hwm中插入如下的数据: ...
  • flex-grow、flex-shrink、flex-basis三个属性的作用:在flex布局中,父元素在不同宽度下,子元素是如何分配父元素空间的。(注意:这三个属性都是在子元素上设置的,下面小编要讲的是父元素,指以flex布局的元素...
  • Oracle中shrink space命令详解

    千次阅读 2011-11-27 13:17:00
    从10g开始,oracle开始提供Shrink的命令,假如我们的表空间中支持自动段空间管理(ASSM),就可以使用这个特性缩小段,即降低HWM。这里需要强调一点,10g的这个新特性,仅对ASSM表空间有效,否则会报 ORA-10635: ...
  • 从10g开始,oracle开始提供Shrink的命令,假如我们的表空间中支持自动段空间管理 (ASSM),就可以使用这个特性缩小段,即降低HWM。这里需要强调一点,10g的这个新特性,仅对ASSM表空间有效,否则会报 ORA-10635: ...
  • alter table move跟shrink space的区别

    万次阅读 2010-05-28 20:46:00
    author:skatetime2010-05-28alter table move跟shrink space的区别今天主要从两点说他们的区别: 1. 碎片的整理2.空间的收缩 SQL> select * from v$version;BANNER---------------------------------------------...
  • 从10g开始,oracle开始提供Shrink的命令,假如我们的表空间中支持自动段空间管理(ASSM),就可以使用这个特性缩小段,即降低HWM。这里需要强调一点,10g的这个新特性,仅对ASSM表空间有效,否则会报 ORA-10635: ...
  • alter table move和 shrink space

    千次阅读 2016-04-24 21:43:58
    欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 ...
  • shrink space compact cascade及学习user_tables相关列的含义 SQL&gt; alter table test_shrink enable row movement;--alter table shrink space须开启行移动 Table altered. SQL&gt; select table_...
  • 自从开始开学习 CSS 布局,想要比较灵活的把父元素的空间分配给各个子元一直是各个前端程序员的梦想。在 flex 之前,如果不是专门去搜索相关的解决方案,一般人几乎想不出非常灵活的三(多)栏等高布局方案,而即使...
  • 原文连接 ... 自从开始开学习 CSS 布局,想要比较灵活的把父元素的空间分配给各个子元一直是各个前端程序员的梦想。在 flex 之前,如果不是专门去搜索相关的解决方案,一般人几乎想不出非常灵活的三(多)...
1 2 3 4 5 ... 20
收藏数 38,434
精华内容 15,373
关键字:

shrink