什么是APS partitions?
APS利用分区来隔离数据,数据在不同的分区操作提高了整体性能。ODS和PDS的数据存储在同样的表中,并以
plan_id划分成不同的分区。分区表的数量根据系统的family pack级别而定。ODS存储的是收集来的数据。数据收集完成后,分区的数据将插入到ODS实例分区。插入的行plan_id为-1。如果多个ORACLE INSTANCE数据被收集,实例数据将在各自单独的ODS实例分区。此时表中将含有SR_INSTANCE_ID 或者INSTANCE_ID
字段用来区分ERP source instance。
PDS存储的是ASCP计划后的数据。ASCP跑完后,得出的数据将插入PDS计划分区。这些行的plan_id将>0
默认设置下,每个计划有一个自己的计划分区。
APS默认安装了1个实例分区和5个计划分区。可以用以下SQL查询:
SQL #1
-- Run this from SQL*Plus the column HIGH_VALUE is column type LONG and
will not format correctly in a spreadsheet
set lines 200
set colsep |
spool SQL-1_137293.1.txt
SELECT table_name, partition_name, num_rows, high_value, sample_size, last_analyzed, global_stats
FROM all_tab_partitions WHERE table_name like 'MSC%'
order by substr(partition_name,instr(partition_name,'_',-1,1)+1) -- To check the partition count of each table use order by table_name, partition_name
spool off
其中SYSTEM_ITEMS_0的分区表为模板分区,千万不要删除。有两个下划线的分区表为实例分区,如SYSTEM_ITEMS__1。其它的为计划分区。比如SYSTEM_ITEMS_1到SYSTEM_ITEMS_5为5个计划分区。它们共同的表为MSC_SYSTEM_ITEMS
如果启用了MSC: Share Plan Partition = Yes选项,这里将只有一个共享计划分区:SYSTEM_ITEMS_999999
ODS/PDS的数据如果你进行了误操作,都没有关系。ODS的数据可以再次运行计划收集来获得,PDS的数据可以通过运行ASCP来获得。但是如果模板分区被删除了,那就只能通过系统恢复的方法了,所以一定要小心!
删除分区/计划分区与创建APS分区的并发请求。
千万不要删除模板分区!
从11.5.9这个版本开始,既可以删除计划分区也可以删除实例分区。这取决与Plan参数的设置。
在11.5.6-11.5.8版本,仅能通过请求名为“DROP PLAN PARTITION"删除计划分区。删除实例分区需要
手工进行。删除计划分区前需要清除计划。删除实例分区并没有移走为这个实例所收集的所有数据。以下
的SQL用来清除实例的数据。
-- This SQL will build a script to delete all tables where the instance_id column appears
set heading off
set pagesize 500
spool delete_instance_id.sql
select distinct 'delete from '||TABLE_NAME||' where instance_id = nn;' -- replace nn with your instance_id
from dba_tab_columns where column_name = 'INSTANCE_ID' and owner = 'MSC';
spool off
SQL>@delete_instance_id.sql
-- This SQL will build a script to delete all tables where the sr_instance_id column appears
set heading off
set pagesize 500
spool delete_sr_instance_id.sql
select distinct 'delete from '||TABLE_NAME||' where sr_instance_id = nn;' -- replace nn with your instance_id
from dba_tab_columns where column_name = 'SR_INSTANCE_ID' and owner = 'MSC' and table_name like 'MSC%';
spool off
SQL>@delete_sr_instance_id.sql
注意:This Script will report an error when attempting to delete from a %MV or %SN table. This error can be ignored.
删除分区或计划分区需要将这个请求加入到All MSC Reports 请求组。NAV:系统管理员-责任-请求。这些也可以用SQL实现。
创建APS分区。运行创建APS分区的请求就可以了。这个请求需要加入All MSC Reports 请求组。可以以系统管理员的职责或ASCP计划员的身份去运行请求。
注意:仅创建你系统需要使用的分区,闲置的分区会导致性能问题。建议删除不用的分区。
查看ODS分区的信息:
-- Free_flag
1 = Free
2 = In use
select instance_id, free_flag, creation_date, last_update_date from msc_inst_partitions;
查看ODS分区的状态信息:
-- ST_STATUS
0 = No source pull or collection is in process
1 = Pull and collection process has begun
2 = Collection has ended and waiting for load to begin
3 = Load has begun
4 = Load has ended and staging tables are being purged
select instance_code, instance_id, apps_ver, a2m_dblink, m2a_dblink, st_status from msc_apps_instances
查看PDS分区的信息:
select
mp.COMPILE_DESIGNATOR "Plan Name",
mp.PLAN_ID "Plan ID",
mp.SR_INSTANCE_ID "Instance ID",
mtp.ORGANIZATION_CODE "Owning Org",
mp.PLAN_COMPLETION_DATE "Last Run Date",
decode (mp.PLAN_TYPE, 1, 'Manufacturing MRP', 2, 'Production MPS',
3, 'Master MPP',4,'IO Plan', 5, 'Distribution Plan' ,
7, 'PS Production Schedule', 6, 'SNO Schedule') "Plan Type",
decode (md.PRODUCTION,1, 'Yes', 2, 'No', NULL, 'No') "Production Flag",
decode (md.LAUNCH_WORKFLOW_FLAG,1, 'Yes', 2, 'No', NULL, 'No') "Launch Workflow",
decode (md.INVENTORY_ATP_FLAG,1, 'Yes', 2, 'No', NULL, 'No') "ATP Plan",
mp.CURR_START_DATE "Start Date",
mp.CUTOFF_DATE "End Date"
from
msc_designators md,
msc_plans mp,
msc_trading_partners mtp
where
md.designator=mp.compile_designator and
md.sr_instance_id=mp.sr_instance_id and
mtp.sr_instance_id=mp.sr_instance_id and
md.sr_instance_id=mtp.sr_instance_id and
mtp.sr_tp_id=md.organization_id and
mtp.sr_tp_id=mp.organization_id and
mp.organization_id=md.organization_id
and mtp.partner_type = 3
ORDER BY "Plan Name";
查看计划分区的使用情况:
select plan_id, plan_name, free_flag, partition_number from msc_plan_partitions
注意:如果返回的记录,free_flag值没有一个是1,而这时你想定义一个计划,然后保存。系统就会报错:
“No free partitions available, Contact the DBA to create partitions”
简单描述一下这个过程:定义一个计划时,向MSC_DESIGNATORS表插入记录。然后检查MSC_PLAN_PARTITIONS
表并更新free_flag和plan_name字段的值。最后插入或更新MSC_PLANS, MSC_PLAN_ORGANIZATIONS, MSC_DESGINATORS, MSC_SUBINVENTORIES这些表。
遇到这种情况我们可以用inst_partition_count = 0 and plan_partition_count = 1参数来创建一个新的计划分区。对于11.5.10(含)以上的版本参数名叫‘Plan partition count’ and ‘Instance partition count’
ODS和PDS中的数据可以通过字段sr_instance_id (or instance_id) 和plan_id来进行区分。
plan_id = -1的数据行属于ODS,如果有多个源ERP实例被使用,可以通过sr_instance_id字段来区分。
plan_id >0的数据行属于PDS,如果有多个源ERP实例被使用,也可以通过sr_instance_id字段来区分。
用以下SQL可以获得相关信息:
select count(*), sr_instance_id, plan_id from msc_system_items group by sr_instance_id, plan_id