�╃�����ц�楂���版���浇����ㄧ��f�浣�/p>

�ㄦ����涓���ㄥ�浜�В濡��浣跨� Oracle �版�搴��琛��������杞戒互���浣����Oracle ���杩��婊��绐�������/p>

澶х害 2 涓����

���绋�������富棰��

灏����疆浜���炬�涓�互��浇���������������骞���俱�锛�������负姝ゆ�浣�������浇���灞�����锛��浠ョ�����㈡�锛��搴���村��戒�姣���裤�锛�

娉�� 姝ゅ�锛��杩��浠ュ�涓��姝ラ�涓��榧���惧�姣�釜���������锛�������浇������璇ユ�楠ょ��崇�灞����������互�����釜灞�����灏�������/span>

澶у��版��典�锛���版�浠������版�����轰��″���(OLTP) 婧�郴缁��娌℃��存�杩���版�����版�������搴�郴缁����父锛��浜�OLTP 绯荤�浠ュ��ㄦ�浠剁�褰㈠�����版�棣�����杩���版�蹇�』��浇�版����搴�腑锛��濂芥�骞惰���浇锛���藉�����ㄧ����婧��

渚��锛��浜�����涓�娇�ㄧ�绀轰���� (MyCompany) ����¢�姹��纾��绌洪�����讹����杩��涓�勾�������������稿��������������版����蹇�』娓�������������Oracle �版�搴�〃��缉�ラ��剧���┖�淬�杩���������ㄧ��f�浣��缁存����杩�娇��Oracle ���瀹�����

杩��涓婚���〃

寮�����绋������ㄥ�璇ワ�

瀹�� Oracle �版�搴�11 g ��/p>

��缓涓�釜��负 wkdir ���褰��灏� etl.zip 涓�浇骞惰В��缉�� wkdir ���涓��

杩��涓婚���〃

澶��琛�

涓轰�灏���ㄦ�浠跺�杞藉�瀹�滑������搴�腑锛�yCompany 浣跨�浜�Oracle �版�搴���ㄨ〃�规�����规����灏���ㄦ����濡�钩�㈡�浠讹��ㄦ����涓��绀轰负涓�釜���������琛ㄣ��变���互浣跨� SQL 璁块�澶��琛������ㄥ�浠ヤ娇��SQL��L/SQL ��Java �������界��ュ苟琛��璇㈠��ㄦ�浠躲���父锛��浼�������浆�㈠���浇 (ETL) 杩��涓�娇�ㄥ��ㄨ〃锛���版�杞��锛��杩�SQL锛���版���浇缁���颁�涓��楠や腑���浜�ETL 涓��澶���界�搴��浠ュ�澶��骞抽���欢������浠���������ヨ�锛���ㄨ〃�芥�涓�」��父寮哄ぇ����姐�澶��琛ㄦ�浣跨� SQL*Loader ���浠f�娉��

骞惰��ц�

骞惰��ц���互�捐����澶у��版�搴�����������������搴���达�杩�������父涓��绛����郴缁�(DSS) ������搴��璧峰���娇�ㄣ��ㄨ���互�ㄦ�浜�被��� OLTP 绯荤���贩��郴缁��瀹��骞惰��ц�������璇达�骞惰�灏辨�灏�换�″��诧�浠��浣垮�涓��绋���舵�琛�换�★�������涓�釜杩��涓��涓�釜�ヨ��ц����浠诲����濡���ㄥ�涓��绋���跺����骞翠腑��釜涓�����搴��������涓�釜杩�����澶�����瀛e害����典�锛����互浣跨�骞惰��ц���

浣跨� Oracle ����ц�婊��绐�����

�版�浠�����绠$�绯荤�涓��涓��甯搁�瑕��浠诲�灏辨�淇���版�涓�OLTP锛��锛�郴缁�腑���绉���瑰�姝ャ����锛�����瑙�害���锛�����瀵垮���父寰��锛��姝ゅ���浇�版����蹇�』灏���版�浠����郴缁�腑娓��锛��绉��浣��甯哥О涓烘��ㄧ��f�浣������跺�涓���ㄥ�璇ュ敖蹇��瀹��姝ゆ�浣��涓��搴����换浣�����搴�郴缁��骞跺����璁块���/p> 杩��涓婚���〃

�ㄥ�濮��琛�� OBE ��换�′�������瀵圭���������� ( SH ) 妯″�瀹��涓���存��������� SH 妯″�涓��寤哄�浠��璞°�姝ゅ�锛��杩��瑕��浜� SH �ㄦ��朵�绯荤�������浜���ㄨ�浜���圭� SQL ��欢�� modifySH_11g.sql ���琛�互涓��楠わ�

���涓�釜缁��绐�����杩��缁��浼���ц�浠ヤ��戒护锛��宸ヤ�����存�涓� /home/oracle/wkdir 锛�/p>

cd wkdir

( 娉�� ���绋��璁炬��ユ� /home/oracle/wkdir ��欢澶广�濡��娌℃�锛�������缓姝ゆ�浠跺す锛�苟灏� etl.zip ���瀹硅В��缉�版���欢澶逛腑��

���涓�釜 SQL*Plus 浼��锛�互 SH �ㄦ�韬�唤�� SH �d护杩��杩����/p>

�ㄦ���SQL*Plus 浼��涓��濡����ず�ц� modifySH_11g.sql ���锛�

@modifySH_11g.sql

�峰�����虹����搴��浠ヤ��惧��归���

�ㄤ互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц� create_directory.sql ���锛��灏�互涓�SQL 璇��澶����SQL*Plus 浼��涓��

DROP DIRECTORY data_dir;
DROP DIRECTORY log_dir;
CREATE DIRECTORY data_dir AS '/home/oracle/wkdir';
CREATE DIRECTORY log_dir AS '/home/oracle/wkdir';

杩��������瀵�Linux 绯荤���缓���骞朵������欢宸茬�瑙e�缂╁� o /home/oracle/wkdir 涓��娉ㄦ�锛��浜���ㄦ��㈢����锛���版�搴�����绗���炬�褰㈠��� DIRECTORY 瀵硅薄��/p>

�ㄤ互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц� create_external_table.sql ���锛��灏���朵互涓��浠ゃ�

DROP TABLE sales_delta_XT;
CREATE TABLE sales_delta_XT
   PROD_ID NUMBER,
   CUST_ID NUMBER,
   TIME_ID DATE,
   CHANNEL_ID CHAR(2),
   PROMO_ID NUMBER,
   QUANTITY_SOLD NUMBER(3),
   AMOUNT_SOLD NUMBER(10,2)
   ORGANIZATION external
   TYPE oracle_loader
   DEFAULT DIRECTORY data_dir
   ACCESS PARAMETERS
   RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII
   BADFILE log_dir:'sh_sales.bad'
   LOGFILE log_dir:'sh_sales.log_xt'
   FIELDS TERMINATED BY "|" LDRTRIM
   (prod_id, cust_id,
   time_id CHAR(11) DATE_FORMAT DATE MASK "DD-MON-YYYY",
   channel_id, promo_id, quantity_sold, amount_sold
   location
   'salesDec01.dat'
   )REJECT LIMIT UNLIMITED NOPARALLEL

�ㄥ�浠ラ�杩���������歌��炬�����ㄨ〃��俊���

        - [USER | ALL| DBA]_EXTERNAL_TABLES
        - [ALL| DBA]_DIRECTORIES
        - [USER | ALL| DBA]_EXTERNAL_LOCATIONS


�ㄤ互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��ヨ��� select_et.sql ��欢锛�/p>

SELECT COUNT(*) FROM sales_delta_xt; 
SELECT MAX(time_id) FROM sales_delta_xt;        

濡���ㄦ�纭���朵���欢锛����ぇ�� TIME_ID 搴�负 2001 骞�12 ������涓�ぉ��/p>

parallel_select_from_ET.sql ������浜�����涓��楠よ��ㄥ���SQL 璇����

�ㄤ互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��ヨ��� parallel_select_from_ET.sql ��欢浠ユ������苟琛��璇��缁��淇℃�锛�/p> SELECT * FROM v$pq_sesstat WHERE statistic in ('Queries Parallelized', 'Allocation Height');

�ц�����ㄨ����璇�互骞惰�搴�4 璁块�璇ュ��ㄨ〃锛�苟浣跨�涓�釜��ず�у������互浣跨�浠ヤ����浠ゆ� parallel_select_from_ET_2.sql �����/P>

SELECT /*+ parallel(a,4) */ COUNT(*) 
FROM   sales_delta_XT a;

灏界�澶��琛ㄤ����涓�釜杈��婧��浠讹�浣��灏��澶��琛ㄤ腑骞惰�������澶���ㄥ�浠ヤ娇�ㄥ�涓��绀虹� ALTER TABLE �戒护�存�澶��琛ㄧ� PARALLEL 灞��锛�/p>

ALTER TABLE sales_delta_XT PARALLEL 4;

����ョ�浼�����璁′俊���瀵绘�涓��缁��淇℃���樊����ц�浠ヤ��戒护�� parallel_select_from_ET.sql �����敞���骞惰�浼�����璁′俊������������绀轰����涓�釜骞惰�����ヨ�锛���剧ず浜�苟琛�����搴��

SELECT * FROM v$pq_sesstat WHERE statistic in ('Queries Parallelized', 'Allocation Height');

5. �ョ� Oracle ��苟琛���ュ���/span>

Oracle �版�搴��姣�釜������渚������剁�骞惰��存�璺�� INSERT ��������互浣跨��ц�璁″��ョ‘瀹����互骞惰��瑰��ц� INSERT ���澶���ㄥ�浠ユ��ヤ�涓��浣�� SAL 缂��涓���ц�璁″�锛������� EXPLAIN PLAN �戒护��

妫��浠ヤ�涓茶�璁″����浜�����璞¢�涓��骞惰�瀹������ら��ㄦ��逛�涓��璞$�榛��骞惰�搴����娇�ㄤ�涓��绀猴��ㄥ����浠ヤ覆琛��寮��琛�换�°�

瑕��绀� SERIAL INSERT 琛�负���琛������ц� show_serial_exec_plan.sql 锛��灏�互涓�SQL 璇��澶���版���SQL*Plus 浼��涓��

EXPLAIN PLAN FOR INSERT /*+ APPEND */ INTO sales
   PROD_ID,
   CUST_ID,
   TIME_ID,
   CHANNEL_ID,
   PROMO_ID,
   QUANTITY_SOLD,
   AMOUNT_SOLD
   SELECT
   PROD_ID,
   CUST_ID,
   TIME_ID,
   case CHANNEL_ID
   when 'S' then 3
   when 'T' then 9
   when 'C' then 5
   when 'I' then 4
   when 'P' then 2
   else 99
   PROMO_ID,
   sum(QUANTITY_SOLD),
   sum(AMOUNT_SOLD)
   FROM SALES_DELTA_XT
   GROUP BY 1, prod_id,time_id,cust_id,channel_id,promo_id;
set linesize 140
set pagesize 40
SELECT * FROM TABLE(dbms_xplan.display);
ALTER TABLE sales DISABLE CONSTRAINT sales_product_fk;
ALTER TABLE sales DISABLE CONSTRAINT sales_customer_fk;
ALTER TABLE sales DISABLE CONSTRAINT sales_time_fk;
ALTER TABLE sales DISABLE CONSTRAINT sales_channel_fk;
ALTER TABLE sales DISABLE CONSTRAINT sales_promo_fk;
COMMIT;
ALTER SESSION ENABLE PARALLEL DML;
EXPLAIN PLAN FOR INSERT /*+ APPEND PARALLEL(SALES,4) */ INTO sales
   PROD_ID,
   CUST_ID,
   TIME_ID,
   CHANNEL_ID,
   PROMO_ID,
   QUANTITY_SOLD,
   AMOUNT_SOLD
   SELECT /*+ parallel (sales_delta_XT,4) */
   PROD_ID,
   CUST_ID,
   TIME_ID,
   case CHANNEL_ID
   when 'S' then 3
   when 'T' then 9
   when 'C' then 5
   when 'I' then 4
   when 'P' then 2
   else 99
   PROMO_ID,
   sum(QUANTITY_SOLD),
   sum(AMOUNT_SOLD)
   FROM SALES_DELTA_XT
   GROUP BY 1, prod_id,time_id,cust_id,channel_id,promo_id;
set linesize 140
set pagesize 40
SELECT * FROM TABLE(dbms_xplan.display);

�ц�浠ヤ� SQL 璇���� parallel_insert_file.sql ��欢锛��琛��涓�苟琛�span class="style5">������璁℃�璁剧疆涓� ON ��/P>


set timing on COMMIT;
ALTER SESSION ENABLE PARALLEL DML;

INSERT /*+ APPEND PARALLEL(SALES,4) */ INTO sales
(
PROD_ID,
CUST_ID,
TIME_ID,
CHANNEL_ID,
PROMO_ID,
QUANTITY_SOLD,
AMOUNT_SOLD
)
SELECT /*+ PARALLEL (sales_delta_XT,4) */
PROD_ID,
CUST_ID,
TIME_ID,
case CHANNEL_ID
when 'S' then 3
when 'T' then 9
when 'C' then 5
when 'I' then 4
when 'P' then 2
else 99
end,
PROMO_ID,
sum(QUANTITY_SOLD),
sum(AMOUNT_SOLD)
FROM SALES_DELTA_XT
GROUP BY 1, prod_id,time_id,cust_id,channel_id,promo_id; set timing off SELECT * FROM TABLE(dbms_xplan.display_cursor);
SELECT * FROM v$pq_sesstat WHERE statistic in ('DML Parallelized','Allocation Height');

璁颁�璇ヨ��ョ��ц��堕�锛���朵�浣跨� SQL*Loader �跺�浣跨���画����������堕��告�杈��璇锋敞����变��ㄦ��ㄤ娇�ㄤ�涓�������CPU 璁$��轰�骞惰�璁块���父灏�����������������骞惰�����ㄨ〃璁块�浠ュ�灏�浆�����浇�哥�����ㄩ�浼����/p> MODIFY CONSTRAINT sales_product_fk ENABLE NOVALIDATE; ALTER TABLE sales MODIFY CONSTRAINT sales_customer_fk ENABLE NOVALIDATE; ALTER TABLE sales MODIFY CONSTRAINT sales_time_fk ENABLE NOVALIDATE; ALTER TABLE sales MODIFY CONSTRAINT sales_channel_fk ENABLE NOVALIDATE; ALTER TABLE sales MODIFY CONSTRAINT sales_promo_fk ENABLE NOVALIDATE;


�ㄥ����涓�����灏卞�杞藉苟杞��浜�����瑕�娇��SQL*Loader ��浇��浆�㈡�����ㄩ�瑕�袱涓��绋��楠わ�杩�氨琛ㄧず�翠釜杩�������伐浣��澶������芥�浣��

杩����〃

杩��涓婚���〃

�ㄥ����琛��澶��琛ㄦ�娉���版���浇��浆�㈢�棣���规����婕�ず浣跨�澶��琛ㄧ�浼��锛����互浣跨� SQL*Loader 姣����浇��浆�㈡�������浠诲���/p>

瑕�娇��SQL*Loader ��浇��浆�㈡�����ц�浠ヤ�姝ラ�锛�/p>

��缓涓�釜涓存�琛ㄣ�

浣跨� SQL*Loader 灏�����杞藉�涓存�琛ㄤ腑��/a>

灏�复�惰〃��浇�扮�������涓�� ���涓存�琛ㄣ�

杩����〃

2. 浣跨� SQL*Loader 灏�����杞藉�涓存�琛ㄤ腑

娉�� 杩��������瀵�Linux 绯荤���缓���骞朵������欢宸茬� 瑙e�缂�/font>�� /home/oracle/wkdir ���涓��

����ц�浠ヤ�姝ラ�锛�� sales_dec01.ctl ��欢涓���版���欢��浇�颁复�惰〃涓��

浠�OS �戒护琛��琛�互涓��浠わ�

cd /home/oracle/wkdir
sqlldr sh/sh control=sales_dec01.ctl direct=true

娉��浣跨� SQL*Loader 杩���讹��ㄥ��介�瑕��瀹����������font color="#000000">浣跨�浠ヤ�璇����� SQL*Loader锛�/font>

sqlldr sh/sh@<database alias> control=sales_dec01.ctl direct=true

璇锋敞����ㄦ�娉�苟琛��琛��浠诲���span class="style13">妫�� SQL*Loader �ュ���欢 sales_dec01.log锛��涓��杞借�绋���ц��堕���/span>

�ㄥ�浠ヤ娇�ㄤ换浣��杈���ユ���sales_dec01.log ��欢�����欢浣�� /home/oracle/wkdir ���涓��

涓���ㄨ〃涓��锛�娇�版�����版�搴�腑璁块�灏���ㄨ��版�搴�腑绌洪���复�惰〃�����┖�翠�涓鸿�涓��杞�����杞界��版�����ㄧ嚎�у�绯汇�

���杩��娉ㄦ�锛������ㄦ�浠跺�灏�����澶у��藉苟琛��琛�娇��SQL*Loader ���杞姐��ㄥ�浠ュ���釜璁块������欢��SQL*Loader 杩��浣跨� SKIP ��」������杩��浼�己�舵�涓�SQL*Loader 杩������翠釜澶����欢�����奖��郴缁���翠��ц���/p> �ㄥ����浠ヤ��版�瀛��瑙��璁块����瀵硅薄绌洪�浣跨���俊���
[USER | ALL| DBA]_SEGMENTS
[USER | ALL| DBA]_EXTENTS

杩����〃

3. 灏�复�惰〃��浇�扮�������涓�/h4>

��浇澶���版�锛�娇�版�搴��澶�����浜�����浠ュ�锛��灏卞�浠ユ�琛�浆�����/p>

浠�SH �ㄦ�韬�唤�诲���SQL*Plus���灏��杩��琛�互涓��浠ゆ� load_stage_table.sql ���锛��琛�SQL �ヨ浆�㈠��ㄦ����杩���版�宸茬�涓存�瀛���ㄦ����涓��锛�苟灏����� SALES 浜��琛ㄤ腑��/p>

set timing on
INSERT /*+ APPEND */ INTO sales
( PROD_ID, CUST_ID, TIME_ID, CHANNEL_ID,
PROMO_ID, QUANTITY_SOLD, AMOUNT_SOLD )
SELECT
PROD_ID, CUST_ID, TIME_ID,
case CHANNEL_ID
when 'S' then 3
when 'T' then 9
when 'C' then 5
when 'I' then 4
when 'P' then 2
else 99
end,
PROMO_ID,
sum(QUANTITY_SOLD),
sum(AMOUNT_SOLD)
FROM sales_dec01
GROUP BY prod_id,time_id,cust_id,channel_id,promo_id; set timing off

浣跨�澶��琛ㄥ����涓�������浇��浆�㈣�绋��浠ヤ娇�ㄥ���浇涓�浆�㈢�缁��锛����������揩浜��杩�����澶��澶��琛ㄤ�����ㄦ����涓�复�跺��炬����澶��琛ㄤ� SQL*Loader �告�锛���ㄦ����瓒�ぇ锛�������复�剁┖�村�澶���堕�灏辫�澶��

杩����〃

杩��涓婚���〃

灏��浜��浠界��版������浇��SALES 浜��琛ㄧ�绗��瀛e害���涔��锛�����浼�����灏���充�浼����� DML ���浜��杩�氨浣垮�琛ㄥ��烘�涓轰娇��Oracle ��〃��缉���杩��瀛�����浣抽��┿����浼�������俊����ヨ�澶��瀛���ㄥ�绯绘����涓���版�涔��涓��澧�����瀛�ぇ������寰�ぇ涓��������纾��绯荤������互������浜�����浣跨�璧��������Oracle �版�搴���ヤ�涓��������娉��澶��杩�����锛����缉瀛���ㄥ�绯昏〃涓�����涓�����浼��璇ユ�����ヨ��堕����璐��褰卞�锛�����������������

����崇郴�版�搴�郴缁��娌℃�瀵瑰��崇郴琛ㄤ腑瀛�������ぇ��娇�ㄥ�缂╂�����朵腑涓�釜��������缉�堕���┖�翠��寸��� 瀵逛��崇郴�版�搴��璇村苟�������峰����寮�����甯哥���缉���������绌洪�锛�����瑕���烘����璇㈡��村ぇ澶у欢�跨�浠d环���澶��寰�����������涓��淇���版�澶у��ㄥ�缂╀����浼�����

Oracle �版�搴��渚��涓��������缂╂����瀹��澶у��版�浠���锋���父澶х��稿����瀹��寰���归��芥��d���������������┖�磋��捐�澶�������缉绠��锛�����涓哄�����崇郴�版�杩��浜�����杩���规�瀵瑰�缂╁��版����璇㈡��藉���病����㈠奖���瀵逛�璁块�澶ч��版����璇�互���������浣��濡��浠藉��㈠�锛��瀹�����浜х��������㈠奖������锛����互纭����缉����版��充�浼�����缂╃��版�澶с�

1. ��缉杩�������/h4>

涓轰�琛¢�琛ㄥ�缂╃�宸ㄥぇ浼��锛��棣��瑕�‘瀹��������娌℃������缉���澶��杩��纭��杩�������ぇ灏��

�ц� part_before_compression.sql ���锛�����浠ヤ� SQL 璇��澶����SQL*Plus 浼��涓��

COLUMN partition_name FORMAT a50
COLUMN segment_name FORMAT a50 SELECT partition_name, compression FROM user_tab_partitions WHERE partition_name='SALES_Q4_2001'; SELECT segment_name, bytes/(1024*1024) MB FROM user_segments WHERE segment_name='SALES' AND partition_name='SALES_Q4_2001';

�板���缉璇ュ��猴�骞堕����缁存�����版�绱㈠��������扮储寮���ㄥ�绱㈠��戒�涓鸿� SQL 璇������ㄥ�杩��缁存�������缁存��������虹储寮�淮�ゅ��藉��ㄦ��������㈤���腑浠����/p>

璇锋敞�����缉���骞朵�����板�缂┿��ㄤ���缓涓�釜�扮���缉���锛�苟�ㄦ�浣����������������缉�����/p>

�ㄤ互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц� compress_salesQ4_2001.sql �����互涓�SQL 璇��锛�

ALTER TABLE sales MOVE PARTITION sales_q4_2001 COMPRESS UPDATE INDEXES; SELECT partition_name, compression FROM user_tab_partitions
WHERE partition_name='SALES_Q4_2001';
SELECT segment_name, bytes/(1024*1024) MB FROM user_segments
WHERE segment_name='SALES' AND partition_name='SALES_Q4_2001';

������涓���版���缉姣����父姣��涓������叉ā寮����缉姣��杩����font face="Courier New, Courier, mono">SALES 浜��琛ㄤ腑������浜哄伐��������父�戒���������������苟娌℃��ㄦ�琛�INSERT ��������苟������浜������版�搴��澧�腑�虹���/p>

杩��涓婚���〃

寰���版�浠���界淮�ょ�涓�釜�版�����ㄧ��c�渚��锛���版�浠��瀛�����杩�12 涓�����������姝e���互灏�����娣诲���SALES 琛ㄤ腑涓��锛��涔��浠ュ��у��哄揩���涓�����锛�� SALES 琛ㄤ腑�������哄��戒负杩��������浜���崇�妗�����娣诲����涓��锛���ゅ��哄��峰���袱涓���癸����璧��浣跨�锛������ㄦ�褰卞����锛��

�ц�婊��绐��������楠わ�

�ц�婊��绐�����锛�/p> INSERT /*+ APPEND */ INTO sales_delta
SELECT /*+ PARALLEL (SALES_DELTA_XT,4) */
PROD_ID,
CUST_ID,
TIME_ID,
case CHANNEL_ID
when 'S' then 3
when 'T' then 9
when 'C' then 5
when 'I' then 4
when 'P' then 2
else 99
end,
PROMO_ID,
sum(QUANTITY_SOLD) quantity_sold,
sum(AMOUNT_SOLD) amount_sold
FROM SALES_DELTA_XT
GROUP BY prod_id,time_id,cust_id,channel_id,promo_id; COMMIT;

灏����Щ�拌��炬�涓��浠ユ�����惧�

��浇浜� SALES_DELTA 琛ㄥ�锛�������缓琛ㄧ�缁��淇℃����涓�釜浠� SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��戒护�� gather_stat_stage_table.sql ����堕�璇ヨ〃���璁′俊���

exec dbms_stats.gather_table_stats('SH','sales_delta',estimate_percent=>20);

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��戒护�� create_static_bitmap_index.sql ����� SALES_DELTA 琛ㄤ���缓浣��绱㈠���

CREATE BITMAP INDEX sales_prod_local_bix
  ON sales_delta (prod_id)
  NOLOGGING COMPUTE STATISTICS ;
CREATE BITMAP INDEX sales_cust_local_bix
  ON sales_delta (cust_id)
  NOLOGGING COMPUTE STATISTICS ;
CREATE BITMAP INDEX sales_time_local_bix
  ON sales_delta (time_id)
  NOLOGGING COMPUTE STATISTICS ;
CREATE BITMAP INDEX sales_channel_local_bix
   ON sales_delta (channel_id)
   NOLOGGING COMPUTE STATISTICS ;
CREATE BITMAP INDEX sales_promo_local_bix
   ON sales_delta (promo_id)
   NOLOGGING COMPUTE STATISTICS ;

璇锋敞���杩��绱㈠����璁′俊����ㄥ�寤虹储寮��杩����缓��/p>

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��戒护�� create_constraints.sql ���淇�� SALES 琛ㄤ���害���

ALTER TABLE channels MODIFY CONSTRAINT CHANNELS_PK RELY;
ALTER TABLE countries MODIFY CONSTRAINT COUNTRIES_PK RELY;
ALTER TABLE customers MODIFY CONSTRAINT CUSTOMERS_PK RELY;
ALTER TABLE products MODIFY CONSTRAINT PRODUCTS_PK RELY;
ALTER TABLE promotions MODIFY CONSTRAINT PROMO_PK RELY;
ALTER TABLE times MODIFY CONSTRAINT TIMES_PK RELY;
ALTER TABLE sales_delta ADD ( CONSTRAINT sales_product_delta_fk FOREIGN KEY (prod_id) REFERENCES products RELY ENABLE NOVALIDATE , CONSTRAINT sales_customer_delta_fk FOREIGN KEY (cust_id) REFERENCES customers RELY ENABLE NOVALIDATE , CONSTRAINT sales_time_delta_fk FOREIGN KEY (time_id) REFERENCES times RELY ENABLE NOVALIDATE , CONSTRAINT sales_channel_delta_fk FOREIGN KEY (channel_id) REFERENCES channels RELY ENABLE NOVALIDATE , CONSTRAINT sales_promo_delta_fk FOREIGN KEY (promo_id) REFERENCES promotions RELY ENABLE NOVALIDATE

2.1 ��缓�板���/h4>

�ㄥ�寤烘���┖����讹��ㄥ�浠ヤ娇�ㄤ�涓�����涓�竟�����缓�板��猴�涔��浠ラ��╁���� MAXVALUE �ュ�寤鸿����������绉���╁�浠ョ‘淇��浼��缁������ㄤ�杈圭��′欢���褰��浠��浣�INSERT ��������/p>

�ㄦ�涓�����涓���ㄥ��ㄥ�杞芥�浣�������SPLIT PARTITION锛�互璇��浠讳�������渚�����杩��涓�竟���璁板��藉�琚��������涓�釜������涓��

�ㄥ�寤烘���┖����讹�涓烘�锛���ц�浠ヤ�姝ラ�锛�/p>

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��戒护��exchange_partition_wo_gim.sql ����存� SALES 琛��浠�����浜ゆ����锛�/P> ALTER TABLE sales EXCHANGE PARTITION sales_q1_2002
WITH TABLE sales_delta INCLUDING INDEXES;

灏����Щ�拌��炬�涓��浠ユ�����惧�

杩����〃

2.3 浠���洪���/h4>

�板�锛����互浠��娣诲���氦�㈢����涓��琛���┿�

娉ㄦ�锛������虹�浜��琛ㄦ坊����版�瓒��锛��浣跨�杩�釜�������版����浣��琛��瀛������堕�灏辫�澶��

�ㄩ�瑕�娇�ㄩ�杈���猴�濡�RANGE ����������轰��界�浜�父瑙��婊��绐�������/p>

SALES 琛ㄤ腑�����储寮��瑕��琛�淮�わ�骞朵��藉�浣跨���/p>

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��ヨ��� select_count.sql ������浠���剧ず宸蹭氦�㈠��哄����琛���板�涓虹┖锛�腑����般�

SELECT COUNT(*)
FROM sales PARTITION (sales_q1_2002); SELECT COUNT(*)
FROM sales_delta;

璇锋敞��� SALES 琛ㄧ�������绱㈠��芥��������ц�浠ヤ��戒护�� show_sales_idx_status.sql ����ョ�绱㈠�������

SELECT ui.index_name, DECODE(uip.status,null,ui.status,uip.status)
FROM user_ind_partitions uip, user_indexes ui
WHERE ui.index_name=uip.index_name(+)
AND ui.table_name='SALES'
GROUP BY ui.index_name, DECODE(uip.status,null,ui.status,uip.status);

�ㄨ���互�� PARTITION EXCHANGE �戒护涓�娇�� WITHOUT VALIDATION 瀛�����灏����Oracle �版�搴���″�蹇界�瀵硅�浜ゆ�琛ㄧ�����ф��ャ����锛�racle �版�搴���″�浼��璇���哄�����������戒�浜�����杈圭�涔����/P>

杩����〃

2.4 ���杩������轰互纭��锛���★��版�瀹����/h3>

姝e�涓���������凤��ㄥ�瀹���版���浇�颁�涓�病���瀹��杈圭�����轰互�垮�浠讳�������璇��涓轰�璇��浠讳�������瑙���ㄩ�瑕���叉�杩��������姝ゆ���缓浜�袱涓���猴��朵腑涓�釜�锋��哄�涓�竟���

Oracle �版�搴�娇�ㄤ�涓�釜澧�己��揩����叉�浣��璇ユ�浣��娴�袱涓�����涓��浠讳�������浼�� SPLIT ���涔����负绌哄��恒�濡�����绉���碉�Oracle �版�搴���″�涓����缓涓や釜�板��恒�瀹��浼��杩�娇�ㄦ���┖���涓�� DBMS_STATS ��缓涓�釜���锛�苟灏�娇�ㄧ�����轰�涓哄�����������板��恒�

杩��浼��瀹��������������浜� SPLIT ������琛���达����浜�郴缁��婧��骞朵����浠讳�绱㈠�缁存���

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��戒护�� fast_split_sales.sql ����存� SALES 琛��骞舵���储寮�����

ALTER TABLE sales SPLIT PARTITION sales_q1_2002
AT (TO_DATE('01-APR-2002','DD-MON-YYYY'))
INTO (PARTITION sales_q1_2002, PARTITION sales_beyond_q1_2002);
SELECT COUNT(*) FROM sales PARTITION (sales_beyond_q1_2002);
SELECT ui.index_name, DECODE(uip.status,null,ui.status,uip.status) FROM user_ind_partitions uip, user_indexes ui WHERE ui.index_name=uip.index_name(+) AND ui.table_name='SALES' GROUP BY ui.index_name, DECODE(uip.status,null,ui.status,uip.status); ALTER TABLE sales DROP PARTITION sales_beyond_q1_2002;

璇锋敞��� SALES 琛ㄧ�������绱㈠��芥��������ц� show_sales_idx_status.sql ����ョ� SALES 琛ㄤ����绱㈠�������

@show_sales_idx_status.sql

杩��涓婚�

3. 浠��瀹�〃涓���ゆ��版�

�ц�婊��绐��������涓�釜浠诲����浜��琛ㄤ腑����ф�����ㄥ�甯��������涓�勾����版�����变��ㄦ坊��� Q1-2002锛��浠ュ�椤诲���Q1-1998 ������

濡��娌℃�������锛��蹇�』瀵硅�琛ㄦ�琛�DML ������杩���猴��ㄥ�浠ュ�娆″��� PARTITION EXCHANGE �戒护浠��瀹�〃涓���ゆ����涓�坊����版��镐技锛������轰��舵�娉��姝ゅ�浣跨���

璇锋敞����ㄥ苟涓��瑕�strong>����版�锛�����灏� SALES 浜��琛ㄤ腑���杩���版�����轰��锋��稿��昏�缁����┖���琛ㄨ�琛�氦����昏��挎�锛���跺�锛����互灏��浜�����妗o�������浜ゆ�������锛�����浜������¢�姹��

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��戒护�� create_empty_sat.sql �����缓涓�釜绌鸿〃锛��绌鸿〃灏��瀛�1998 骞寸��版�锛�

DROP TABLE sales_old_q1_1998;
CREATE TABLE sales_old_q1_1998 NOLOGGING COMPRESS
AS SELECT * FROM sales WHERE 1=0;

灏����Щ�拌��炬�涓��浠ユ�����惧�

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��戒护�� create_ndx.sql �����缓���绱㈠���

CREATE BITMAP INDEX sales_prod_old_bix
ON sales_old_q1_1998 (prod_id)
NOLOGGING COMPUTE STATISTICS ;
CREATE BITMAP INDEX sales_cust_old_bix
ON sales_old_q1_1998 (cust_id)
NOLOGGING COMPUTE STATISTICS ;
CREATE BITMAP INDEX sales_time_old_bix
ON sales_old_q1_1998 (time_id)
NOLOGGING COMPUTE STATISTICS ;
CREATE BITMAP INDEX sales_channel_old_bix
ON sales_old_q1_1998 (channel_id)
NOLOGGING COMPUTE STATISTICS ;
CREATE BITMAP INDEX sales_promo_old_bix
ON sales_old_q1_1998 (promo_id)
NOLOGGING COMPUTE STATISTICS ;

灏����Щ�拌��炬�涓��浠ユ�����惧�

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��戒护�� create_constraints_old.sql ���淇�����寤虹害���

ALTER TABLE channels MODIFY CONSTRAINT CHANNELS_PK RELY;
ALTER TABLE countries MODIFY CONSTRAINT COUNTRIES_PK RELY;
ALTER TABLE customers MODIFY CONSTRAINT CUSTOMERS_PK RELY;
ALTER TABLE products MODIFY CONSTRAINT PRODUCTS_PK RELY;
ALTER TABLE promotions MODIFY CONSTRAINT PROMO_PK RELY;
ALTER TABLE times MODIFY CONSTRAINT TIMES_PK RELY; ALTER TABLE sales_old_q1_1998
ADD ( CONSTRAINT sales_product_old_fk
FOREIGN KEY (prod_id)
REFERENCES products RELY ENABLE NOVALIDATE
, CONSTRAINT sales_customer_old_fk
FOREIGN KEY (cust_id)
REFERENCES customers RELY ENABLE NOVALIDATE
, CONSTRAINT sales_time_old_fk
FOREIGN KEY (time_id)
REFERENCES times RELY ENABLE NOVALIDATE
, CONSTRAINT sales_channel_old_fk
FOREIGN KEY (channel_id)
REFERENCES channels RELY ENABLE NOVALIDATE
, CONSTRAINT sales_promo_old_fk
FOREIGN KEY (promo_id)
REFERENCES promotions RELY ENABLE NOVALIDATE
) ;

灏����Щ�拌��炬�涓��浠ユ�����惧�

杩����〃

3.4 �剧ず浜ゆ�����轰腑�����/h4>

�ㄦ�琛�氦�㈠�锛��瀵��浠�����涓���ょ� 1998 Q1 �版���/p>

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��戒护�� show_partition.sql ����ョ�灏��璇ュ��轰腑���������

SELECT COUNT(*) FROM sales PARTITION (sales_q1_1998);

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��戒护�� exchange_old_partition.sql ���浜ゆ����锛�/P>

ALTER TABLE sales 
   EXCHANGE PARTITION sales_q1_1998 
   WITH TABLE sales_old_q1_1998 
   INCLUDING INDEXES;

璇锋敞����ㄥ�浠ヤ娇�ㄤ�涓� DROP PARTITION 璇���ヤ唬�裤� SALES_OLD_Q1_1998 琛ㄧ��ㄥ��ㄤ� 1998 骞寸�涓��搴������版������互���璇ヨ〃锛��绯荤�涓���ㄥ��よ�浜�����

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��戒护�� count_sales.sql ����ョ����涓���版�锛�/P>

SELECT COUNT(*) 
FROM   sales PARTITION (sales_q1_1998);
SELECT COUNT(*) 
FROM   sales_old_q1_1998;

涓��琛� EXCHANGE �戒护涔��涓��锛�����琛ㄧ��ㄥ��ㄧ����琛������� SALES ���搴���轰负绌恒�

���绱㈠�涓��浜ゆ���奖����ц�浠ヤ��戒护�� show_sales_idx_status.sql ����ョ�绱㈠�淇℃���

SELECT ui.index_name, DECODE(uip.status,null,ui.status,uip.status)
FROM user_ind_partitions uip, user_indexes ui
WHERE ui.index_name=uip.index_name(+)
AND ui.table_name='SALES'
GROUP BY ui.index_name, DECODE(uip.status,null,ui.status,uip.status);

灏����Щ�拌��炬�涓��浠ユ�����惧�

1.���绱㈠�缁存�����藉�寮猴�

浠�Oracle �版�搴�10 g 寮��锛��琛������虹淮�ゆ�浣��涓��瀵瑰�����т骇��换浣�奖���������绱㈠�缁存�锛����互涓哄��鸿〃����扮储寮������扮�������杩����互浣�负浠绘�������缁存��������ㄥ�瀹����br>Oracle �╁�浜���虹淮�ゆ�浣�� SQL 璇��锛������朵������奖������绱㈠�缁���������э�濡�储寮��缃��

姝ラ�锛�/p>

�ョ�姝ゆ���������浇浜�2002 骞寸�涓��搴���版�涔��锛��璁よ��帮��变�涓���������¢�姹���ヨ��瑰�宸茬��存����澶���$��峰凡涓���虫敞姣��搴��娆$����锛��寮��渚�������������负浜�弧瓒宠�涓�����涓�����骞朵����璇㈡��斤��ㄥ�浠ュ���Oracle ���灏��杩��涓��搴��������涓烘������/p>

���绱㈠�缁存�����哄��ㄦ�涓���ㄦ�绀轰�涓��绀恒����涓��绀轰��ㄥ�绱㈠�缁存�����哄��ㄦ�锛��宸ヤ��瑰�涓���扮储寮���ㄧ����

1.1 ���杩�������/h4>

�ㄥ�寤烘���┖����讹�姝ゆ�锛����互浣跨�涓�釜涓�����杈圭��ュ�寤烘����锛����互����抽�瀛� MAXVALUE �ュ�寤鸿����������绉���╁�浠ョ‘淇��浼��缁������ㄤ�杈圭��′欢���褰��浠��浣� INSERT ��������/p>

�ㄦ�涓�����涓���ㄥ��ㄥ�杞芥�浣������� SPLIT PARTITION �戒护锛�互璇��浠讳�������渚�����杩��涓�竟���璁板��藉�琚��������涓�釜������涓��

�ц�浠ヤ�姝ラ�锛��寤轰�涓����┖���锛�/p>

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ� SQL 璇��锛�����涓�釜���2002 骞�3 ���浠��搴���轰腑����烘�锛��涓������扮储寮�淮�ゃ��ㄥ�浠ユ�琛�互涓��浠ゆ� split1_10g.sql ���瀹��姝や换�°�

ALTER TABLE sales SPLIT PARTITION sales_q1_2002
AT (TO_DATE('01-MAR-2002','DD-MON-YYYY'))
INTO (PARTITION sales_1_2_2002 TABLESPACE example, 
PARTITION sales_MAR_2002 TABLESPACE example NOCOMPRESS)
UPDATE INDEXES;

�ㄥ�����扮储寮���轰�琛ㄥ��哄����浣�疆锛�苟涓�储寮���哄���部琚������藉����琛�互涓��浠ゆ� see_split.sql ����ョ����淇℃���/P> COL segment_name format a25 COL partition_name format a25 COL tablespace_name format a25 SELECT segment_name, partition_name, tablespace_name FROM user_segments WHERE segment_type='INDEX PARTITION' AND segment_name IN (SELECT index_name FROM user_indexes WHERE table_name='SALES');

1.2 浣跨��╁���SQL 璇��������

灏��涓�釜瀛e害������浣������蹭负涓������������恒�涓轰�杩��婕�ず锛���� SYSAUX 琛ㄧ┖�翠腑��缓�朵腑涓�釜�板��猴�骞舵�寮�����浜�储寮��

�ㄤ�涓�互 SH 韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ� SQL 璇��锛���插�浣�����锛��涓������扮储寮�淮�ゃ��ㄥ�浠ヤ娇�ㄤ互涓���戒护�� split2_10g.sql �����

ALTER TABLE sales SPLIT PARTITION sales_1_2_2002
AT (TO_DATE('01-FEB-2002','DD-MON-YYYY'))
INTO
(PARTITION sales_JAN_2002 TABLESPACE sysaux COMPRESS,
PARTITION sales_FEB_2002 TABLESPACE example NOCOMPRESS)
UPDATE INDEXES (sales_time_bix
(PARTITION jan_02 TABLESPACE example,
PARTITION feb_02 TABLESPACE system));

灏����Щ�拌��炬�涓��浠ユ�����惧�

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��戒护�� cleanup_split_10g.sql ���绉诲��������扮储寮��

ALTER TABLE sales MOVE PARTITION sales_JAN_2002 TABLESPACE example COMPRESS
UPDATE INDEXES (sales_time_bix (PARTITION sales_jan_2002 TABLESPACE example),
sales_cust_bix (PARTITION sales_jan_2002 TABLESPACE example),
sales_channel_bix (PARTITION sales_jan_2002 TABLESPACE example),
sales_prod_bix (PARTITION sales_jan_2002 TABLESPACE example),
sales_promo_bix (PARTITION sales_jan_2002 TABLESPACE example))
;
ALTER INDEX sales_time_bix REBUILD PARTITION feb_02 TABLESPACE example; SELECT segment_name, partition_name, tablespace_name FROM user_segments WHERE segment_type='INDEX PARTITION' AND segment_name IN (SELECT index_name FROM user_indexes WHERE table_name='SALES') AND tablespace_name <> 'EXAMPLE';

杩����〃

2. 浣跨� Oracle ���灞�储寮�淮��/h3>

����ㄥ�绱㈠�缁存�锛����互涓哄��鸿〃���灞�储寮������扮�������杩����互浣�负浠绘�������缁存��������ㄥ�瀹�����浣垮�灞�储寮���藉�杩��缁存��������朵�����ㄧ����骞朵�涓��褰卞�瀹�滑��娇�ㄣ�

姝ラ�锛�/p>

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��戒护�� prep4_global_index.sql ������杩���ㄥ�绱㈠�缁存���

CREATE TABLE sales_mar_2002_temp 
NOLOGGING AS SELECT * FROM sales
PARTITION (sales_MAR_2002);
ALTER TABLE sales TRUNCATE PARTITION sales_MAR_2002;
SELECT COUNT(*) 
               FROM sales PARTITION (sales_MAR_2002);
               ALTER TABLE sales_mar_2002_temp COMPRESS;
               ALTER TABLE sales_mar_2002_temp NOCOMPRESS;
CREATE BITMAP INDEX sales_prod_mar_2002_bix
               ON sales_mar_2002_temp (prod_id)
               NOLOGGING COMPUTE STATISTICS ;
CREATE BITMAP INDEX sales_cust_mar_2002_bix
               ON sales_mar_2002_temp (cust_id)
               NOLOGGING COMPUTE STATISTICS ;
CREATE BITMAP INDEX sales_time_mar_2002_bix
               ON sales_mar_2002_temp (time_id)
               NOLOGGING COMPUTE STATISTICS ;
CREATE BITMAP INDEX sales_channel_mar_2002_bix
               ON sales_mar_2002_temp (channel_id)
               NOLOGGING COMPUTE STATISTICS ;
CREATE BITMAP INDEX sales_promo_mar_2002_bix
               ON sales_mar_2002_temp (promo_id)
               NOLOGGING COMPUTE STATISTICS ;

灏����Щ�拌��炬�涓��浠ユ�����惧�

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��戒护�� create_global_index.sql ����� SALES 琛ㄤ���缓涓�釜涓茶����涓�储寮��

CREATE UNIQUE INDEX sales_pk ON sales (prod_id, cust_id, promo_id, channel_id, time_id) NOLOGGING COMPUTE STATISTICS;

杩���介�瑕�������/p>

����ц� add_sales_pk.sql �����缓涓�釜�╃�姝ょ储寮��绾��锛�/p> ALTER TABLE sales ADD CONSTRAINT sales_pk PRIMARY KEY (prod_id, cust_id, promo_id, channel_id, time_id) USING INDEX;

璇锋敞���濡��浣跨��ㄥ�绱㈠�瀹��绾��锛��蹇�』瀵硅�浜ゆ���〃涔��涔�����绾��锛��琛�互涓��浠ゆ� add_salestemp_pk.sql ���瀹��姝や换�°�

ALTER TABLE sales_mar_2002_temp
ADD CONSTRAINT sales_mar_2002_temp_pk
PRIMARY KEY (prod_id, cust_id, promo_id, channel_id, time_id)
DISABLE VALIDATE;

杩����〃

2.3 浜ゆ�甯���ㄥ�绱㈠�缁存������/h4>

瑕��绀哄��虹淮�ゆ�浣��骞跺����璁块���奖����ㄩ�瑕�袱涓��璇��������涓や釜绐��杩��婕�ず���琛���㈢����涔��锛����u> 浠�� ���涓����������/p>

��b>绐��涓�/b>涓���ц�浠ヤ�姝ラ�锛�/p>

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ��戒护�� use_global_index.sql �����缓涓�釜瑙i�璁″�骞舵���俊���

EXPLAIN PLAN FOR SELECT /*+ INDEX(sales, sales_pk) */ count(*) FROM sales WHERE prod_id BETWEEN 100 AND 500; set linesize 140 SELECT * FROM TABLE(dbms_xplan.display);

楠��浜�������苟涓���ㄤ娇�ㄥ�灞�储寮��锛��娆℃�琛�互涓���ユ� run_select.sql ��欢�����互浣跨� SQL*Plus ��������������拌�琛��涓��璇����

SELECT /*+ INDEX(sales, sales_pk) */ count(*) FROM sales WHERE prod_id BETWEEN 100 AND 500;

褰���ц�璇ユ�璇㈡�锛���ㄧ��d�涓��琛���㈢�姝ラ����灏���帮��ㄨ�琛���虹淮�ゆ�浣��锛�娇�ㄥ�灞�储寮��浜�苟���璇㈣���病��换浣�奖���

璇ユ�璇�strong>涓��澶辫触���杩�����锛�����浜ゆ��戒护���涔��锛��璇㈢����绔����������racle �版�搴���″�浼��璇��绉���典���font face="Courier New, Courier, mono">璇诲� 涓����/font>锛�苟涓��浠ユ�渚��楂������鸿〃��储寮�淮�ゆ�浣�����浼�����浣跨���������/p> ALTER TABLE sales EXCHANGE PARTITION sales_mar_2002
WITH TABLE sales_mar_2002_temp
INCLUDING INDEXES UPDATE GLOBAL INDEXES;

灏����Щ�拌��炬�涓��浠ユ�����惧�

灏界�杩��涓�釜 DDL �戒护锛�����涓哄�灞�储寮��浣�负 PARTITION EXCHANGE ����戒护����ㄥ�杩��缁存������互������涓���堕���/p>

�ㄥ����锛����储寮�����缁存����涔��浠��������琛�互涓��浠ゆ� show_sales_idx_status.sql �����/p> SELECT ui.index_name, DECODE(uip.status,null,ui.status,uip.status) status, count(*) num_of_part FROM user_ind_partitions uip, user_indexes ui WHERE ui.index_name=uip.index_name(+) AND ui.table_name='SALES' GROUP BY ui.index_name, DECODE(uip.status,null,ui.status,uip.status);

���浜ゆ��扮� Q1-2001 ����版����灞�储寮��浣�负 PARTITION EXCHANGE �戒护����ㄥ�缁存�������涓��褰卞�浠讳����浣跨���/p>

�ヤ��ュ���┒娌℃��ㄥ�绱㈠�缁存����涓恒�

杩����〃

2.4 浜ゆ�涓�甫�ㄥ�绱㈠�缁存������/h4>

瑕��绀鸿����锛����� 涓や釜绐�� ���琛���㈢����涔��锛����b>浠�����涓����������/p>

��b>绐��涓�/b>涓���ц�浠ヤ�姝ラ�锛�/p>

�ㄤ�涓�互 SH �ㄦ��诲���SQL*Plus 浼��涓���ц�浠ヤ��ヨ��� use_global_index.sql �����/p> explain plan for SELECT /*+ INDEX(sales, sales_pk) */ count(*) FROM sales WHERE prod_id BETWEEN 100 AND 500; set linesize 140 SELECT * FROM table(dbms_xplan.display); SELECT /*+ INDEX(sales, sales_pk) */ count(*) FROM sales WHERE prod_id BETWEEN 100 AND 500;

�ㄧ��d�涓��琛���㈢�姝ラ�锛�����琛���㈢��ヨ����浜��������

瀹��澶�����缁存��戒护�朵�澶辫触��/p>

灏����Щ�拌��炬�涓��浠ユ�����惧�

SELECT ui.index_name, DECODE(uip.status,null,ui.status,uip.status) status, count(*) num_of_part FROM user_ind_partitions uip, user_indexes ui WHERE ui.index_name=uip.index_name(+) AND ui.table_name='SALES' GROUP BY ui.index_name, DECODE(uip.status,null,ui.status,uip.status);

�ㄤ�涓�互 SH �ㄦ�韬�唤�诲���SQL*Plus 浼��涓���ц�浠ヤ�璇���� cleanup_mod1.sql ���娓�� OBE �瑰���慨�广�


ALTER TABLE sales DROP CONSTRAINT sales_pk;
DROP INDEX sales_pk;
ALTER TABLE sales EXCHANGE PARTITION sales_q1_1998 WITH TABLE sales_old_q1_1998 INCLUDING INDEXES; ALTER TABLE sales DROP PARTITION sales_jan_2002; ALTER TABLE sales DROP PARTITION sales_feb_2002; ALTER TABLE sales DROP PARTITION sales_mar_2002;
DROP TABLE sales_mar_2002_temp;
DROP TABLE sales_delta;
DROP TABLE sales_old_q1_1998;
set serveroutput on
exec dw_handsOn.cleanup_modules
SELECT * FROM TABLE(dw_handsOn.verify_env)