Name Null? Typ
-------------- --------------- ------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
Überprüfen, ob EMP zu reorganisieren ist:
SQL> exec dbms_redefinition.can_redef_table('SCOTT','EMP');
PL/SQL-Prozedur wurde erfolgreich abgeschlossen.
Erstellen Sie eine vorläufige Tabelle mit den gewünschten Änderungen
SQL> CREATE TABLE scott.vor_emp (
empno, name, verdienst, deptno)
AS SELECT empno,ename,sal,deptno FROM scott.emp
WHERE 1=2;
Start der Reorganisation:
SQL> BEGIN
dbms_redefinition.start_redef_table(
'SCOTT','EMP','VOR_EMP',
'EMPNO EMPNO,ENAME NAME,SAL*1.5 VERDIENST');
END;
/
Erstellen Sie den Primärschlüssel auf empno:
SQL> ALTER TABLE scott.vor_emp ADD
CONSTRAINT pk_voremp2
PRIMARY KEY (empno);
Erstellen Sie einen Fremdschlüssel auf der Spalte deptno der auf die Spalte deptno der Tabelle DEPT verweist:
SQL> ALTER TABLE scott.vor_emp ADD(
CONSTRAINT fk_emp
FOREIGN KEY (deptno)
REFERENCES scott.dept (deptno));
Der FK muss ausgeschaltet werden. Dieser wird dann am Ende der Reorganisation automatisch aktiviert.
SQL> ALTER TABLE scott.vor_emp DISABLE CONSTRAINT fk_emp;
Wenn nötig, synchronisieren Sie die Tabellen zwischendurch:
SQL> BEGIN
dbms_redefinition.sync_interim_table(
'SCOTT', 'EMP', 'VOR_EMP');
END;
/
PL/SQL-Prozedur wurde erfolgreich abgeschlossen.
Beenden Sie die Redefinition:
SQL> BEGIN
dbms_redefinition.finish_redef_table(
'SCOTT', 'EMP', 'VOR_EMP');
END;
/
Löschen der alten Tabelle:
SQL> DROP TABLE vor_emp;
Der Redefinitions Vorgang kann abgebrochen werden mit:
exec dbms_redefinition.abort_redef_table('SCOTT', 'EMP', 'EMP');
Neuerungen ab Version 10.2:
Bevor die Reorg abgeschlossen ist, können noch diverse Objekte (wie Cosntraints, Trigger, Indizes, u.w.) mit übernommen werden.
Neuerungen ab Version 11.x:
Nun können auch abhängige Materialized Views beim Reorg-Prozess mit übernommen werden.
VARIABLE num_err NUMBER
SET SERVEROUTPUT ON SIZE 200000
BEGIN
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(
uname=>'SCOTT',
orig_table=>'EMP',
int_table=>'VOR_EMP',
copy_indexes=>dbms_redefinition.cons_orig_params,
copy_triggers=>TRUE,
copy_constraints=>TRUE,
copy_privileges=>TRUE,
copy_statistics=>TRUE,
copy_mvlog=>TRUE,
ignore_errors=>FALSE,
num_errors=>:num_err);
dbms_output.put_line('Anzahl Fehler bei Übernahme:'||:num_err);
END;
/
Weitere Informationen zum Thema Reorganisation erhalten Sie in unseren Tuning und Monitoring Kursen.