【SQL开源代码栏目提醒】:网学会员为广大网友收集整理了,17.7.7.4.sql,希望对大家有所帮助!
-- 重定义一个单一分区,并移动到一个不同的表空间
CREATE TABLE salestable
(s_productid NUMBER,
s_saledate DATE,
s_custid NUMBER,
s_totalprice NUMBER)
TABLESPACE users
PARTITION BY RANGE(s_saledate)
(PARTITION sal03q1 VALUES LESS THAN (DATE'2003-04-01'),
PARTITION sal03q2 VALUES LESS THAN (DATE'2003-07-01'),
PARTITION sal03q3 VALUES LESS THAN (DATE'2003-10-01'),
PARTITION sal03q4 VALUES LESS THAN (DATE'2004-01-01')
);
CREATE INDEX sales_index ON salestable
(s_saledate, s_productid, s_custid) LOCAL;
select partition_name, tablespace_name from user_tab_partitions
where table_name = 'SALESTABLE';
--1.
BEGIN
DBMS_REDEFINITION.CAN_REDEF_TABLE(
uname => 'test',
tname => 'SALESTABLE',
options_flag => DBMS_REDEFINITION.CONS_USE_ROWID,
part_name => 'sal03q1');
END;
--2.
CREATE TABLE int_salestable
(s_productid NUMBER,
s_saledate DATE,
s_custid NUMBER,
s_totalprice NUMBER)
TABLESPACE user1;
--3.
Start the redefinition process using rowid.
BEGIN
DBMS_REDEFINITION.START_REDEF_TABLE(
uname => 'test',
orig_table => 'salestable',
int_table => 'int_salestable',
col_mapping => NULL,
options_flag => DBMS_REDEFINITION.CONS_USE_ROWID,
part_name => 'sal03q1');
END;
/
--4.Manually create any local indexes on the interim table.
CREATE INDEX int_sales_index ON int_salestable
(s_saledate, s_productid, s_custid)
TABLESPACE user1;
--5.
Optionally synchronize the interim table.
BEGIN
DBMS_REDEFINITION.SYNC_INTERIM_TABLE(
uname => 'test',
orig_table => 'salestable',
int_table => 'int_salestable',
part_name => 'sal03q1');
END;
/
6.Complete the redefinition.
BEGIN
DBMS_REDEFINITION.FINISH_REDEF_TABLE(
uname => 'test',
orig_table => 'salestable',
int_table => 'int_salestable',
part_name => 'sal03q1');
END;
/
7.drop the interim table
drop table int_salestable;