• oracle 12c 新特性之(相同字段上的多重索引、ddl 日志、限制PGA的大小、分页查询)


    1. 相同字段上的多重索引
       在Oracle 12c R1之前,一个字段是无法以任何形式拥有多个索引的。或许有人会想知道为什么通常一个字段需要有多重索引,事实上需要多重索引的字段或字段集合是很多的。在12c R1中,只要索引类型的形式不同,一个字段就可以包含在一个B-tree索引中,同样也可以包含在Bitmap索引中。注意,只有一种类型的索引是在给定时间可见可用的。

    SQL>create table more_ind as select * from user_objects;
    Table created.
    SQL> create index ind_one on more_ind(object_id);
    Index created.
    SQL> create index ind_two on more_ind(object_id);                          
    ORA-01408: such column list already indexed
    SQL> create bitmap index ind_two on more_ind(object_id);
    ORA-01408: such column list already indexed
    SQL> create bitmap index ind_two on more_ind(object_id) invisible;
    Index created.

    2. ddl 日志
    在之前的版本中没有可选方法来对DDL操作进行日志记录。而在12c R1中,你现在可以将DDL操作写入xml和日志文件中。这对于了解谁在什么时间执行了create或drop命令是十分有用的。要开启这一功能必须对ENABLE_DDL_LOGGING 初始参数加以配置。这一参数可以在数据库或会话级加以设置。当此参数为启用状态,所有的DDL命令会记录在$ORACLE_BASE/diag/rdbms/DBNAME/log|ddl 路径下的xml和日志文件中。一个xml中包含DDL命令,IP地址,时间戳等信息。这可以帮助确定在什么时候对用户或表进行了删除亦或是一条DDL语句在何时触发。

    SQL> ALTER SYSTEM|SESSION SET ENABLE_DDL_LOGGING=TRUE; 

    alter system set enable_ddl_logging=true;

    以下的DDL语句可能会记录在xml或日志文件中:

    CREATE|ALTER|DROP|TRUNCATE TABLE

    DROP USER

    CREATE|ALTER|DROP PACKAGE|FUNCTION|VIEW|SYNONYM|SEQUENC

    实验:
    SQL> show con_name

    CON_NAME
    ------------------------------
    CDB$ROOT
    SQL> alter system  set enable_ddl_logging=true;

    System altered.
    SQL> truncate table select_top;

    Table truncated.

    [oracle@12c01 ddl]$ pwd
    /home/oracle/app/oracle/diag/rdbms/andycdb/andycdb/log/ddl
    [oracle@12c01 ddl]$ ll
    total 4
    -rw-r-----. 1 oracle oinstall 308 May  7 21:28 log.xml
    [oracle@12c01 ddl]$ cat log.xml 
    <msg time='2017-05-07T21:28:36.028+08:00' org_id='oracle' comp_id='rdbms'
     msg_id='opiexe:4695:2946163730' type='UNKNOWN' group='diag_adl'
     level='16' host_id='12c01' host_addr='10.100.25.16'
     pid='8858' version='1' con_uid='1'
     con_id='1' con_name='CDB$ROOT'>
     <txt>truncate table select_top
     </txt>
    </msg>

    3. 限制PGA的大小
    在Oracle 12c R1之前,没有选项可以用来限制和控制PGA的大小。虽然你设置某个大小为PGA_AGGREGATE_TARGET 的初始参数,Oracle会根据工作负载和需求来动态地增大或减小PGA的大小。而在12c中,你可以通过开启自动PGA管理来对PGA设定硬性限制,这需要对PGA_AGGREGATE_LIMIT 参数进行设置。因此,你现在可以通过设置新的参数来对PGA设定硬性限制以避免过度使用PGA。
    SQL> ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=2G; 
    SQL> ALTER SYSTEM SET PGA_AGGREGATE_LIMIT=0; --disables the hard limit  
    提示:当超过了当前PGA的限制,Oracle会自动终止/中止会话或进程以保持最合适的PGA内存。

    4. 分页查询
       在12c之前,只能通过一些间接手段来获取前N行的结果,如:rownum。在12c中,通过FETCH FIRST|NEXT|PERCENT可以直接得到top_n。
    11g中分页查询示范:
    select * 
    from(select a.*,rownum rn 
         from emp a
         where rownum<=10) 
    where rn>=5 ;

    12c:
    1.准备实验环境
    create table select_top (id int);
    insert into select_top values(1);
    insert into select_top values(2);
    insert into select_top values(3);
    insert into select_top values(4);
    insert into select_top values(5);
    insert into select_top values(6);
    insert into select_top values(7);
    insert into select_top values(8);
    insert into select_top values(9);
    insert into select_top values(5);
    insert into select_top values(10);

    SQL> select * from select_top;

    ID
    ----------
    1
    2
    3
    4
    5
    6
    7
    8
    9
    5
            10

    11 rows selected.
    2. 取id数字大小为前5的记录
    模式一:重复记录只显示一次
    SQL> select id from select_top order by id fetch first 5 rows only;

    ID
    ----------
    1
    2
    3
    4
    5

    模式二:重复记录显示多次
    SQL> select id from select_top order by id fetch first 5 rows with ties;

    ID
    ----------
    1
    2
    3
    4
    5
    5

    6 rows selected.
    3. 跳过前五条记录,返回后五条记录
    SQL> select id from select_top order by id offset 5 rows fetch next 5 rows only;

    ID
    ----------
    5
    6
    7
    8
    9

    4.取id前50%的记录(这只是近似值)
    SQL> select id from select_top order by id fetch first 50 percent rows only;

    ID
    ----------
    1
    2
    3
    4
    5
    5
    SQL> select count(*) from select_top;

      COUNT(*)
    ----------
    11

    SQL> select 6/11 from dual;

          6/11
    ----------
    .545454545

  • 相关阅读:
    LabVIEW入门第三天(软件及驱动包下载)
    poj1732
    poj1722
    poj1821
    poj1770
    poj1949
    poj1726
    poj1699
    poj1682
    poj1853
  • 原文地址:https://www.cnblogs.com/andy6/p/6820646.html
Copyright © 2020-2023  润新知