教学文章
Technology Exchange
热门课程
400电话

免费咨询热线
400-090-9964

教学文章

Oracle 12c新特性系列专题-ILM信息生命周期管理

时间:2019-05-28 来源:

  随着Oracle database 12c的普及,数据库管理员 (DBA) 的角色也随之发生了转变。 Oracle 12c数据库对 DBA 而言是下一代数据管理。它让 DBA 可以摆脱单调的日常管理任务,能够专注于如何从数据中获取更多价值。未来我们会推出基于Oracle12c的技术文章,帮助DBA尽快掌握新一代数据库的新特性从而提高工作效率。这次分享的是来自于优秀的OCM讲师陈卫星的文章。

  数据库Oracle Database 12c中引入了ILM(Information Lifecycle Management)信息生命周期管理和存储增强的特性。ILM的一个最重要部分是自动数据存放(Automatic Data Placement),简称ADP。

  存储增强方面 12c引入了在线移动数据文件的特性( Online Move Datafile), 该特性允许用户在线将一个有数据的数据文件在存储之间移动,且数据库保持打开并访问该文件。

  数据生命周期


  使用多层次的存储介质可以节省成本


  ADO 实现流程


  要为数据库中的数据移动实施信息生命周期管理(ILM)策略,可以使用热图(HeatMap)和自动数据优化(ADO)功能。

  1、启用或者禁用热图(Heat Map)

  可以在系统或会话级别使用alter system或alter session声明使用heat_map子句启用和禁用热图跟踪:

  ALTER SYSTEM SET HEAT_MAP = ON;

  启用热图后,内存活动跟踪模块将跟踪所有访问。不跟踪SYSTEM和SYSAUX表空间中的对象。

  ALTER SYSTEM SET HEAT_MAP = OFF;

  禁用热图时,内存活动跟踪模块不跟踪访问。heat_map初始化参数的默认值为off。

  heat_map初始化参数还启用和禁用自动数据优化(ADO)。对于ADO,heat_map必须在系统级别启用。

  2、通过Heat map 视图查看热图信息

  /*查看总的热图段信息,只要监视的对象有操作,就会有热图信息:*/

  SELECT SUBSTR(OBJECT_NAME,1,20),SUBSTR(SUBOBJECT_NAME,1,20), TRACK_TIME, SEGMENT_WRITE, FULL_SCAN, LOOKUP_SCAN

  FROM V$HEAT_MAP_SEGMENT;

  查看用户下的热图段信息:

  SELECT SUBSTR(OBJECT_NAME,1,20),SUBSTR(SUBOBJECT_NAME,1,20), SEGMENT_WRITE_TIME, SEGMENT_READ_TIME, FULL_SCAN, LOOKUP_SCAN

  FROM USER_HEAT_MAP_SEGMENT;

  /*查看表空间的热图信息*/

  SELECT SUBSTR(TABLESPACE_NAME,1,20), SEGMENT_COUNT

  FROM DBA_HEATMAP_TOP_TABLESPACES ORDER BY SEGMENT_COUNTDESC;

  3、使用 DBMS_HEAT_MAP查看相应的信息:

  /* 查看某张表的热图信息 */

  SELECT SUBSTR(segment_name,1,10) Segment, min_writetime,min_ftstime

  FROM TABLE(DBMS_HEAT_MAP.OBJECT_HEAT_MAP('SH','SALES'));

  /* 查看某个表空间热图的信息 */

  SELECT SUBSTR(tablespace_name,1,16) Tblspace,min_writetime, min_ftstime

  FROM TABLE(DBMS_HEAT_MAP.TABLESPACE_HEAT_MAP('USERS'));

  /* 查看某张表的i/o如图 */

  SELECT relative_fno, block_id, blocks,TO_CHAR(min_writetime, 'mm-dd-yy hh-mi-ss') Mintime,

  TO_CHAR(max_writetime,'mm-dd-yy hh-mi-ss') Maxtime,

  TO_CHAR(avg_writetime, 'mm-dd-yy hh-mi-ss') Avgtime

  FROMTABLE(DBMS_HEAT_MAP.EXTENT_HEAT_MAP('SCOTT','EMP')) WHERE ROWNUM < 10;

  /* 查看某张表分区的如图 */

  SELECT SUBSTR(owner,1,10) Owner,SUBSTR(segment_name,1,10) Segment,

  SUBSTR(partition_name,1,16) Partition, SUBSTR(tablespace_name,1,16)Tblspace,

  segment_type,segment_size FROM TABLE(DBMS_HEAT_MAP.OBJECT_HEAT_MAP('SH','SALES'));

  4、使用自动数据优化

  要实现ILM策略,可以使用自动数据优化(ADO)来自动压缩和移动数据库中不同存储层之间的数据。该功能包括创建为每一层指定不同压缩级别的策略的能力,以及控制何时发生数据移动的能力。

  4.1、管理自动数据优化策略

  在使用SQL语句创建和更改表时,可以在行、段和表空间粒度级别上为ADO指定策略。

  通过为ADO指定策略,您可以自动在数据库中的不同存储层之间移动数据。这些策略还允许您为每一层指定不同的压缩级别,并控制何时发生数据移动。

  可以使用关键字group、row或segment为一组相关对象或段或行级别指定ADO策略的作用域。

  可应用于组策略的压缩的默认映射为:

  COMPRESS ADVANCED:在堆表上,索引映射到标准压缩,LOB段映射到低级压缩。

  COMPRESS FORQUERY LOW/QUERY HIGH:在堆表上,索引映射到标准压缩和LOB段映射到中级压缩。

  COMPRESS FORARCHIVE LOW/ARCHIVE HIGH:在堆表上,索引映射到标准压缩和LOB段映射到高级等压缩。 无法更改压缩映射。组只能应用于段级策略。存储分层策略仅适用于段级别,不能在行级别指定。

  自动数据优化(ADO)支持具有InMemory、InMemoryMecompress和No InMemory策略类型的内存列存储(IM列存储)。

  下面是使用no inmemory子句从IM列存储中逐出对象的示例:

  ALTER TABLE sales_2015 ILM ADD POLICY NO INMEMORY

  AFTER 7 DAYSOF NO ACCESS;

  user/dba_ilmdatamovementpolicies和v$heat_map_段视图包括有关内存列存储的ADO策略的信息。v$im_adotasks和v$im_adotaskdetails视图包含有关内存列存储区中ADO组件操作的审核信息。

  您可以使用pl/sql_函数选项自定义策略,该选项提供确定何时执行策略的能力。在 pl/sql_函数选项仅适用于段级策略。例如:

  CREATE OR REPLACE FUNCTION my_custom_ado_rules (objn INNUMBER) RETURN BOOLEAN;

  ALTER TABLE sales_custom ILM ADD POLICY COMPRESS ADVANCEDSEGMENT

  ONmy_custom_ado_rules;

  4.2、建表时设置ILM ADO 策略

  ILM 的语法主要如下:





  ilm_clause

  ILM

  { ADD POLICY ilm_policy_clause

  | { DELETE | ENABLE | DISABLE } POLICY ilm_policy_name

  | DELETE_ALL | ENABLE_ALL | DISABLE_ALL

  }

  ilm_policy_clause

  { ilm_compression_policy | ilm_tiering_policy }

  ilm_compression_policy

  { table_compression { SEGMENT | GROUP }

  { { AFTERilm_time_period OF { { NO ACCESS } | { NO MODIFICATION } | CREATION } }

  | { ONfunction_name } }

  }

  |

  { ROW STORE COMPRESS ADVANCED ROW AFTER ilm_time_periodOF NO MODIFICATION }

  ilm_tiering_policy

  { TIER TO tablespace [ SEGMENT | GROUP ] [ ONfunction_name ] }

  |

  { TIER TO tablespace READ ONLY [ SEGMENT | GROUP ]

  { { AFTERilm_time_period OF { { NO ACCESS } | { NO MODIFICATION } | CREATION } }

  | { ONfunction_name } } }

  ilm_time_period

  integer { { DAY | DAYS } | { MONTH | MONTHS } | { YEAR |YEARS } }

  使用ILM ADD POLICY子句和CREATE TABLE语句创建带有ILM ADO策略的表。

  /* 创建一个ILM ADO策略的表 */

  CREATE TABLE sales_ado

  (PROD_ID NUMBERNOT NULL,

  CUST_ID NUMBERNOT NULL,

  TIME_ID DATE NOTNULL,

  CHANNEL_ID NUMBERNOT NULL,

  PROMO_ID NUMBERNOT NULL,

  QUANTITY_SOLDNUMBER(10,2) NOT NULL,

  AMOUNT_SOLDNUMBER(10,2) NOT NULL )

  PARTITION BY RANGE(time_id)

  ( PARTITIONsales_q1_2012 VALUES LESS THAN (TO_DATE('01-APR-2012','dd-MON-yyyy')),

  PARTITIONsales_q2_2012 VALUES LESS THAN (TO_DATE('01-JUL-2012','dd-MON-yyyy')),

  PARTITIONsales_q3_2012 VALUES LESS THAN (TO_DATE('01-OCT-2012','dd-MON-yyyy')),

  PARTITIONsales_q4_2012 VALUES LESS THAN (TO_DATE('01-JAN-2013','dd-MON-yyyy')) )

  ILM ADD POLICY COMPRESS FOR ARCHIVE HIGH --需要exadata,普通机器不支持

  SEGMENT AFTER 12 MONTHS OF NO ACCESS;

  后面最后两行可以用下面行替代:

  ILM ADD POLICY COMPRESS

  SEGMENT AFTER 12MONTHS OF NO ACCESS;

  /* 查看当前 ILM ADO 策略 */

  SELECT SUBSTR(policy_name,1,24) POLICY_NAME, policy_type,enabled

  FROMUSER_ILMPOLICIES;

  POLICY_NAME POLICY_TYPE ENABLE

  ------------------------ ------------- ------

  P1 DATA MOVEMENT YES

  4.3、添加表的ILM策略:

  /* 30天如果没有修改,则增加行级压缩策略 */

  ALTER TABLE sales MODIFY PARTITION sales_q1_2002

  ILM ADD POLICYROW STORE COMPRESS ADVANCED ROW

  AFTER 30 DAYS OFNO MODIFICATION;

  /* 6个月如果没有修改,则增加段级的压缩策略 */

  ALTER TABLE sales MODIFY PARTITION sales_q1_2001

  ILM ADD POLICYCOMPRESS FOR ARCHIVE HIGH SEGMENT

  AFTER 6 MONTHS OFNO MODIFICATION;

  /* 12月如果没有访问,则增加段级的压缩策略 */

  ALTER TABLE sales MODIFY PARTITION sales_q1_2000

  ILM ADDPOLICY COMPRESS FOR ARCHIVE HIGH SEGMENT

  AFTER 12MONTHS OF NO ACCESS;

  /* 增加策略把数据移动到另外一个表空间*/

  /* that is on low cost storage media */

  ALTER TABLE sales MODIFY PARTITION sales_q1_1999

  ILM ADD POLICY

  TIER TOmy_low_cost_sales_tablespace;

  ALTER TABLE sales

  ILM ADD POLICY TIER TO users READ ONLY

  SEGMENT AFTER 3 DAYSOF NO ACCESS;

  /* 查看当前的策略 */

  SELECT SUBSTR(policy_name,1,24) POLICY_NAME, policy_type,enabled

  FROMUSER_ILMPOLICIES;

  POLICY_NAME POLICY_TYPE ENABLE

  ------------------------ ------------- ------

  P1 DATA MOVEMENT YES

  P2 DATA MOVEMENT YES

  P3 DATA MOVEMENT YES

  P4 DATA MOVEMENT YES

  P5 DATA MOVEMENT YES

  4.4、禁用和删除ILM ADO策略

  使用带alter table语句的ILM disable policy或ILM delete policy子句禁用或删除ILM ADO策略。

  您可以禁用或删除ADO的ILM策略,如下面示例中的SQL语句所示。有时,如果这些策略与要添加的新策略冲突,您可能需要删除现有的ILM策略

  /* 禁用或者删除表上指定的ADO策略 */

  ALTER TABLE sales_ado ILM DISABLE POLICY P1;

  ALTER TABLE sales_ado ILM DELETE POLICY P1;

  /* 禁用或者删除所有表上的ADO策略 */

  ALTER TABLE sales_ado ILM DISABLE_ALL;

  ALTER TABLE sales_ado ILM DELETE_ALL;

  /* 禁用或者删除某个指定分区表上的策略 */

  ALTER TABLE sales MODIFY PARTITION sales_q1_2002 ILMDISABLE POLICY P2;

  ALTER TABLE sales MODIFY PARTITION sales_q1_2002 ILMDELETE POLICY P2;

  /* 禁用或者删除分区上所有的ADO策略 */

  ALTER TABLE sales MODIFY PARTITION sales_q1_2000 ILMDISABLE_all;

  ALTER TABLE sales MODIFY PARTITION sales_q1_2000 ILMDELETE_ALL;

  4.5、指定段级的ADO压缩策略

  可以使用段级压缩分层策略在表中的段级指定压缩。

  结合行级压缩分层策略,您可以对数据库中数据的存储和管理方式进行细粒度控制。

  下面示例说明了如何为ADO创建策略,以在Sales_ADO表上强制实施压缩和存储分层策略,从而反映以下业务需求:

  1. 大量数据加载

  2. OLTP应用场景

  3. 6个月没有更新后则进行压缩或者归档

  4. 移到廉价的存储上

  /* 6个月如果没有修改,则增加段级压缩 */

  ALTER TABLE sales_ado ILM ADD POLICY

  COMPRESS FORARCHIVE HIGH

  SEGMENT AFTER 6 MONTHS OF NO MODIFICATION;

  or:

  ALTER TABLE sales_ado ILM ADD POLICY

  COMPRESS

  SEGMENT AFTER 6 MONTHS OF NO MODIFICATION

  Table altered.

  /* 增加存储级的策略 */

  ALTER TABLE sales_ado ILM ADD POLICY

  TIER TOmy_low_cost_tablespace;

  or

  ALTER TABLE sales_ado

  ILM ADD POLICY TIER TO example READ ONLY

  SEGMENT AFTER 180 DAYS OF NO ACCESS;

  SELECT SUBSTR(policy_name,1,24) POLICY_NAME, policy_type,enabled

  FROMUSER_ILMPOLICIES;

  POLICY_NAME POLICY_TYPE ENABLED

  ------------------------ ------------- -------

  ...

  P6 DATA MOVEMENT YES

  P7 DATA MOVEMENT YES

  4.6、指定ADO的行级压缩层

  除了基本和高级压缩之外,自动数据优化(ADO)策略还支持混合柱状压缩(HCC)。

  无论表的压缩类型如何,都可以在任何表上定义HCC行级策略。当段的其他部分有DML活动时,来自冷块的行可以用HCC压缩。

  对于非HCC表的HCC策略,如果行位于HCC压缩单元(CU)中,则在更新期间可能会发生行移动。此外,与行移动的其他用例类似,索引维护对于更新引用已移动行的索引条目是必需的。

  Oracle数据库12C版本1(12.1)支持行级策略:但是,数据库必须具有12.2或更高的兼容性才能使用HCC行级压缩策略。

  /* 创建一个使用HCC行级压缩的策略 */

  ALTER TABLE employees_ilm

  ILM ADD POLICYCOLUMN STORE COMPRESS FOR QUERY

  ROW AFTER 30 DAYS OF NO MODIFICATION;

  /* 创建一个使用高级行级压缩的策略 */

  ALTER TABLE sales_ado

  ILM ADD POLICYROW STORE COMPRESS ADVANCED

  ROW AFTER 60 DAYS OF NO MODIFICATION;

  SELECT policy_name, policy_type, enabled

  FROMUSER_ILMPOLICIES;

  POLICY_NAME POLICY_TYPE ENABLE

  ------------------------ ------------- -------

  ...

  P8 DATA MOVEMENT YES

  /* 查询相关ADO信息 */

  select o.OBJECT_NAME,o.OBJECT_TYPE,o.INHERITED_FROM,i.POLICY_NAME,i.ACTION_TYPE,i.SCOPE,i.COMPRESSION_LEVEL,i.TIER_TABLESPACE,i.CONDITION_TYPE,i.CONDITION_DAYS,o.ENABLED

  from dba_ilmdatamovementpolicies i,dba_ilmobjects o

  where i.POLICY_NAME=o.POLICY_NAME

  and o.OBJECT_OWNER='SCOTT'

  and o.OBJECT_NAME='SALES_ADO';

  5、管理ILMADO参数

  您可以使用在DBM_ ILM_ADMI包中使用CUSTOMIZE_ILM 过程设置的ILM ADO参数自定义ADO环境。

  您可以使用DBA_ILMPARAMETERS视图显示参数。例如,下面的查询显示ADO相关参数的值。

  SQL> SELECT NAME, VALUE FROM DBA_ILMPARAMETERS;

  ---------------------------------------------------------------- ----------

  ENABLED 1

  RETENTION TIME 30

  JOB LIMIT 2

  EXECUTION MODE 2

  EXECUTION INTERVAL 15

  TBS PERCENT USED 85

  TBS PERCENT FREE 25

  POLICY TIME 0

  ABSOLUTE JOB LIMIT 10

  DEGREE OF PARALLELISM 4

  5.1、使用自定义的ADO 设置

  SQL> BEGIN

  2 DBMS_ILM_ADMIN.CUSTOMIZE_ILM(DBMS_ILM_ADMIN.TBS_PERCENT_USED, 85);

  3 DBMS_ILM_ADMIN.CUSTOMIZE_ILM(DBMS_ILM_ADMIN.TBS_PERCENT_FREE, 25);

  4 END;

  5 /

  SQL> BEGIN

  2 DBMS_ILM_ADMIN.CUSTOMIZE_ILM(DBMS_ILM_ADMIN.ABS_JOBLIMIT, 10);

  3 END;

  4 /

  tbs_percent_used参数的值指定当表空间被认为已满时表空间配额的百分比。默认值为85%。

  tbs_percent_free参数的值指定表空间的目标可用百分比。默认值为25%。

  对于tbs_percent*参数的值,ADO尽最大努力,但不能保证。当表空间配额的百分比达到所使用的tbs_percent_used的值时,ADO开始移动数据,使表空间配额的空闲百分比接近tbs_percent_free的空闲值。例如,假设tbs_percent_used设置为85,tbs_percent_free设置为25,并且表空间将变为90%满。然后,ADO启动移动数据的操作,使表空间配额至少有25%的可用空间,这也可以解释为小于表空间配额的75%。

  如果在增加ADO策略的时候把过期的数据移动的其它表空间,那么什么时候开始移动数据,跟表空间的上面两个ADO参数有关。

  5.2、使用视图监视ADO策略

  可以使用DBAILM*和用户ILM*视图查看和监视与数据库对象相关联的ADO策略,从而更容易根据需要更改策略.

  · DBA/USER_ILMDATAMOVEMENTPOLICIES 视图显示特定于ADO的ILM策略的数据移动相关属性的信息

  · DBA/USER_ILMTASKS 视图显示存储过程EXECUTE_ILM 的任务id号

  · DBA/USER_ILMEVALUATIONDETAILS 视图显示特定任务的详细信息和策略。

  · DBA/USER_ILMOBJECTS 视图显示所有的ADO对象和策略。

  6、企业案例:

  请思考下面的问题,是否能够得出正确的判断呢,我们会在后面的分享中告诉大家

  Which three tasks can be automaticallyperformed by the Automatic Data Optimization feature of Information lifecycleManagement (ILM)?

  A. Tracking the most recent read time for atable segment in a user tablespace

  B. Tracking the most recent write time fora table segment in a user tablespace

  C. Tracking insert time by row for tablerows

  D. Tracking the most recent write time fora table block

  E. Tracking the most recent read time for atable segment in the SYSTEM tablespace

  F. Tracking the most recent write time fora table segment in the SYSAUX tablespace

  本篇文章作者介绍:Oracle金牌讲师


  北京优技教育科技有限公司

  培训机构创始人、Oracle技术首席讲师

  自2000年就职于CUUG从事于Oracle的授课和维护工作,经过多年辗转于2006年再度回到CUUG担任Oracle技术讲师,多年的Oracle工作经验,坚持不懈的学习Oracle新的技术,通过举办Oracle技术沙龙(总共累积50多场),向广大Oracle爱好者传播最新、主流的Oracle技术,为推广Oracle认证做了很多工作,每年培训出众多的Oracle技术人才,为Oracle技术推广和Oracle认证普有着杰出的贡献和突出影响力。

  “Oracle WDP项目为个人学习Oracle技术提供了良好的学习途径,对Oracle的普及起到了巨大的作用,很多人通过这个途径学到了Oracle的技术,找到了满意的工作,实现了人生的价值。”

版权所有@北京神脑资讯技术有限公司(CUUG,中国UNIX用户协会) Copyright ALL Rights Reserved 京ICP备11008061号-1

CUUG旗下网站:www.cuug.com.cn www.cuug.com oracle.cuug.com bbs.cuug.com www.cuug.net

电话:010-59426307 010-59426319 邮政编码:100089

地址:北京市海淀区北清路164号28-38号院