天天看点

Oracle DB 12c 新特性

Oracle Database 12c 新增了许多新特性,它将更容易部署和管理于云数据库。 Oracle 12c 是一个可插拔的数据库环境,我们可以插入多个数据库到数据库的实例中。 所有

的数据库将使用同样的后台进程和内存,将减管理多个数据库的压力。

我整理了一些Oracle DB 12c的新特性,下面主要的15个性特性是为Oracle的开发者和自己的作为参考。

1. 序列作为默认值

在Oracle Database 12c中,我们可以直接使用自增的序列作为默认值(i.e. sequence.nexval). 所以我们只需要直接声名使用序列,而不用使用触发器在新增时修改列值。

实例:

create sequence test_seq start with 1 increment by 1 nocycle;

create table test_tab
(
    id number default test_seq.nextval primary key
);
           

2. Invisible column:

Oracle Database 12c允许隐藏指定的列。如果某个列被设置为隐藏, 它将不能被查询通过(select * from).如果需要插入值到隐藏列,必须显式的指定列名。

实例:

SQL> create table my_table
  2  (
  3  id number,
  4  name varchar2(100),
  5  email varchar2(100),
  6  password varchar2(100) INVISIBLE
  7  );
  
SQL> ALTER TABLE my_table MODIFY (password visible);  
           

3. Multiple indexes on the same column

在Oracle Database 12c以前同一个列不能同时拥有多个索引,现在可以创建多个索引在同一个列,例如, 同时是B-tree 和 位图索引。 但是运行SQL时,只能有一个索引同一时间被调用。

4. VARCHAR2 length up to 32767

从Oracle Database 12c, varchar2 (i.e. Varchar2,NVARCHAR2 and RAW)类型已经被扩张到32767, 在Oracle Database 12c以前,它的长度是4000.  这届方便用户可以使用

varchar2去存放更多的值,而没必要使用大对象(i.e. LOBs).

5. Top-N feature

Top-N表达式可以被用来从有序的结果集中查询top or  bottom 的N行数据。使用以上两种Top-N查询可以实现分页查询。

实例:

SQL> SELECT value
  2  FROM   mytable
  3  ORDER BY value DESC
  4  FETCH FIRST 10 ROWS ONLY;
           

6. IDENTITY Columns

在Oracle Database 12c, 我们可以使用IDENTITY关键字,它是ANSI的标准SQL。它可以inser阶段自动增加(像MySQL).

实例:

SQL> create table my_table
  2  (
  3  id number generated as identity,
  4  name varchar2(100),
  5  email varchar2(100),
  6  password varchar2(100) INVISIBLE
  7  );
           

7. With Clause improvement

Oracle 12c, 允许使用PL/SQL 函数在with 语句中,它的使用与平常的函数相同。 但是它比Shema级别的自定义函数有更高的性能。

实例:

SQL> WITH
  2    FUNCTION f_test(n IN NUMBER) RETURN NUMBER IS
  3    BEGIN
  4      RETURN n+1;
  5    END;
  6  SELECT f_test(1)
  7  FROM   dual
  8  ;
           

8. Cascade for TRUNCATE and EXCHANGE partition.

在Oracle Database 12c, TRUNCATE可以使用CASCADE选项,用来删除子数据。

9. Online RENAME/MOVE of Datafiles

Oracle Database 12c 提供的更为简单的方法去移动数据文件,i.e. "ALTER DATABASE MOVE DATAFILE". 同时数据文件可以在线迁移从ASM to NON-ASM.

实例:

Rename datafile:  
  SQL> ALTER DATABASE MOVE DATAFILE '/u01/oradata/indx.dbf' TO '/u01/oradata/indx_01.dbf';
Move Datafile:    
  SQL> ALTER DATABASE MOVE DATAFILE '/u01/oradata/indx.dbf' TO '/u01/oradata/orcl/indx.dbf';
NON-ASM to ASM:   
  SQL> ALTER DATABASE MOVE DATAFILE '/u01/oradata/indx.dbf' TO '+DISKGROUP_DATA01';
           

10. Move table partition to different Tablespace online

Oracle 12c 中将更简单的实现在不同表空间迁移表分区,无须复杂的步骤。

实例:

SQL> ALTER TABLE MY_LARGE_TABLE MOVE PARTITION MY_LARGE_TABLE_PART1 TO TABLESPACE USERS_NEW;
           

11. Temporary Undo

在Oracle Database 12c之前,临时表的undo records是被存放在undo 表空间。但是在Oracle Database 12c,临时表的undo record可以被临时存储在临时表。主要有以下好处。1). 减低临时表空间的使用 2). 减少redo log. 必须在oracle 12c以上版本使用此特性,同时要起用初始化参数TEMP_UNDO_ENABLED。

12. DDL logging

可以在数据库级别和Session级别,设置ENABLE_DDL_LOGGING初始化参数,可以用来记录DDL的行为到xml文件。用户可以用它来监控DDL的行为,文件的位置$ORACLE_BASE/diag/rdbms/DBNAME/log|ddl。

实例:

SQL> ALTER SYSTEM SET ENABLE_DDL_LOGGING=TRUE;
           

13. PGA_AGGREGATE_LIMIT parameter

Oracle Database 12c 可以设置初始化参数PGA by PGA_AGGREGATE_LIMIT限制PGA的大小。 在 12c之前没有任何可选项用来限制和控制PGA的大小。这个初始化参数 将自动终止这些Session,它们使用的PGA的内存超过定义的值。

14. SQL statement in RMAN

在Oracle Database 12c, 可以不用使用“SQL” 前缀, 直接使用任何的SQL 和 PL/SQL。

实例:

RMAN> SELECT username,machine FROM v$session;
           

15. Turning off redo for Data Pump the import

在数据泵导入中新增了TRANSFORM选项,如果它的值设置为DISABLE_ARCHIVE_LOGGING, 则在导入数据到表中或者是创建索引是,数据泵将禁止生成redo log。这一特性将加快大表的导入,而且减少过度的redo log. 这样属性只对表和索引起作用。

Example:

impdp directory=mydir dumpfile=mydmp.dmp logfile=mydmp.log TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y
           

原始文档: http://nimishgarg.blogspot.in/2013/07/oracle-database-12c-new-features-for.html