首页 > Linux操作系统 > Linux操作系统 > 一次在线重定义引发的血案
create table ANINGTEST_temp as select * from ANINGTEST;
创建重定义临时表,字段类型、字段名称、索引等都需要和原表一致
/*==============================================================*/
/* Table: ANINGTEST3 */
/*==============================================================*/
CREATE TABLE ANINGTEST3
(
SEQ NUMBER(18) NOT NULL,
GAMECODE CHAR(2) NOT NULL,
PERIOD VARCHAR2(50),
VERSION VARCHAR2(100),
MERCHANTID VARCHAR2(100),
MESSAGEID VARCHAR2(100),
SYSTEMDATE DATE,
CONSTRAINT PK_ANINGTEST3 PRIMARY KEY (SEQ)
)
PCTFREE 20
PARTITION BY RANGE
(SYSTEMDATE)
(
PARTITION
ANINGTEST_P1
VALUES LESS THAN (TO_DATE(' 2013-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS')),
PARTITION
ANINGTEST_MAXVAL
VALUES LESS THAN (MAXVALUE)
);
grant dba to ANING;
EXEC Dbms_Redefinition.Can_Redef_Table('ANING', 'ANINGTEST');
BEGIN
DBMS_REDEFINITION.start_redef_table(
uname => 'ANING',
orig_table => 'ANINGTEST',
int_table => 'ANINGTEST3');
END;
/
BEGIN
dbms_redefinition.sync_interim_table(
uname => 'ANING',
orig_table => 'ANINGTEST',
int_table => 'ANINGTEST3');
END;
/
临时表变成原表,原表变成临时表
BEGIN
dbms_redefinition.finish_redef_table(
uname => 'ANING',
orig_table => 'ANINGTEST',
int_table => 'ANINGTEST3');
END;
/
DROP TABLE ANINGTEST3 cascade constraints;
select index_name,status from user_indexes where table_name=upper('ANINGTEST');
SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS WHERE INDEX_NAME like 'IDX_ANINGTEST_%';
select table_name,constraint_name,status from user_constraints where table_name=upper('ANINGTEST');
CREATE INDEX IDX_ANINGTEST_1 ON ANINGTEST (
PERIOD ASC
);
CREATE UNIQUE INDEX IDX_ANINGTEST_3 ON ANINGTEST (
MESSAGEID ASC
);
ALTER INDEX PK_ANINGTEST2 RENAME TO PK_ANINGTEST;
ALTER INDEX PK_ANINGTEST rebuild online parallel 4 compute statistics;
ALTER INDEX PK_ANINGTEST NOPARALLEL;
ALTER TABLE ANINGTEST RENAME CONSTRAINT PK_ANINGTEST2 TO PK_ANINGTEST;
select index_name,status from user_indexes where table_name=upper('ANINGTEST');
SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS WHERE INDEX_NAME like 'IDX_ANINGTEST_%';
select table_name,constraint_name,status from user_constraints where table_name=upper('ANINGTEST');
set lin 200
set pages 200
select TABLE_NAME,PARTITION_NAME from user_tab_partitions where TABLE_NAME='ANINGTEST' order by PARTITION_NAME ;
revoke dba from ANING;
grant UNLIMITED TABLESPACE to ANING;
oracle在回收dba权限时会把表空间使用权限同时回收,这导致回收后的用户没有操作任何表空间权限,当执行dml操作时会报表空间配额不足错,导致无法处理业务,而且还是客户发现系统不能使用
exec dbms_redefinition.abort_redef_table('ANING','ANINGTEST','ANINGTEST3');
或
BEGIN
DBMS_REDEFINITION.abort_redef_table (
uname => 'ANING',
orig_table => 'ANINGTEST',
int_table => 'ANINGTEST3');
END;
/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12457158/viewspace-753998/ ,如需转载,请注明出处,否则将追究法律责任。