Wm workspace
| Fiche express | |
|---|---|
| Type | Script/commande SQL*Plus (Oracle Workspace Manager) |
| Voir aussi | Wm enable versioning · Wm create workspace · Wm goto workspace |
Wm workspace est le script de référence pour Oracle Workspace Manager (WM) : il liste tous les workspaces existants, identifie le workspace courant de la session et affiche l'ensemble des tables actuellement versionnées.
Workspace Manager est une fonctionnalité Oracle (package DBMS_WM, schéma technique WMSYS) qui permet de versionner les lignes d'une ou plusieurs tables et de travailler dans des workspaces isolés — un peu comme des branches dans un outil de gestion de versions. Chaque session travaille dans un workspace donné (par défaut LIVE) ; les modifications faites dans un workspace enfant n'affectent pas le workspace parent tant qu'elles n'ont pas été fusionnées (merge), et peuvent être annulées (rollback) sans toucher au reste de la base.
Cycle de vie typique d'un workspace :
- on active le versionnement sur les tables concernées avec Wm enable versioning (préalable indispensable — une table doit posséder une clé primaire) ;
- on crée un workspace enfant avec Wm create workspace, puis on y bascule la session avec Wm goto workspace (Wm get workspace permet de vérifier à tout moment dans quel workspace se trouve la session courante) ;
- les modifications faites dans ce workspace peuvent être gelées en lecture seule avec Wm freeze workspace (et dégelées avec Wm unfreeze workspace) le temps d'une validation ou d'une revue ;
- elles sont ensuite soit propagées vers le parent avec Wm merge workspace, soit abandonnées avec Wm rollback workspace ;
- Wm refresh workspace permet à l'inverse de récupérer dans un workspace enfant les évolutions survenues sur son parent ;
- un workspace terminal (sans enfant) devenu inutile est supprimé avec Wm remove workspace ;
- en fin de vie, le versionnement d'une table peut être désactivé avec Wm disable versioning.
Script
-- Liste des workspaces et des tables versionnées (marque le workspace courant de la session)
SET LINESIZE 180
SET PAGESIZE 50000
SET VERIFY OFF
COLUMN current_workspace FORMAT a10 HEADING 'Current|Workspace'
COLUMN owner FORMAT a20 HEADING 'Workspace|Owner'
COLUMN workspace FORMAT a30 HEADING 'Workspace|Name'
COLUMN parent_workspace FORMAT a30 HEADING 'Parent|Workspace'
COLUMN createtime FORMAT a20 HEADING 'Create|Time'
COLUMN freeze_status FORMAT a8 HEADING 'Freeze|Status'
COLUMN freeze_mode FORMAT a20 HEADING 'Freeze|Mode'
COLUMN ver_tables FORMAT a50 HEADING 'All Current Versioned Tables'
-- Tous les workspaces, avec repérage du workspace courant de la session
SELECT
CASE WHEN dbms_wm.getworkspace = workspace THEN ' *' END AS current_workspace
, owner
, workspace
, parent_workspace
, TO_CHAR(createtime, 'DD-MON-YYYY HH24:MI:SS') createtime
, freeze_status
, freeze_mode
FROM
dba_workspaces
ORDER BY
owner, workspace;
-- Tables actuellement versionnées (toutes, quel que soit le workspace)
SELECT
owner || '.' || table_name AS ver_tables
FROM
wmsys.wm$versioned_tables
UNION ALL
SELECT
'No versioned tables found'
FROM
dual
WHERE NOT EXISTS (SELECT owner, table_name FROM wmsys.wm$versioned_tables)
ORDER BY 1;
Voir aussi
- Wm enable versioning — activer le versionnement sur une table
- Wm disable versioning — désactiver le versionnement sur une table
- Wm create workspace — créer un nouveau workspace enfant
- Wm get workspace — connaître le workspace courant de la session
- Wm goto workspace — basculer la session vers un workspace
- Wm freeze workspace — geler un workspace en lecture seule
- Wm unfreeze workspace — dégeler un workspace
- Wm merge workspace — fusionner un workspace enfant vers son parent
- Wm refresh workspace — rafraîchir un workspace enfant depuis son parent
- Wm rollback workspace — annuler les modifications d'un workspace
- Wm remove workspace — supprimer un workspace terminal