Focus On Oracle

Installing, Backup & Recovery, Performance Tuning,
Troubleshooting, Upgrading, Patching, Zero-Downtime Upgrade, GoldenGate

Oracle Exadata ,Oracle ODA, Oracle ZDLRA


当前位置: 首页 » 技术文章 » Oracle 12c+

一句话描述12.1新特性(五)

本文描述的是12.1.0.2上的特性,包含索引,PDB的特性及增强等。

Advanced Index Compression

高级索引压缩在所有Oracle支持的索引类型上都能够很好的工作,包括索引的前导列中没有、或几个重复值的索引
  Creating an Index Using Prefix Compression(之前的索引压缩方式)
  CREATE INDEX  hr.emp_ename ON emp(ename) TABLESPACE users COMPRESS 1; 
  Creating an Index Using Advanced Index Compression(新的压缩方式)
  CREATE INDEX hr.emp_mndp_ix ON hr.employees(manager_id, department_id) COMPRESS ADVANCED LOW;

Approximate Count Distinct
引入了函数APPROX_COUNT_DISTINCT(),这个在海量数据中,对数据要求不是那么精确时,这个函数能快速的给出结果

Automatic Big Table Caching
在以前的版本中,当多个扫描争用缓存内存时,内存中的并行查询并没有很好的工作。这个特性实施了一个称作大表缓存的功能。引入了参数db_big_table_cache_percent_target,这个参数可将buffer cache分成两部分,一部分用作大表扫描使用,另外一部分用作OLTP中insert,update,delete操作。这个特性,对全表扫描的性能有明显的提升。在单实例环境中,并行和串行查询都可以,在RAC环境中,只对并行查询有用。在RAC中,需要设置下面这两个参数
  db_big_table_cache_percent_target = 80 这个80的意思是,80%为扫描用,剩下的20%用作OLTP
  parallel_degree_policy =auto/adaptive

FDA Support for CDBs
在12.1.0.1中,CDB不支持FDA(Flashback Data Archive),在12.1.0.2中,这个限制被移除。CDB不支持Flashback Transaction Query和Flashback Transaction Backout

Full Database Caching
从12.1.0.2开始,数据库cache有2种模式,第一种是默认的数据库Cache模式和之前的版本一样;第二种是强制全库缓存模式,这个是新的特性。当整个库的大小小于database buffer cache大小时,我们就可以把整个库的cache模式转化为强制全库缓存模式。这时,所有的数据文件,包括NOCACHE LOBs and LOBS这些使用SecureFiles都被装载到buffer cache中。
 查看是否启用FULL DATABASE CACHING
  select force_full_db_caching from v$database;
 启用FULL DATABASE CACHING
  alter database force full database caching;

In-Memory Aggregation
和之前的执行计划相比,这个特性会使用新的执行计划,尤其在星型查询(通过维度表连接事实表,聚合条件使用维度表中的条件)中效果非常不错,能减少CPU的使用。想使用这个特性,的满足下面的条件,compatible必须为12.1以上,inmemory_size必须大于0。
   SQL> show parameters compatible
   
   NAME        TYPE     VALUE
   ------------------------------------ -----------
   compatible  string   12.1.0.0 
   SQL> show parameter inmemory_size
   NAME                                 TYPE        VALUE
   ------------------------------------ ----------- ------------------------------
   inmemory_size                        big integer <Value greater then 0>
   查看是否启用
   select name,currently_used from dba_feature_usage_statistics where name like '%In-Memory%' ;
   如果启用的话,在执行计划下方,能看到下面的信息
   Note                                            
   -----                                           
      - vector transformation used for this statement
   相关的隐含参数  
   _optimizer_vector_min_fact_rows
   _optimizer_vector_transformation
   _always_vector_transformation
   _optimizer_vector_cost_adj
   相关的hint
   VECTOR_TRANSFORM
   VECTOR_TRANSFORM_FACT
   VECTOR_TRANSFORM_DIMS    
   SELECT t.calendar_year, p.prod_category, SUM(quantity_sold)                                             
   FROM   times t, products p, sales s                        
   WHERE  t.time_id = s.time_id                               
   AND    p.prod_id = s.prod_id                               
   GROUP BY t.calendar_year, p.prod_category;
 
  -------------------------------------------------------------------------------------------------------------
   |Id | Operation                            | Name                   |Rows|Bytes|Cost(%CPU)|Time|Pstart|Pstop|
   -------------------------------------------------------------------------------------------------------------
   |  0| SELECT STATEMENT                     |                           |    |     |285 (100)|        |  |   |
   |  1|  TEMP TABLE TRANSFORMATION           |                           |    |     |         |        |  |   |
   |  2|   LOAD AS SELECT                     | SYS_TEMP_0FD9D6644_11CBE8 |    |     |         |        |  |   |
   |  3|    VECTOR GROUP BY                   |                           |   5|  80 |  3 (100)|00:00:01|  |   |
   |  4|     KEY VECTOR CREATE BUFFERED       | :KV0000                   |1826|29216|  3 (100)|00:00:01|  |   |
   |  5|      TABLE ACCESS INMEMORY FULL      | TIMES                     |1826|21912|  1 (100)|00:00:01|  |   |
   |  6|   LOAD AS SELECT                     | SYS_TEMP_0FD9D6645_11CBE8 |    |     |         |        |  |   |
   |  7|    VECTOR GROUP BY                   |                           |   5| 125 |  1 (100)|00:00:01|  |   |
   |  8|     KEY VECTOR CREATE BUFFERED       | :KV0001                   |  72| 1800|  1 (100)|00:00:01|  |   |
   |  9|      TABLE ACCESS INMEMORY FULL      | PRODUCTS                  |  72| 1512|  0   (0)|        |  |   |
   | 10|   HASH GROUP BY                      |                           |  18| 1440|282  (99)|00:00:01|  |   |
   |*11|    HASH JOIN                         |                           |  18| 1440|281  (99)|00:00:01|  |   |
   |*12|     HASH JOIN                        |                           |  18| 990 |278 (100)|00:00:01|  |   |
   | 13|      TABLE ACCESS FULL               | SYS_TEMP_0FD9D6644_11CBE8 |   5|  80 |  2   (0)|00:00:01|  |   |
   | 14|      VIEW                            | VW_VT_AF278325            |  18| 702 |276 (100)|00:00:01|  |   |
   | 15|       VECTOR GROUP BY                |                           |  18| 414 |276 (100)|00:00:01|  |   |
   | 16|        HASH GROUP BY                 |                           |  18| 414 |276 (100)|00:00:01|  |   |
   | 17|         KEY VECTOR USE               | :KV0000                   |918K|  20M|276 (100)|00:00:01|  |   |
   | 18|          KEY VECTOR USE              | :KV0001                   |918K|  16M|272 (100)|00:00:01|  |   |
   | 19|           PARTITION RANGE ALL        |                           |918K|  13M|257 (100)|00:00:01| 1| 28|
   | 20|            TABLE ACCESS INMEMORY FULL| SALES                     |918K|  13M|257 (100)|00:00:01| 1| 28|
   | 21|     TABLE ACCESS FULL                | SYS_TEMP_0FD9D6645_11CBE8 |  5 |  125|  2   (0)|00:00:01|  |   |
   -------------------------------------------------------------------------------------------------------------
   
   Predicate Information (identified by operation id):
   ---------------------------------------------------
     11 - access("ITEM_10"=INTERNAL_FUNCTION("C0") AND "ITEM_11"="C2")
     12 - access("ITEM_8"=INTERNAL_FUNCTION("C0") AND "ITEM_9"="C2")
   
   Note
   -----
      - vector transformation used for this statement
   
   45 rows selected.      
   

In-Memory Column Store
内存列存储使表或分区表在内存中以列的方式存储。扫描,连接,聚合等操作和传统格式相比性能有明显改善。内存中列的格式,不会取代硬盘上火缓存中的数据。对应用来说是透明的,无需对程序做任何修改,只需DBA简单地内存列分配内存即可,优化器会自动识别。
 SELECT OWNER, SEGMENT_NAME, INMEMORY_PRIORITY, INMEMORY_COMPRESSION FROM V$IM_SEGMENTS;  

JSON Support
JSON是JavaScript Object Notation的缩写。是一种轻量级的数据交换格式。易于人阅读和编写。也易于机器解析和生成,类似于XML语言。 12.1.0.2开始,Oracle支持存储和查询JSON格式的数据,

New FIPS 140 Parameter for Encryption
在安全方面,引入了新的数据库参数DBFIPS_140,提供了在Oracle数据库中打开和关闭的联邦信息处理标准(FIPS)140密码处理方式的功能,以满足安全方面的需要。

PDB CONTAINERS Clause
假如在CDB和PDB中有同样的表和视图,可以通过containers字句把CDB和PDB中的查询一并输出。CDB的视图,在12.1.0.1中,是通过CDB$VIEW的方式在实现,在12.1.0.2中是通过CONTAINERS来实现的。
下面的语句是查询在cond_id为45和49的库中表scott.emp中的employe name
SELECT ename FROM CONTAINERS(scott.emp) WHERE CON_ID IN (45, 49);
其实CDB_开头的参数,也是通过containers实现的。
  12.1.0.1
  SQL> select TEXT_VC from cdb_views where view_name='CDB_DATA_FILES';
  
  TEXT_VC
  --------------------------------------------------------------------------------
  SELECT "FILE_NAME","FILE_ID","TABLESPACE_NAME","BYTES","BLOCKS","STATUS","RELATI
  VE_FNO","AUTOEXTENSIBLE","MAXBYTES","MAXBLOCKS","INCREMENT_BY","USER_BYTES","USE
  R_BLOCKS","ONLINE_STATUS","CON_ID" FROM CDB$VIEW("SYS"."DBA_DATA_FILES")
  
  12.1.0.2
  SQL> select TEXT_VC from cdb_views where view_name='CDB_DATA_FILES';
  
  TEXT_VC
  --------------------------------------------------------------------------------
  SELECT "FILE_NAME","FILE_ID","TABLESPACE_NAME","BYTES","BLOCKS","STATUS","RELATI
  VE_FNO","AUTOEXTENSIBLE","MAXBYTES","MAXBLOCKS","INCREMENT_BY","USER_BYTES","USE
  R_BLOCKS","ONLINE_STATUS","CON_ID" FROM CONTAINERS("SYS"."DBA_DATA_FILES")

PDB File Placement in OMF
一个新的初始化参数create_file_dest,她允许管理员为PDB OMF(Oracle Managed Files)设置一个默认的位置

PDB Logging Clause
在创建或修改PLUGGABLE DATABASE时,可以指定logging或nologging来设置PDB中表空间的属性。如果logging属性未指定,默认是logging模式

PDB Metadata Clone
创建PDB时,可以只克隆数据库的数据定义模型而不要数据(用户创建的表或索引的数据被舍弃),创建时指定NO DATA就可以了
create pluggable database pdb2 from pdb1 no data;

PDB Remote Clone
通过DBLINK可以克隆一个PDB或non-CDB,这个功能不错。比如,你可以把一个12c的non-cdb克隆为一个pdb,这样就可以clone或插拔这个数据库
如果是从non-cdb克隆为pdb,在打开之前必须要执行脚本@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql


PDB Snapshot Cloning Additional Platform Support
如果初始化参数CLONEDB设置为true,那么在启用dNFS的任何本地文件系统,NFS文件系统或集群文件系统支持snapshot copy方式克隆数据库,源端PDB必须为只读模式。如果CLONEDB设置为false,那么存储必须支持快照。

PDB STANDBYS Clause
在Ddata Guard环境中,通过standbys字句可以指定是否克隆这个PDB。有2个值ALL和NONE,如果是ALL,则会在所有的备库中创建,如果为NONE,则在所有的备库中不创建,这时备库上的这个pdb数据文件会被offline,状态为UNNAMED。当然之后还可以启用。
  STANDBYS=ALL
  STANDBYS=NONE

PDB State Management Across CDB Restart
可以保存PDB的状态,在CDB重启后,数据库会自动打开。PDB默认会到mount状态,也可以使用trigger等方法,让PDB在CDB打开时自动打开。
   alter pluggable database salespdb save state;
   alter pluggable database salespdb discard state;
   alter pluggable database all save state;
   alter pluggable database all except salespdb, hrpdb save state;

PDB Subset Cloning
假如一个pdb有ts1,ts2,ts3,ts4,ts5,ts6,ts7等表空间,可以根据需要只clone其中部分表空间到一个新的pdb
  USER_TABLESPACES=('tbs2');
  USER_TABLESPACES=('tbs1','tbs4','tbs5');
  USER_TABLESPACES=ALL EXCEPT('tbs1','tbs4','tbs5');

Rapid Home Provisioning
简单的说就是可以把oracle home做成image,然后在RHP客户端可以快速的部署,RHP是集群资源的一部分



关键词:12c oracle 

相关文章

Oracle宣布推出全球分布式自治数据库
Oracle 23c新特性---开发人员
Oracle 23c free FAQ
Oracle 23c free and OCI Base Service
Oracle 21c
基于PDB的Active Data Guard(Oracle 21.7+)
在Oracle数据库中使用REST
OGG from MySQL to Oracle
Oracle数据库容灾之两地三中心实践
低代码开发用Oracle Apex,看这篇就够了
Oracle Database 20c之SQL宏
关于max_string_size
Top