2020-01-15 ORACLE 12C 新特性

数据仓库从oracle11G 升级到 oracle19C,新特性一览。

1.   Invisible columns

     create table emp (id number,name varchar2(20) invisible);

2. Multiple indexes on the same set of columns

    create table dup(name varchar2(10),sex varchar2(10),adr varchar2(200),id number(10),birth date);

    create index idx_dup_adr on dup(adr);

    create bitmap index bitidx_dup_adr on dup(adr) invisible; 

    如果要使bitmap索引生效,将btree索引设为隐藏即可。

    alter index idx_dup_adr invisible;

    alter index bitidx_dup_adr visible;

3.Datadump的增强

 关闭redo日志的生成,在导入大型表时可以通过增加TRANSFORM选项,关闭redo日志的生成,从而加快导入。

impdp admin/oracle@pdb directory=dump dumpfile=admin.dmp logfile=admin_nolog.log schemas=admin TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y

4.扩展数据类型长度32k Strings

VARCHAR2, NAVARCHAR2 以及 RAW 这些数据类型的 大小可以从 4K 以及 2K 字节扩展至32K 字节

5.在SQL语句中通过with语句定义函数

with function Is_Number

(x in varchar2) return varchar2 is

        Plsql_Num_Error exception;

        pragma exception_init(Plsql_Num_Error, -06502);

    begin

      if (To_Number(x) is NOT null) then

        return 'Y';

      else

        return '';

      end if;

    exception

    when Plsql_Num_Error then

      return 'N';

    end Is_Number;

select is_number('1') from dual;

6.高级索引压缩

在使用高级索引压缩之后,可以一定程度下降低数据库IO。

7.RMAN表级恢复总结:

1、12c的RMAN表级恢复可以恢复到被删除之前的任意时间点。假设表T1在drop之前,执行了truncate操作,表删除之后,可以恢复到truncate之前,其他表数据无影响。

2、表级恢复只能用cdb RMAN备份。

3、恢复期间会自动创建辅助实例,会还原system,sysaux,undo表空间,恢复目录需要有充足空间,最后通过数据泵把数据导入到原数据库。

8. 表分区或子分区的在线迁移

在Oracle12.2版本之前,如果想把一个非分区表转为分区表常用的有这几种方法:1、建好分区表然后insert into select 把数据插入到分区表中;2、使用在线重定义(DBMS_REDEFINITION)的方法。

在Oracle 12c R1中迁移表分区或子分区到不同的表空间不再需要复杂的过程。与之前版本中未分区表进行在线迁移类似,表分区或子分区可以在线或是离线迁移至一个不同的表空间。当指定了ONLINE语句,所有的DML操作可以在没有任何中断的情况下,在参与这一过程的分区或子分区上执行。与此相反,分区或子分区迁移如果是在离线情况下进行的,DML操作是不被允许的。

Oracle12cR2版本中提供了一种新特性,一条语句就可以把非分区表转换为分区表。

alter table emp modify

partition by range (deptno) interval (10)

(partition p1 values less than (10),

partition p2 values less than (20)) online  update indexes (idx_emp_no local)

9.对表分区维护的增强

Oracle 12c只需要使用一条单独的:ALTER TABLE ADD PARTITION 命令就可以添加多个新分区

添加两个新分区:

ALTER TABLE emp_part ADD PARTITION p4 VALUES LESS THAN (35000),PARTITION p5 VALUES LESS THAN (40000);

要保持索引更新,使用UPDATE INDEXES或UPDATE GLOBAL INDEXES语句

SQL> ALTER TABLE emp_part DROP PARTITIONS p4,p5 UPDATE GLOBAL INDEXES;

SQL> ALTER TABLE emp_part TRUNCATE PARTITIONS p4,p5 UPDATE GLOBAL INDEXES;

如果你在不使用UPDATE GLOBAL INDEXES 语句的情况下删除或截断一个分区,你可以在USER_INDEXES或

USER_IND_PARTITIONS 字典视图下查询ORPHANED_ENTRIES 字段以找出是否有索引包含任何的过期条目。

将多个分区合并为一个分区

SQL> ALTER TABLE emp_part MERGE PARTITIONS p3,p4,p5 INTO PARTITION p_merge;

如果分区范围形成序列,你可以使用如下示例:

SQL> ALTER TABLE emp_part MERGE PARTITIONS p3 TO p5 INTO PARTITION p_merge;

你可能感兴趣的:(2020-01-15 ORACLE 12C 新特性)