现在的位置: 首页 > 数据库 > 正文

oracle12c与11g 区别总结

2019年12月25日 数据库 ⁄ 共 2430字 ⁄ 字号 暂无评论
孙国栋广告

1.oracle12c增加了CDB和PDB的概念

oracle12c增加了CDB和PDB的概念。

CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。

在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。

也就是说12c里面会在CDB下创建多个PDB,每个PDB类似于11g里面的实例,然后一个CDB下的各个PDB是相互隔离的。

当然12c中创建PDB的脚本跟之前有很大的区别,大家可以看看相关文档。另外每个PDB会有一个相应的服务名,大家在写连接地址都时候就不是用以前11g中的实例名了而是用这个服务名。

2.实现云数据库的支持,提供云平台管理,这是11所没有的。

3.高可用和数据保护
公共操作在cdb级别执行,将多个数据库作为一个管理(升级,高可用,备份)

4.改善Defaults:包括序列作为默认值;自增列;当明确插入NULL时指定默认值;METADATA-ONLY default值指的是增加一个新列时指定的默认值,和11g中的区别在于,11g的default值要求NOT NULL列。

5. 放宽多种数据类型长度限制:增加了VARCHAR2、NVARCHAR2和RAW类型的长度到32K,要求兼容性设置为12.0.0.0以上,且设置了初始化参数MAX_SQL_STRING_SIZE为EXTENDED,这个功能不支持CLUSTER表和索引组织表;最后这个功能并不是真正改变了VARCHAR2的限制,而是通过OUT OF LINE的CLOB实现。

要使用扩展字符类型需要执行以下过程:

  1. 关闭数据库

  2. 以升级模式重启数据库

  3. 更改参数: ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED;

  4. 执行 utl32k.sql as sysdba : SQL> @?/rdbms/admin/utl32k.sql

  5. 关闭数据库

  6. 以读写模式重启数据库

  对比LOB数据类型,在ASSM表空间管理中,扩展数据类型的字段以SecureFiles LOB加以存储,而在非ASSM表空间管理中,它们则是以BasciFiles LOB进行存储的。

  注意:一旦更改,你就不能再将设置改回STANDARD。

6.Adaptive执行计划:拥有学习功能的执行计划,Oracle会把实际运行过程中读取到返回结果作为进一步执行计划判断的输入,因此统计信息不准确或查询真正结果与计算结果不准时,可以得到更好的执行计划。

7. 临时UNDO:将临时段的UNDO独立出来,放到TEMP表空间中,优点包括:减少UNDO产生的数量;减少REDO产生的数量;在ACTIVE DATA GUARD上允许对临时表进行DML操作。

8. 数据优化:新增了ILM(数据生命周期管理)功能,添加了“数据库热图”(Database heat map),在视图中直接看到数据的利用率,找到哪些数据是最”热”的数据。可以自动实现数据的在线压缩和数据分级,其中数据分级可以在线将定义时间内的数据文件转移到归档存储,也可以将数据表定时转移至归档文件。也可以实现在线的数据压缩。

9. 应用连续性:Oracle Database 12c之前RAC的FAILOVER只做到SESSION和SELECT级别,对于DML操作无能为力,当设置为SESSION,进行到一半的DML自动回滚;而对于SELECT,虽然FAILOVER可以不中断查询,但是对于DML的问题更甚之,必要要手工回滚。而Oracle Database 12c中Oracle终于支持事务的FAILOVER。

10.Oracle Pluggable Database:Oracle PDB体系结构由一个容器数据库(CDB)和多个可组装式数据库(PDB)构成,PDB包含独立的系统表空间和SYSAUX表空间等,但是所有PDB共享CDB的控制文件、日志文件和UNDO表空间。

11. 对Top-N查询结果限制记录

从EMP表检索排名前10的工资记录

SELECT eno,ename,sal FROM emp ORDER BY SAL DESC
FETCH FIRST 10 ROWS ONLY;
从EMP表中获取排名前10%的记录

SELECT eno,ename,sal FROM emp ORDER BY SAL DESC
FETCH FIRST 10 PERCENT ROWS ONLY;
忽略前5条记录并会显示表的下5条记录

SELECT eno,ename,sal FROM emp ORDER BY SAL DESC
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY

12.截断表CASCADE

  在之前的版本中,在子表引用一个主表以及子表存在记录的情况下,是不提供截断此主表操作的。而在12c中的带有CASCADE操作的TRUNCATE TABLE可以截断主表中的记录,并自动对子表进行递归截断,并作为DELETE ON CASCADE服从外键引用。由于这是应用到所有子表的,所以对递归层级的数量是没有CAP的,可以是孙子表或是重孙子表等等。

  这一增强摈弃了要在截断一个主表之前先截断所有子表记录的前提。新的CASCADE语句同样也可以应用到表分区和子表分区等。

SQL> TRUNCATE TABLE CASCADE;
SQL> TRUNCATE TABLE PARTITION CASCADE;
13. WITH语句的改善

在12c中,你可以用SQL更快的运行PL/SQL函数或过程,这些是由SQL语句的WITH语句加以定义和声明的。以下示例演示了如何在WITH语句中定义和声明一个过程或函数:

WITH
PROCEDURE|FUNCTION test1 (…)
BEGIN
END;
SELECT FROM table_name;

给我留言

留言无头像?