Skip to Main Content

 

Auswahl  

Oracle Workspace Manager (Package dbms_wm) 

Oracle
DBA:PL/SQL
RDBMS 10.x
15.05.19 (MP)
04.07.23(MP)
Workspace Manager, dbms_wm, Tabellenversionierung

Passende Schulungen zum Thema

Der Workspace Manager dient zur Versionierung von Tabellendaten in verschieden Versionen (Workspaces)
Vorteile

  • Langlaufende Transaktionen können in einem eigenen Workspace laufen, ohne dass sie andere Sessions behindern
  • Unterschiedliche Versionsstände einer Tabelle können unendlich lange gespeichert werden
  • Was wäre, wenn Analysen in beliebiger Anzahl durchgeführt werden, ohne dass die Produktionsdaten dadurch verändert werden?
  • Verfügbar in Standard und Enterprise Edition

Vorbereitungen:

  • Tabellen müssen für den Workspace vorbereitet werden (DBMS_WM.EnableVersioning)
  • Dadurch wird die Tabelle umbenannt in <tabellenname>_LT
  • Dann wird eine View erzeugt mit dem Ursprungsnamen der Tabelle
  • Auf die View wird ein Instead of Trigger gelegt, der die Daten dann wieder in die Tabelle einträgt
  • Der Tablespace für die Tabelle wird nicht gewechselt

Sie können eine Administrationsrolle mit allen Rechten für die Workspacebearbeitung vergeben:

GRANT WM_ADMIN_ROLE TO <user>;


Folgende Einzelrechte können vergeben werden:

  • ACCESS_WORKSPACE
  • CREATE_WORKSPACE
  • MERGE_WORKSPACE
  • REMOVE_WORKSPACE
  • ROLLBACK_WORKSPACE
  • FREEZE_WORKSPACE

Beispiel:

BEGIN
DBMS_WM.GrantWorkspacePriv('ACCESS_ANY_WORKSPACE, MERGE_ANY_WORKSPACE', 'my_workspace_1','SCOTT','NO');
END;
/


Folgendes gilt für die Tabellen:

  • Nur der Eigentümer oder der Inhaber des Rechts WM_ADMIN_ROLE kann die Versionierung aktivieren
  • Die Tabelle muss einen Primärschlüssel besitzen
  • SYS Tabellen können nicht versioniert werden
  • Wenn eine Parent Tabelle versioniert wurde, muss die Child Tabelle es auch sein
  • Aber eine Child Tabelle kann auch ohne Parent Tabelle versioniert werden
  • Foreign Key Constraints dürfen nach Aktivieren der Versionierung nicht mehr nachträglich erzeugt werden

Beispiel:
Tabelle für den Workspace Manager aktivieren:

BEGIN
DBMS_WM.EnableVersioning(Table_Name => 'emp');
END;
/


Zwei Workspaces einrichten:

EXECUTE DBMS_WM.CreateWorkspace('my_workspace_1');


In den ersten Workspace wechseln:

EXECUTE DBMS_WM.GotoWorkspace('my_workspace_1');


Durchführen von Änderungen in der Tabelle emp im Workspace my_workspace_1:

INSERT INTO emp (empno,ename,deptno) VALUES (8000,'Marco',40);
DELETE FROM emp WHERE deptno=10;
UPDATE emp SET sal=sal+1 WHERE deptno=20;


In den Haupt-Workspace wechseln:

EXECUTE DBMS_WM.GotoWorkspace('LIVE');

Dort ist die Tabelle in Ihrem Ursprungszustand zu sehen (ohne die 3 DML Änderungen)

In welchem Workspace sind wir gerade?

SELECT DBMS_WM.GetWorkspace FROM dual;


Die Live Tabelle kann nun auf die Workspace Tabellen-Variante refreshed werden:

BEGIN
DBMS_WM.RefreshWorkspace(
workspace =>'my_workspace_1');
END;
/

Oder die Workspace Variante wird auf Live synchronisiert:

BEGIN
DBMS_WM.MergeWorkspace(
workspace =>'my_workspace_1');
END;
/


Die Tabelle kann wieder aus der Versionsverwaltung herausgenommen werden durch:

EXEC DBMS_WM.DisableVersioning('SCOTT.EMP');

Mit der Option FORCE wird das Kommando auch mit geänderten Workspacedaten durchgeführt, sonst erhält man einen Oracle Fehler:

ORA-20038: cannot disable version a table modified in non-LIVE workspaces

BEGIN
DBMS_WM.DisableVersioning('SCOTT.EMP',force=>TRUE);
END;
/


Zum Löschen eines Workspace verwenden Sie:

BEGIN
DBMS_WM.RemoveWorkspace('my_workspace_1');
END;
/


Weitere Informationen zum Workspace Manager erhalten Sie in unserem PL/SQL II Kurs.
 

Weitere Interessante Kurs-Tipps zum Thema

Besuchen Sie uns doch bei einer unsere über 50 Oracle Schulungen in München - Unterhaching, oder verfolgen Sie die Training per Videostreaming bequem vom Home Office oder Büro aus.