diff --git a/catalogue/4.5/oracle_catalogue_schema.sql b/catalogue/4.5/oracle_catalogue_schema.sql
new file mode 100644
index 0000000000000000000000000000000000000000..1a769b6b567d34a560ee8661e41dfbb1fbd0e90d
--- /dev/null
+++ b/catalogue/4.5/oracle_catalogue_schema.sql
@@ -0,0 +1,561 @@
+CREATE SEQUENCE ARCHIVE_FILE_ID_SEQ
+  INCREMENT BY 1
+  START WITH 4294967296
+  NOMAXVALUE
+  MINVALUE 1
+  NOCYCLE
+  CACHE 20
+  NOORDER;
+CREATE SEQUENCE LOGICAL_LIBRARY_ID_SEQ
+  INCREMENT BY 1
+  START WITH 1
+  NOMAXVALUE
+  MINVALUE 1
+  NOCYCLE
+  CACHE 20
+  NOORDER;
+CREATE SEQUENCE MEDIA_TYPE_ID_SEQ
+  INCREMENT BY 1
+  START WITH 1
+  NOMAXVALUE
+  MINVALUE 1
+  NOCYCLE
+  CACHE 20
+  NOORDER;
+CREATE SEQUENCE STORAGE_CLASS_ID_SEQ
+  INCREMENT BY 1
+  START WITH 10000
+  NOMAXVALUE
+  MINVALUE 1
+  NOCYCLE
+  CACHE 20
+  NOORDER;
+CREATE SEQUENCE TAPE_POOL_ID_SEQ
+  INCREMENT BY 1
+  START WITH 1
+  NOMAXVALUE
+  MINVALUE 1
+  NOCYCLE
+  CACHE 20
+  NOORDER;
+CREATE SEQUENCE VIRTUAL_ORGANIZATION_ID_SEQ
+  INCREMENT BY 1
+  START WITH 1
+  NOMAXVALUE
+  MINVALUE 1
+  NOCYCLE
+  CACHE 20
+  NOORDER;
+CREATE SEQUENCE FILE_RECYCLE_LOG_ID_SEQ
+  INCREMENT BY 1
+  START WITH 1
+  NOMAXVALUE
+  MINVALUE 1
+  NOCYCLE
+  CACHE 20
+  NOORDER;
+CREATE GLOBAL TEMPORARY TABLE TEMP_TAPE_FILE_INSERTION_BATCH(
+  VID                   VARCHAR2(100),
+  FSEQ                  NUMERIC(20, 0)  ,
+  BLOCK_ID              NUMERIC(20, 0)  ,
+  LOGICAL_SIZE_IN_BYTES NUMERIC(20, 0)  ,
+  COPY_NB               NUMERIC(3, 0)   ,
+  CREATION_TIME         NUMERIC(20, 0)  ,
+  ARCHIVE_FILE_ID       NUMERIC(20, 0)
+)
+ON COMMIT DELETE ROWS;
+CREATE INDEX TEMP_T_F_I_B_AFI_IDX ON TEMP_TAPE_FILE_INSERTION_BATCH(ARCHIVE_FILE_ID);
+CREATE TABLE CTA_CATALOGUE(
+  SCHEMA_VERSION_MAJOR    NUMERIC(20, 0)      CONSTRAINT CTA_CATALOGUE_SVM1_NN NOT NULL,
+  SCHEMA_VERSION_MINOR    NUMERIC(20, 0)      CONSTRAINT CTA_CATALOGUE_SVM2_NN NOT NULL,
+  NEXT_SCHEMA_VERSION_MAJOR NUMERIC(20, 0),
+  NEXT_SCHEMA_VERSION_MINOR NUMERIC(20, 0),
+  STATUS                  VARCHAR2(100),
+  IS_PRODUCTION           CHAR(1)         DEFAULT '0' CONSTRAINT CTA_CATALOGUE_IP_NN NOT NULL,
+  CONSTRAINT CTA_CATALOGUE_IP_BOOL_CK     CHECK(IS_PRODUCTION IN ('0','1'))
+);
+CREATE TABLE ADMIN_USER(
+  ADMIN_USER_NAME         VARCHAR2(100)    CONSTRAINT ADMIN_USER_AUN_NN  NOT NULL,
+  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT ADMIN_USER_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT ADMIN_USER_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT ADMIN_USER_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT ADMIN_USER_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT ADMIN_USER_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT ADMIN_USER_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT ADMIN_USER_LUT_NN  NOT NULL,
+  CONSTRAINT ADMIN_USER_PK PRIMARY KEY(ADMIN_USER_NAME)
+);
+CREATE TABLE DISK_SYSTEM(
+  DISK_SYSTEM_NAME        VARCHAR2(100)    CONSTRAINT DISK_SYSTEM_DSNM_NN NOT NULL,
+  FILE_REGEXP             VARCHAR2(100)    CONSTRAINT DISK_SYSTEM_FR_NN   NOT NULL,
+  FREE_SPACE_QUERY_URL    VARCHAR2(1000)   CONSTRAINT DISK_SYSTEM_FSQU_NN NOT NULL,
+  REFRESH_INTERVAL        NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_RI_NN   NOT NULL,
+  TARGETED_FREE_SPACE     NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_TFS_NN  NOT NULL,
+  SLEEP_TIME              NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_ST_NN   NOT NULL,
+  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT DISK_SYSTEM_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT DISK_SYSTEM_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT DISK_SYSTEM_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT DISK_SYSTEM_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT DISK_SYSTEM_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_LUT_NN  NOT NULL,
+  CONSTRAINT NAME_PK PRIMARY KEY(DISK_SYSTEM_NAME)
+);
+
+CREATE TABLE DISK_INSTANCE(
+  DISK_INSTANCE_NAME      VARCHAR2(100)  CONSTRAINT DISK_INSTANCE_DINM_NN NOT NULL,
+  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT DISK_INSTANCE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_LUT_NN  NOT NULL,
+  CONSTRAINT DISK_INSTANCE_PK PRIMARY KEY(DISK_INSTANCE_NAME)
+);
+
+CREATE TABLE DISK_INSTANCE_SPACE(
+  DISK_INSTANCE_NAME        VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_DINM_NN NOT NULL,
+  DISK_INSTANCE_SPACE_NAME  VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_DISNM_NN NOT NULL,
+  FREE_SPACE_QUERY_URL      VARCHAR2(1000)   CONSTRAINT DISK_INSTANCE_SPACE_FSQU_NN NOT NULL,
+  REFRESH_INTERVAL          NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_RI_NN   NOT NULL,
+  LAST_REFRESH_TIME         NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_LRT_NN   NOT NULL,
+  FREE_SPACE                NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_TFS_NN  NOT NULL,
+  USER_COMMENT              VARCHAR2(1000)   CONSTRAINT DISK_INSTANCE_SPACE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME    VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME    VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME         NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME     VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME     VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME          NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_LUT_NN  NOT NULL,
+  CONSTRAINT DISK_INSTANCE_SPACE_PK PRIMARY KEY(DISK_INSTANCE_NAME, DISK_INSTANCE_SPACE_NAME),
+  CONSTRAINT DISK_INSTANCE_SPACE_DIN_FK FOREIGN KEY(DISK_INSTANCE_NAME) REFERENCES DISK_INSTANCE(DISK_INSTANCE_NAME)
+);
+
+CREATE TABLE VIRTUAL_ORGANIZATION(
+  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)      CONSTRAINT VIRTUAL_ORGANIZATION_VOI_NN  NOT NULL,
+  VIRTUAL_ORGANIZATION_NAME VARCHAR2(100)  CONSTRAINT VIRTUAL_ORGANIZATION_VON_NN  NOT NULL,
+  READ_MAX_DRIVES NUMERIC(20, 0)              CONSTRAINT VIRTUAL_ORGANIZATION_RMD_NN  NOT NULL,
+  WRITE_MAX_DRIVES NUMERIC(20, 0)             CONSTRAINT VIRTUAL_ORGANIZATION_WMD_NN  NOT NULL,
+  MAX_FILE_SIZE NUMERIC(20, 0)                CONSTRAINT VIRTUAL_ORGANIZATION_MFS_NN  NOT NULL,
+  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT VIRTUAL_ORGANIZATION_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT VIRTUAL_ORGANIZATION_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT VIRTUAL_ORGANIZATION_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT VIRTUAL_ORGANIZATION_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT VIRTUAL_ORGANIZATION_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT VIRTUAL_ORGANIZATION_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT VIRTUAL_ORGANIZATION_LUT_NN  NOT NULL,
+  CONSTRAINT VIRTUAL_ORGANIZATION_PK PRIMARY KEY(VIRTUAL_ORGANIZATION_ID),
+  CONSTRAINT VIRTUAL_ORGANIZATION_VON_UN UNIQUE(VIRTUAL_ORGANIZATION_NAME)
+);
+CREATE TABLE STORAGE_CLASS(
+  STORAGE_CLASS_ID        NUMERIC(20, 0)      CONSTRAINT STORAGE_CLASS_SCI_NN  NOT NULL,
+  STORAGE_CLASS_NAME      VARCHAR2(100)    CONSTRAINT STORAGE_CLASS_SCN_NN  NOT NULL,
+  NB_COPIES               NUMERIC(3, 0)       CONSTRAINT STORAGE_CLASS_NC_NN   NOT NULL,
+  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)      CONSTRAINT STORAGE_CLASS_VOI_NN  NOT NULL,
+  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT STORAGE_CLASS_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT STORAGE_CLASS_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT STORAGE_CLASS_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT STORAGE_CLASS_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT STORAGE_CLASS_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT STORAGE_CLASS_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT STORAGE_CLASS_LUT_NN  NOT NULL,
+  CONSTRAINT STORAGE_CLASS_PK PRIMARY KEY(STORAGE_CLASS_ID),
+  CONSTRAINT STORAGE_CLASS_SCN_UN UNIQUE(STORAGE_CLASS_NAME),
+  CONSTRAINT STORAGE_CLASS_VOI_FK FOREIGN KEY(VIRTUAL_ORGANIZATION_ID) REFERENCES VIRTUAL_ORGANIZATION(VIRTUAL_ORGANIZATION_ID)
+);
+CREATE TABLE TAPE_POOL(
+  TAPE_POOL_ID            NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_TPI_NN  NOT NULL,
+  TAPE_POOL_NAME          VARCHAR2(100)    CONSTRAINT TAPE_POOL_TPN_NN  NOT NULL,
+  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_VOI_NN  NOT NULL,
+  NB_PARTIAL_TAPES        NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_NPT_NN  NOT NULL,
+  IS_ENCRYPTED            CHAR(1)         CONSTRAINT TAPE_POOL_IE_NN   NOT NULL,
+  SUPPLY                  VARCHAR2(100),
+  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT TAPE_POOL_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT TAPE_POOL_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT TAPE_POOL_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_LUT_NN  NOT NULL,
+  CONSTRAINT TAPE_POOL_PK PRIMARY KEY(TAPE_POOL_ID),
+  CONSTRAINT TAPE_POOL_TPN_UN UNIQUE(TAPE_POOL_NAME),
+  CONSTRAINT TAPE_POOL_IS_ENCRYPTED_BOOL_CK CHECK(IS_ENCRYPTED IN ('0', '1')),
+  CONSTRAINT TAPE_POOL_VO_FK FOREIGN KEY(VIRTUAL_ORGANIZATION_ID) REFERENCES VIRTUAL_ORGANIZATION(VIRTUAL_ORGANIZATION_ID)
+);
+CREATE TABLE ARCHIVE_ROUTE(
+  STORAGE_CLASS_ID        NUMERIC(20, 0)      CONSTRAINT ARCHIVE_ROUTE_SCI_NN  NOT NULL,
+  COPY_NB                 NUMERIC(3, 0)       CONSTRAINT ARCHIVE_ROUTE_CN_NN   NOT NULL,
+  TAPE_POOL_ID            NUMERIC(20, 0)      CONSTRAINT ARCHIVE_ROUTE_TPI_NN  NOT NULL,
+  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT ARCHIVE_ROUTE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT ARCHIVE_ROUTE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT ARCHIVE_ROUTE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT ARCHIVE_ROUTE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT ARCHIVE_ROUTE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT ARCHIVE_ROUTE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT ARCHIVE_ROUTE_LUT_NN  NOT NULL,
+  CONSTRAINT ARCHIVE_ROUTE_PK PRIMARY KEY(STORAGE_CLASS_ID, COPY_NB),
+  CONSTRAINT ARCHIVE_ROUTE_STORAGE_CLASS_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID),
+  CONSTRAINT ARCHIVE_ROUTE_TAPE_POOL_FK FOREIGN KEY(TAPE_POOL_ID) REFERENCES TAPE_POOL(TAPE_POOL_ID),
+  CONSTRAINT ARCHIVE_ROUTE_COPY_NB_GT_0_CK CHECK(COPY_NB > 0),
+  CONSTRAINT ARCHIVE_ROUTE_SCI_TPI_UN UNIQUE(STORAGE_CLASS_ID, TAPE_POOL_ID)
+);
+CREATE TABLE MEDIA_TYPE(
+  MEDIA_TYPE_ID          NUMERIC(20, 0)    CONSTRAINT MEDIA_TYPE_MTI_NN  NOT NULL,
+  MEDIA_TYPE_NAME        VARCHAR2(100)  CONSTRAINT MEDIA_TYPE_MTN_NN  NOT NULL,
+  CARTRIDGE              VARCHAR2(100)  CONSTRAINT MEDIA_TYPE_C_NN    NOT NULL,
+  CAPACITY_IN_BYTES      NUMERIC(20, 0)    CONSTRAINT MEDIA_TYPE_CIB_NN  NOT NULL,
+  PRIMARY_DENSITY_CODE   NUMERIC(3, 0),
+  SECONDARY_DENSITY_CODE NUMERIC(3, 0),
+  NB_WRAPS               NUMERIC(10, 0),
+  MIN_LPOS               NUMERIC(20, 0),
+  MAX_LPOS               NUMERIC(20, 0),
+  USER_COMMENT           VARCHAR2(1000) CONSTRAINT MEDIA_TYPE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME VARCHAR2(100)  CONSTRAINT MEDIA_TYPE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME VARCHAR2(100)  CONSTRAINT MEDIA_TYPE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME      NUMERIC(20, 0)    CONSTRAINT MEDIA_TYPE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME  VARCHAR2(100)  CONSTRAINT MEDIA_TYPE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME  VARCHAR2(100)  CONSTRAINT MEDIA_TYPE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME       NUMERIC(20, 0)    CONSTRAINT MEDIA_TYPE_LUT_NN  NOT NULL,
+  CONSTRAINT MEDIA_TYPE_PK PRIMARY KEY(MEDIA_TYPE_ID),
+  CONSTRAINT MEDIA_TYPE_MTN_UN UNIQUE(MEDIA_TYPE_NAME)
+);
+CREATE TABLE LOGICAL_LIBRARY(
+  LOGICAL_LIBRARY_ID      NUMERIC(20, 0)      CONSTRAINT LOGICAL_LIBRARY_LLI_NN  NOT NULL,
+  LOGICAL_LIBRARY_NAME    VARCHAR2(100)    CONSTRAINT LOGICAL_LIBRARY_LLN_NN  NOT NULL,
+  IS_DISABLED             CHAR(1)         DEFAULT '0' CONSTRAINT LOGICAL_LIBRARY_ID_NN NOT NULL,
+  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT LOGICAL_LIBRARY_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT LOGICAL_LIBRARY_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT LOGICAL_LIBRARY_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT LOGICAL_LIBRARY_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT LOGICAL_LIBRARY_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT LOGICAL_LIBRARY_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT LOGICAL_LIBRARY_LUT_NN  NOT NULL,
+  CONSTRAINT LOGICAL_LIBRARY_PK PRIMARY KEY(LOGICAL_LIBRARY_ID),
+  CONSTRAINT LOGICAL_LIBRARY_LLN_UN UNIQUE(LOGICAL_LIBRARY_NAME),
+  CONSTRAINT LOGICAL_LIBRARY_ID_BOOL_CK CHECK(IS_DISABLED IN ('0', '1'))
+);
+CREATE TABLE TAPE(
+  VID                     VARCHAR2(100)    CONSTRAINT TAPE_V_NN    NOT NULL,
+  MEDIA_TYPE_ID           NUMERIC(20, 0)      CONSTRAINT TAPE_MTID_NN   NOT NULL,
+  VENDOR                  VARCHAR2(100)    CONSTRAINT TAPE_V2_NN   NOT NULL,
+  LOGICAL_LIBRARY_ID      NUMERIC(20, 0)      CONSTRAINT TAPE_LLI_NN  NOT NULL,
+  TAPE_POOL_ID            NUMERIC(20, 0)      CONSTRAINT TAPE_TPI_NN  NOT NULL,
+  ENCRYPTION_KEY_NAME     VARCHAR2(100),
+  DATA_IN_BYTES           NUMERIC(20, 0)      CONSTRAINT TAPE_DIB_NN  NOT NULL,
+  LAST_FSEQ               NUMERIC(20, 0)      CONSTRAINT TAPE_LF_NN   NOT NULL,
+  NB_MASTER_FILES         NUMERIC(20, 0)      DEFAULT 0 CONSTRAINT TAPE_NB_MASTER_FILES_NN NOT NULL,
+  MASTER_DATA_IN_BYTES    NUMERIC(20, 0)      DEFAULT 0 CONSTRAINT TAPE_MASTER_DATA_IN_BYTES_NN NOT NULL,
+  IS_FULL                 CHAR(1)         CONSTRAINT TAPE_IF_NN   NOT NULL,
+  IS_FROM_CASTOR          CHAR(1)         CONSTRAINT TAPE_IFC_NN  NOT NULL,
+  DIRTY                   CHAR(1)         DEFAULT '1' CONSTRAINT TAPE_DIRTY_NN NOT NULL,
+  NB_COPY_NB_1            NUMERIC(20, 0)     DEFAULT 0 CONSTRAINT TAPE_NB_COPY_NB_1_NN NOT NULL,
+  COPY_NB_1_IN_BYTES      NUMERIC(20, 0)     DEFAULT 0 CONSTRAINT TAPE_COPY_NB_1_IN_BYTES_NN NOT NULL,
+  NB_COPY_NB_GT_1         NUMERIC(20, 0)     DEFAULT 0 CONSTRAINT TAPE_NB_COPY_NB_GT_1_NN NOT NULL,
+  COPY_NB_GT_1_IN_BYTES   NUMERIC(20, 0)     DEFAULT 0 CONSTRAINT TAPE_COPY_NB_GT_1_IN_BYTES_NN NOT NULL,
+  LABEL_DRIVE             VARCHAR2(100),
+  LABEL_TIME              NUMERIC(20, 0)    ,
+  LAST_READ_DRIVE         VARCHAR2(100),
+  LAST_READ_TIME          NUMERIC(20, 0)    ,
+  LAST_WRITE_DRIVE        VARCHAR2(100),
+  LAST_WRITE_TIME         NUMERIC(20, 0)    ,
+  READ_MOUNT_COUNT        NUMERIC(20, 0)      DEFAULT 0 CONSTRAINT TAPE_RMC_NN NOT NULL,
+  WRITE_MOUNT_COUNT       NUMERIC(20, 0)      DEFAULT 0 CONSTRAINT TAPE_WMC_NN NOT NULL,
+  USER_COMMENT            VARCHAR2(1000),
+  TAPE_STATE              VARCHAR2(100)    CONSTRAINT TAPE_TS_NN NOT NULL,
+  STATE_REASON            VARCHAR2(1000),
+  STATE_UPDATE_TIME       NUMERIC(20, 0)      CONSTRAINT TAPE_SUT_NN NOT NULL,
+  STATE_MODIFIED_BY       VARCHAR2(100)    CONSTRAINT TAPE_SMB_NN NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT TAPE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT TAPE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT TAPE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT TAPE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT TAPE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT TAPE_LUT_NN  NOT NULL,
+  CONSTRAINT TAPE_PK PRIMARY KEY(VID),
+  CONSTRAINT TAPE_LOGICAL_LIBRARY_FK FOREIGN KEY(LOGICAL_LIBRARY_ID) REFERENCES LOGICAL_LIBRARY(LOGICAL_LIBRARY_ID),
+  CONSTRAINT TAPE_TAPE_POOL_FK FOREIGN KEY(TAPE_POOL_ID) REFERENCES TAPE_POOL(TAPE_POOL_ID),
+  CONSTRAINT TAPE_IS_FULL_BOOL_CK CHECK(IS_FULL IN ('0', '1')),
+  CONSTRAINT TAPE_IS_FROM_CASTOR_BOOL_CK CHECK(IS_FROM_CASTOR IN ('0', '1')),
+  CONSTRAINT TAPE_DIRTY_BOOL_CK CHECK(DIRTY IN ('0','1')),
+  CONSTRAINT TAPE_STATE_CK CHECK(TAPE_STATE IN ('ACTIVE', 'DISABLED', 'BROKEN')),
+  CONSTRAINT TAPE_MEDIA_TYPE_FK FOREIGN KEY(MEDIA_TYPE_ID) REFERENCES MEDIA_TYPE(MEDIA_TYPE_ID)
+);
+CREATE INDEX TAPE_TAPE_POOL_ID_IDX ON TAPE(TAPE_POOL_ID);
+CREATE INDEX TAPE_STATE_IDX ON TAPE(TAPE_STATE);
+CREATE TABLE MOUNT_POLICY(
+  MOUNT_POLICY_NAME          VARCHAR2(100)    CONSTRAINT MOUNT_POLICY_MPN_NN  NOT NULL,
+  ARCHIVE_PRIORITY           NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_AP_NN   NOT NULL,
+  ARCHIVE_MIN_REQUEST_AGE    NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_AMRA_NN NOT NULL,
+  RETRIEVE_PRIORITY          NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_RP_NN   NOT NULL,
+  RETRIEVE_MIN_REQUEST_AGE   NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_RMRA_NN NOT NULL,
+  USER_COMMENT               VARCHAR2(1000)   CONSTRAINT MOUNT_POLICY_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME     VARCHAR2(100)    CONSTRAINT MOUNT_POLICY_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME     VARCHAR2(100)    CONSTRAINT MOUNT_POLICY_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME          NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME      VARCHAR2(100)    CONSTRAINT MOUNT_POLICY_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME      VARCHAR2(100)    CONSTRAINT MOUNT_POLICY_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME           NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_LUT_NN  NOT NULL,
+  CONSTRAINT MOUNT_POLICY_PK PRIMARY KEY(MOUNT_POLICY_NAME)
+);
+CREATE TABLE REQUESTER_ACTIVITY_MOUNT_RULE(
+  DISK_INSTANCE_NAME     VARCHAR2(100)    CONSTRAINT RQSTER_ACT_RULE_DIN_NN  NOT NULL,
+  REQUESTER_NAME         VARCHAR2(100)    CONSTRAINT RQSTER_ACT_RULE_RN_NN   NOT NULL,
+  ACTIVITY_REGEX         VARCHAR2(100)    CONSTRAINT RQSTER_ACT_RULE_AR_NN   NOT NULL,
+  MOUNT_POLICY_NAME      VARCHAR2(100)    CONSTRAINT RQSTER_ACT_RULE_MPN_NN  NOT NULL,
+  USER_COMMENT           VARCHAR2(1000)   CONSTRAINT RQSTER_ACT_RULE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME VARCHAR2(100)    CONSTRAINT RQSTER_ACT_RULE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME VARCHAR2(100)    CONSTRAINT RQSTER_ACT_RULE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME      NUMERIC(20, 0)      CONSTRAINT RQSTER_ACT_RULE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME  VARCHAR2(100)    CONSTRAINT RQSTER_ACT_RULE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME  VARCHAR2(100)    CONSTRAINT RQSTER_ACT_RULE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME       NUMERIC(20, 0)      CONSTRAINT RQSTER_ACT_RULE_LUT_NN  NOT NULL,
+  CONSTRAINT RQSTER_ACT_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_NAME, ACTIVITY_REGEX),
+  CONSTRAINT RQSTER_ACT_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)
+    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)
+);
+CREATE TABLE REQUESTER_MOUNT_RULE(
+  DISK_INSTANCE_NAME     VARCHAR2(100)    CONSTRAINT RQSTER_RULE_DIN_NN  NOT NULL,
+  REQUESTER_NAME         VARCHAR2(100)    CONSTRAINT RQSTER_RULE_RN_NN   NOT NULL,
+  MOUNT_POLICY_NAME      VARCHAR2(100)    CONSTRAINT RQSTER_RULE_MPN_NN  NOT NULL,
+  USER_COMMENT           VARCHAR2(1000)   CONSTRAINT RQSTER_RULE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME VARCHAR2(100)    CONSTRAINT RQSTER_RULE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME VARCHAR2(100)    CONSTRAINT RQSTER_RULE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME      NUMERIC(20, 0)      CONSTRAINT RQSTER_RULE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME  VARCHAR2(100)    CONSTRAINT RQSTER_RULE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME  VARCHAR2(100)    CONSTRAINT RQSTER_RULE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME       NUMERIC(20, 0)      CONSTRAINT RQSTER_RULE_LUT_NN  NOT NULL,
+  CONSTRAINT RQSTER_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_NAME),
+  CONSTRAINT RQSTER_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)
+    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)
+);
+CREATE TABLE REQUESTER_GROUP_MOUNT_RULE(
+  DISK_INSTANCE_NAME     VARCHAR2(100)    CONSTRAINT RQSTER_GRP_RULE_DIN_NN  NOT NULL,
+  REQUESTER_GROUP_NAME   VARCHAR2(100)    CONSTRAINT RQSTER_GRP_RULE_RGN_NN  NOT NULL,
+  MOUNT_POLICY_NAME      VARCHAR2(100)    CONSTRAINT RQSTER_GRP_RULE_MPN_NN  NOT NULL,
+  USER_COMMENT           VARCHAR2(1000)   CONSTRAINT RQSTER_GRP_RULE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME VARCHAR2(100)    CONSTRAINT RQSTER_GRP_RULE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME VARCHAR2(100)    CONSTRAINT RQSTER_GRP_RULE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME      NUMERIC(20, 0)      CONSTRAINT RQSTER_GRP_RULE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME  VARCHAR2(100)    CONSTRAINT RQSTER_GRP_RULE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME  VARCHAR2(100)    CONSTRAINT RQSTER_GRP_RULE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME       NUMERIC(20, 0)      CONSTRAINT RQSTER_GRP_RULE_LUT_NN  NOT NULL,
+  CONSTRAINT RQSTER_GRP_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_GROUP_NAME),
+  CONSTRAINT RQSTER_GRP_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)
+    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)
+);
+CREATE TABLE ARCHIVE_FILE(
+  ARCHIVE_FILE_ID         NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_AFI_NN  NOT NULL,
+  DISK_INSTANCE_NAME      VARCHAR2(100)    CONSTRAINT ARCHIVE_FILE_DIN_NN  NOT NULL,
+  DISK_FILE_ID            VARCHAR2(100)    CONSTRAINT ARCHIVE_FILE_DFI_NN  NOT NULL,
+  DISK_FILE_UID           NUMERIC(10, 0)      CONSTRAINT ARCHIVE_FILE_DFUID_NN  NOT NULL,
+  DISK_FILE_GID           NUMERIC(10, 0)      CONSTRAINT ARCHIVE_FILE_DFGID_NN  NOT NULL,
+  SIZE_IN_BYTES           NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_SIB_NN  NOT NULL,
+  CHECKSUM_BLOB           RAW(200),
+  CHECKSUM_ADLER32        NUMERIC(10, 0)      CONSTRAINT ARCHIVE_FILE_CB2_NN  NOT NULL,
+  STORAGE_CLASS_ID        NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_SCI_NN  NOT NULL,
+  CREATION_TIME           NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_CT2_NN  NOT NULL,
+  RECONCILIATION_TIME     NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_RT_NN   NOT NULL,
+  IS_DELETED              CHAR(1)         DEFAULT '0' CONSTRAINT ARCHIVE_FILE_ID_NN NOT NULL,
+  COLLOCATION_HINT        VARCHAR2(100),
+  CONSTRAINT ARCHIVE_FILE_PK PRIMARY KEY(ARCHIVE_FILE_ID),
+  CONSTRAINT ARCHIVE_FILE_STORAGE_CLASS_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID),
+  CONSTRAINT ARCHIVE_FILE_DIN_DFI_UN UNIQUE(DISK_INSTANCE_NAME, DISK_FILE_ID),
+  CONSTRAINT ARCHIVE_FILE_ID_BOOL_CK CHECK(IS_DELETED IN ('0', '1'))
+);
+CREATE INDEX ARCHIVE_FILE_DIN_IDX ON ARCHIVE_FILE(DISK_INSTANCE_NAME);
+CREATE INDEX ARCHIVE_FILE_DFI_IDX ON ARCHIVE_FILE(DISK_FILE_ID);
+CREATE TABLE TAPE_FILE(
+  VID                      VARCHAR2(100)   CONSTRAINT TAPE_FILE_V_NN    NOT NULL,
+  FSEQ                     NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_F_NN    NOT NULL,
+  BLOCK_ID                 NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_BI_NN   NOT NULL,
+  LOGICAL_SIZE_IN_BYTES    NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_CSIB_NN NOT NULL,
+  COPY_NB                  NUMERIC(3, 0)      CONSTRAINT TAPE_FILE_CN_NN   NOT NULL,
+  CREATION_TIME            NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_CT_NN   NOT NULL,
+  ARCHIVE_FILE_ID          NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_AFI_NN  NOT NULL,
+  CONSTRAINT TAPE_FILE_PK PRIMARY KEY(VID, FSEQ),
+  CONSTRAINT TAPE_FILE_TAPE_FK FOREIGN KEY(VID)
+    REFERENCES TAPE(VID),
+  CONSTRAINT TAPE_FILE_ARCHIVE_FILE_FK FOREIGN KEY(ARCHIVE_FILE_ID)
+    REFERENCES ARCHIVE_FILE(ARCHIVE_FILE_ID),
+  CONSTRAINT TAPE_FILE_VID_BLOCK_ID_UN UNIQUE(VID, BLOCK_ID),
+  CONSTRAINT TAPE_FILE_COPY_NB_GT_0_CK CHECK(COPY_NB > 0)
+);
+CREATE INDEX TAPE_FILE_VID_IDX ON TAPE_FILE(VID);
+CREATE INDEX TAPE_FILE_ARCHIVE_FILE_ID_IDX ON TAPE_FILE(ARCHIVE_FILE_ID);
+CREATE TABLE ACTIVITIES_WEIGHTS (
+  DISK_INSTANCE_NAME       VARCHAR2(100),
+  ACTIVITY                 VARCHAR2(100),
+  WEIGHT                   VARCHAR2(100),
+  USER_COMMENT             VARCHAR2(1000)   CONSTRAINT ACTIV_WEIGHTS_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME   VARCHAR2(100)    CONSTRAINT ACTIV_WEIGHTS_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME   VARCHAR2(100)    CONSTRAINT ACTIV_WEIGHTS_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME        NUMERIC(20, 0)      CONSTRAINT ACTIV_WEIGHTS_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME    VARCHAR2(100)    CONSTRAINT ACTIV_WEIGHTS_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME    VARCHAR2(100)    CONSTRAINT ACTIV_WEIGHTS_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME         NUMERIC(20, 0)      CONSTRAINT ACTIV_WEIGHTS_LUT_NN  NOT NULL
+);
+CREATE TABLE FILE_RECYCLE_LOG(
+  FILE_RECYCLE_LOG_ID        NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_ID_NN NOT NULL,
+  VID                        VARCHAR2(100)        CONSTRAINT FILE_RECYCLE_LOG_VID_NN NOT NULL,
+  FSEQ                       NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_FSEQ_NN NOT NULL,
+  BLOCK_ID                   NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_BID_NN NOT NULL,
+  COPY_NB                    NUMERIC(3, 0)           CONSTRAINT FILE_RECYCLE_LOG_COPY_NB_NN NOT NULL,
+  TAPE_FILE_CREATION_TIME    NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_TFCT_NN NOT NULL,
+  ARCHIVE_FILE_ID            NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_AFI_NN NOT NULL,
+  DISK_INSTANCE_NAME         VARCHAR2(100)        CONSTRAINT FILE_RECYCLE_LOG_DIN_NN NOT NULL,
+  DISK_FILE_ID               VARCHAR2(100)        CONSTRAINT FILE_RECYCLE_LOG_DFI_NN NOT NULL,
+  DISK_FILE_ID_WHEN_DELETED  VARCHAR2(100)        CONSTRAINT FILE_RECYCLE_LOG_DFIWD_NN NOT NULL,
+  DISK_FILE_UID              NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_DFU_NN NOT NULL,
+  DISK_FILE_GID              NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_DFG_NN NOT NULL,
+  SIZE_IN_BYTES              NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_SIB_NN NOT NULL,
+  CHECKSUM_BLOB              RAW(200),
+  CHECKSUM_ADLER32           NUMERIC(10, 0)          CONSTRAINT FILE_RECYCLE_LOG_CA_NN NOT NULL,
+  STORAGE_CLASS_ID           NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_SCI_NN NOT NULL,
+  ARCHIVE_FILE_CREATION_TIME NUMERIC(20, 0)          CONSTRAINT FILE_RECYLE_LOG_CT_NN NOT NULL,
+  RECONCILIATION_TIME        NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_RT_NN NOT NULL,
+  COLLOCATION_HINT           VARCHAR2(100),
+  DISK_FILE_PATH             VARCHAR2(2000),
+  REASON_LOG                 VARCHAR2(1000)       CONSTRAINT FILE_RECYCLE_LOG_RL_NN NOT NULL,
+  RECYCLE_LOG_TIME           NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_RLT_NN NOT NULL,
+  CONSTRAINT FILE_RECYCLE_LOG_PK PRIMARY KEY(FILE_RECYCLE_LOG_ID),
+  CONSTRAINT FILE_RECYCLE_LOG_VID_FK FOREIGN KEY(VID) REFERENCES TAPE(VID),
+  CONSTRAINT FILE_RECYCLE_LOG_SC_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID)
+);
+CREATE INDEX FILE_RECYCLE_LOG_DFI_IDX ON FILE_RECYCLE_LOG(DISK_FILE_ID);
+
+CREATE TABLE DRIVE_CONFIG (
+  DRIVE_NAME                  VARCHAR2(100)       CONSTRAINT DRIVE_CONFIG_DN_NN  NOT NULL,
+  CATEGORY                    VARCHAR2(100)       CONSTRAINT DRIVE_CONFIG_C_NN   NOT NULL,
+  KEY_NAME                    VARCHAR2(100)       CONSTRAINT DRIVE_CONFIG_KN_NN  NOT NULL,
+  VALUE                       VARCHAR2(1000)      CONSTRAINT DRIVE_CONFIG_V_NN   NOT NULL,
+  SOURCE                      VARCHAR2(100)       CONSTRAINT DRIVE_CONFIG_S_NN   NOT NULL,
+  CONSTRAINT DRIVE_CONFIG_DN_PK PRIMARY KEY(KEY_NAME, DRIVE_NAME)
+);
+
+CREATE TABLE TAPE_DRIVE (
+  DRIVE_NAME                  VARCHAR2(100)       CONSTRAINT DRIVE_STATE_DN_NN NOT NULL,
+  HOST                        VARCHAR2(100)       CONSTRAINT DRIVE_STATE_H_NN  NOT NULL,
+  LOGICAL_LIBRARY             VARCHAR2(100)       CONSTRAINT DRIVE_STATE_LL_NN NOT NULL,
+  SESSION_ID                  NUMERIC(20, 0),
+  BYTES_TRANSFERED_IN_SESSION NUMERIC(20, 0),
+  FILES_TRANSFERED_IN_SESSION NUMERIC(20, 0),
+  LATEST_BANDWIDTH            VARCHAR2(100),
+  SESSION_START_TIME          NUMERIC(20, 0),
+  MOUNT_START_TIME            NUMERIC(20, 0),
+  TRANSFER_START_TIME         NUMERIC(20, 0),
+  UNLOAD_START_TIME           NUMERIC(20, 0),
+  UNMOUNT_START_TIME          NUMERIC(20, 0),
+  DRAINING_START_TIME         NUMERIC(20, 0),
+  DOWN_OR_UP_START_TIME       NUMERIC(20, 0),
+  PROBE_START_TIME            NUMERIC(20, 0),
+  CLEANUP_START_TIME          NUMERIC(20, 0),
+  START_START_TIME            NUMERIC(20, 0),
+  SHUTDOWN_TIME               NUMERIC(20, 0),
+  MOUNT_TYPE                  NUMERIC(10, 0)      CONSTRAINT DRIVE_STATE_MT_NN NOT NULL,
+  DRIVE_STATUS                VARCHAR2(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_STATE_DS_NN NOT NULL,
+  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DU_NN  NOT NULL,
+  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DFD_NN NOT NULL,
+  REASON_UP_DOWN              VARCHAR2(1000),
+  CURRENT_VID                 VARCHAR2(100),
+  CTA_VERSION                 VARCHAR2(100),
+  CURRENT_PRIORITY            NUMERIC(20, 0),
+  CURRENT_ACTIVITY            VARCHAR2(100),
+  CURRENT_ACTIVITY_WEIGHT     VARCHAR2(100),
+  CURRENT_TAPE_POOL           VARCHAR2(100),
+  NEXT_MOUNT_TYPE             NUMERIC(10, 0),
+  NEXT_VID                    VARCHAR2(100),
+  NEXT_TAPE_POOL              VARCHAR2(100),
+  NEXT_PRIORITY               NUMERIC(20, 0),
+  NEXT_ACTIVITY               VARCHAR2(100),
+  NEXT_ACTIVITY_WEIGHT        VARCHAR2(100),
+  DEV_FILE_NAME               VARCHAR2(100),
+  RAW_LIBRARY_SLOT            VARCHAR2(100),
+  CURRENT_VO                  VARCHAR2(100),
+  NEXT_VO                     VARCHAR2(100),
+  USER_COMMENT                VARCHAR2(1000),
+  CREATION_LOG_USER_NAME      VARCHAR2(100),
+  CREATION_LOG_HOST_NAME      VARCHAR2(100),
+  CREATION_LOG_TIME           NUMERIC(20, 0),
+  LAST_UPDATE_USER_NAME       VARCHAR2(100),
+  LAST_UPDATE_HOST_NAME       VARCHAR2(100),
+  LAST_UPDATE_TIME            NUMERIC(20, 0),
+  DISK_SYSTEM_NAME            VARCHAR2(100)       CONSTRAINT DRIVE_STATE_DSN_NN NOT NULL,
+  RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_STATE_RB_NN  NOT NULL,
+  CONSTRAINT DRIVE_STATE_DN_PK PRIMARY KEY(DRIVE_NAME),
+  CONSTRAINT DRIVE_STATE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),
+  CONSTRAINT DRIVE_STATE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),
+  CONSTRAINT DRIVE_STATE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',
+  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',
+  'UNKNOWN'))
+);
+
+CREATE TABLE DRIVE_STATE (
+  DRIVE_NAME                  VARCHAR2(100)       CONSTRAINT DRIVE_DN_NN NOT NULL,
+  HOST                        VARCHAR2(100)       CONSTRAINT DRIVE_H_NN  NOT NULL,
+  LOGICAL_LIBRARY             VARCHAR2(100)       CONSTRAINT DRIVE_LL_NN NOT NULL,
+  SESSION_ID                  NUMERIC(20, 0),
+  BYTES_TRANSFERED_IN_SESSION NUMERIC(20, 0),
+  FILES_TRANSFERED_IN_SESSION NUMERIC(20, 0),
+  SESSION_START_TIME          NUMERIC(20, 0),
+  SESSION_ELAPSED_TIME        NUMERIC(20, 0),
+  MOUNT_START_TIME            NUMERIC(20, 0),
+  TRANSFER_START_TIME         NUMERIC(20, 0),
+  UNLOAD_START_TIME           NUMERIC(20, 0),
+  UNMOUNT_START_TIME          NUMERIC(20, 0),
+  DRAINING_START_TIME         NUMERIC(20, 0),
+  DOWN_OR_UP_START_TIME       NUMERIC(20, 0),
+  PROBE_START_TIME            NUMERIC(20, 0),
+  CLEANUP_START_TIME          NUMERIC(20, 0),
+  START_START_TIME            NUMERIC(20, 0),
+  SHUTDOWN_TIME               NUMERIC(20, 0),
+  MOUNT_TYPE                  VARCHAR2(100)    DEFAULT 'NO_MOUNT' CONSTRAINT DRIVE_MT_NN NOT NULL,
+  DRIVE_STATUS                VARCHAR2(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_DS_NN NOT NULL,
+  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_DU_NN  NOT NULL,
+  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_DFD_NN NOT NULL,
+  REASON_UP_DOWN              VARCHAR2(1000),
+  CURRENT_VID                 VARCHAR2(100),
+  CTA_VERSION                 VARCHAR2(100),
+  CURRENT_PRIORITY            NUMERIC(20, 0),
+  CURRENT_ACTIVITY            VARCHAR2(100),
+  CURRENT_TAPE_POOL           VARCHAR2(100),
+  NEXT_MOUNT_TYPE             VARCHAR2(100)    DEFAULT 'NO_MOUNT' CONSTRAINT DRIVE_NMT_NN NOT NULL,
+  NEXT_VID                    VARCHAR2(100),
+  NEXT_PRIORITY               NUMERIC(20, 0),
+  NEXT_ACTIVITY               VARCHAR2(100),
+  NEXT_TAPE_POOL              VARCHAR2(100),
+  DEV_FILE_NAME               VARCHAR2(100),
+  RAW_LIBRARY_SLOT            VARCHAR2(100),
+  CURRENT_VO                  VARCHAR2(100),
+  NEXT_VO                     VARCHAR2(100),
+  USER_COMMENT                VARCHAR2(1000),
+  CREATION_LOG_USER_NAME      VARCHAR2(100),
+  CREATION_LOG_HOST_NAME      VARCHAR2(100),
+  CREATION_LOG_TIME           NUMERIC(20, 0),
+  LAST_UPDATE_USER_NAME       VARCHAR2(100),
+  LAST_UPDATE_HOST_NAME       VARCHAR2(100),
+  LAST_UPDATE_TIME            NUMERIC(20, 0),
+  DISK_SYSTEM_NAME            VARCHAR2(100)       CONSTRAINT DRIVE_DSN_NN NOT NULL,
+  RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_RB_NN  NOT NULL,
+  CONSTRAINT DRIVE_DN_PK PRIMARY KEY(DRIVE_NAME),
+  CONSTRAINT DRIVE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),
+  CONSTRAINT DRIVE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),
+  CONSTRAINT DRIVE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',
+  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',
+  'UNKNOWN')),
+  CONSTRAINT DRIVE_MT_STRING_CK CHECK(MOUNT_TYPE IN ('NO_MOUNT', 'ARCHIVE_FOR_USER',
+  'ARCHIVE_FOR_REPACK', 'RETRIEVE', 'LABEL', 'ARCHIVE_ALL_TYPES')),
+  CONSTRAINT DRIVE_NMT_STRING_CK CHECK(NEXT_MOUNT_TYPE IN ('NO_MOUNT', 'ARCHIVE_FOR_USER',
+  'ARCHIVE_FOR_REPACK', 'RETRIEVE', 'LABEL', 'ARCHIVE_ALL_TYPES'))
+);
+INSERT INTO CTA_CATALOGUE(
+  SCHEMA_VERSION_MAJOR,
+  SCHEMA_VERSION_MINOR,
+  STATUS)
+VALUES(
+  4,
+  5,
+  'PRODUCTION');
+ALTER TABLE CTA_CATALOGUE ADD CONSTRAINT CATALOGUE_STATUS_CONTENT_CK CHECK((NEXT_SCHEMA_VERSION_MAJOR IS NULL AND NEXT_SCHEMA_VERSION_MINOR IS NULL AND STATUS='PRODUCTION') OR (NEXT_SCHEMA_VERSION_MAJOR IS NOT NULL AND NEXT_SCHEMA_VERSION_MINOR IS NOT NULL AND STATUS='UPGRADING')) INITIALLY DEFERRED;
+
+COMMIT;
diff --git a/catalogue/4.5/postgres_catalogue_schema.sql b/catalogue/4.5/postgres_catalogue_schema.sql
new file mode 100644
index 0000000000000000000000000000000000000000..3d2fbc0d7141fccb78915b9e085ab1508222d582
--- /dev/null
+++ b/catalogue/4.5/postgres_catalogue_schema.sql
@@ -0,0 +1,546 @@
+CREATE SEQUENCE ARCHIVE_FILE_ID_SEQ
+  INCREMENT BY 1
+  START WITH 1
+  NO MAXVALUE
+  MINVALUE 1
+  NO CYCLE
+  CACHE 20;
+CREATE SEQUENCE LOGICAL_LIBRARY_ID_SEQ
+  INCREMENT BY 1
+  START WITH 1
+  NO MAXVALUE
+  MINVALUE 1
+  NO CYCLE
+  CACHE 20;
+CREATE SEQUENCE MEDIA_TYPE_ID_SEQ
+  INCREMENT BY 1
+  START WITH 1
+  NO MAXVALUE
+  MINVALUE 1
+  NO CYCLE
+  CACHE 20;
+CREATE SEQUENCE STORAGE_CLASS_ID_SEQ
+  INCREMENT BY 1
+  START WITH 1
+  NO MAXVALUE
+  MINVALUE 1
+  NO CYCLE
+  CACHE 20;
+CREATE SEQUENCE TAPE_POOL_ID_SEQ
+  INCREMENT BY 1
+  START WITH 1
+  NO MAXVALUE
+  MINVALUE 1
+  NO CYCLE
+  CACHE 20;
+CREATE SEQUENCE VIRTUAL_ORGANIZATION_ID_SEQ
+  INCREMENT BY 1
+  START WITH 1
+  NO MAXVALUE
+  MINVALUE 1
+  NO CYCLE
+  CACHE 20;
+CREATE SEQUENCE FILE_RECYCLE_LOG_ID_SEQ
+  INCREMENT BY 1
+  START WITH 1
+  NO MAXVALUE
+  MINVALUE 1
+  NO CYCLE
+  CACHE 20;
+CREATE TABLE CTA_CATALOGUE(
+  SCHEMA_VERSION_MAJOR    NUMERIC(20, 0)      CONSTRAINT CTA_CATALOGUE_SVM1_NN NOT NULL,
+  SCHEMA_VERSION_MINOR    NUMERIC(20, 0)      CONSTRAINT CTA_CATALOGUE_SVM2_NN NOT NULL,
+  NEXT_SCHEMA_VERSION_MAJOR NUMERIC(20, 0),
+  NEXT_SCHEMA_VERSION_MINOR NUMERIC(20, 0),
+  STATUS                  VARCHAR(100),
+  IS_PRODUCTION           CHAR(1)         DEFAULT '0' CONSTRAINT CTA_CATALOGUE_IP_NN NOT NULL,
+  CONSTRAINT CTA_CATALOGUE_IP_BOOL_CK     CHECK(IS_PRODUCTION IN ('0','1'))
+);
+CREATE TABLE ADMIN_USER(
+  ADMIN_USER_NAME         VARCHAR(100)    CONSTRAINT ADMIN_USER_AUN_NN  NOT NULL,
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT ADMIN_USER_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT ADMIN_USER_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT ADMIN_USER_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT ADMIN_USER_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT ADMIN_USER_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT ADMIN_USER_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT ADMIN_USER_LUT_NN  NOT NULL,
+  CONSTRAINT ADMIN_USER_PK PRIMARY KEY(ADMIN_USER_NAME)
+);
+CREATE TABLE DISK_SYSTEM(
+  DISK_SYSTEM_NAME        VARCHAR(100)    CONSTRAINT DISK_SYSTEM_DSNM_NN NOT NULL,
+  FILE_REGEXP             VARCHAR(100)    CONSTRAINT DISK_SYSTEM_FR_NN   NOT NULL,
+  FREE_SPACE_QUERY_URL    VARCHAR(1000)   CONSTRAINT DISK_SYSTEM_FSQU_NN NOT NULL,
+  REFRESH_INTERVAL        NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_RI_NN   NOT NULL,
+  TARGETED_FREE_SPACE     NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_TFS_NN  NOT NULL,
+  SLEEP_TIME              NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_ST_NN   NOT NULL,
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT DISK_SYSTEM_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT DISK_SYSTEM_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT DISK_SYSTEM_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT DISK_SYSTEM_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT DISK_SYSTEM_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_LUT_NN  NOT NULL,
+  CONSTRAINT NAME_PK PRIMARY KEY(DISK_SYSTEM_NAME)
+);
+
+CREATE TABLE DISK_INSTANCE(
+  DISK_INSTANCE_NAME      VARCHAR(100)  CONSTRAINT DISK_INSTANCE_DINM_NN NOT NULL,
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT DISK_INSTANCE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT DISK_INSTANCE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT DISK_INSTANCE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT DISK_INSTANCE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT DISK_INSTANCE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_LUT_NN  NOT NULL,
+  CONSTRAINT DISK_INSTANCE_PK PRIMARY KEY(DISK_INSTANCE_NAME)
+);
+
+CREATE TABLE DISK_INSTANCE_SPACE(
+  DISK_INSTANCE_NAME        VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_DINM_NN NOT NULL,
+  DISK_INSTANCE_SPACE_NAME  VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_DISNM_NN NOT NULL,
+  FREE_SPACE_QUERY_URL      VARCHAR(1000)   CONSTRAINT DISK_INSTANCE_SPACE_FSQU_NN NOT NULL,
+  REFRESH_INTERVAL          NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_RI_NN   NOT NULL,
+  LAST_REFRESH_TIME         NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_LRT_NN   NOT NULL,
+  FREE_SPACE                NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_TFS_NN  NOT NULL,
+  USER_COMMENT              VARCHAR(1000)   CONSTRAINT DISK_INSTANCE_SPACE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME    VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME    VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME         NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME     VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME     VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME          NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_LUT_NN  NOT NULL,
+  CONSTRAINT DISK_INSTANCE_SPACE_PK PRIMARY KEY(DISK_INSTANCE_NAME, DISK_INSTANCE_SPACE_NAME),
+  CONSTRAINT DISK_INSTANCE_SPACE_DIN_FK FOREIGN KEY(DISK_INSTANCE_NAME) REFERENCES DISK_INSTANCE(DISK_INSTANCE_NAME)
+);
+
+CREATE TABLE VIRTUAL_ORGANIZATION(
+  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)      CONSTRAINT VIRTUAL_ORGANIZATION_VOI_NN  NOT NULL,
+  VIRTUAL_ORGANIZATION_NAME VARCHAR(100)  CONSTRAINT VIRTUAL_ORGANIZATION_VON_NN  NOT NULL,
+  READ_MAX_DRIVES NUMERIC(20, 0)              CONSTRAINT VIRTUAL_ORGANIZATION_RMD_NN  NOT NULL,
+  WRITE_MAX_DRIVES NUMERIC(20, 0)             CONSTRAINT VIRTUAL_ORGANIZATION_WMD_NN  NOT NULL,
+  MAX_FILE_SIZE NUMERIC(20, 0)                CONSTRAINT VIRTUAL_ORGANIZATION_MFS_NN  NOT NULL,
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT VIRTUAL_ORGANIZATION_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT VIRTUAL_ORGANIZATION_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT VIRTUAL_ORGANIZATION_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT VIRTUAL_ORGANIZATION_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT VIRTUAL_ORGANIZATION_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT VIRTUAL_ORGANIZATION_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT VIRTUAL_ORGANIZATION_LUT_NN  NOT NULL,
+  CONSTRAINT VIRTUAL_ORGANIZATION_PK PRIMARY KEY(VIRTUAL_ORGANIZATION_ID),
+  CONSTRAINT VIRTUAL_ORGANIZATION_VON_UN UNIQUE(VIRTUAL_ORGANIZATION_NAME)
+);
+CREATE TABLE STORAGE_CLASS(
+  STORAGE_CLASS_ID        NUMERIC(20, 0)      CONSTRAINT STORAGE_CLASS_SCI_NN  NOT NULL,
+  STORAGE_CLASS_NAME      VARCHAR(100)    CONSTRAINT STORAGE_CLASS_SCN_NN  NOT NULL,
+  NB_COPIES               NUMERIC(3, 0)       CONSTRAINT STORAGE_CLASS_NC_NN   NOT NULL,
+  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)      CONSTRAINT STORAGE_CLASS_VOI_NN  NOT NULL,
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT STORAGE_CLASS_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT STORAGE_CLASS_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT STORAGE_CLASS_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT STORAGE_CLASS_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT STORAGE_CLASS_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT STORAGE_CLASS_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT STORAGE_CLASS_LUT_NN  NOT NULL,
+  CONSTRAINT STORAGE_CLASS_PK PRIMARY KEY(STORAGE_CLASS_ID),
+  CONSTRAINT STORAGE_CLASS_SCN_UN UNIQUE(STORAGE_CLASS_NAME),
+  CONSTRAINT STORAGE_CLASS_VOI_FK FOREIGN KEY(VIRTUAL_ORGANIZATION_ID) REFERENCES VIRTUAL_ORGANIZATION(VIRTUAL_ORGANIZATION_ID)
+);
+CREATE TABLE TAPE_POOL(
+  TAPE_POOL_ID            NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_TPI_NN  NOT NULL,
+  TAPE_POOL_NAME          VARCHAR(100)    CONSTRAINT TAPE_POOL_TPN_NN  NOT NULL,
+  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_VOI_NN  NOT NULL,
+  NB_PARTIAL_TAPES        NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_NPT_NN  NOT NULL,
+  IS_ENCRYPTED            CHAR(1)         CONSTRAINT TAPE_POOL_IE_NN   NOT NULL,
+  SUPPLY                  VARCHAR(100),
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT TAPE_POOL_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT TAPE_POOL_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT TAPE_POOL_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_LUT_NN  NOT NULL,
+  CONSTRAINT TAPE_POOL_PK PRIMARY KEY(TAPE_POOL_ID),
+  CONSTRAINT TAPE_POOL_TPN_UN UNIQUE(TAPE_POOL_NAME),
+  CONSTRAINT TAPE_POOL_IS_ENCRYPTED_BOOL_CK CHECK(IS_ENCRYPTED IN ('0', '1')),
+  CONSTRAINT TAPE_POOL_VO_FK FOREIGN KEY(VIRTUAL_ORGANIZATION_ID) REFERENCES VIRTUAL_ORGANIZATION(VIRTUAL_ORGANIZATION_ID)
+);
+CREATE TABLE ARCHIVE_ROUTE(
+  STORAGE_CLASS_ID        NUMERIC(20, 0)      CONSTRAINT ARCHIVE_ROUTE_SCI_NN  NOT NULL,
+  COPY_NB                 NUMERIC(3, 0)       CONSTRAINT ARCHIVE_ROUTE_CN_NN   NOT NULL,
+  TAPE_POOL_ID            NUMERIC(20, 0)      CONSTRAINT ARCHIVE_ROUTE_TPI_NN  NOT NULL,
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT ARCHIVE_ROUTE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT ARCHIVE_ROUTE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT ARCHIVE_ROUTE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT ARCHIVE_ROUTE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT ARCHIVE_ROUTE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT ARCHIVE_ROUTE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT ARCHIVE_ROUTE_LUT_NN  NOT NULL,
+  CONSTRAINT ARCHIVE_ROUTE_PK PRIMARY KEY(STORAGE_CLASS_ID, COPY_NB),
+  CONSTRAINT ARCHIVE_ROUTE_STORAGE_CLASS_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID),
+  CONSTRAINT ARCHIVE_ROUTE_TAPE_POOL_FK FOREIGN KEY(TAPE_POOL_ID) REFERENCES TAPE_POOL(TAPE_POOL_ID),
+  CONSTRAINT ARCHIVE_ROUTE_COPY_NB_GT_0_CK CHECK(COPY_NB > 0),
+  CONSTRAINT ARCHIVE_ROUTE_SCI_TPI_UN UNIQUE(STORAGE_CLASS_ID, TAPE_POOL_ID)
+);
+CREATE TABLE MEDIA_TYPE(
+  MEDIA_TYPE_ID          NUMERIC(20, 0)    CONSTRAINT MEDIA_TYPE_MTI_NN  NOT NULL,
+  MEDIA_TYPE_NAME        VARCHAR(100)  CONSTRAINT MEDIA_TYPE_MTN_NN  NOT NULL,
+  CARTRIDGE              VARCHAR(100)  CONSTRAINT MEDIA_TYPE_C_NN    NOT NULL,
+  CAPACITY_IN_BYTES      NUMERIC(20, 0)    CONSTRAINT MEDIA_TYPE_CIB_NN  NOT NULL,
+  PRIMARY_DENSITY_CODE   NUMERIC(3, 0),
+  SECONDARY_DENSITY_CODE NUMERIC(3, 0),
+  NB_WRAPS               NUMERIC(10, 0),
+  MIN_LPOS               NUMERIC(20, 0),
+  MAX_LPOS               NUMERIC(20, 0),
+  USER_COMMENT           VARCHAR(1000) CONSTRAINT MEDIA_TYPE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME VARCHAR(100)  CONSTRAINT MEDIA_TYPE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME VARCHAR(100)  CONSTRAINT MEDIA_TYPE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME      NUMERIC(20, 0)    CONSTRAINT MEDIA_TYPE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME  VARCHAR(100)  CONSTRAINT MEDIA_TYPE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME  VARCHAR(100)  CONSTRAINT MEDIA_TYPE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME       NUMERIC(20, 0)    CONSTRAINT MEDIA_TYPE_LUT_NN  NOT NULL,
+  CONSTRAINT MEDIA_TYPE_PK PRIMARY KEY(MEDIA_TYPE_ID),
+  CONSTRAINT MEDIA_TYPE_MTN_UN UNIQUE(MEDIA_TYPE_NAME)
+);
+CREATE TABLE LOGICAL_LIBRARY(
+  LOGICAL_LIBRARY_ID      NUMERIC(20, 0)      CONSTRAINT LOGICAL_LIBRARY_LLI_NN  NOT NULL,
+  LOGICAL_LIBRARY_NAME    VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_LLN_NN  NOT NULL,
+  IS_DISABLED             CHAR(1)         DEFAULT '0' CONSTRAINT LOGICAL_LIBRARY_ID_NN NOT NULL,
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT LOGICAL_LIBRARY_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT LOGICAL_LIBRARY_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT LOGICAL_LIBRARY_LUT_NN  NOT NULL,
+  CONSTRAINT LOGICAL_LIBRARY_PK PRIMARY KEY(LOGICAL_LIBRARY_ID),
+  CONSTRAINT LOGICAL_LIBRARY_LLN_UN UNIQUE(LOGICAL_LIBRARY_NAME),
+  CONSTRAINT LOGICAL_LIBRARY_ID_BOOL_CK CHECK(IS_DISABLED IN ('0', '1'))
+);
+CREATE TABLE TAPE(
+  VID                     VARCHAR(100)    CONSTRAINT TAPE_V_NN    NOT NULL,
+  MEDIA_TYPE_ID           NUMERIC(20, 0)      CONSTRAINT TAPE_MTID_NN   NOT NULL,
+  VENDOR                  VARCHAR(100)    CONSTRAINT TAPE_V2_NN   NOT NULL,
+  LOGICAL_LIBRARY_ID      NUMERIC(20, 0)      CONSTRAINT TAPE_LLI_NN  NOT NULL,
+  TAPE_POOL_ID            NUMERIC(20, 0)      CONSTRAINT TAPE_TPI_NN  NOT NULL,
+  ENCRYPTION_KEY_NAME     VARCHAR(100),
+  DATA_IN_BYTES           NUMERIC(20, 0)      CONSTRAINT TAPE_DIB_NN  NOT NULL,
+  LAST_FSEQ               NUMERIC(20, 0)      CONSTRAINT TAPE_LF_NN   NOT NULL,
+  NB_MASTER_FILES         NUMERIC(20, 0)      DEFAULT 0 CONSTRAINT TAPE_NB_MASTER_FILES_NN NOT NULL,
+  MASTER_DATA_IN_BYTES    NUMERIC(20, 0)      DEFAULT 0 CONSTRAINT TAPE_MASTER_DATA_IN_BYTES_NN NOT NULL,
+  IS_FULL                 CHAR(1)         CONSTRAINT TAPE_IF_NN   NOT NULL,
+  IS_FROM_CASTOR          CHAR(1)         CONSTRAINT TAPE_IFC_NN  NOT NULL,
+  DIRTY                   CHAR(1)         DEFAULT '1' CONSTRAINT TAPE_DIRTY_NN NOT NULL,
+  NB_COPY_NB_1            NUMERIC(20, 0)     DEFAULT 0 CONSTRAINT TAPE_NB_COPY_NB_1_NN NOT NULL,
+  COPY_NB_1_IN_BYTES      NUMERIC(20, 0)     DEFAULT 0 CONSTRAINT TAPE_COPY_NB_1_IN_BYTES_NN NOT NULL,
+  NB_COPY_NB_GT_1         NUMERIC(20, 0)     DEFAULT 0 CONSTRAINT TAPE_NB_COPY_NB_GT_1_NN NOT NULL,
+  COPY_NB_GT_1_IN_BYTES   NUMERIC(20, 0)     DEFAULT 0 CONSTRAINT TAPE_COPY_NB_GT_1_IN_BYTES_NN NOT NULL,
+  LABEL_DRIVE             VARCHAR(100),
+  LABEL_TIME              NUMERIC(20, 0)    ,
+  LAST_READ_DRIVE         VARCHAR(100),
+  LAST_READ_TIME          NUMERIC(20, 0)    ,
+  LAST_WRITE_DRIVE        VARCHAR(100),
+  LAST_WRITE_TIME         NUMERIC(20, 0)    ,
+  READ_MOUNT_COUNT        NUMERIC(20, 0)      DEFAULT 0 CONSTRAINT TAPE_RMC_NN NOT NULL,
+  WRITE_MOUNT_COUNT       NUMERIC(20, 0)      DEFAULT 0 CONSTRAINT TAPE_WMC_NN NOT NULL,
+  USER_COMMENT            VARCHAR(1000),
+  TAPE_STATE              VARCHAR(100)    CONSTRAINT TAPE_TS_NN NOT NULL,
+  STATE_REASON            VARCHAR(1000),
+  STATE_UPDATE_TIME       NUMERIC(20, 0)      CONSTRAINT TAPE_SUT_NN NOT NULL,
+  STATE_MODIFIED_BY       VARCHAR(100)    CONSTRAINT TAPE_SMB_NN NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT TAPE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT TAPE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT TAPE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT TAPE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT TAPE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT TAPE_LUT_NN  NOT NULL,
+  CONSTRAINT TAPE_PK PRIMARY KEY(VID),
+  CONSTRAINT TAPE_LOGICAL_LIBRARY_FK FOREIGN KEY(LOGICAL_LIBRARY_ID) REFERENCES LOGICAL_LIBRARY(LOGICAL_LIBRARY_ID),
+  CONSTRAINT TAPE_TAPE_POOL_FK FOREIGN KEY(TAPE_POOL_ID) REFERENCES TAPE_POOL(TAPE_POOL_ID),
+  CONSTRAINT TAPE_IS_FULL_BOOL_CK CHECK(IS_FULL IN ('0', '1')),
+  CONSTRAINT TAPE_IS_FROM_CASTOR_BOOL_CK CHECK(IS_FROM_CASTOR IN ('0', '1')),
+  CONSTRAINT TAPE_DIRTY_BOOL_CK CHECK(DIRTY IN ('0','1')),
+  CONSTRAINT TAPE_STATE_CK CHECK(TAPE_STATE IN ('ACTIVE', 'DISABLED', 'BROKEN')),
+  CONSTRAINT TAPE_MEDIA_TYPE_FK FOREIGN KEY(MEDIA_TYPE_ID) REFERENCES MEDIA_TYPE(MEDIA_TYPE_ID)
+);
+CREATE INDEX TAPE_TAPE_POOL_ID_IDX ON TAPE(TAPE_POOL_ID);
+CREATE INDEX TAPE_STATE_IDX ON TAPE(TAPE_STATE);
+CREATE TABLE MOUNT_POLICY(
+  MOUNT_POLICY_NAME          VARCHAR(100)    CONSTRAINT MOUNT_POLICY_MPN_NN  NOT NULL,
+  ARCHIVE_PRIORITY           NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_AP_NN   NOT NULL,
+  ARCHIVE_MIN_REQUEST_AGE    NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_AMRA_NN NOT NULL,
+  RETRIEVE_PRIORITY          NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_RP_NN   NOT NULL,
+  RETRIEVE_MIN_REQUEST_AGE   NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_RMRA_NN NOT NULL,
+  USER_COMMENT               VARCHAR(1000)   CONSTRAINT MOUNT_POLICY_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME     VARCHAR(100)    CONSTRAINT MOUNT_POLICY_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME     VARCHAR(100)    CONSTRAINT MOUNT_POLICY_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME          NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME      VARCHAR(100)    CONSTRAINT MOUNT_POLICY_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME      VARCHAR(100)    CONSTRAINT MOUNT_POLICY_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME           NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_LUT_NN  NOT NULL,
+  CONSTRAINT MOUNT_POLICY_PK PRIMARY KEY(MOUNT_POLICY_NAME)
+);
+CREATE TABLE REQUESTER_ACTIVITY_MOUNT_RULE(
+  DISK_INSTANCE_NAME     VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_DIN_NN  NOT NULL,
+  REQUESTER_NAME         VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_RN_NN   NOT NULL,
+  ACTIVITY_REGEX         VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_AR_NN   NOT NULL,
+  MOUNT_POLICY_NAME      VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_MPN_NN  NOT NULL,
+  USER_COMMENT           VARCHAR(1000)   CONSTRAINT RQSTER_ACT_RULE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME      NUMERIC(20, 0)      CONSTRAINT RQSTER_ACT_RULE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME  VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME  VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME       NUMERIC(20, 0)      CONSTRAINT RQSTER_ACT_RULE_LUT_NN  NOT NULL,
+  CONSTRAINT RQSTER_ACT_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_NAME, ACTIVITY_REGEX),
+  CONSTRAINT RQSTER_ACT_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)
+    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)
+);
+CREATE TABLE REQUESTER_MOUNT_RULE(
+  DISK_INSTANCE_NAME     VARCHAR(100)    CONSTRAINT RQSTER_RULE_DIN_NN  NOT NULL,
+  REQUESTER_NAME         VARCHAR(100)    CONSTRAINT RQSTER_RULE_RN_NN   NOT NULL,
+  MOUNT_POLICY_NAME      VARCHAR(100)    CONSTRAINT RQSTER_RULE_MPN_NN  NOT NULL,
+  USER_COMMENT           VARCHAR(1000)   CONSTRAINT RQSTER_RULE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME VARCHAR(100)    CONSTRAINT RQSTER_RULE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME VARCHAR(100)    CONSTRAINT RQSTER_RULE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME      NUMERIC(20, 0)      CONSTRAINT RQSTER_RULE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME  VARCHAR(100)    CONSTRAINT RQSTER_RULE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME  VARCHAR(100)    CONSTRAINT RQSTER_RULE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME       NUMERIC(20, 0)      CONSTRAINT RQSTER_RULE_LUT_NN  NOT NULL,
+  CONSTRAINT RQSTER_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_NAME),
+  CONSTRAINT RQSTER_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)
+    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)
+);
+CREATE TABLE REQUESTER_GROUP_MOUNT_RULE(
+  DISK_INSTANCE_NAME     VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_DIN_NN  NOT NULL,
+  REQUESTER_GROUP_NAME   VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_RGN_NN  NOT NULL,
+  MOUNT_POLICY_NAME      VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_MPN_NN  NOT NULL,
+  USER_COMMENT           VARCHAR(1000)   CONSTRAINT RQSTER_GRP_RULE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME      NUMERIC(20, 0)      CONSTRAINT RQSTER_GRP_RULE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME  VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME  VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME       NUMERIC(20, 0)      CONSTRAINT RQSTER_GRP_RULE_LUT_NN  NOT NULL,
+  CONSTRAINT RQSTER_GRP_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_GROUP_NAME),
+  CONSTRAINT RQSTER_GRP_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)
+    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)
+);
+CREATE TABLE ARCHIVE_FILE(
+  ARCHIVE_FILE_ID         NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_AFI_NN  NOT NULL,
+  DISK_INSTANCE_NAME      VARCHAR(100)    CONSTRAINT ARCHIVE_FILE_DIN_NN  NOT NULL,
+  DISK_FILE_ID            VARCHAR(100)    CONSTRAINT ARCHIVE_FILE_DFI_NN  NOT NULL,
+  DISK_FILE_UID           NUMERIC(10, 0)      CONSTRAINT ARCHIVE_FILE_DFUID_NN  NOT NULL,
+  DISK_FILE_GID           NUMERIC(10, 0)      CONSTRAINT ARCHIVE_FILE_DFGID_NN  NOT NULL,
+  SIZE_IN_BYTES           NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_SIB_NN  NOT NULL,
+  CHECKSUM_BLOB           BYTEA,
+  CHECKSUM_ADLER32        NUMERIC(10, 0)      CONSTRAINT ARCHIVE_FILE_CB2_NN  NOT NULL,
+  STORAGE_CLASS_ID        NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_SCI_NN  NOT NULL,
+  CREATION_TIME           NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_CT2_NN  NOT NULL,
+  RECONCILIATION_TIME     NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_RT_NN   NOT NULL,
+  IS_DELETED              CHAR(1)         DEFAULT '0' CONSTRAINT ARCHIVE_FILE_ID_NN NOT NULL,
+  COLLOCATION_HINT        VARCHAR(100),
+  CONSTRAINT ARCHIVE_FILE_PK PRIMARY KEY(ARCHIVE_FILE_ID),
+  CONSTRAINT ARCHIVE_FILE_STORAGE_CLASS_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID),
+  CONSTRAINT ARCHIVE_FILE_DIN_DFI_UN UNIQUE(DISK_INSTANCE_NAME, DISK_FILE_ID),
+  CONSTRAINT ARCHIVE_FILE_ID_BOOL_CK CHECK(IS_DELETED IN ('0', '1'))
+);
+CREATE INDEX ARCHIVE_FILE_DIN_IDX ON ARCHIVE_FILE(DISK_INSTANCE_NAME);
+CREATE INDEX ARCHIVE_FILE_DFI_IDX ON ARCHIVE_FILE(DISK_FILE_ID);
+CREATE TABLE TAPE_FILE(
+  VID                      VARCHAR(100)   CONSTRAINT TAPE_FILE_V_NN    NOT NULL,
+  FSEQ                     NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_F_NN    NOT NULL,
+  BLOCK_ID                 NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_BI_NN   NOT NULL,
+  LOGICAL_SIZE_IN_BYTES    NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_CSIB_NN NOT NULL,
+  COPY_NB                  NUMERIC(3, 0)      CONSTRAINT TAPE_FILE_CN_NN   NOT NULL,
+  CREATION_TIME            NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_CT_NN   NOT NULL,
+  ARCHIVE_FILE_ID          NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_AFI_NN  NOT NULL,
+  CONSTRAINT TAPE_FILE_PK PRIMARY KEY(VID, FSEQ),
+  CONSTRAINT TAPE_FILE_TAPE_FK FOREIGN KEY(VID)
+    REFERENCES TAPE(VID),
+  CONSTRAINT TAPE_FILE_ARCHIVE_FILE_FK FOREIGN KEY(ARCHIVE_FILE_ID)
+    REFERENCES ARCHIVE_FILE(ARCHIVE_FILE_ID),
+  CONSTRAINT TAPE_FILE_VID_BLOCK_ID_UN UNIQUE(VID, BLOCK_ID),
+  CONSTRAINT TAPE_FILE_COPY_NB_GT_0_CK CHECK(COPY_NB > 0)
+);
+CREATE INDEX TAPE_FILE_VID_IDX ON TAPE_FILE(VID);
+CREATE INDEX TAPE_FILE_ARCHIVE_FILE_ID_IDX ON TAPE_FILE(ARCHIVE_FILE_ID);
+CREATE TABLE ACTIVITIES_WEIGHTS (
+  DISK_INSTANCE_NAME       VARCHAR(100),
+  ACTIVITY                 VARCHAR(100),
+  WEIGHT                   VARCHAR(100),
+  USER_COMMENT             VARCHAR(1000)   CONSTRAINT ACTIV_WEIGHTS_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME   VARCHAR(100)    CONSTRAINT ACTIV_WEIGHTS_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME   VARCHAR(100)    CONSTRAINT ACTIV_WEIGHTS_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME        NUMERIC(20, 0)      CONSTRAINT ACTIV_WEIGHTS_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME    VARCHAR(100)    CONSTRAINT ACTIV_WEIGHTS_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME    VARCHAR(100)    CONSTRAINT ACTIV_WEIGHTS_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME         NUMERIC(20, 0)      CONSTRAINT ACTIV_WEIGHTS_LUT_NN  NOT NULL
+);
+CREATE TABLE FILE_RECYCLE_LOG(
+  FILE_RECYCLE_LOG_ID        NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_ID_NN NOT NULL,
+  VID                        VARCHAR(100)        CONSTRAINT FILE_RECYCLE_LOG_VID_NN NOT NULL,
+  FSEQ                       NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_FSEQ_NN NOT NULL,
+  BLOCK_ID                   NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_BID_NN NOT NULL,
+  COPY_NB                    NUMERIC(3, 0)           CONSTRAINT FILE_RECYCLE_LOG_COPY_NB_NN NOT NULL,
+  TAPE_FILE_CREATION_TIME    NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_TFCT_NN NOT NULL,
+  ARCHIVE_FILE_ID            NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_AFI_NN NOT NULL,
+  DISK_INSTANCE_NAME         VARCHAR(100)        CONSTRAINT FILE_RECYCLE_LOG_DIN_NN NOT NULL,
+  DISK_FILE_ID               VARCHAR(100)        CONSTRAINT FILE_RECYCLE_LOG_DFI_NN NOT NULL,
+  DISK_FILE_ID_WHEN_DELETED  VARCHAR(100)        CONSTRAINT FILE_RECYCLE_LOG_DFIWD_NN NOT NULL,
+  DISK_FILE_UID              NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_DFU_NN NOT NULL,
+  DISK_FILE_GID              NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_DFG_NN NOT NULL,
+  SIZE_IN_BYTES              NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_SIB_NN NOT NULL,
+  CHECKSUM_BLOB              BYTEA,
+  CHECKSUM_ADLER32           NUMERIC(10, 0)          CONSTRAINT FILE_RECYCLE_LOG_CA_NN NOT NULL,
+  STORAGE_CLASS_ID           NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_SCI_NN NOT NULL,
+  ARCHIVE_FILE_CREATION_TIME NUMERIC(20, 0)          CONSTRAINT FILE_RECYLE_LOG_CT_NN NOT NULL,
+  RECONCILIATION_TIME        NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_RT_NN NOT NULL,
+  COLLOCATION_HINT           VARCHAR(100),
+  DISK_FILE_PATH             VARCHAR(2000),
+  REASON_LOG                 VARCHAR(1000)       CONSTRAINT FILE_RECYCLE_LOG_RL_NN NOT NULL,
+  RECYCLE_LOG_TIME           NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_RLT_NN NOT NULL,
+  CONSTRAINT FILE_RECYCLE_LOG_PK PRIMARY KEY(FILE_RECYCLE_LOG_ID),
+  CONSTRAINT FILE_RECYCLE_LOG_VID_FK FOREIGN KEY(VID) REFERENCES TAPE(VID),
+  CONSTRAINT FILE_RECYCLE_LOG_SC_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID)
+);
+CREATE INDEX FILE_RECYCLE_LOG_DFI_IDX ON FILE_RECYCLE_LOG(DISK_FILE_ID);
+
+CREATE TABLE DRIVE_CONFIG (
+  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_CONFIG_DN_NN  NOT NULL,
+  CATEGORY                    VARCHAR(100)       CONSTRAINT DRIVE_CONFIG_C_NN   NOT NULL,
+  KEY_NAME                    VARCHAR(100)       CONSTRAINT DRIVE_CONFIG_KN_NN  NOT NULL,
+  VALUE                       VARCHAR(1000)      CONSTRAINT DRIVE_CONFIG_V_NN   NOT NULL,
+  SOURCE                      VARCHAR(100)       CONSTRAINT DRIVE_CONFIG_S_NN   NOT NULL,
+  CONSTRAINT DRIVE_CONFIG_DN_PK PRIMARY KEY(KEY_NAME, DRIVE_NAME)
+);
+
+CREATE TABLE TAPE_DRIVE (
+  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_STATE_DN_NN NOT NULL,
+  HOST                        VARCHAR(100)       CONSTRAINT DRIVE_STATE_H_NN  NOT NULL,
+  LOGICAL_LIBRARY             VARCHAR(100)       CONSTRAINT DRIVE_STATE_LL_NN NOT NULL,
+  SESSION_ID                  NUMERIC(20, 0),
+  BYTES_TRANSFERED_IN_SESSION NUMERIC(20, 0),
+  FILES_TRANSFERED_IN_SESSION NUMERIC(20, 0),
+  LATEST_BANDWIDTH            VARCHAR(100),
+  SESSION_START_TIME          NUMERIC(20, 0),
+  MOUNT_START_TIME            NUMERIC(20, 0),
+  TRANSFER_START_TIME         NUMERIC(20, 0),
+  UNLOAD_START_TIME           NUMERIC(20, 0),
+  UNMOUNT_START_TIME          NUMERIC(20, 0),
+  DRAINING_START_TIME         NUMERIC(20, 0),
+  DOWN_OR_UP_START_TIME       NUMERIC(20, 0),
+  PROBE_START_TIME            NUMERIC(20, 0),
+  CLEANUP_START_TIME          NUMERIC(20, 0),
+  START_START_TIME            NUMERIC(20, 0),
+  SHUTDOWN_TIME               NUMERIC(20, 0),
+  MOUNT_TYPE                  NUMERIC(10, 0)      CONSTRAINT DRIVE_STATE_MT_NN NOT NULL,
+  DRIVE_STATUS                VARCHAR(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_STATE_DS_NN NOT NULL,
+  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DU_NN  NOT NULL,
+  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DFD_NN NOT NULL,
+  REASON_UP_DOWN              VARCHAR(1000),
+  CURRENT_VID                 VARCHAR(100),
+  CTA_VERSION                 VARCHAR(100),
+  CURRENT_PRIORITY            NUMERIC(20, 0),
+  CURRENT_ACTIVITY            VARCHAR(100),
+  CURRENT_ACTIVITY_WEIGHT     VARCHAR(100),
+  CURRENT_TAPE_POOL           VARCHAR(100),
+  NEXT_MOUNT_TYPE             NUMERIC(10, 0),
+  NEXT_VID                    VARCHAR(100),
+  NEXT_TAPE_POOL              VARCHAR(100),
+  NEXT_PRIORITY               NUMERIC(20, 0),
+  NEXT_ACTIVITY               VARCHAR(100),
+  NEXT_ACTIVITY_WEIGHT        VARCHAR(100),
+  DEV_FILE_NAME               VARCHAR(100),
+  RAW_LIBRARY_SLOT            VARCHAR(100),
+  CURRENT_VO                  VARCHAR(100),
+  NEXT_VO                     VARCHAR(100),
+  USER_COMMENT                VARCHAR(1000),
+  CREATION_LOG_USER_NAME      VARCHAR(100),
+  CREATION_LOG_HOST_NAME      VARCHAR(100),
+  CREATION_LOG_TIME           NUMERIC(20, 0),
+  LAST_UPDATE_USER_NAME       VARCHAR(100),
+  LAST_UPDATE_HOST_NAME       VARCHAR(100),
+  LAST_UPDATE_TIME            NUMERIC(20, 0),
+  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_STATE_DSN_NN NOT NULL,
+  RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_STATE_RB_NN  NOT NULL,
+  CONSTRAINT DRIVE_STATE_DN_PK PRIMARY KEY(DRIVE_NAME),
+  CONSTRAINT DRIVE_STATE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),
+  CONSTRAINT DRIVE_STATE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),
+  CONSTRAINT DRIVE_STATE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',
+  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',
+  'UNKNOWN'))
+);
+
+CREATE TABLE DRIVE_STATE (
+  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_DN_NN NOT NULL,
+  HOST                        VARCHAR(100)       CONSTRAINT DRIVE_H_NN  NOT NULL,
+  LOGICAL_LIBRARY             VARCHAR(100)       CONSTRAINT DRIVE_LL_NN NOT NULL,
+  SESSION_ID                  NUMERIC(20, 0),
+  BYTES_TRANSFERED_IN_SESSION NUMERIC(20, 0),
+  FILES_TRANSFERED_IN_SESSION NUMERIC(20, 0),
+  SESSION_START_TIME          NUMERIC(20, 0),
+  SESSION_ELAPSED_TIME        NUMERIC(20, 0),
+  MOUNT_START_TIME            NUMERIC(20, 0),
+  TRANSFER_START_TIME         NUMERIC(20, 0),
+  UNLOAD_START_TIME           NUMERIC(20, 0),
+  UNMOUNT_START_TIME          NUMERIC(20, 0),
+  DRAINING_START_TIME         NUMERIC(20, 0),
+  DOWN_OR_UP_START_TIME       NUMERIC(20, 0),
+  PROBE_START_TIME            NUMERIC(20, 0),
+  CLEANUP_START_TIME          NUMERIC(20, 0),
+  START_START_TIME            NUMERIC(20, 0),
+  SHUTDOWN_TIME               NUMERIC(20, 0),
+  MOUNT_TYPE                  VARCHAR(100)    DEFAULT 'NO_MOUNT' CONSTRAINT DRIVE_MT_NN NOT NULL,
+  DRIVE_STATUS                VARCHAR(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_DS_NN NOT NULL,
+  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_DU_NN  NOT NULL,
+  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_DFD_NN NOT NULL,
+  REASON_UP_DOWN              VARCHAR(1000),
+  CURRENT_VID                 VARCHAR(100),
+  CTA_VERSION                 VARCHAR(100),
+  CURRENT_PRIORITY            NUMERIC(20, 0),
+  CURRENT_ACTIVITY            VARCHAR(100),
+  CURRENT_TAPE_POOL           VARCHAR(100),
+  NEXT_MOUNT_TYPE             VARCHAR(100)    DEFAULT 'NO_MOUNT' CONSTRAINT DRIVE_NMT_NN NOT NULL,
+  NEXT_VID                    VARCHAR(100),
+  NEXT_PRIORITY               NUMERIC(20, 0),
+  NEXT_ACTIVITY               VARCHAR(100),
+  NEXT_TAPE_POOL              VARCHAR(100),
+  DEV_FILE_NAME               VARCHAR(100),
+  RAW_LIBRARY_SLOT            VARCHAR(100),
+  CURRENT_VO                  VARCHAR(100),
+  NEXT_VO                     VARCHAR(100),
+  USER_COMMENT                VARCHAR(1000),
+  CREATION_LOG_USER_NAME      VARCHAR(100),
+  CREATION_LOG_HOST_NAME      VARCHAR(100),
+  CREATION_LOG_TIME           NUMERIC(20, 0),
+  LAST_UPDATE_USER_NAME       VARCHAR(100),
+  LAST_UPDATE_HOST_NAME       VARCHAR(100),
+  LAST_UPDATE_TIME            NUMERIC(20, 0),
+  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_DSN_NN NOT NULL,
+  RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_RB_NN  NOT NULL,
+  CONSTRAINT DRIVE_DN_PK PRIMARY KEY(DRIVE_NAME),
+  CONSTRAINT DRIVE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),
+  CONSTRAINT DRIVE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),
+  CONSTRAINT DRIVE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',
+  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',
+  'UNKNOWN')),
+  CONSTRAINT DRIVE_MT_STRING_CK CHECK(MOUNT_TYPE IN ('NO_MOUNT', 'ARCHIVE_FOR_USER',
+  'ARCHIVE_FOR_REPACK', 'RETRIEVE', 'LABEL', 'ARCHIVE_ALL_TYPES')),
+  CONSTRAINT DRIVE_NMT_STRING_CK CHECK(NEXT_MOUNT_TYPE IN ('NO_MOUNT', 'ARCHIVE_FOR_USER',
+  'ARCHIVE_FOR_REPACK', 'RETRIEVE', 'LABEL', 'ARCHIVE_ALL_TYPES'))
+);
+INSERT INTO CTA_CATALOGUE(
+  SCHEMA_VERSION_MAJOR,
+  SCHEMA_VERSION_MINOR,
+  STATUS)
+VALUES(
+  4,
+  5,
+  'PRODUCTION');
+ALTER TABLE ARCHIVE_FILE DROP CONSTRAINT
+  ARCHIVE_FILE_DIN_DFI_UN;
+ALTER TABLE ARCHIVE_FILE ADD CONSTRAINT
+  ARCHIVE_FILE_DIN_DFI_UN UNIQUE(DISK_INSTANCE_NAME, DISK_FILE_ID) DEFERRABLE INITIALLY IMMEDIATE;
+ALTER TABLE CTA_CATALOGUE ADD CONSTRAINT
+  CATALOGUE_STATUS_CONTENT_CK CHECK((NEXT_SCHEMA_VERSION_MAJOR IS NULL AND NEXT_SCHEMA_VERSION_MINOR IS NULL AND STATUS='PRODUCTION') OR (STATUS='UPGRADING'));
diff --git a/catalogue/4.5/sqlite_catalogue_schema.sql b/catalogue/4.5/sqlite_catalogue_schema.sql
new file mode 100644
index 0000000000000000000000000000000000000000..58eea7a3413a0abf6e4b9d918a91412b43d06bce
--- /dev/null
+++ b/catalogue/4.5/sqlite_catalogue_schema.sql
@@ -0,0 +1,512 @@
+CREATE TABLE ARCHIVE_FILE_ID(
+  ID INTEGER PRIMARY KEY AUTOINCREMENT
+);
+CREATE TABLE LOGICAL_LIBRARY_ID(
+  ID INTEGER PRIMARY KEY AUTOINCREMENT
+);
+CREATE TABLE MEDIA_TYPE_ID(
+  ID INTEGER PRIMARY KEY AUTOINCREMENT
+);
+CREATE TABLE STORAGE_CLASS_ID(
+  ID INTEGER PRIMARY KEY AUTOINCREMENT
+);
+CREATE TABLE TAPE_POOL_ID(
+  ID INTEGER PRIMARY KEY AUTOINCREMENT
+);
+CREATE TABLE VIRTUAL_ORGANIZATION_ID(
+  ID INTEGER PRIMARY KEY AUTOINCREMENT
+);
+CREATE TABLE FILE_RECYCLE_LOG_ID(
+  ID INTEGER PRIMARY KEY AUTOINCREMENT
+);
+CREATE TABLE CTA_CATALOGUE(
+  SCHEMA_VERSION_MAJOR    INTEGER      CONSTRAINT CTA_CATALOGUE_SVM1_NN NOT NULL,
+  SCHEMA_VERSION_MINOR    INTEGER      CONSTRAINT CTA_CATALOGUE_SVM2_NN NOT NULL,
+  NEXT_SCHEMA_VERSION_MAJOR INTEGER,
+  NEXT_SCHEMA_VERSION_MINOR INTEGER,
+  STATUS                  VARCHAR(100),
+  IS_PRODUCTION           CHAR(1)         DEFAULT '0' CONSTRAINT CTA_CATALOGUE_IP_NN NOT NULL,
+  CONSTRAINT CTA_CATALOGUE_IP_BOOL_CK     CHECK(IS_PRODUCTION IN ('0','1'))
+);
+CREATE TABLE ADMIN_USER(
+  ADMIN_USER_NAME         VARCHAR(100)    CONSTRAINT ADMIN_USER_AUN_NN  NOT NULL,
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT ADMIN_USER_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT ADMIN_USER_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT ADMIN_USER_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       INTEGER      CONSTRAINT ADMIN_USER_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT ADMIN_USER_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT ADMIN_USER_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        INTEGER      CONSTRAINT ADMIN_USER_LUT_NN  NOT NULL,
+  CONSTRAINT ADMIN_USER_PK PRIMARY KEY(ADMIN_USER_NAME)
+);
+CREATE TABLE DISK_SYSTEM(
+  DISK_SYSTEM_NAME        VARCHAR(100)    CONSTRAINT DISK_SYSTEM_DSNM_NN NOT NULL,
+  FILE_REGEXP             VARCHAR(100)    CONSTRAINT DISK_SYSTEM_FR_NN   NOT NULL,
+  FREE_SPACE_QUERY_URL    VARCHAR(1000)   CONSTRAINT DISK_SYSTEM_FSQU_NN NOT NULL,
+  REFRESH_INTERVAL        INTEGER      CONSTRAINT DISK_SYSTEM_RI_NN   NOT NULL,
+  TARGETED_FREE_SPACE     INTEGER      CONSTRAINT DISK_SYSTEM_TFS_NN  NOT NULL,
+  SLEEP_TIME              INTEGER      CONSTRAINT DISK_SYSTEM_ST_NN   NOT NULL,
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT DISK_SYSTEM_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT DISK_SYSTEM_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT DISK_SYSTEM_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       INTEGER      CONSTRAINT DISK_SYSTEM_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT DISK_SYSTEM_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT DISK_SYSTEM_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        INTEGER      CONSTRAINT DISK_SYSTEM_LUT_NN  NOT NULL,
+  CONSTRAINT NAME_PK PRIMARY KEY(DISK_SYSTEM_NAME)
+);
+
+CREATE TABLE DISK_INSTANCE(
+  DISK_INSTANCE_NAME      VARCHAR(100)  CONSTRAINT DISK_INSTANCE_DINM_NN NOT NULL,
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT DISK_INSTANCE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT DISK_INSTANCE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT DISK_INSTANCE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       INTEGER      CONSTRAINT DISK_INSTANCE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT DISK_INSTANCE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT DISK_INSTANCE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        INTEGER      CONSTRAINT DISK_INSTANCE_LUT_NN  NOT NULL,
+  CONSTRAINT DISK_INSTANCE_PK PRIMARY KEY(DISK_INSTANCE_NAME)
+);
+
+CREATE TABLE DISK_INSTANCE_SPACE(
+  DISK_INSTANCE_NAME        VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_DINM_NN NOT NULL,
+  DISK_INSTANCE_SPACE_NAME  VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_DISNM_NN NOT NULL,
+  FREE_SPACE_QUERY_URL      VARCHAR(1000)   CONSTRAINT DISK_INSTANCE_SPACE_FSQU_NN NOT NULL,
+  REFRESH_INTERVAL          INTEGER      CONSTRAINT DISK_INSTANCE_SPACE_RI_NN   NOT NULL,
+  LAST_REFRESH_TIME         INTEGER      CONSTRAINT DISK_INSTANCE_SPACE_LRT_NN   NOT NULL,
+  FREE_SPACE                INTEGER      CONSTRAINT DISK_INSTANCE_SPACE_TFS_NN  NOT NULL,
+  USER_COMMENT              VARCHAR(1000)   CONSTRAINT DISK_INSTANCE_SPACE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME    VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME    VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME         INTEGER      CONSTRAINT DISK_INSTANCE_SPACE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME     VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME     VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME          INTEGER      CONSTRAINT DISK_INSTANCE_SPACE_LUT_NN  NOT NULL,
+  CONSTRAINT DISK_INSTANCE_SPACE_PK PRIMARY KEY(DISK_INSTANCE_NAME, DISK_INSTANCE_SPACE_NAME),
+  CONSTRAINT DISK_INSTANCE_SPACE_DIN_FK FOREIGN KEY(DISK_INSTANCE_NAME) REFERENCES DISK_INSTANCE(DISK_INSTANCE_NAME)
+);
+
+CREATE TABLE VIRTUAL_ORGANIZATION(
+  VIRTUAL_ORGANIZATION_ID INTEGER      CONSTRAINT VIRTUAL_ORGANIZATION_VOI_NN  NOT NULL,
+  VIRTUAL_ORGANIZATION_NAME VARCHAR(100)  CONSTRAINT VIRTUAL_ORGANIZATION_VON_NN  NOT NULL,
+  READ_MAX_DRIVES INTEGER              CONSTRAINT VIRTUAL_ORGANIZATION_RMD_NN  NOT NULL,
+  WRITE_MAX_DRIVES INTEGER             CONSTRAINT VIRTUAL_ORGANIZATION_WMD_NN  NOT NULL,
+  MAX_FILE_SIZE INTEGER                CONSTRAINT VIRTUAL_ORGANIZATION_MFS_NN  NOT NULL,
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT VIRTUAL_ORGANIZATION_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT VIRTUAL_ORGANIZATION_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT VIRTUAL_ORGANIZATION_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       INTEGER      CONSTRAINT VIRTUAL_ORGANIZATION_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT VIRTUAL_ORGANIZATION_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT VIRTUAL_ORGANIZATION_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        INTEGER      CONSTRAINT VIRTUAL_ORGANIZATION_LUT_NN  NOT NULL,
+  CONSTRAINT VIRTUAL_ORGANIZATION_PK PRIMARY KEY(VIRTUAL_ORGANIZATION_ID),
+  CONSTRAINT VIRTUAL_ORGANIZATION_VON_UN UNIQUE(VIRTUAL_ORGANIZATION_NAME)
+);
+CREATE TABLE STORAGE_CLASS(
+  STORAGE_CLASS_ID        INTEGER      CONSTRAINT STORAGE_CLASS_SCI_NN  NOT NULL,
+  STORAGE_CLASS_NAME      VARCHAR(100)    CONSTRAINT STORAGE_CLASS_SCN_NN  NOT NULL,
+  NB_COPIES               INTEGER       CONSTRAINT STORAGE_CLASS_NC_NN   NOT NULL,
+  VIRTUAL_ORGANIZATION_ID INTEGER      CONSTRAINT STORAGE_CLASS_VOI_NN  NOT NULL,
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT STORAGE_CLASS_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT STORAGE_CLASS_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT STORAGE_CLASS_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       INTEGER      CONSTRAINT STORAGE_CLASS_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT STORAGE_CLASS_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT STORAGE_CLASS_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        INTEGER      CONSTRAINT STORAGE_CLASS_LUT_NN  NOT NULL,
+  CONSTRAINT STORAGE_CLASS_PK PRIMARY KEY(STORAGE_CLASS_ID),
+  CONSTRAINT STORAGE_CLASS_SCN_UN UNIQUE(STORAGE_CLASS_NAME),
+  CONSTRAINT STORAGE_CLASS_VOI_FK FOREIGN KEY(VIRTUAL_ORGANIZATION_ID) REFERENCES VIRTUAL_ORGANIZATION(VIRTUAL_ORGANIZATION_ID)
+);
+CREATE TABLE TAPE_POOL(
+  TAPE_POOL_ID            INTEGER      CONSTRAINT TAPE_POOL_TPI_NN  NOT NULL,
+  TAPE_POOL_NAME          VARCHAR(100)    CONSTRAINT TAPE_POOL_TPN_NN  NOT NULL,
+  VIRTUAL_ORGANIZATION_ID INTEGER      CONSTRAINT TAPE_POOL_VOI_NN  NOT NULL,
+  NB_PARTIAL_TAPES        INTEGER      CONSTRAINT TAPE_POOL_NPT_NN  NOT NULL,
+  IS_ENCRYPTED            CHAR(1)         CONSTRAINT TAPE_POOL_IE_NN   NOT NULL,
+  SUPPLY                  VARCHAR(100),
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT TAPE_POOL_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       INTEGER      CONSTRAINT TAPE_POOL_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT TAPE_POOL_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT TAPE_POOL_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        INTEGER      CONSTRAINT TAPE_POOL_LUT_NN  NOT NULL,
+  CONSTRAINT TAPE_POOL_PK PRIMARY KEY(TAPE_POOL_ID),
+  CONSTRAINT TAPE_POOL_TPN_UN UNIQUE(TAPE_POOL_NAME),
+  CONSTRAINT TAPE_POOL_IS_ENCRYPTED_BOOL_CK CHECK(IS_ENCRYPTED IN ('0', '1')),
+  CONSTRAINT TAPE_POOL_VO_FK FOREIGN KEY(VIRTUAL_ORGANIZATION_ID) REFERENCES VIRTUAL_ORGANIZATION(VIRTUAL_ORGANIZATION_ID)
+);
+CREATE TABLE ARCHIVE_ROUTE(
+  STORAGE_CLASS_ID        INTEGER      CONSTRAINT ARCHIVE_ROUTE_SCI_NN  NOT NULL,
+  COPY_NB                 INTEGER       CONSTRAINT ARCHIVE_ROUTE_CN_NN   NOT NULL,
+  TAPE_POOL_ID            INTEGER      CONSTRAINT ARCHIVE_ROUTE_TPI_NN  NOT NULL,
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT ARCHIVE_ROUTE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT ARCHIVE_ROUTE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT ARCHIVE_ROUTE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       INTEGER      CONSTRAINT ARCHIVE_ROUTE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT ARCHIVE_ROUTE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT ARCHIVE_ROUTE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        INTEGER      CONSTRAINT ARCHIVE_ROUTE_LUT_NN  NOT NULL,
+  CONSTRAINT ARCHIVE_ROUTE_PK PRIMARY KEY(STORAGE_CLASS_ID, COPY_NB),
+  CONSTRAINT ARCHIVE_ROUTE_STORAGE_CLASS_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID),
+  CONSTRAINT ARCHIVE_ROUTE_TAPE_POOL_FK FOREIGN KEY(TAPE_POOL_ID) REFERENCES TAPE_POOL(TAPE_POOL_ID),
+  CONSTRAINT ARCHIVE_ROUTE_COPY_NB_GT_0_CK CHECK(COPY_NB > 0),
+  CONSTRAINT ARCHIVE_ROUTE_SCI_TPI_UN UNIQUE(STORAGE_CLASS_ID, TAPE_POOL_ID)
+);
+CREATE TABLE MEDIA_TYPE(
+  MEDIA_TYPE_ID          INTEGER    CONSTRAINT MEDIA_TYPE_MTI_NN  NOT NULL,
+  MEDIA_TYPE_NAME        VARCHAR(100)  CONSTRAINT MEDIA_TYPE_MTN_NN  NOT NULL,
+  CARTRIDGE              VARCHAR(100)  CONSTRAINT MEDIA_TYPE_C_NN    NOT NULL,
+  CAPACITY_IN_BYTES      INTEGER    CONSTRAINT MEDIA_TYPE_CIB_NN  NOT NULL,
+  PRIMARY_DENSITY_CODE   INTEGER,
+  SECONDARY_DENSITY_CODE INTEGER,
+  NB_WRAPS               INTEGER,
+  MIN_LPOS               INTEGER,
+  MAX_LPOS               INTEGER,
+  USER_COMMENT           VARCHAR(1000) CONSTRAINT MEDIA_TYPE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME VARCHAR(100)  CONSTRAINT MEDIA_TYPE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME VARCHAR(100)  CONSTRAINT MEDIA_TYPE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME      INTEGER    CONSTRAINT MEDIA_TYPE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME  VARCHAR(100)  CONSTRAINT MEDIA_TYPE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME  VARCHAR(100)  CONSTRAINT MEDIA_TYPE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME       INTEGER    CONSTRAINT MEDIA_TYPE_LUT_NN  NOT NULL,
+  CONSTRAINT MEDIA_TYPE_PK PRIMARY KEY(MEDIA_TYPE_ID),
+  CONSTRAINT MEDIA_TYPE_MTN_UN UNIQUE(MEDIA_TYPE_NAME)
+);
+CREATE TABLE LOGICAL_LIBRARY(
+  LOGICAL_LIBRARY_ID      INTEGER      CONSTRAINT LOGICAL_LIBRARY_LLI_NN  NOT NULL,
+  LOGICAL_LIBRARY_NAME    VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_LLN_NN  NOT NULL,
+  IS_DISABLED             CHAR(1)         DEFAULT '0' CONSTRAINT LOGICAL_LIBRARY_ID_NN NOT NULL,
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT LOGICAL_LIBRARY_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       INTEGER      CONSTRAINT LOGICAL_LIBRARY_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        INTEGER      CONSTRAINT LOGICAL_LIBRARY_LUT_NN  NOT NULL,
+  CONSTRAINT LOGICAL_LIBRARY_PK PRIMARY KEY(LOGICAL_LIBRARY_ID),
+  CONSTRAINT LOGICAL_LIBRARY_LLN_UN UNIQUE(LOGICAL_LIBRARY_NAME),
+  CONSTRAINT LOGICAL_LIBRARY_ID_BOOL_CK CHECK(IS_DISABLED IN ('0', '1'))
+);
+CREATE TABLE TAPE(
+  VID                     VARCHAR(100)    CONSTRAINT TAPE_V_NN    NOT NULL,
+  MEDIA_TYPE_ID           INTEGER      CONSTRAINT TAPE_MTID_NN   NOT NULL,
+  VENDOR                  VARCHAR(100)    CONSTRAINT TAPE_V2_NN   NOT NULL,
+  LOGICAL_LIBRARY_ID      INTEGER      CONSTRAINT TAPE_LLI_NN  NOT NULL,
+  TAPE_POOL_ID            INTEGER      CONSTRAINT TAPE_TPI_NN  NOT NULL,
+  ENCRYPTION_KEY_NAME     VARCHAR(100),
+  DATA_IN_BYTES           INTEGER      CONSTRAINT TAPE_DIB_NN  NOT NULL,
+  LAST_FSEQ               INTEGER      CONSTRAINT TAPE_LF_NN   NOT NULL,
+  NB_MASTER_FILES         INTEGER      DEFAULT 0 CONSTRAINT TAPE_NB_MASTER_FILES_NN NOT NULL,
+  MASTER_DATA_IN_BYTES    INTEGER      DEFAULT 0 CONSTRAINT TAPE_MASTER_DATA_IN_BYTES_NN NOT NULL,
+  IS_FULL                 CHAR(1)         CONSTRAINT TAPE_IF_NN   NOT NULL,
+  IS_FROM_CASTOR          CHAR(1)         CONSTRAINT TAPE_IFC_NN  NOT NULL,
+  DIRTY                   CHAR(1)         DEFAULT '1' CONSTRAINT TAPE_DIRTY_NN NOT NULL,
+  NB_COPY_NB_1            INTEGER     DEFAULT 0 CONSTRAINT TAPE_NB_COPY_NB_1_NN NOT NULL,
+  COPY_NB_1_IN_BYTES      INTEGER     DEFAULT 0 CONSTRAINT TAPE_COPY_NB_1_IN_BYTES_NN NOT NULL,
+  NB_COPY_NB_GT_1         INTEGER     DEFAULT 0 CONSTRAINT TAPE_NB_COPY_NB_GT_1_NN NOT NULL,
+  COPY_NB_GT_1_IN_BYTES   INTEGER     DEFAULT 0 CONSTRAINT TAPE_COPY_NB_GT_1_IN_BYTES_NN NOT NULL,
+  LABEL_DRIVE             VARCHAR(100),
+  LABEL_TIME              INTEGER    ,
+  LAST_READ_DRIVE         VARCHAR(100),
+  LAST_READ_TIME          INTEGER    ,
+  LAST_WRITE_DRIVE        VARCHAR(100),
+  LAST_WRITE_TIME         INTEGER    ,
+  READ_MOUNT_COUNT        INTEGER      DEFAULT 0 CONSTRAINT TAPE_RMC_NN NOT NULL,
+  WRITE_MOUNT_COUNT       INTEGER      DEFAULT 0 CONSTRAINT TAPE_WMC_NN NOT NULL,
+  USER_COMMENT            VARCHAR(1000),
+  TAPE_STATE              VARCHAR(100)    CONSTRAINT TAPE_TS_NN NOT NULL,
+  STATE_REASON            VARCHAR(1000),
+  STATE_UPDATE_TIME       INTEGER      CONSTRAINT TAPE_SUT_NN NOT NULL,
+  STATE_MODIFIED_BY       VARCHAR(100)    CONSTRAINT TAPE_SMB_NN NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT TAPE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT TAPE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       INTEGER      CONSTRAINT TAPE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT TAPE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT TAPE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        INTEGER      CONSTRAINT TAPE_LUT_NN  NOT NULL,
+  CONSTRAINT TAPE_PK PRIMARY KEY(VID),
+  CONSTRAINT TAPE_LOGICAL_LIBRARY_FK FOREIGN KEY(LOGICAL_LIBRARY_ID) REFERENCES LOGICAL_LIBRARY(LOGICAL_LIBRARY_ID),
+  CONSTRAINT TAPE_TAPE_POOL_FK FOREIGN KEY(TAPE_POOL_ID) REFERENCES TAPE_POOL(TAPE_POOL_ID),
+  CONSTRAINT TAPE_IS_FULL_BOOL_CK CHECK(IS_FULL IN ('0', '1')),
+  CONSTRAINT TAPE_IS_FROM_CASTOR_BOOL_CK CHECK(IS_FROM_CASTOR IN ('0', '1')),
+  CONSTRAINT TAPE_DIRTY_BOOL_CK CHECK(DIRTY IN ('0','1')),
+  CONSTRAINT TAPE_STATE_CK CHECK(TAPE_STATE IN ('ACTIVE', 'DISABLED', 'BROKEN')),
+  CONSTRAINT TAPE_MEDIA_TYPE_FK FOREIGN KEY(MEDIA_TYPE_ID) REFERENCES MEDIA_TYPE(MEDIA_TYPE_ID)
+);
+CREATE INDEX TAPE_TAPE_POOL_ID_IDX ON TAPE(TAPE_POOL_ID);
+CREATE INDEX TAPE_STATE_IDX ON TAPE(TAPE_STATE);
+CREATE TABLE MOUNT_POLICY(
+  MOUNT_POLICY_NAME          VARCHAR(100)    CONSTRAINT MOUNT_POLICY_MPN_NN  NOT NULL,
+  ARCHIVE_PRIORITY           INTEGER      CONSTRAINT MOUNT_POLICY_AP_NN   NOT NULL,
+  ARCHIVE_MIN_REQUEST_AGE    INTEGER      CONSTRAINT MOUNT_POLICY_AMRA_NN NOT NULL,
+  RETRIEVE_PRIORITY          INTEGER      CONSTRAINT MOUNT_POLICY_RP_NN   NOT NULL,
+  RETRIEVE_MIN_REQUEST_AGE   INTEGER      CONSTRAINT MOUNT_POLICY_RMRA_NN NOT NULL,
+  USER_COMMENT               VARCHAR(1000)   CONSTRAINT MOUNT_POLICY_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME     VARCHAR(100)    CONSTRAINT MOUNT_POLICY_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME     VARCHAR(100)    CONSTRAINT MOUNT_POLICY_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME          INTEGER      CONSTRAINT MOUNT_POLICY_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME      VARCHAR(100)    CONSTRAINT MOUNT_POLICY_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME      VARCHAR(100)    CONSTRAINT MOUNT_POLICY_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME           INTEGER      CONSTRAINT MOUNT_POLICY_LUT_NN  NOT NULL,
+  CONSTRAINT MOUNT_POLICY_PK PRIMARY KEY(MOUNT_POLICY_NAME)
+);
+CREATE TABLE REQUESTER_ACTIVITY_MOUNT_RULE(
+  DISK_INSTANCE_NAME     VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_DIN_NN  NOT NULL,
+  REQUESTER_NAME         VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_RN_NN   NOT NULL,
+  ACTIVITY_REGEX         VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_AR_NN   NOT NULL,
+  MOUNT_POLICY_NAME      VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_MPN_NN  NOT NULL,
+  USER_COMMENT           VARCHAR(1000)   CONSTRAINT RQSTER_ACT_RULE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME      INTEGER      CONSTRAINT RQSTER_ACT_RULE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME  VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME  VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME       INTEGER      CONSTRAINT RQSTER_ACT_RULE_LUT_NN  NOT NULL,
+  CONSTRAINT RQSTER_ACT_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_NAME, ACTIVITY_REGEX),
+  CONSTRAINT RQSTER_ACT_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)
+    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)
+);
+CREATE TABLE REQUESTER_MOUNT_RULE(
+  DISK_INSTANCE_NAME     VARCHAR(100)    CONSTRAINT RQSTER_RULE_DIN_NN  NOT NULL,
+  REQUESTER_NAME         VARCHAR(100)    CONSTRAINT RQSTER_RULE_RN_NN   NOT NULL,
+  MOUNT_POLICY_NAME      VARCHAR(100)    CONSTRAINT RQSTER_RULE_MPN_NN  NOT NULL,
+  USER_COMMENT           VARCHAR(1000)   CONSTRAINT RQSTER_RULE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME VARCHAR(100)    CONSTRAINT RQSTER_RULE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME VARCHAR(100)    CONSTRAINT RQSTER_RULE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME      INTEGER      CONSTRAINT RQSTER_RULE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME  VARCHAR(100)    CONSTRAINT RQSTER_RULE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME  VARCHAR(100)    CONSTRAINT RQSTER_RULE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME       INTEGER      CONSTRAINT RQSTER_RULE_LUT_NN  NOT NULL,
+  CONSTRAINT RQSTER_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_NAME),
+  CONSTRAINT RQSTER_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)
+    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)
+);
+CREATE TABLE REQUESTER_GROUP_MOUNT_RULE(
+  DISK_INSTANCE_NAME     VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_DIN_NN  NOT NULL,
+  REQUESTER_GROUP_NAME   VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_RGN_NN  NOT NULL,
+  MOUNT_POLICY_NAME      VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_MPN_NN  NOT NULL,
+  USER_COMMENT           VARCHAR(1000)   CONSTRAINT RQSTER_GRP_RULE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME      INTEGER      CONSTRAINT RQSTER_GRP_RULE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME  VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME  VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME       INTEGER      CONSTRAINT RQSTER_GRP_RULE_LUT_NN  NOT NULL,
+  CONSTRAINT RQSTER_GRP_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_GROUP_NAME),
+  CONSTRAINT RQSTER_GRP_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)
+    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)
+);
+CREATE TABLE ARCHIVE_FILE(
+  ARCHIVE_FILE_ID         INTEGER      CONSTRAINT ARCHIVE_FILE_AFI_NN  NOT NULL,
+  DISK_INSTANCE_NAME      VARCHAR(100)    CONSTRAINT ARCHIVE_FILE_DIN_NN  NOT NULL,
+  DISK_FILE_ID            VARCHAR(100)    CONSTRAINT ARCHIVE_FILE_DFI_NN  NOT NULL,
+  DISK_FILE_UID           INTEGER      CONSTRAINT ARCHIVE_FILE_DFUID_NN  NOT NULL,
+  DISK_FILE_GID           INTEGER      CONSTRAINT ARCHIVE_FILE_DFGID_NN  NOT NULL,
+  SIZE_IN_BYTES           INTEGER      CONSTRAINT ARCHIVE_FILE_SIB_NN  NOT NULL,
+  CHECKSUM_BLOB           BLOB(200),
+  CHECKSUM_ADLER32        INTEGER      CONSTRAINT ARCHIVE_FILE_CB2_NN  NOT NULL,
+  STORAGE_CLASS_ID        INTEGER      CONSTRAINT ARCHIVE_FILE_SCI_NN  NOT NULL,
+  CREATION_TIME           INTEGER      CONSTRAINT ARCHIVE_FILE_CT2_NN  NOT NULL,
+  RECONCILIATION_TIME     INTEGER      CONSTRAINT ARCHIVE_FILE_RT_NN   NOT NULL,
+  IS_DELETED              CHAR(1)         DEFAULT '0' CONSTRAINT ARCHIVE_FILE_ID_NN NOT NULL,
+  COLLOCATION_HINT        VARCHAR(100),
+  CONSTRAINT ARCHIVE_FILE_PK PRIMARY KEY(ARCHIVE_FILE_ID),
+  CONSTRAINT ARCHIVE_FILE_STORAGE_CLASS_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID),
+  CONSTRAINT ARCHIVE_FILE_DIN_DFI_UN UNIQUE(DISK_INSTANCE_NAME, DISK_FILE_ID),
+  CONSTRAINT ARCHIVE_FILE_ID_BOOL_CK CHECK(IS_DELETED IN ('0', '1'))
+);
+CREATE INDEX ARCHIVE_FILE_DIN_IDX ON ARCHIVE_FILE(DISK_INSTANCE_NAME);
+CREATE INDEX ARCHIVE_FILE_DFI_IDX ON ARCHIVE_FILE(DISK_FILE_ID);
+CREATE TABLE TAPE_FILE(
+  VID                      VARCHAR(100)   CONSTRAINT TAPE_FILE_V_NN    NOT NULL,
+  FSEQ                     INTEGER     CONSTRAINT TAPE_FILE_F_NN    NOT NULL,
+  BLOCK_ID                 INTEGER     CONSTRAINT TAPE_FILE_BI_NN   NOT NULL,
+  LOGICAL_SIZE_IN_BYTES    INTEGER     CONSTRAINT TAPE_FILE_CSIB_NN NOT NULL,
+  COPY_NB                  INTEGER      CONSTRAINT TAPE_FILE_CN_NN   NOT NULL,
+  CREATION_TIME            INTEGER     CONSTRAINT TAPE_FILE_CT_NN   NOT NULL,
+  ARCHIVE_FILE_ID          INTEGER     CONSTRAINT TAPE_FILE_AFI_NN  NOT NULL,
+  CONSTRAINT TAPE_FILE_PK PRIMARY KEY(VID, FSEQ),
+  CONSTRAINT TAPE_FILE_TAPE_FK FOREIGN KEY(VID)
+    REFERENCES TAPE(VID),
+  CONSTRAINT TAPE_FILE_ARCHIVE_FILE_FK FOREIGN KEY(ARCHIVE_FILE_ID)
+    REFERENCES ARCHIVE_FILE(ARCHIVE_FILE_ID),
+  CONSTRAINT TAPE_FILE_VID_BLOCK_ID_UN UNIQUE(VID, BLOCK_ID),
+  CONSTRAINT TAPE_FILE_COPY_NB_GT_0_CK CHECK(COPY_NB > 0)
+);
+CREATE INDEX TAPE_FILE_VID_IDX ON TAPE_FILE(VID);
+CREATE INDEX TAPE_FILE_ARCHIVE_FILE_ID_IDX ON TAPE_FILE(ARCHIVE_FILE_ID);
+CREATE TABLE ACTIVITIES_WEIGHTS (
+  DISK_INSTANCE_NAME       VARCHAR(100),
+  ACTIVITY                 VARCHAR(100),
+  WEIGHT                   VARCHAR(100),
+  USER_COMMENT             VARCHAR(1000)   CONSTRAINT ACTIV_WEIGHTS_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME   VARCHAR(100)    CONSTRAINT ACTIV_WEIGHTS_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME   VARCHAR(100)    CONSTRAINT ACTIV_WEIGHTS_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME        INTEGER      CONSTRAINT ACTIV_WEIGHTS_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME    VARCHAR(100)    CONSTRAINT ACTIV_WEIGHTS_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME    VARCHAR(100)    CONSTRAINT ACTIV_WEIGHTS_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME         INTEGER      CONSTRAINT ACTIV_WEIGHTS_LUT_NN  NOT NULL
+);
+CREATE TABLE FILE_RECYCLE_LOG(
+  FILE_RECYCLE_LOG_ID        INTEGER          CONSTRAINT FILE_RECYCLE_LOG_ID_NN NOT NULL,
+  VID                        VARCHAR(100)        CONSTRAINT FILE_RECYCLE_LOG_VID_NN NOT NULL,
+  FSEQ                       INTEGER          CONSTRAINT FILE_RECYCLE_LOG_FSEQ_NN NOT NULL,
+  BLOCK_ID                   INTEGER          CONSTRAINT FILE_RECYCLE_LOG_BID_NN NOT NULL,
+  COPY_NB                    INTEGER           CONSTRAINT FILE_RECYCLE_LOG_COPY_NB_NN NOT NULL,
+  TAPE_FILE_CREATION_TIME    INTEGER          CONSTRAINT FILE_RECYCLE_LOG_TFCT_NN NOT NULL,
+  ARCHIVE_FILE_ID            INTEGER          CONSTRAINT FILE_RECYCLE_LOG_AFI_NN NOT NULL,
+  DISK_INSTANCE_NAME         VARCHAR(100)        CONSTRAINT FILE_RECYCLE_LOG_DIN_NN NOT NULL,
+  DISK_FILE_ID               VARCHAR(100)        CONSTRAINT FILE_RECYCLE_LOG_DFI_NN NOT NULL,
+  DISK_FILE_ID_WHEN_DELETED  VARCHAR(100)        CONSTRAINT FILE_RECYCLE_LOG_DFIWD_NN NOT NULL,
+  DISK_FILE_UID              INTEGER          CONSTRAINT FILE_RECYCLE_LOG_DFU_NN NOT NULL,
+  DISK_FILE_GID              INTEGER          CONSTRAINT FILE_RECYCLE_LOG_DFG_NN NOT NULL,
+  SIZE_IN_BYTES              INTEGER          CONSTRAINT FILE_RECYCLE_LOG_SIB_NN NOT NULL,
+  CHECKSUM_BLOB              BLOB(200),
+  CHECKSUM_ADLER32           INTEGER          CONSTRAINT FILE_RECYCLE_LOG_CA_NN NOT NULL,
+  STORAGE_CLASS_ID           INTEGER          CONSTRAINT FILE_RECYCLE_LOG_SCI_NN NOT NULL,
+  ARCHIVE_FILE_CREATION_TIME INTEGER          CONSTRAINT FILE_RECYLE_LOG_CT_NN NOT NULL,
+  RECONCILIATION_TIME        INTEGER          CONSTRAINT FILE_RECYCLE_LOG_RT_NN NOT NULL,
+  COLLOCATION_HINT           VARCHAR(100),
+  DISK_FILE_PATH             VARCHAR(2000),
+  REASON_LOG                 VARCHAR(1000)       CONSTRAINT FILE_RECYCLE_LOG_RL_NN NOT NULL,
+  RECYCLE_LOG_TIME           INTEGER          CONSTRAINT FILE_RECYCLE_LOG_RLT_NN NOT NULL,
+  CONSTRAINT FILE_RECYCLE_LOG_PK PRIMARY KEY(FILE_RECYCLE_LOG_ID),
+  CONSTRAINT FILE_RECYCLE_LOG_VID_FK FOREIGN KEY(VID) REFERENCES TAPE(VID),
+  CONSTRAINT FILE_RECYCLE_LOG_SC_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID)
+);
+CREATE INDEX FILE_RECYCLE_LOG_DFI_IDX ON FILE_RECYCLE_LOG(DISK_FILE_ID);
+
+CREATE TABLE DRIVE_CONFIG (
+  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_CONFIG_DN_NN  NOT NULL,
+  CATEGORY                    VARCHAR(100)       CONSTRAINT DRIVE_CONFIG_C_NN   NOT NULL,
+  KEY_NAME                    VARCHAR(100)       CONSTRAINT DRIVE_CONFIG_KN_NN  NOT NULL,
+  VALUE                       VARCHAR(1000)      CONSTRAINT DRIVE_CONFIG_V_NN   NOT NULL,
+  SOURCE                      VARCHAR(100)       CONSTRAINT DRIVE_CONFIG_S_NN   NOT NULL,
+  CONSTRAINT DRIVE_CONFIG_DN_PK PRIMARY KEY(KEY_NAME, DRIVE_NAME)
+);
+
+CREATE TABLE TAPE_DRIVE (
+  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_STATE_DN_NN NOT NULL,
+  HOST                        VARCHAR(100)       CONSTRAINT DRIVE_STATE_H_NN  NOT NULL,
+  LOGICAL_LIBRARY             VARCHAR(100)       CONSTRAINT DRIVE_STATE_LL_NN NOT NULL,
+  SESSION_ID                  INTEGER,
+  BYTES_TRANSFERED_IN_SESSION INTEGER,
+  FILES_TRANSFERED_IN_SESSION INTEGER,
+  LATEST_BANDWIDTH            VARCHAR(100),
+  SESSION_START_TIME          INTEGER,
+  MOUNT_START_TIME            INTEGER,
+  TRANSFER_START_TIME         INTEGER,
+  UNLOAD_START_TIME           INTEGER,
+  UNMOUNT_START_TIME          INTEGER,
+  DRAINING_START_TIME         INTEGER,
+  DOWN_OR_UP_START_TIME       INTEGER,
+  PROBE_START_TIME            INTEGER,
+  CLEANUP_START_TIME          INTEGER,
+  START_START_TIME            INTEGER,
+  SHUTDOWN_TIME               INTEGER,
+  MOUNT_TYPE                  INTEGER      CONSTRAINT DRIVE_STATE_MT_NN NOT NULL,
+  DRIVE_STATUS                VARCHAR(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_STATE_DS_NN NOT NULL,
+  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DU_NN  NOT NULL,
+  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DFD_NN NOT NULL,
+  REASON_UP_DOWN              VARCHAR(1000),
+  CURRENT_VID                 VARCHAR(100),
+  CTA_VERSION                 VARCHAR(100),
+  CURRENT_PRIORITY            INTEGER,
+  CURRENT_ACTIVITY            VARCHAR(100),
+  CURRENT_ACTIVITY_WEIGHT     VARCHAR(100),
+  CURRENT_TAPE_POOL           VARCHAR(100),
+  NEXT_MOUNT_TYPE             INTEGER,
+  NEXT_VID                    VARCHAR(100),
+  NEXT_TAPE_POOL              VARCHAR(100),
+  NEXT_PRIORITY               INTEGER,
+  NEXT_ACTIVITY               VARCHAR(100),
+  NEXT_ACTIVITY_WEIGHT        VARCHAR(100),
+  DEV_FILE_NAME               VARCHAR(100),
+  RAW_LIBRARY_SLOT            VARCHAR(100),
+  CURRENT_VO                  VARCHAR(100),
+  NEXT_VO                     VARCHAR(100),
+  USER_COMMENT                VARCHAR(1000),
+  CREATION_LOG_USER_NAME      VARCHAR(100),
+  CREATION_LOG_HOST_NAME      VARCHAR(100),
+  CREATION_LOG_TIME           INTEGER,
+  LAST_UPDATE_USER_NAME       VARCHAR(100),
+  LAST_UPDATE_HOST_NAME       VARCHAR(100),
+  LAST_UPDATE_TIME            INTEGER,
+  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_STATE_DSN_NN NOT NULL,
+  RESERVED_BYTES              INTEGER         CONSTRAINT DRIVE_STATE_RB_NN  NOT NULL,
+  CONSTRAINT DRIVE_STATE_DN_PK PRIMARY KEY(DRIVE_NAME),
+  CONSTRAINT DRIVE_STATE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),
+  CONSTRAINT DRIVE_STATE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),
+  CONSTRAINT DRIVE_STATE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',
+  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',
+  'UNKNOWN'))
+);
+
+CREATE TABLE DRIVE_STATE (
+  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_DN_NN NOT NULL,
+  HOST                        VARCHAR(100)       CONSTRAINT DRIVE_H_NN  NOT NULL,
+  LOGICAL_LIBRARY             VARCHAR(100)       CONSTRAINT DRIVE_LL_NN NOT NULL,
+  SESSION_ID                  INTEGER,
+  BYTES_TRANSFERED_IN_SESSION INTEGER,
+  FILES_TRANSFERED_IN_SESSION INTEGER,
+  SESSION_START_TIME          INTEGER,
+  SESSION_ELAPSED_TIME        INTEGER,
+  MOUNT_START_TIME            INTEGER,
+  TRANSFER_START_TIME         INTEGER,
+  UNLOAD_START_TIME           INTEGER,
+  UNMOUNT_START_TIME          INTEGER,
+  DRAINING_START_TIME         INTEGER,
+  DOWN_OR_UP_START_TIME       INTEGER,
+  PROBE_START_TIME            INTEGER,
+  CLEANUP_START_TIME          INTEGER,
+  START_START_TIME            INTEGER,
+  SHUTDOWN_TIME               INTEGER,
+  MOUNT_TYPE                  VARCHAR(100)    DEFAULT 'NO_MOUNT' CONSTRAINT DRIVE_MT_NN NOT NULL,
+  DRIVE_STATUS                VARCHAR(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_DS_NN NOT NULL,
+  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_DU_NN  NOT NULL,
+  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_DFD_NN NOT NULL,
+  REASON_UP_DOWN              VARCHAR(1000),
+  CURRENT_VID                 VARCHAR(100),
+  CTA_VERSION                 VARCHAR(100),
+  CURRENT_PRIORITY            INTEGER,
+  CURRENT_ACTIVITY            VARCHAR(100),
+  CURRENT_TAPE_POOL           VARCHAR(100),
+  NEXT_MOUNT_TYPE             VARCHAR(100)    DEFAULT 'NO_MOUNT' CONSTRAINT DRIVE_NMT_NN NOT NULL,
+  NEXT_VID                    VARCHAR(100),
+  NEXT_PRIORITY               INTEGER,
+  NEXT_ACTIVITY               VARCHAR(100),
+  NEXT_TAPE_POOL              VARCHAR(100),
+  DEV_FILE_NAME               VARCHAR(100),
+  RAW_LIBRARY_SLOT            VARCHAR(100),
+  CURRENT_VO                  VARCHAR(100),
+  NEXT_VO                     VARCHAR(100),
+  USER_COMMENT                VARCHAR(1000),
+  CREATION_LOG_USER_NAME      VARCHAR(100),
+  CREATION_LOG_HOST_NAME      VARCHAR(100),
+  CREATION_LOG_TIME           INTEGER,
+  LAST_UPDATE_USER_NAME       VARCHAR(100),
+  LAST_UPDATE_HOST_NAME       VARCHAR(100),
+  LAST_UPDATE_TIME            INTEGER,
+  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_DSN_NN NOT NULL,
+  RESERVED_BYTES              INTEGER         CONSTRAINT DRIVE_RB_NN  NOT NULL,
+  CONSTRAINT DRIVE_DN_PK PRIMARY KEY(DRIVE_NAME),
+  CONSTRAINT DRIVE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),
+  CONSTRAINT DRIVE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),
+  CONSTRAINT DRIVE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',
+  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',
+  'UNKNOWN')),
+  CONSTRAINT DRIVE_MT_STRING_CK CHECK(MOUNT_TYPE IN ('NO_MOUNT', 'ARCHIVE_FOR_USER',
+  'ARCHIVE_FOR_REPACK', 'RETRIEVE', 'LABEL', 'ARCHIVE_ALL_TYPES')),
+  CONSTRAINT DRIVE_NMT_STRING_CK CHECK(NEXT_MOUNT_TYPE IN ('NO_MOUNT', 'ARCHIVE_FOR_USER',
+  'ARCHIVE_FOR_REPACK', 'RETRIEVE', 'LABEL', 'ARCHIVE_ALL_TYPES'))
+);
+INSERT INTO CTA_CATALOGUE(
+  SCHEMA_VERSION_MAJOR,
+  SCHEMA_VERSION_MINOR,
+  STATUS)
+VALUES(
+  4,
+  5,
+  'PRODUCTION');
diff --git a/catalogue/AllCatalogueSchema.hpp b/catalogue/AllCatalogueSchema.hpp
index ee2b2850cabc6b4d79064b2be225a3446eb0c8d8..a75cb011cb1c641102160ecf892c679540e056a5 100644
--- a/catalogue/AllCatalogueSchema.hpp
+++ b/catalogue/AllCatalogueSchema.hpp
@@ -13172,6 +13172,1631 @@ namespace catalogue{
   "  CATALOGUE_STATUS_CONTENT_CK CHECK((NEXT_SCHEMA_VERSION_MAJOR IS NULL AND NEXT_SCHEMA_VERSION_MINOR IS NULL AND STATUS='PRODUCTION') OR (STATUS='UPGRADING'));"
       },
     }  },
+  {"4.5",
+    {
+      {"oracle",  "CREATE SEQUENCE ARCHIVE_FILE_ID_SEQ"
+  "  INCREMENT BY 1"
+  "  START WITH 4294967296"
+  "  NOMAXVALUE"
+  "  MINVALUE 1"
+  "  NOCYCLE"
+  "  CACHE 20"
+  "  NOORDER;"
+  "CREATE SEQUENCE LOGICAL_LIBRARY_ID_SEQ"
+  "  INCREMENT BY 1"
+  "  START WITH 1"
+  "  NOMAXVALUE"
+  "  MINVALUE 1"
+  "  NOCYCLE"
+  "  CACHE 20"
+  "  NOORDER;"
+  "CREATE SEQUENCE MEDIA_TYPE_ID_SEQ"
+  "  INCREMENT BY 1"
+  "  START WITH 1"
+  "  NOMAXVALUE"
+  "  MINVALUE 1"
+  "  NOCYCLE"
+  "  CACHE 20"
+  "  NOORDER;"
+  "CREATE SEQUENCE STORAGE_CLASS_ID_SEQ"
+  "  INCREMENT BY 1"
+  "  START WITH 10000"
+  "  NOMAXVALUE"
+  "  MINVALUE 1"
+  "  NOCYCLE"
+  "  CACHE 20"
+  "  NOORDER;"
+  "CREATE SEQUENCE TAPE_POOL_ID_SEQ"
+  "  INCREMENT BY 1"
+  "  START WITH 1"
+  "  NOMAXVALUE"
+  "  MINVALUE 1"
+  "  NOCYCLE"
+  "  CACHE 20"
+  "  NOORDER;"
+  "CREATE SEQUENCE VIRTUAL_ORGANIZATION_ID_SEQ"
+  "  INCREMENT BY 1"
+  "  START WITH 1"
+  "  NOMAXVALUE"
+  "  MINVALUE 1"
+  "  NOCYCLE"
+  "  CACHE 20"
+  "  NOORDER;"
+  "CREATE SEQUENCE FILE_RECYCLE_LOG_ID_SEQ"
+  "  INCREMENT BY 1"
+  "  START WITH 1"
+  "  NOMAXVALUE"
+  "  MINVALUE 1"
+  "  NOCYCLE"
+  "  CACHE 20"
+  "  NOORDER;"
+  "CREATE GLOBAL TEMPORARY TABLE TEMP_TAPE_FILE_INSERTION_BATCH("
+  "  VID                   VARCHAR2(100),"
+  "  FSEQ                  NUMERIC(20, 0)  ,"
+  "  BLOCK_ID              NUMERIC(20, 0)  ,"
+  "  LOGICAL_SIZE_IN_BYTES NUMERIC(20, 0)  ,"
+  "  COPY_NB               NUMERIC(3, 0)   ,"
+  "  CREATION_TIME         NUMERIC(20, 0)  ,"
+  "  ARCHIVE_FILE_ID       NUMERIC(20, 0)"
+  ")"
+  "ON COMMIT DELETE ROWS;"
+  "CREATE INDEX TEMP_T_F_I_B_AFI_IDX ON TEMP_TAPE_FILE_INSERTION_BATCH(ARCHIVE_FILE_ID);"
+  "CREATE TABLE CTA_CATALOGUE("
+  "  SCHEMA_VERSION_MAJOR    NUMERIC(20, 0)      CONSTRAINT CTA_CATALOGUE_SVM1_NN NOT NULL,"
+  "  SCHEMA_VERSION_MINOR    NUMERIC(20, 0)      CONSTRAINT CTA_CATALOGUE_SVM2_NN NOT NULL,"
+  "  NEXT_SCHEMA_VERSION_MAJOR NUMERIC(20, 0),"
+  "  NEXT_SCHEMA_VERSION_MINOR NUMERIC(20, 0),"
+  "  STATUS                  VARCHAR2(100),"
+  "  IS_PRODUCTION           CHAR(1)         DEFAULT '0' CONSTRAINT CTA_CATALOGUE_IP_NN NOT NULL,"
+  "  CONSTRAINT CTA_CATALOGUE_IP_BOOL_CK     CHECK(IS_PRODUCTION IN ('0','1'))"
+  ");"
+  "CREATE TABLE ADMIN_USER("
+  "  ADMIN_USER_NAME         VARCHAR2(100)    CONSTRAINT ADMIN_USER_AUN_NN  NOT NULL,"
+  "  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT ADMIN_USER_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT ADMIN_USER_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT ADMIN_USER_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT ADMIN_USER_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT ADMIN_USER_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT ADMIN_USER_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT ADMIN_USER_LUT_NN  NOT NULL,"
+  "  CONSTRAINT ADMIN_USER_PK PRIMARY KEY(ADMIN_USER_NAME)"
+  ");"
+  "CREATE TABLE DISK_SYSTEM("
+  "  DISK_SYSTEM_NAME        VARCHAR2(100)    CONSTRAINT DISK_SYSTEM_DSNM_NN NOT NULL,"
+  "  FILE_REGEXP             VARCHAR2(100)    CONSTRAINT DISK_SYSTEM_FR_NN   NOT NULL,"
+  "  FREE_SPACE_QUERY_URL    VARCHAR2(1000)   CONSTRAINT DISK_SYSTEM_FSQU_NN NOT NULL,"
+  "  REFRESH_INTERVAL        NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_RI_NN   NOT NULL,"
+  "  TARGETED_FREE_SPACE     NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_TFS_NN  NOT NULL,"
+  "  SLEEP_TIME              NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_ST_NN   NOT NULL,"
+  "  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT DISK_SYSTEM_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT DISK_SYSTEM_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT DISK_SYSTEM_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT DISK_SYSTEM_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT DISK_SYSTEM_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_LUT_NN  NOT NULL,"
+  "  CONSTRAINT NAME_PK PRIMARY KEY(DISK_SYSTEM_NAME)"
+  ");"
+  ""
+  "CREATE TABLE DISK_INSTANCE("
+  "  DISK_INSTANCE_NAME      VARCHAR2(100)  CONSTRAINT DISK_INSTANCE_DINM_NN NOT NULL,"
+  "  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT DISK_INSTANCE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT DISK_INSTANCE_PK PRIMARY KEY(DISK_INSTANCE_NAME)"
+  ");"
+  ""
+  "CREATE TABLE DISK_INSTANCE_SPACE("
+  "  DISK_INSTANCE_NAME        VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_DINM_NN NOT NULL,"
+  "  DISK_INSTANCE_SPACE_NAME  VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_DISNM_NN NOT NULL,"
+  "  FREE_SPACE_QUERY_URL      VARCHAR2(1000)   CONSTRAINT DISK_INSTANCE_SPACE_FSQU_NN NOT NULL,"
+  "  REFRESH_INTERVAL          NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_RI_NN   NOT NULL,"
+  "  LAST_REFRESH_TIME         NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_LRT_NN   NOT NULL,"
+  "  FREE_SPACE                NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_TFS_NN  NOT NULL,"
+  "  USER_COMMENT              VARCHAR2(1000)   CONSTRAINT DISK_INSTANCE_SPACE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME    VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME    VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME         NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME     VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME     VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME          NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT DISK_INSTANCE_SPACE_PK PRIMARY KEY(DISK_INSTANCE_NAME, DISK_INSTANCE_SPACE_NAME),"
+  "  CONSTRAINT DISK_INSTANCE_SPACE_DIN_FK FOREIGN KEY(DISK_INSTANCE_NAME) REFERENCES DISK_INSTANCE(DISK_INSTANCE_NAME)"
+  ");"
+  ""
+  "CREATE TABLE VIRTUAL_ORGANIZATION("
+  "  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)      CONSTRAINT VIRTUAL_ORGANIZATION_VOI_NN  NOT NULL,"
+  "  VIRTUAL_ORGANIZATION_NAME VARCHAR2(100)  CONSTRAINT VIRTUAL_ORGANIZATION_VON_NN  NOT NULL,"
+  "  READ_MAX_DRIVES NUMERIC(20, 0)              CONSTRAINT VIRTUAL_ORGANIZATION_RMD_NN  NOT NULL,"
+  "  WRITE_MAX_DRIVES NUMERIC(20, 0)             CONSTRAINT VIRTUAL_ORGANIZATION_WMD_NN  NOT NULL,"
+  "  MAX_FILE_SIZE NUMERIC(20, 0)                CONSTRAINT VIRTUAL_ORGANIZATION_MFS_NN  NOT NULL,"
+  "  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT VIRTUAL_ORGANIZATION_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT VIRTUAL_ORGANIZATION_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT VIRTUAL_ORGANIZATION_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT VIRTUAL_ORGANIZATION_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT VIRTUAL_ORGANIZATION_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT VIRTUAL_ORGANIZATION_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT VIRTUAL_ORGANIZATION_LUT_NN  NOT NULL,"
+  "  CONSTRAINT VIRTUAL_ORGANIZATION_PK PRIMARY KEY(VIRTUAL_ORGANIZATION_ID),"
+  "  CONSTRAINT VIRTUAL_ORGANIZATION_VON_UN UNIQUE(VIRTUAL_ORGANIZATION_NAME)"
+  ");"
+  "CREATE TABLE STORAGE_CLASS("
+  "  STORAGE_CLASS_ID        NUMERIC(20, 0)      CONSTRAINT STORAGE_CLASS_SCI_NN  NOT NULL,"
+  "  STORAGE_CLASS_NAME      VARCHAR2(100)    CONSTRAINT STORAGE_CLASS_SCN_NN  NOT NULL,"
+  "  NB_COPIES               NUMERIC(3, 0)       CONSTRAINT STORAGE_CLASS_NC_NN   NOT NULL,"
+  "  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)      CONSTRAINT STORAGE_CLASS_VOI_NN  NOT NULL,"
+  "  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT STORAGE_CLASS_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT STORAGE_CLASS_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT STORAGE_CLASS_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT STORAGE_CLASS_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT STORAGE_CLASS_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT STORAGE_CLASS_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT STORAGE_CLASS_LUT_NN  NOT NULL,"
+  "  CONSTRAINT STORAGE_CLASS_PK PRIMARY KEY(STORAGE_CLASS_ID),"
+  "  CONSTRAINT STORAGE_CLASS_SCN_UN UNIQUE(STORAGE_CLASS_NAME),"
+  "  CONSTRAINT STORAGE_CLASS_VOI_FK FOREIGN KEY(VIRTUAL_ORGANIZATION_ID) REFERENCES VIRTUAL_ORGANIZATION(VIRTUAL_ORGANIZATION_ID)"
+  ");"
+  "CREATE TABLE TAPE_POOL("
+  "  TAPE_POOL_ID            NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_TPI_NN  NOT NULL,"
+  "  TAPE_POOL_NAME          VARCHAR2(100)    CONSTRAINT TAPE_POOL_TPN_NN  NOT NULL,"
+  "  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_VOI_NN  NOT NULL,"
+  "  NB_PARTIAL_TAPES        NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_NPT_NN  NOT NULL,"
+  "  IS_ENCRYPTED            CHAR(1)         CONSTRAINT TAPE_POOL_IE_NN   NOT NULL,"
+  "  SUPPLY                  VARCHAR2(100),"
+  "  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT TAPE_POOL_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT TAPE_POOL_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT TAPE_POOL_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_LUT_NN  NOT NULL,"
+  "  CONSTRAINT TAPE_POOL_PK PRIMARY KEY(TAPE_POOL_ID),"
+  "  CONSTRAINT TAPE_POOL_TPN_UN UNIQUE(TAPE_POOL_NAME),"
+  "  CONSTRAINT TAPE_POOL_IS_ENCRYPTED_BOOL_CK CHECK(IS_ENCRYPTED IN ('0', '1')),"
+  "  CONSTRAINT TAPE_POOL_VO_FK FOREIGN KEY(VIRTUAL_ORGANIZATION_ID) REFERENCES VIRTUAL_ORGANIZATION(VIRTUAL_ORGANIZATION_ID)"
+  ");"
+  "CREATE TABLE ARCHIVE_ROUTE("
+  "  STORAGE_CLASS_ID        NUMERIC(20, 0)      CONSTRAINT ARCHIVE_ROUTE_SCI_NN  NOT NULL,"
+  "  COPY_NB                 NUMERIC(3, 0)       CONSTRAINT ARCHIVE_ROUTE_CN_NN   NOT NULL,"
+  "  TAPE_POOL_ID            NUMERIC(20, 0)      CONSTRAINT ARCHIVE_ROUTE_TPI_NN  NOT NULL,"
+  "  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT ARCHIVE_ROUTE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT ARCHIVE_ROUTE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT ARCHIVE_ROUTE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT ARCHIVE_ROUTE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT ARCHIVE_ROUTE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT ARCHIVE_ROUTE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT ARCHIVE_ROUTE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT ARCHIVE_ROUTE_PK PRIMARY KEY(STORAGE_CLASS_ID, COPY_NB),"
+  "  CONSTRAINT ARCHIVE_ROUTE_STORAGE_CLASS_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID),"
+  "  CONSTRAINT ARCHIVE_ROUTE_TAPE_POOL_FK FOREIGN KEY(TAPE_POOL_ID) REFERENCES TAPE_POOL(TAPE_POOL_ID),"
+  "  CONSTRAINT ARCHIVE_ROUTE_COPY_NB_GT_0_CK CHECK(COPY_NB > 0),"
+  "  CONSTRAINT ARCHIVE_ROUTE_SCI_TPI_UN UNIQUE(STORAGE_CLASS_ID, TAPE_POOL_ID)"
+  ");"
+  "CREATE TABLE MEDIA_TYPE("
+  "  MEDIA_TYPE_ID          NUMERIC(20, 0)    CONSTRAINT MEDIA_TYPE_MTI_NN  NOT NULL,"
+  "  MEDIA_TYPE_NAME        VARCHAR2(100)  CONSTRAINT MEDIA_TYPE_MTN_NN  NOT NULL,"
+  "  CARTRIDGE              VARCHAR2(100)  CONSTRAINT MEDIA_TYPE_C_NN    NOT NULL,"
+  "  CAPACITY_IN_BYTES      NUMERIC(20, 0)    CONSTRAINT MEDIA_TYPE_CIB_NN  NOT NULL,"
+  "  PRIMARY_DENSITY_CODE   NUMERIC(3, 0),"
+  "  SECONDARY_DENSITY_CODE NUMERIC(3, 0),"
+  "  NB_WRAPS               NUMERIC(10, 0),"
+  "  MIN_LPOS               NUMERIC(20, 0),"
+  "  MAX_LPOS               NUMERIC(20, 0),"
+  "  USER_COMMENT           VARCHAR2(1000) CONSTRAINT MEDIA_TYPE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME VARCHAR2(100)  CONSTRAINT MEDIA_TYPE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME VARCHAR2(100)  CONSTRAINT MEDIA_TYPE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME      NUMERIC(20, 0)    CONSTRAINT MEDIA_TYPE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME  VARCHAR2(100)  CONSTRAINT MEDIA_TYPE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME  VARCHAR2(100)  CONSTRAINT MEDIA_TYPE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME       NUMERIC(20, 0)    CONSTRAINT MEDIA_TYPE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT MEDIA_TYPE_PK PRIMARY KEY(MEDIA_TYPE_ID),"
+  "  CONSTRAINT MEDIA_TYPE_MTN_UN UNIQUE(MEDIA_TYPE_NAME)"
+  ");"
+  "CREATE TABLE LOGICAL_LIBRARY("
+  "  LOGICAL_LIBRARY_ID      NUMERIC(20, 0)      CONSTRAINT LOGICAL_LIBRARY_LLI_NN  NOT NULL,"
+  "  LOGICAL_LIBRARY_NAME    VARCHAR2(100)    CONSTRAINT LOGICAL_LIBRARY_LLN_NN  NOT NULL,"
+  "  IS_DISABLED             CHAR(1)         DEFAULT '0' CONSTRAINT LOGICAL_LIBRARY_ID_NN NOT NULL,"
+  "  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT LOGICAL_LIBRARY_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT LOGICAL_LIBRARY_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT LOGICAL_LIBRARY_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT LOGICAL_LIBRARY_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT LOGICAL_LIBRARY_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT LOGICAL_LIBRARY_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT LOGICAL_LIBRARY_LUT_NN  NOT NULL,"
+  "  CONSTRAINT LOGICAL_LIBRARY_PK PRIMARY KEY(LOGICAL_LIBRARY_ID),"
+  "  CONSTRAINT LOGICAL_LIBRARY_LLN_UN UNIQUE(LOGICAL_LIBRARY_NAME),"
+  "  CONSTRAINT LOGICAL_LIBRARY_ID_BOOL_CK CHECK(IS_DISABLED IN ('0', '1'))"
+  ");"
+  "CREATE TABLE TAPE("
+  "  VID                     VARCHAR2(100)    CONSTRAINT TAPE_V_NN    NOT NULL,"
+  "  MEDIA_TYPE_ID           NUMERIC(20, 0)      CONSTRAINT TAPE_MTID_NN   NOT NULL,"
+  "  VENDOR                  VARCHAR2(100)    CONSTRAINT TAPE_V2_NN   NOT NULL,"
+  "  LOGICAL_LIBRARY_ID      NUMERIC(20, 0)      CONSTRAINT TAPE_LLI_NN  NOT NULL,"
+  "  TAPE_POOL_ID            NUMERIC(20, 0)      CONSTRAINT TAPE_TPI_NN  NOT NULL,"
+  "  ENCRYPTION_KEY_NAME     VARCHAR2(100),"
+  "  DATA_IN_BYTES           NUMERIC(20, 0)      CONSTRAINT TAPE_DIB_NN  NOT NULL,"
+  "  LAST_FSEQ               NUMERIC(20, 0)      CONSTRAINT TAPE_LF_NN   NOT NULL,"
+  "  NB_MASTER_FILES         NUMERIC(20, 0)      DEFAULT 0 CONSTRAINT TAPE_NB_MASTER_FILES_NN NOT NULL,"
+  "  MASTER_DATA_IN_BYTES    NUMERIC(20, 0)      DEFAULT 0 CONSTRAINT TAPE_MASTER_DATA_IN_BYTES_NN NOT NULL,"
+  "  IS_FULL                 CHAR(1)         CONSTRAINT TAPE_IF_NN   NOT NULL,"
+  "  IS_FROM_CASTOR          CHAR(1)         CONSTRAINT TAPE_IFC_NN  NOT NULL,"
+  "  DIRTY                   CHAR(1)         DEFAULT '1' CONSTRAINT TAPE_DIRTY_NN NOT NULL,"
+  "  NB_COPY_NB_1            NUMERIC(20, 0)     DEFAULT 0 CONSTRAINT TAPE_NB_COPY_NB_1_NN NOT NULL,"
+  "  COPY_NB_1_IN_BYTES      NUMERIC(20, 0)     DEFAULT 0 CONSTRAINT TAPE_COPY_NB_1_IN_BYTES_NN NOT NULL,"
+  "  NB_COPY_NB_GT_1         NUMERIC(20, 0)     DEFAULT 0 CONSTRAINT TAPE_NB_COPY_NB_GT_1_NN NOT NULL,"
+  "  COPY_NB_GT_1_IN_BYTES   NUMERIC(20, 0)     DEFAULT 0 CONSTRAINT TAPE_COPY_NB_GT_1_IN_BYTES_NN NOT NULL,"
+  "  LABEL_DRIVE             VARCHAR2(100),"
+  "  LABEL_TIME              NUMERIC(20, 0)    ,"
+  "  LAST_READ_DRIVE         VARCHAR2(100),"
+  "  LAST_READ_TIME          NUMERIC(20, 0)    ,"
+  "  LAST_WRITE_DRIVE        VARCHAR2(100),"
+  "  LAST_WRITE_TIME         NUMERIC(20, 0)    ,"
+  "  READ_MOUNT_COUNT        NUMERIC(20, 0)      DEFAULT 0 CONSTRAINT TAPE_RMC_NN NOT NULL,"
+  "  WRITE_MOUNT_COUNT       NUMERIC(20, 0)      DEFAULT 0 CONSTRAINT TAPE_WMC_NN NOT NULL,"
+  "  USER_COMMENT            VARCHAR2(1000),"
+  "  TAPE_STATE              VARCHAR2(100)    CONSTRAINT TAPE_TS_NN NOT NULL,"
+  "  STATE_REASON            VARCHAR2(1000),"
+  "  STATE_UPDATE_TIME       NUMERIC(20, 0)      CONSTRAINT TAPE_SUT_NN NOT NULL,"
+  "  STATE_MODIFIED_BY       VARCHAR2(100)    CONSTRAINT TAPE_SMB_NN NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT TAPE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT TAPE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT TAPE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT TAPE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT TAPE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT TAPE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT TAPE_PK PRIMARY KEY(VID),"
+  "  CONSTRAINT TAPE_LOGICAL_LIBRARY_FK FOREIGN KEY(LOGICAL_LIBRARY_ID) REFERENCES LOGICAL_LIBRARY(LOGICAL_LIBRARY_ID),"
+  "  CONSTRAINT TAPE_TAPE_POOL_FK FOREIGN KEY(TAPE_POOL_ID) REFERENCES TAPE_POOL(TAPE_POOL_ID),"
+  "  CONSTRAINT TAPE_IS_FULL_BOOL_CK CHECK(IS_FULL IN ('0', '1')),"
+  "  CONSTRAINT TAPE_IS_FROM_CASTOR_BOOL_CK CHECK(IS_FROM_CASTOR IN ('0', '1')),"
+  "  CONSTRAINT TAPE_DIRTY_BOOL_CK CHECK(DIRTY IN ('0','1')),"
+  "  CONSTRAINT TAPE_STATE_CK CHECK(TAPE_STATE IN ('ACTIVE', 'DISABLED', 'BROKEN')),"
+  "  CONSTRAINT TAPE_MEDIA_TYPE_FK FOREIGN KEY(MEDIA_TYPE_ID) REFERENCES MEDIA_TYPE(MEDIA_TYPE_ID)"
+  ");"
+  "CREATE INDEX TAPE_TAPE_POOL_ID_IDX ON TAPE(TAPE_POOL_ID);"
+  "CREATE INDEX TAPE_STATE_IDX ON TAPE(TAPE_STATE);"
+  "CREATE TABLE MOUNT_POLICY("
+  "  MOUNT_POLICY_NAME          VARCHAR2(100)    CONSTRAINT MOUNT_POLICY_MPN_NN  NOT NULL,"
+  "  ARCHIVE_PRIORITY           NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_AP_NN   NOT NULL,"
+  "  ARCHIVE_MIN_REQUEST_AGE    NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_AMRA_NN NOT NULL,"
+  "  RETRIEVE_PRIORITY          NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_RP_NN   NOT NULL,"
+  "  RETRIEVE_MIN_REQUEST_AGE   NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_RMRA_NN NOT NULL,"
+  "  USER_COMMENT               VARCHAR2(1000)   CONSTRAINT MOUNT_POLICY_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME     VARCHAR2(100)    CONSTRAINT MOUNT_POLICY_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME     VARCHAR2(100)    CONSTRAINT MOUNT_POLICY_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME          NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME      VARCHAR2(100)    CONSTRAINT MOUNT_POLICY_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME      VARCHAR2(100)    CONSTRAINT MOUNT_POLICY_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME           NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_LUT_NN  NOT NULL,"
+  "  CONSTRAINT MOUNT_POLICY_PK PRIMARY KEY(MOUNT_POLICY_NAME)"
+  ");"
+  "CREATE TABLE REQUESTER_ACTIVITY_MOUNT_RULE("
+  "  DISK_INSTANCE_NAME     VARCHAR2(100)    CONSTRAINT RQSTER_ACT_RULE_DIN_NN  NOT NULL,"
+  "  REQUESTER_NAME         VARCHAR2(100)    CONSTRAINT RQSTER_ACT_RULE_RN_NN   NOT NULL,"
+  "  ACTIVITY_REGEX         VARCHAR2(100)    CONSTRAINT RQSTER_ACT_RULE_AR_NN   NOT NULL,"
+  "  MOUNT_POLICY_NAME      VARCHAR2(100)    CONSTRAINT RQSTER_ACT_RULE_MPN_NN  NOT NULL,"
+  "  USER_COMMENT           VARCHAR2(1000)   CONSTRAINT RQSTER_ACT_RULE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME VARCHAR2(100)    CONSTRAINT RQSTER_ACT_RULE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME VARCHAR2(100)    CONSTRAINT RQSTER_ACT_RULE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME      NUMERIC(20, 0)      CONSTRAINT RQSTER_ACT_RULE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME  VARCHAR2(100)    CONSTRAINT RQSTER_ACT_RULE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME  VARCHAR2(100)    CONSTRAINT RQSTER_ACT_RULE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME       NUMERIC(20, 0)      CONSTRAINT RQSTER_ACT_RULE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT RQSTER_ACT_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_NAME, ACTIVITY_REGEX),"
+  "  CONSTRAINT RQSTER_ACT_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)"
+  "    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)"
+  ");"
+  "CREATE TABLE REQUESTER_MOUNT_RULE("
+  "  DISK_INSTANCE_NAME     VARCHAR2(100)    CONSTRAINT RQSTER_RULE_DIN_NN  NOT NULL,"
+  "  REQUESTER_NAME         VARCHAR2(100)    CONSTRAINT RQSTER_RULE_RN_NN   NOT NULL,"
+  "  MOUNT_POLICY_NAME      VARCHAR2(100)    CONSTRAINT RQSTER_RULE_MPN_NN  NOT NULL,"
+  "  USER_COMMENT           VARCHAR2(1000)   CONSTRAINT RQSTER_RULE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME VARCHAR2(100)    CONSTRAINT RQSTER_RULE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME VARCHAR2(100)    CONSTRAINT RQSTER_RULE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME      NUMERIC(20, 0)      CONSTRAINT RQSTER_RULE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME  VARCHAR2(100)    CONSTRAINT RQSTER_RULE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME  VARCHAR2(100)    CONSTRAINT RQSTER_RULE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME       NUMERIC(20, 0)      CONSTRAINT RQSTER_RULE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT RQSTER_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_NAME),"
+  "  CONSTRAINT RQSTER_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)"
+  "    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)"
+  ");"
+  "CREATE TABLE REQUESTER_GROUP_MOUNT_RULE("
+  "  DISK_INSTANCE_NAME     VARCHAR2(100)    CONSTRAINT RQSTER_GRP_RULE_DIN_NN  NOT NULL,"
+  "  REQUESTER_GROUP_NAME   VARCHAR2(100)    CONSTRAINT RQSTER_GRP_RULE_RGN_NN  NOT NULL,"
+  "  MOUNT_POLICY_NAME      VARCHAR2(100)    CONSTRAINT RQSTER_GRP_RULE_MPN_NN  NOT NULL,"
+  "  USER_COMMENT           VARCHAR2(1000)   CONSTRAINT RQSTER_GRP_RULE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME VARCHAR2(100)    CONSTRAINT RQSTER_GRP_RULE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME VARCHAR2(100)    CONSTRAINT RQSTER_GRP_RULE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME      NUMERIC(20, 0)      CONSTRAINT RQSTER_GRP_RULE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME  VARCHAR2(100)    CONSTRAINT RQSTER_GRP_RULE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME  VARCHAR2(100)    CONSTRAINT RQSTER_GRP_RULE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME       NUMERIC(20, 0)      CONSTRAINT RQSTER_GRP_RULE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT RQSTER_GRP_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_GROUP_NAME),"
+  "  CONSTRAINT RQSTER_GRP_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)"
+  "    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)"
+  ");"
+  "CREATE TABLE ARCHIVE_FILE("
+  "  ARCHIVE_FILE_ID         NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_AFI_NN  NOT NULL,"
+  "  DISK_INSTANCE_NAME      VARCHAR2(100)    CONSTRAINT ARCHIVE_FILE_DIN_NN  NOT NULL,"
+  "  DISK_FILE_ID            VARCHAR2(100)    CONSTRAINT ARCHIVE_FILE_DFI_NN  NOT NULL,"
+  "  DISK_FILE_UID           NUMERIC(10, 0)      CONSTRAINT ARCHIVE_FILE_DFUID_NN  NOT NULL,"
+  "  DISK_FILE_GID           NUMERIC(10, 0)      CONSTRAINT ARCHIVE_FILE_DFGID_NN  NOT NULL,"
+  "  SIZE_IN_BYTES           NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_SIB_NN  NOT NULL,"
+  "  CHECKSUM_BLOB           RAW(200),"
+  "  CHECKSUM_ADLER32        NUMERIC(10, 0)      CONSTRAINT ARCHIVE_FILE_CB2_NN  NOT NULL,"
+  "  STORAGE_CLASS_ID        NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_SCI_NN  NOT NULL,"
+  "  CREATION_TIME           NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_CT2_NN  NOT NULL,"
+  "  RECONCILIATION_TIME     NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_RT_NN   NOT NULL,"
+  "  IS_DELETED              CHAR(1)         DEFAULT '0' CONSTRAINT ARCHIVE_FILE_ID_NN NOT NULL,"
+  "  COLLOCATION_HINT        VARCHAR2(100),"
+  "  CONSTRAINT ARCHIVE_FILE_PK PRIMARY KEY(ARCHIVE_FILE_ID),"
+  "  CONSTRAINT ARCHIVE_FILE_STORAGE_CLASS_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID),"
+  "  CONSTRAINT ARCHIVE_FILE_DIN_DFI_UN UNIQUE(DISK_INSTANCE_NAME, DISK_FILE_ID),"
+  "  CONSTRAINT ARCHIVE_FILE_ID_BOOL_CK CHECK(IS_DELETED IN ('0', '1'))"
+  ");"
+  "CREATE INDEX ARCHIVE_FILE_DIN_IDX ON ARCHIVE_FILE(DISK_INSTANCE_NAME);"
+  "CREATE INDEX ARCHIVE_FILE_DFI_IDX ON ARCHIVE_FILE(DISK_FILE_ID);"
+  "CREATE TABLE TAPE_FILE("
+  "  VID                      VARCHAR2(100)   CONSTRAINT TAPE_FILE_V_NN    NOT NULL,"
+  "  FSEQ                     NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_F_NN    NOT NULL,"
+  "  BLOCK_ID                 NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_BI_NN   NOT NULL,"
+  "  LOGICAL_SIZE_IN_BYTES    NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_CSIB_NN NOT NULL,"
+  "  COPY_NB                  NUMERIC(3, 0)      CONSTRAINT TAPE_FILE_CN_NN   NOT NULL,"
+  "  CREATION_TIME            NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_CT_NN   NOT NULL,"
+  "  ARCHIVE_FILE_ID          NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_AFI_NN  NOT NULL,"
+  "  CONSTRAINT TAPE_FILE_PK PRIMARY KEY(VID, FSEQ),"
+  "  CONSTRAINT TAPE_FILE_TAPE_FK FOREIGN KEY(VID)"
+  "    REFERENCES TAPE(VID),"
+  "  CONSTRAINT TAPE_FILE_ARCHIVE_FILE_FK FOREIGN KEY(ARCHIVE_FILE_ID)"
+  "    REFERENCES ARCHIVE_FILE(ARCHIVE_FILE_ID),"
+  "  CONSTRAINT TAPE_FILE_VID_BLOCK_ID_UN UNIQUE(VID, BLOCK_ID),"
+  "  CONSTRAINT TAPE_FILE_COPY_NB_GT_0_CK CHECK(COPY_NB > 0)"
+  ");"
+  "CREATE INDEX TAPE_FILE_VID_IDX ON TAPE_FILE(VID);"
+  "CREATE INDEX TAPE_FILE_ARCHIVE_FILE_ID_IDX ON TAPE_FILE(ARCHIVE_FILE_ID);"
+  "CREATE TABLE ACTIVITIES_WEIGHTS ("
+  "  DISK_INSTANCE_NAME       VARCHAR2(100),"
+  "  ACTIVITY                 VARCHAR2(100),"
+  "  WEIGHT                   VARCHAR2(100),"
+  "  USER_COMMENT             VARCHAR2(1000)   CONSTRAINT ACTIV_WEIGHTS_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME   VARCHAR2(100)    CONSTRAINT ACTIV_WEIGHTS_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME   VARCHAR2(100)    CONSTRAINT ACTIV_WEIGHTS_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME        NUMERIC(20, 0)      CONSTRAINT ACTIV_WEIGHTS_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME    VARCHAR2(100)    CONSTRAINT ACTIV_WEIGHTS_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME    VARCHAR2(100)    CONSTRAINT ACTIV_WEIGHTS_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME         NUMERIC(20, 0)      CONSTRAINT ACTIV_WEIGHTS_LUT_NN  NOT NULL"
+  ");"
+  "CREATE TABLE FILE_RECYCLE_LOG("
+  "  FILE_RECYCLE_LOG_ID        NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_ID_NN NOT NULL,"
+  "  VID                        VARCHAR2(100)        CONSTRAINT FILE_RECYCLE_LOG_VID_NN NOT NULL,"
+  "  FSEQ                       NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_FSEQ_NN NOT NULL,"
+  "  BLOCK_ID                   NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_BID_NN NOT NULL,"
+  "  COPY_NB                    NUMERIC(3, 0)           CONSTRAINT FILE_RECYCLE_LOG_COPY_NB_NN NOT NULL,"
+  "  TAPE_FILE_CREATION_TIME    NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_TFCT_NN NOT NULL,"
+  "  ARCHIVE_FILE_ID            NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_AFI_NN NOT NULL,"
+  "  DISK_INSTANCE_NAME         VARCHAR2(100)        CONSTRAINT FILE_RECYCLE_LOG_DIN_NN NOT NULL,"
+  "  DISK_FILE_ID               VARCHAR2(100)        CONSTRAINT FILE_RECYCLE_LOG_DFI_NN NOT NULL,"
+  "  DISK_FILE_ID_WHEN_DELETED  VARCHAR2(100)        CONSTRAINT FILE_RECYCLE_LOG_DFIWD_NN NOT NULL,"
+  "  DISK_FILE_UID              NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_DFU_NN NOT NULL,"
+  "  DISK_FILE_GID              NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_DFG_NN NOT NULL,"
+  "  SIZE_IN_BYTES              NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_SIB_NN NOT NULL,"
+  "  CHECKSUM_BLOB              RAW(200),"
+  "  CHECKSUM_ADLER32           NUMERIC(10, 0)          CONSTRAINT FILE_RECYCLE_LOG_CA_NN NOT NULL,"
+  "  STORAGE_CLASS_ID           NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_SCI_NN NOT NULL,"
+  "  ARCHIVE_FILE_CREATION_TIME NUMERIC(20, 0)          CONSTRAINT FILE_RECYLE_LOG_CT_NN NOT NULL,"
+  "  RECONCILIATION_TIME        NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_RT_NN NOT NULL,"
+  "  COLLOCATION_HINT           VARCHAR2(100),"
+  "  DISK_FILE_PATH             VARCHAR2(2000),"
+  "  REASON_LOG                 VARCHAR2(1000)       CONSTRAINT FILE_RECYCLE_LOG_RL_NN NOT NULL,"
+  "  RECYCLE_LOG_TIME           NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_RLT_NN NOT NULL,"
+  "  CONSTRAINT FILE_RECYCLE_LOG_PK PRIMARY KEY(FILE_RECYCLE_LOG_ID),"
+  "  CONSTRAINT FILE_RECYCLE_LOG_VID_FK FOREIGN KEY(VID) REFERENCES TAPE(VID),"
+  "  CONSTRAINT FILE_RECYCLE_LOG_SC_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID)"
+  ");"
+  "CREATE INDEX FILE_RECYCLE_LOG_DFI_IDX ON FILE_RECYCLE_LOG(DISK_FILE_ID);"
+  ""
+  "CREATE TABLE DRIVE_CONFIG ("
+  "  DRIVE_NAME                  VARCHAR2(100)       CONSTRAINT DRIVE_CONFIG_DN_NN  NOT NULL,"
+  "  CATEGORY                    VARCHAR2(100)       CONSTRAINT DRIVE_CONFIG_C_NN   NOT NULL,"
+  "  KEY_NAME                    VARCHAR2(100)       CONSTRAINT DRIVE_CONFIG_KN_NN  NOT NULL,"
+  "  VALUE                       VARCHAR2(1000)      CONSTRAINT DRIVE_CONFIG_V_NN   NOT NULL,"
+  "  SOURCE                      VARCHAR2(100)       CONSTRAINT DRIVE_CONFIG_S_NN   NOT NULL,"
+  "  CONSTRAINT DRIVE_CONFIG_DN_PK PRIMARY KEY(KEY_NAME, DRIVE_NAME)"
+  ");"
+  ""
+  "CREATE TABLE TAPE_DRIVE ("
+  "  DRIVE_NAME                  VARCHAR2(100)       CONSTRAINT DRIVE_STATE_DN_NN NOT NULL,"
+  "  HOST                        VARCHAR2(100)       CONSTRAINT DRIVE_STATE_H_NN  NOT NULL,"
+  "  LOGICAL_LIBRARY             VARCHAR2(100)       CONSTRAINT DRIVE_STATE_LL_NN NOT NULL,"
+  "  SESSION_ID                  NUMERIC(20, 0),"
+  "  BYTES_TRANSFERED_IN_SESSION NUMERIC(20, 0),"
+  "  FILES_TRANSFERED_IN_SESSION NUMERIC(20, 0),"
+  "  LATEST_BANDWIDTH            VARCHAR2(100),"
+  "  SESSION_START_TIME          NUMERIC(20, 0),"
+  "  MOUNT_START_TIME            NUMERIC(20, 0),"
+  "  TRANSFER_START_TIME         NUMERIC(20, 0),"
+  "  UNLOAD_START_TIME           NUMERIC(20, 0),"
+  "  UNMOUNT_START_TIME          NUMERIC(20, 0),"
+  "  DRAINING_START_TIME         NUMERIC(20, 0),"
+  "  DOWN_OR_UP_START_TIME       NUMERIC(20, 0),"
+  "  PROBE_START_TIME            NUMERIC(20, 0),"
+  "  CLEANUP_START_TIME          NUMERIC(20, 0),"
+  "  START_START_TIME            NUMERIC(20, 0),"
+  "  SHUTDOWN_TIME               NUMERIC(20, 0),"
+  "  MOUNT_TYPE                  NUMERIC(10, 0)      CONSTRAINT DRIVE_STATE_MT_NN NOT NULL,"
+  "  DRIVE_STATUS                VARCHAR2(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_STATE_DS_NN NOT NULL,"
+  "  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DU_NN  NOT NULL,"
+  "  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DFD_NN NOT NULL,"
+  "  REASON_UP_DOWN              VARCHAR2(1000),"
+  "  CURRENT_VID                 VARCHAR2(100),"
+  "  CTA_VERSION                 VARCHAR2(100),"
+  "  CURRENT_PRIORITY            NUMERIC(20, 0),"
+  "  CURRENT_ACTIVITY            VARCHAR2(100),"
+  "  CURRENT_ACTIVITY_WEIGHT     VARCHAR2(100),"
+  "  CURRENT_TAPE_POOL           VARCHAR2(100),"
+  "  NEXT_MOUNT_TYPE             NUMERIC(10, 0),"
+  "  NEXT_VID                    VARCHAR2(100),"
+  "  NEXT_TAPE_POOL              VARCHAR2(100),"
+  "  NEXT_PRIORITY               NUMERIC(20, 0),"
+  "  NEXT_ACTIVITY               VARCHAR2(100),"
+  "  NEXT_ACTIVITY_WEIGHT        VARCHAR2(100),"
+  "  DEV_FILE_NAME               VARCHAR2(100),"
+  "  RAW_LIBRARY_SLOT            VARCHAR2(100),"
+  "  CURRENT_VO                  VARCHAR2(100),"
+  "  NEXT_VO                     VARCHAR2(100),"
+  "  USER_COMMENT                VARCHAR2(1000),"
+  "  CREATION_LOG_USER_NAME      VARCHAR2(100),"
+  "  CREATION_LOG_HOST_NAME      VARCHAR2(100),"
+  "  CREATION_LOG_TIME           NUMERIC(20, 0),"
+  "  LAST_UPDATE_USER_NAME       VARCHAR2(100),"
+  "  LAST_UPDATE_HOST_NAME       VARCHAR2(100),"
+  "  LAST_UPDATE_TIME            NUMERIC(20, 0),"
+  "  DISK_SYSTEM_NAME            VARCHAR2(100)       CONSTRAINT DRIVE_STATE_DSN_NN NOT NULL,"
+  "  RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_STATE_RB_NN  NOT NULL,"
+  "  CONSTRAINT DRIVE_STATE_DN_PK PRIMARY KEY(DRIVE_NAME),"
+  "  CONSTRAINT DRIVE_STATE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),"
+  "  CONSTRAINT DRIVE_STATE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),"
+  "  CONSTRAINT DRIVE_STATE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',"
+  "  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',"
+  "  'UNKNOWN'))"
+  ");"
+  ""
+  "CREATE TABLE DRIVE_STATE ("
+  "  DRIVE_NAME                  VARCHAR2(100)       CONSTRAINT DRIVE_DN_NN NOT NULL,"
+  "  HOST                        VARCHAR2(100)       CONSTRAINT DRIVE_H_NN  NOT NULL,"
+  "  LOGICAL_LIBRARY             VARCHAR2(100)       CONSTRAINT DRIVE_LL_NN NOT NULL,"
+  "  SESSION_ID                  NUMERIC(20, 0),"
+  "  BYTES_TRANSFERED_IN_SESSION NUMERIC(20, 0),"
+  "  FILES_TRANSFERED_IN_SESSION NUMERIC(20, 0),"
+  "  SESSION_START_TIME          NUMERIC(20, 0),"
+  "  SESSION_ELAPSED_TIME        NUMERIC(20, 0),"
+  "  MOUNT_START_TIME            NUMERIC(20, 0),"
+  "  TRANSFER_START_TIME         NUMERIC(20, 0),"
+  "  UNLOAD_START_TIME           NUMERIC(20, 0),"
+  "  UNMOUNT_START_TIME          NUMERIC(20, 0),"
+  "  DRAINING_START_TIME         NUMERIC(20, 0),"
+  "  DOWN_OR_UP_START_TIME       NUMERIC(20, 0),"
+  "  PROBE_START_TIME            NUMERIC(20, 0),"
+  "  CLEANUP_START_TIME          NUMERIC(20, 0),"
+  "  START_START_TIME            NUMERIC(20, 0),"
+  "  SHUTDOWN_TIME               NUMERIC(20, 0),"
+  "  MOUNT_TYPE                  VARCHAR2(100)    DEFAULT 'NO_MOUNT' CONSTRAINT DRIVE_MT_NN NOT NULL,"
+  "  DRIVE_STATUS                VARCHAR2(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_DS_NN NOT NULL,"
+  "  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_DU_NN  NOT NULL,"
+  "  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_DFD_NN NOT NULL,"
+  "  REASON_UP_DOWN              VARCHAR2(1000),"
+  "  CURRENT_VID                 VARCHAR2(100),"
+  "  CTA_VERSION                 VARCHAR2(100),"
+  "  CURRENT_PRIORITY            NUMERIC(20, 0),"
+  "  CURRENT_ACTIVITY            VARCHAR2(100),"
+  "  CURRENT_TAPE_POOL           VARCHAR2(100),"
+  "  NEXT_MOUNT_TYPE             VARCHAR2(100)    DEFAULT 'NO_MOUNT' CONSTRAINT DRIVE_NMT_NN NOT NULL,"
+  "  NEXT_VID                    VARCHAR2(100),"
+  "  NEXT_PRIORITY               NUMERIC(20, 0),"
+  "  NEXT_ACTIVITY               VARCHAR2(100),"
+  "  NEXT_TAPE_POOL              VARCHAR2(100),"
+  "  DEV_FILE_NAME               VARCHAR2(100),"
+  "  RAW_LIBRARY_SLOT            VARCHAR2(100),"
+  "  CURRENT_VO                  VARCHAR2(100),"
+  "  NEXT_VO                     VARCHAR2(100),"
+  "  USER_COMMENT                VARCHAR2(1000),"
+  "  CREATION_LOG_USER_NAME      VARCHAR2(100),"
+  "  CREATION_LOG_HOST_NAME      VARCHAR2(100),"
+  "  CREATION_LOG_TIME           NUMERIC(20, 0),"
+  "  LAST_UPDATE_USER_NAME       VARCHAR2(100),"
+  "  LAST_UPDATE_HOST_NAME       VARCHAR2(100),"
+  "  LAST_UPDATE_TIME            NUMERIC(20, 0),"
+  "  DISK_SYSTEM_NAME            VARCHAR2(100)       CONSTRAINT DRIVE_DSN_NN NOT NULL,"
+  "  RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_RB_NN  NOT NULL,"
+  "  CONSTRAINT DRIVE_DN_PK PRIMARY KEY(DRIVE_NAME),"
+  "  CONSTRAINT DRIVE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),"
+  "  CONSTRAINT DRIVE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),"
+  "  CONSTRAINT DRIVE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',"
+  "  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',"
+  "  'UNKNOWN')),"
+  "  CONSTRAINT DRIVE_MT_STRING_CK CHECK(MOUNT_TYPE IN ('NO_MOUNT', 'ARCHIVE_FOR_USER',"
+  "  'ARCHIVE_FOR_REPACK', 'RETRIEVE', 'LABEL', 'ARCHIVE_ALL_TYPES')),"
+  "  CONSTRAINT DRIVE_NMT_STRING_CK CHECK(NEXT_MOUNT_TYPE IN ('NO_MOUNT', 'ARCHIVE_FOR_USER',"
+  "  'ARCHIVE_FOR_REPACK', 'RETRIEVE', 'LABEL', 'ARCHIVE_ALL_TYPES'))"
+  ");"
+  "INSERT INTO CTA_CATALOGUE("
+  "  SCHEMA_VERSION_MAJOR,"
+  "  SCHEMA_VERSION_MINOR,"
+  "  STATUS)"
+  "VALUES("
+  "  4,"
+  "  5,"
+  "  'PRODUCTION');"
+  "ALTER TABLE CTA_CATALOGUE ADD CONSTRAINT CATALOGUE_STATUS_CONTENT_CK CHECK((NEXT_SCHEMA_VERSION_MAJOR IS NULL AND NEXT_SCHEMA_VERSION_MINOR IS NULL AND STATUS='PRODUCTION') OR (NEXT_SCHEMA_VERSION_MAJOR IS NOT NULL AND NEXT_SCHEMA_VERSION_MINOR IS NOT NULL AND STATUS='UPGRADING')) INITIALLY DEFERRED;"
+  ""
+  "COMMIT;"
+      },
+  {"sqlite",  "CREATE TABLE ARCHIVE_FILE_ID("
+  "  ID INTEGER PRIMARY KEY AUTOINCREMENT"
+  ");"
+  "CREATE TABLE LOGICAL_LIBRARY_ID("
+  "  ID INTEGER PRIMARY KEY AUTOINCREMENT"
+  ");"
+  "CREATE TABLE MEDIA_TYPE_ID("
+  "  ID INTEGER PRIMARY KEY AUTOINCREMENT"
+  ");"
+  "CREATE TABLE STORAGE_CLASS_ID("
+  "  ID INTEGER PRIMARY KEY AUTOINCREMENT"
+  ");"
+  "CREATE TABLE TAPE_POOL_ID("
+  "  ID INTEGER PRIMARY KEY AUTOINCREMENT"
+  ");"
+  "CREATE TABLE VIRTUAL_ORGANIZATION_ID("
+  "  ID INTEGER PRIMARY KEY AUTOINCREMENT"
+  ");"
+  "CREATE TABLE FILE_RECYCLE_LOG_ID("
+  "  ID INTEGER PRIMARY KEY AUTOINCREMENT"
+  ");"
+  "CREATE TABLE CTA_CATALOGUE("
+  "  SCHEMA_VERSION_MAJOR    INTEGER      CONSTRAINT CTA_CATALOGUE_SVM1_NN NOT NULL,"
+  "  SCHEMA_VERSION_MINOR    INTEGER      CONSTRAINT CTA_CATALOGUE_SVM2_NN NOT NULL,"
+  "  NEXT_SCHEMA_VERSION_MAJOR INTEGER,"
+  "  NEXT_SCHEMA_VERSION_MINOR INTEGER,"
+  "  STATUS                  VARCHAR(100),"
+  "  IS_PRODUCTION           CHAR(1)         DEFAULT '0' CONSTRAINT CTA_CATALOGUE_IP_NN NOT NULL,"
+  "  CONSTRAINT CTA_CATALOGUE_IP_BOOL_CK     CHECK(IS_PRODUCTION IN ('0','1'))"
+  ");"
+  "CREATE TABLE ADMIN_USER("
+  "  ADMIN_USER_NAME         VARCHAR(100)    CONSTRAINT ADMIN_USER_AUN_NN  NOT NULL,"
+  "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT ADMIN_USER_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT ADMIN_USER_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT ADMIN_USER_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       INTEGER      CONSTRAINT ADMIN_USER_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT ADMIN_USER_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT ADMIN_USER_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        INTEGER      CONSTRAINT ADMIN_USER_LUT_NN  NOT NULL,"
+  "  CONSTRAINT ADMIN_USER_PK PRIMARY KEY(ADMIN_USER_NAME)"
+  ");"
+  "CREATE TABLE DISK_SYSTEM("
+  "  DISK_SYSTEM_NAME        VARCHAR(100)    CONSTRAINT DISK_SYSTEM_DSNM_NN NOT NULL,"
+  "  FILE_REGEXP             VARCHAR(100)    CONSTRAINT DISK_SYSTEM_FR_NN   NOT NULL,"
+  "  FREE_SPACE_QUERY_URL    VARCHAR(1000)   CONSTRAINT DISK_SYSTEM_FSQU_NN NOT NULL,"
+  "  REFRESH_INTERVAL        INTEGER      CONSTRAINT DISK_SYSTEM_RI_NN   NOT NULL,"
+  "  TARGETED_FREE_SPACE     INTEGER      CONSTRAINT DISK_SYSTEM_TFS_NN  NOT NULL,"
+  "  SLEEP_TIME              INTEGER      CONSTRAINT DISK_SYSTEM_ST_NN   NOT NULL,"
+  "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT DISK_SYSTEM_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT DISK_SYSTEM_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT DISK_SYSTEM_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       INTEGER      CONSTRAINT DISK_SYSTEM_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT DISK_SYSTEM_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT DISK_SYSTEM_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        INTEGER      CONSTRAINT DISK_SYSTEM_LUT_NN  NOT NULL,"
+  "  CONSTRAINT NAME_PK PRIMARY KEY(DISK_SYSTEM_NAME)"
+  ");"
+  ""
+  "CREATE TABLE DISK_INSTANCE("
+  "  DISK_INSTANCE_NAME      VARCHAR(100)  CONSTRAINT DISK_INSTANCE_DINM_NN NOT NULL,"
+  "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT DISK_INSTANCE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT DISK_INSTANCE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT DISK_INSTANCE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       INTEGER      CONSTRAINT DISK_INSTANCE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT DISK_INSTANCE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT DISK_INSTANCE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        INTEGER      CONSTRAINT DISK_INSTANCE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT DISK_INSTANCE_PK PRIMARY KEY(DISK_INSTANCE_NAME)"
+  ");"
+  ""
+  "CREATE TABLE DISK_INSTANCE_SPACE("
+  "  DISK_INSTANCE_NAME        VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_DINM_NN NOT NULL,"
+  "  DISK_INSTANCE_SPACE_NAME  VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_DISNM_NN NOT NULL,"
+  "  FREE_SPACE_QUERY_URL      VARCHAR(1000)   CONSTRAINT DISK_INSTANCE_SPACE_FSQU_NN NOT NULL,"
+  "  REFRESH_INTERVAL          INTEGER      CONSTRAINT DISK_INSTANCE_SPACE_RI_NN   NOT NULL,"
+  "  LAST_REFRESH_TIME         INTEGER      CONSTRAINT DISK_INSTANCE_SPACE_LRT_NN   NOT NULL,"
+  "  FREE_SPACE                INTEGER      CONSTRAINT DISK_INSTANCE_SPACE_TFS_NN  NOT NULL,"
+  "  USER_COMMENT              VARCHAR(1000)   CONSTRAINT DISK_INSTANCE_SPACE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME    VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME    VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME         INTEGER      CONSTRAINT DISK_INSTANCE_SPACE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME     VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME     VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME          INTEGER      CONSTRAINT DISK_INSTANCE_SPACE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT DISK_INSTANCE_SPACE_PK PRIMARY KEY(DISK_INSTANCE_NAME, DISK_INSTANCE_SPACE_NAME),"
+  "  CONSTRAINT DISK_INSTANCE_SPACE_DIN_FK FOREIGN KEY(DISK_INSTANCE_NAME) REFERENCES DISK_INSTANCE(DISK_INSTANCE_NAME)"
+  ");"
+  ""
+  "CREATE TABLE VIRTUAL_ORGANIZATION("
+  "  VIRTUAL_ORGANIZATION_ID INTEGER      CONSTRAINT VIRTUAL_ORGANIZATION_VOI_NN  NOT NULL,"
+  "  VIRTUAL_ORGANIZATION_NAME VARCHAR(100)  CONSTRAINT VIRTUAL_ORGANIZATION_VON_NN  NOT NULL,"
+  "  READ_MAX_DRIVES INTEGER              CONSTRAINT VIRTUAL_ORGANIZATION_RMD_NN  NOT NULL,"
+  "  WRITE_MAX_DRIVES INTEGER             CONSTRAINT VIRTUAL_ORGANIZATION_WMD_NN  NOT NULL,"
+  "  MAX_FILE_SIZE INTEGER                CONSTRAINT VIRTUAL_ORGANIZATION_MFS_NN  NOT NULL,"
+  "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT VIRTUAL_ORGANIZATION_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT VIRTUAL_ORGANIZATION_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT VIRTUAL_ORGANIZATION_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       INTEGER      CONSTRAINT VIRTUAL_ORGANIZATION_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT VIRTUAL_ORGANIZATION_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT VIRTUAL_ORGANIZATION_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        INTEGER      CONSTRAINT VIRTUAL_ORGANIZATION_LUT_NN  NOT NULL,"
+  "  CONSTRAINT VIRTUAL_ORGANIZATION_PK PRIMARY KEY(VIRTUAL_ORGANIZATION_ID),"
+  "  CONSTRAINT VIRTUAL_ORGANIZATION_VON_UN UNIQUE(VIRTUAL_ORGANIZATION_NAME)"
+  ");"
+  "CREATE TABLE STORAGE_CLASS("
+  "  STORAGE_CLASS_ID        INTEGER      CONSTRAINT STORAGE_CLASS_SCI_NN  NOT NULL,"
+  "  STORAGE_CLASS_NAME      VARCHAR(100)    CONSTRAINT STORAGE_CLASS_SCN_NN  NOT NULL,"
+  "  NB_COPIES               INTEGER       CONSTRAINT STORAGE_CLASS_NC_NN   NOT NULL,"
+  "  VIRTUAL_ORGANIZATION_ID INTEGER      CONSTRAINT STORAGE_CLASS_VOI_NN  NOT NULL,"
+  "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT STORAGE_CLASS_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT STORAGE_CLASS_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT STORAGE_CLASS_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       INTEGER      CONSTRAINT STORAGE_CLASS_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT STORAGE_CLASS_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT STORAGE_CLASS_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        INTEGER      CONSTRAINT STORAGE_CLASS_LUT_NN  NOT NULL,"
+  "  CONSTRAINT STORAGE_CLASS_PK PRIMARY KEY(STORAGE_CLASS_ID),"
+  "  CONSTRAINT STORAGE_CLASS_SCN_UN UNIQUE(STORAGE_CLASS_NAME),"
+  "  CONSTRAINT STORAGE_CLASS_VOI_FK FOREIGN KEY(VIRTUAL_ORGANIZATION_ID) REFERENCES VIRTUAL_ORGANIZATION(VIRTUAL_ORGANIZATION_ID)"
+  ");"
+  "CREATE TABLE TAPE_POOL("
+  "  TAPE_POOL_ID            INTEGER      CONSTRAINT TAPE_POOL_TPI_NN  NOT NULL,"
+  "  TAPE_POOL_NAME          VARCHAR(100)    CONSTRAINT TAPE_POOL_TPN_NN  NOT NULL,"
+  "  VIRTUAL_ORGANIZATION_ID INTEGER      CONSTRAINT TAPE_POOL_VOI_NN  NOT NULL,"
+  "  NB_PARTIAL_TAPES        INTEGER      CONSTRAINT TAPE_POOL_NPT_NN  NOT NULL,"
+  "  IS_ENCRYPTED            CHAR(1)         CONSTRAINT TAPE_POOL_IE_NN   NOT NULL,"
+  "  SUPPLY                  VARCHAR(100),"
+  "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT TAPE_POOL_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       INTEGER      CONSTRAINT TAPE_POOL_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT TAPE_POOL_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT TAPE_POOL_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        INTEGER      CONSTRAINT TAPE_POOL_LUT_NN  NOT NULL,"
+  "  CONSTRAINT TAPE_POOL_PK PRIMARY KEY(TAPE_POOL_ID),"
+  "  CONSTRAINT TAPE_POOL_TPN_UN UNIQUE(TAPE_POOL_NAME),"
+  "  CONSTRAINT TAPE_POOL_IS_ENCRYPTED_BOOL_CK CHECK(IS_ENCRYPTED IN ('0', '1')),"
+  "  CONSTRAINT TAPE_POOL_VO_FK FOREIGN KEY(VIRTUAL_ORGANIZATION_ID) REFERENCES VIRTUAL_ORGANIZATION(VIRTUAL_ORGANIZATION_ID)"
+  ");"
+  "CREATE TABLE ARCHIVE_ROUTE("
+  "  STORAGE_CLASS_ID        INTEGER      CONSTRAINT ARCHIVE_ROUTE_SCI_NN  NOT NULL,"
+  "  COPY_NB                 INTEGER       CONSTRAINT ARCHIVE_ROUTE_CN_NN   NOT NULL,"
+  "  TAPE_POOL_ID            INTEGER      CONSTRAINT ARCHIVE_ROUTE_TPI_NN  NOT NULL,"
+  "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT ARCHIVE_ROUTE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT ARCHIVE_ROUTE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT ARCHIVE_ROUTE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       INTEGER      CONSTRAINT ARCHIVE_ROUTE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT ARCHIVE_ROUTE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT ARCHIVE_ROUTE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        INTEGER      CONSTRAINT ARCHIVE_ROUTE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT ARCHIVE_ROUTE_PK PRIMARY KEY(STORAGE_CLASS_ID, COPY_NB),"
+  "  CONSTRAINT ARCHIVE_ROUTE_STORAGE_CLASS_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID),"
+  "  CONSTRAINT ARCHIVE_ROUTE_TAPE_POOL_FK FOREIGN KEY(TAPE_POOL_ID) REFERENCES TAPE_POOL(TAPE_POOL_ID),"
+  "  CONSTRAINT ARCHIVE_ROUTE_COPY_NB_GT_0_CK CHECK(COPY_NB > 0),"
+  "  CONSTRAINT ARCHIVE_ROUTE_SCI_TPI_UN UNIQUE(STORAGE_CLASS_ID, TAPE_POOL_ID)"
+  ");"
+  "CREATE TABLE MEDIA_TYPE("
+  "  MEDIA_TYPE_ID          INTEGER    CONSTRAINT MEDIA_TYPE_MTI_NN  NOT NULL,"
+  "  MEDIA_TYPE_NAME        VARCHAR(100)  CONSTRAINT MEDIA_TYPE_MTN_NN  NOT NULL,"
+  "  CARTRIDGE              VARCHAR(100)  CONSTRAINT MEDIA_TYPE_C_NN    NOT NULL,"
+  "  CAPACITY_IN_BYTES      INTEGER    CONSTRAINT MEDIA_TYPE_CIB_NN  NOT NULL,"
+  "  PRIMARY_DENSITY_CODE   INTEGER,"
+  "  SECONDARY_DENSITY_CODE INTEGER,"
+  "  NB_WRAPS               INTEGER,"
+  "  MIN_LPOS               INTEGER,"
+  "  MAX_LPOS               INTEGER,"
+  "  USER_COMMENT           VARCHAR(1000) CONSTRAINT MEDIA_TYPE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME VARCHAR(100)  CONSTRAINT MEDIA_TYPE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME VARCHAR(100)  CONSTRAINT MEDIA_TYPE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME      INTEGER    CONSTRAINT MEDIA_TYPE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME  VARCHAR(100)  CONSTRAINT MEDIA_TYPE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME  VARCHAR(100)  CONSTRAINT MEDIA_TYPE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME       INTEGER    CONSTRAINT MEDIA_TYPE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT MEDIA_TYPE_PK PRIMARY KEY(MEDIA_TYPE_ID),"
+  "  CONSTRAINT MEDIA_TYPE_MTN_UN UNIQUE(MEDIA_TYPE_NAME)"
+  ");"
+  "CREATE TABLE LOGICAL_LIBRARY("
+  "  LOGICAL_LIBRARY_ID      INTEGER      CONSTRAINT LOGICAL_LIBRARY_LLI_NN  NOT NULL,"
+  "  LOGICAL_LIBRARY_NAME    VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_LLN_NN  NOT NULL,"
+  "  IS_DISABLED             CHAR(1)         DEFAULT '0' CONSTRAINT LOGICAL_LIBRARY_ID_NN NOT NULL,"
+  "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT LOGICAL_LIBRARY_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       INTEGER      CONSTRAINT LOGICAL_LIBRARY_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        INTEGER      CONSTRAINT LOGICAL_LIBRARY_LUT_NN  NOT NULL,"
+  "  CONSTRAINT LOGICAL_LIBRARY_PK PRIMARY KEY(LOGICAL_LIBRARY_ID),"
+  "  CONSTRAINT LOGICAL_LIBRARY_LLN_UN UNIQUE(LOGICAL_LIBRARY_NAME),"
+  "  CONSTRAINT LOGICAL_LIBRARY_ID_BOOL_CK CHECK(IS_DISABLED IN ('0', '1'))"
+  ");"
+  "CREATE TABLE TAPE("
+  "  VID                     VARCHAR(100)    CONSTRAINT TAPE_V_NN    NOT NULL,"
+  "  MEDIA_TYPE_ID           INTEGER      CONSTRAINT TAPE_MTID_NN   NOT NULL,"
+  "  VENDOR                  VARCHAR(100)    CONSTRAINT TAPE_V2_NN   NOT NULL,"
+  "  LOGICAL_LIBRARY_ID      INTEGER      CONSTRAINT TAPE_LLI_NN  NOT NULL,"
+  "  TAPE_POOL_ID            INTEGER      CONSTRAINT TAPE_TPI_NN  NOT NULL,"
+  "  ENCRYPTION_KEY_NAME     VARCHAR(100),"
+  "  DATA_IN_BYTES           INTEGER      CONSTRAINT TAPE_DIB_NN  NOT NULL,"
+  "  LAST_FSEQ               INTEGER      CONSTRAINT TAPE_LF_NN   NOT NULL,"
+  "  NB_MASTER_FILES         INTEGER      DEFAULT 0 CONSTRAINT TAPE_NB_MASTER_FILES_NN NOT NULL,"
+  "  MASTER_DATA_IN_BYTES    INTEGER      DEFAULT 0 CONSTRAINT TAPE_MASTER_DATA_IN_BYTES_NN NOT NULL,"
+  "  IS_FULL                 CHAR(1)         CONSTRAINT TAPE_IF_NN   NOT NULL,"
+  "  IS_FROM_CASTOR          CHAR(1)         CONSTRAINT TAPE_IFC_NN  NOT NULL,"
+  "  DIRTY                   CHAR(1)         DEFAULT '1' CONSTRAINT TAPE_DIRTY_NN NOT NULL,"
+  "  NB_COPY_NB_1            INTEGER     DEFAULT 0 CONSTRAINT TAPE_NB_COPY_NB_1_NN NOT NULL,"
+  "  COPY_NB_1_IN_BYTES      INTEGER     DEFAULT 0 CONSTRAINT TAPE_COPY_NB_1_IN_BYTES_NN NOT NULL,"
+  "  NB_COPY_NB_GT_1         INTEGER     DEFAULT 0 CONSTRAINT TAPE_NB_COPY_NB_GT_1_NN NOT NULL,"
+  "  COPY_NB_GT_1_IN_BYTES   INTEGER     DEFAULT 0 CONSTRAINT TAPE_COPY_NB_GT_1_IN_BYTES_NN NOT NULL,"
+  "  LABEL_DRIVE             VARCHAR(100),"
+  "  LABEL_TIME              INTEGER    ,"
+  "  LAST_READ_DRIVE         VARCHAR(100),"
+  "  LAST_READ_TIME          INTEGER    ,"
+  "  LAST_WRITE_DRIVE        VARCHAR(100),"
+  "  LAST_WRITE_TIME         INTEGER    ,"
+  "  READ_MOUNT_COUNT        INTEGER      DEFAULT 0 CONSTRAINT TAPE_RMC_NN NOT NULL,"
+  "  WRITE_MOUNT_COUNT       INTEGER      DEFAULT 0 CONSTRAINT TAPE_WMC_NN NOT NULL,"
+  "  USER_COMMENT            VARCHAR(1000),"
+  "  TAPE_STATE              VARCHAR(100)    CONSTRAINT TAPE_TS_NN NOT NULL,"
+  "  STATE_REASON            VARCHAR(1000),"
+  "  STATE_UPDATE_TIME       INTEGER      CONSTRAINT TAPE_SUT_NN NOT NULL,"
+  "  STATE_MODIFIED_BY       VARCHAR(100)    CONSTRAINT TAPE_SMB_NN NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT TAPE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT TAPE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       INTEGER      CONSTRAINT TAPE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT TAPE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT TAPE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        INTEGER      CONSTRAINT TAPE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT TAPE_PK PRIMARY KEY(VID),"
+  "  CONSTRAINT TAPE_LOGICAL_LIBRARY_FK FOREIGN KEY(LOGICAL_LIBRARY_ID) REFERENCES LOGICAL_LIBRARY(LOGICAL_LIBRARY_ID),"
+  "  CONSTRAINT TAPE_TAPE_POOL_FK FOREIGN KEY(TAPE_POOL_ID) REFERENCES TAPE_POOL(TAPE_POOL_ID),"
+  "  CONSTRAINT TAPE_IS_FULL_BOOL_CK CHECK(IS_FULL IN ('0', '1')),"
+  "  CONSTRAINT TAPE_IS_FROM_CASTOR_BOOL_CK CHECK(IS_FROM_CASTOR IN ('0', '1')),"
+  "  CONSTRAINT TAPE_DIRTY_BOOL_CK CHECK(DIRTY IN ('0','1')),"
+  "  CONSTRAINT TAPE_STATE_CK CHECK(TAPE_STATE IN ('ACTIVE', 'DISABLED', 'BROKEN')),"
+  "  CONSTRAINT TAPE_MEDIA_TYPE_FK FOREIGN KEY(MEDIA_TYPE_ID) REFERENCES MEDIA_TYPE(MEDIA_TYPE_ID)"
+  ");"
+  "CREATE INDEX TAPE_TAPE_POOL_ID_IDX ON TAPE(TAPE_POOL_ID);"
+  "CREATE INDEX TAPE_STATE_IDX ON TAPE(TAPE_STATE);"
+  "CREATE TABLE MOUNT_POLICY("
+  "  MOUNT_POLICY_NAME          VARCHAR(100)    CONSTRAINT MOUNT_POLICY_MPN_NN  NOT NULL,"
+  "  ARCHIVE_PRIORITY           INTEGER      CONSTRAINT MOUNT_POLICY_AP_NN   NOT NULL,"
+  "  ARCHIVE_MIN_REQUEST_AGE    INTEGER      CONSTRAINT MOUNT_POLICY_AMRA_NN NOT NULL,"
+  "  RETRIEVE_PRIORITY          INTEGER      CONSTRAINT MOUNT_POLICY_RP_NN   NOT NULL,"
+  "  RETRIEVE_MIN_REQUEST_AGE   INTEGER      CONSTRAINT MOUNT_POLICY_RMRA_NN NOT NULL,"
+  "  USER_COMMENT               VARCHAR(1000)   CONSTRAINT MOUNT_POLICY_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME     VARCHAR(100)    CONSTRAINT MOUNT_POLICY_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME     VARCHAR(100)    CONSTRAINT MOUNT_POLICY_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME          INTEGER      CONSTRAINT MOUNT_POLICY_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME      VARCHAR(100)    CONSTRAINT MOUNT_POLICY_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME      VARCHAR(100)    CONSTRAINT MOUNT_POLICY_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME           INTEGER      CONSTRAINT MOUNT_POLICY_LUT_NN  NOT NULL,"
+  "  CONSTRAINT MOUNT_POLICY_PK PRIMARY KEY(MOUNT_POLICY_NAME)"
+  ");"
+  "CREATE TABLE REQUESTER_ACTIVITY_MOUNT_RULE("
+  "  DISK_INSTANCE_NAME     VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_DIN_NN  NOT NULL,"
+  "  REQUESTER_NAME         VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_RN_NN   NOT NULL,"
+  "  ACTIVITY_REGEX         VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_AR_NN   NOT NULL,"
+  "  MOUNT_POLICY_NAME      VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_MPN_NN  NOT NULL,"
+  "  USER_COMMENT           VARCHAR(1000)   CONSTRAINT RQSTER_ACT_RULE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME      INTEGER      CONSTRAINT RQSTER_ACT_RULE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME  VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME  VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME       INTEGER      CONSTRAINT RQSTER_ACT_RULE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT RQSTER_ACT_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_NAME, ACTIVITY_REGEX),"
+  "  CONSTRAINT RQSTER_ACT_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)"
+  "    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)"
+  ");"
+  "CREATE TABLE REQUESTER_MOUNT_RULE("
+  "  DISK_INSTANCE_NAME     VARCHAR(100)    CONSTRAINT RQSTER_RULE_DIN_NN  NOT NULL,"
+  "  REQUESTER_NAME         VARCHAR(100)    CONSTRAINT RQSTER_RULE_RN_NN   NOT NULL,"
+  "  MOUNT_POLICY_NAME      VARCHAR(100)    CONSTRAINT RQSTER_RULE_MPN_NN  NOT NULL,"
+  "  USER_COMMENT           VARCHAR(1000)   CONSTRAINT RQSTER_RULE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME VARCHAR(100)    CONSTRAINT RQSTER_RULE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME VARCHAR(100)    CONSTRAINT RQSTER_RULE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME      INTEGER      CONSTRAINT RQSTER_RULE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME  VARCHAR(100)    CONSTRAINT RQSTER_RULE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME  VARCHAR(100)    CONSTRAINT RQSTER_RULE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME       INTEGER      CONSTRAINT RQSTER_RULE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT RQSTER_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_NAME),"
+  "  CONSTRAINT RQSTER_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)"
+  "    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)"
+  ");"
+  "CREATE TABLE REQUESTER_GROUP_MOUNT_RULE("
+  "  DISK_INSTANCE_NAME     VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_DIN_NN  NOT NULL,"
+  "  REQUESTER_GROUP_NAME   VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_RGN_NN  NOT NULL,"
+  "  MOUNT_POLICY_NAME      VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_MPN_NN  NOT NULL,"
+  "  USER_COMMENT           VARCHAR(1000)   CONSTRAINT RQSTER_GRP_RULE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME      INTEGER      CONSTRAINT RQSTER_GRP_RULE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME  VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME  VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME       INTEGER      CONSTRAINT RQSTER_GRP_RULE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT RQSTER_GRP_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_GROUP_NAME),"
+  "  CONSTRAINT RQSTER_GRP_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)"
+  "    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)"
+  ");"
+  "CREATE TABLE ARCHIVE_FILE("
+  "  ARCHIVE_FILE_ID         INTEGER      CONSTRAINT ARCHIVE_FILE_AFI_NN  NOT NULL,"
+  "  DISK_INSTANCE_NAME      VARCHAR(100)    CONSTRAINT ARCHIVE_FILE_DIN_NN  NOT NULL,"
+  "  DISK_FILE_ID            VARCHAR(100)    CONSTRAINT ARCHIVE_FILE_DFI_NN  NOT NULL,"
+  "  DISK_FILE_UID           INTEGER      CONSTRAINT ARCHIVE_FILE_DFUID_NN  NOT NULL,"
+  "  DISK_FILE_GID           INTEGER      CONSTRAINT ARCHIVE_FILE_DFGID_NN  NOT NULL,"
+  "  SIZE_IN_BYTES           INTEGER      CONSTRAINT ARCHIVE_FILE_SIB_NN  NOT NULL,"
+  "  CHECKSUM_BLOB           BLOB(200),"
+  "  CHECKSUM_ADLER32        INTEGER      CONSTRAINT ARCHIVE_FILE_CB2_NN  NOT NULL,"
+  "  STORAGE_CLASS_ID        INTEGER      CONSTRAINT ARCHIVE_FILE_SCI_NN  NOT NULL,"
+  "  CREATION_TIME           INTEGER      CONSTRAINT ARCHIVE_FILE_CT2_NN  NOT NULL,"
+  "  RECONCILIATION_TIME     INTEGER      CONSTRAINT ARCHIVE_FILE_RT_NN   NOT NULL,"
+  "  IS_DELETED              CHAR(1)         DEFAULT '0' CONSTRAINT ARCHIVE_FILE_ID_NN NOT NULL,"
+  "  COLLOCATION_HINT        VARCHAR(100),"
+  "  CONSTRAINT ARCHIVE_FILE_PK PRIMARY KEY(ARCHIVE_FILE_ID),"
+  "  CONSTRAINT ARCHIVE_FILE_STORAGE_CLASS_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID),"
+  "  CONSTRAINT ARCHIVE_FILE_DIN_DFI_UN UNIQUE(DISK_INSTANCE_NAME, DISK_FILE_ID),"
+  "  CONSTRAINT ARCHIVE_FILE_ID_BOOL_CK CHECK(IS_DELETED IN ('0', '1'))"
+  ");"
+  "CREATE INDEX ARCHIVE_FILE_DIN_IDX ON ARCHIVE_FILE(DISK_INSTANCE_NAME);"
+  "CREATE INDEX ARCHIVE_FILE_DFI_IDX ON ARCHIVE_FILE(DISK_FILE_ID);"
+  "CREATE TABLE TAPE_FILE("
+  "  VID                      VARCHAR(100)   CONSTRAINT TAPE_FILE_V_NN    NOT NULL,"
+  "  FSEQ                     INTEGER     CONSTRAINT TAPE_FILE_F_NN    NOT NULL,"
+  "  BLOCK_ID                 INTEGER     CONSTRAINT TAPE_FILE_BI_NN   NOT NULL,"
+  "  LOGICAL_SIZE_IN_BYTES    INTEGER     CONSTRAINT TAPE_FILE_CSIB_NN NOT NULL,"
+  "  COPY_NB                  INTEGER      CONSTRAINT TAPE_FILE_CN_NN   NOT NULL,"
+  "  CREATION_TIME            INTEGER     CONSTRAINT TAPE_FILE_CT_NN   NOT NULL,"
+  "  ARCHIVE_FILE_ID          INTEGER     CONSTRAINT TAPE_FILE_AFI_NN  NOT NULL,"
+  "  CONSTRAINT TAPE_FILE_PK PRIMARY KEY(VID, FSEQ),"
+  "  CONSTRAINT TAPE_FILE_TAPE_FK FOREIGN KEY(VID)"
+  "    REFERENCES TAPE(VID),"
+  "  CONSTRAINT TAPE_FILE_ARCHIVE_FILE_FK FOREIGN KEY(ARCHIVE_FILE_ID)"
+  "    REFERENCES ARCHIVE_FILE(ARCHIVE_FILE_ID),"
+  "  CONSTRAINT TAPE_FILE_VID_BLOCK_ID_UN UNIQUE(VID, BLOCK_ID),"
+  "  CONSTRAINT TAPE_FILE_COPY_NB_GT_0_CK CHECK(COPY_NB > 0)"
+  ");"
+  "CREATE INDEX TAPE_FILE_VID_IDX ON TAPE_FILE(VID);"
+  "CREATE INDEX TAPE_FILE_ARCHIVE_FILE_ID_IDX ON TAPE_FILE(ARCHIVE_FILE_ID);"
+  "CREATE TABLE ACTIVITIES_WEIGHTS ("
+  "  DISK_INSTANCE_NAME       VARCHAR(100),"
+  "  ACTIVITY                 VARCHAR(100),"
+  "  WEIGHT                   VARCHAR(100),"
+  "  USER_COMMENT             VARCHAR(1000)   CONSTRAINT ACTIV_WEIGHTS_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME   VARCHAR(100)    CONSTRAINT ACTIV_WEIGHTS_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME   VARCHAR(100)    CONSTRAINT ACTIV_WEIGHTS_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME        INTEGER      CONSTRAINT ACTIV_WEIGHTS_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME    VARCHAR(100)    CONSTRAINT ACTIV_WEIGHTS_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME    VARCHAR(100)    CONSTRAINT ACTIV_WEIGHTS_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME         INTEGER      CONSTRAINT ACTIV_WEIGHTS_LUT_NN  NOT NULL"
+  ");"
+  "CREATE TABLE FILE_RECYCLE_LOG("
+  "  FILE_RECYCLE_LOG_ID        INTEGER          CONSTRAINT FILE_RECYCLE_LOG_ID_NN NOT NULL,"
+  "  VID                        VARCHAR(100)        CONSTRAINT FILE_RECYCLE_LOG_VID_NN NOT NULL,"
+  "  FSEQ                       INTEGER          CONSTRAINT FILE_RECYCLE_LOG_FSEQ_NN NOT NULL,"
+  "  BLOCK_ID                   INTEGER          CONSTRAINT FILE_RECYCLE_LOG_BID_NN NOT NULL,"
+  "  COPY_NB                    INTEGER           CONSTRAINT FILE_RECYCLE_LOG_COPY_NB_NN NOT NULL,"
+  "  TAPE_FILE_CREATION_TIME    INTEGER          CONSTRAINT FILE_RECYCLE_LOG_TFCT_NN NOT NULL,"
+  "  ARCHIVE_FILE_ID            INTEGER          CONSTRAINT FILE_RECYCLE_LOG_AFI_NN NOT NULL,"
+  "  DISK_INSTANCE_NAME         VARCHAR(100)        CONSTRAINT FILE_RECYCLE_LOG_DIN_NN NOT NULL,"
+  "  DISK_FILE_ID               VARCHAR(100)        CONSTRAINT FILE_RECYCLE_LOG_DFI_NN NOT NULL,"
+  "  DISK_FILE_ID_WHEN_DELETED  VARCHAR(100)        CONSTRAINT FILE_RECYCLE_LOG_DFIWD_NN NOT NULL,"
+  "  DISK_FILE_UID              INTEGER          CONSTRAINT FILE_RECYCLE_LOG_DFU_NN NOT NULL,"
+  "  DISK_FILE_GID              INTEGER          CONSTRAINT FILE_RECYCLE_LOG_DFG_NN NOT NULL,"
+  "  SIZE_IN_BYTES              INTEGER          CONSTRAINT FILE_RECYCLE_LOG_SIB_NN NOT NULL,"
+  "  CHECKSUM_BLOB              BLOB(200),"
+  "  CHECKSUM_ADLER32           INTEGER          CONSTRAINT FILE_RECYCLE_LOG_CA_NN NOT NULL,"
+  "  STORAGE_CLASS_ID           INTEGER          CONSTRAINT FILE_RECYCLE_LOG_SCI_NN NOT NULL,"
+  "  ARCHIVE_FILE_CREATION_TIME INTEGER          CONSTRAINT FILE_RECYLE_LOG_CT_NN NOT NULL,"
+  "  RECONCILIATION_TIME        INTEGER          CONSTRAINT FILE_RECYCLE_LOG_RT_NN NOT NULL,"
+  "  COLLOCATION_HINT           VARCHAR(100),"
+  "  DISK_FILE_PATH             VARCHAR(2000),"
+  "  REASON_LOG                 VARCHAR(1000)       CONSTRAINT FILE_RECYCLE_LOG_RL_NN NOT NULL,"
+  "  RECYCLE_LOG_TIME           INTEGER          CONSTRAINT FILE_RECYCLE_LOG_RLT_NN NOT NULL,"
+  "  CONSTRAINT FILE_RECYCLE_LOG_PK PRIMARY KEY(FILE_RECYCLE_LOG_ID),"
+  "  CONSTRAINT FILE_RECYCLE_LOG_VID_FK FOREIGN KEY(VID) REFERENCES TAPE(VID),"
+  "  CONSTRAINT FILE_RECYCLE_LOG_SC_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID)"
+  ");"
+  "CREATE INDEX FILE_RECYCLE_LOG_DFI_IDX ON FILE_RECYCLE_LOG(DISK_FILE_ID);"
+  ""
+  "CREATE TABLE DRIVE_CONFIG ("
+  "  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_CONFIG_DN_NN  NOT NULL,"
+  "  CATEGORY                    VARCHAR(100)       CONSTRAINT DRIVE_CONFIG_C_NN   NOT NULL,"
+  "  KEY_NAME                    VARCHAR(100)       CONSTRAINT DRIVE_CONFIG_KN_NN  NOT NULL,"
+  "  VALUE                       VARCHAR(1000)      CONSTRAINT DRIVE_CONFIG_V_NN   NOT NULL,"
+  "  SOURCE                      VARCHAR(100)       CONSTRAINT DRIVE_CONFIG_S_NN   NOT NULL,"
+  "  CONSTRAINT DRIVE_CONFIG_DN_PK PRIMARY KEY(KEY_NAME, DRIVE_NAME)"
+  ");"
+  ""
+  "CREATE TABLE TAPE_DRIVE ("
+  "  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_STATE_DN_NN NOT NULL,"
+  "  HOST                        VARCHAR(100)       CONSTRAINT DRIVE_STATE_H_NN  NOT NULL,"
+  "  LOGICAL_LIBRARY             VARCHAR(100)       CONSTRAINT DRIVE_STATE_LL_NN NOT NULL,"
+  "  SESSION_ID                  INTEGER,"
+  "  BYTES_TRANSFERED_IN_SESSION INTEGER,"
+  "  FILES_TRANSFERED_IN_SESSION INTEGER,"
+  "  LATEST_BANDWIDTH            VARCHAR(100),"
+  "  SESSION_START_TIME          INTEGER,"
+  "  MOUNT_START_TIME            INTEGER,"
+  "  TRANSFER_START_TIME         INTEGER,"
+  "  UNLOAD_START_TIME           INTEGER,"
+  "  UNMOUNT_START_TIME          INTEGER,"
+  "  DRAINING_START_TIME         INTEGER,"
+  "  DOWN_OR_UP_START_TIME       INTEGER,"
+  "  PROBE_START_TIME            INTEGER,"
+  "  CLEANUP_START_TIME          INTEGER,"
+  "  START_START_TIME            INTEGER,"
+  "  SHUTDOWN_TIME               INTEGER,"
+  "  MOUNT_TYPE                  INTEGER      CONSTRAINT DRIVE_STATE_MT_NN NOT NULL,"
+  "  DRIVE_STATUS                VARCHAR(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_STATE_DS_NN NOT NULL,"
+  "  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DU_NN  NOT NULL,"
+  "  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DFD_NN NOT NULL,"
+  "  REASON_UP_DOWN              VARCHAR(1000),"
+  "  CURRENT_VID                 VARCHAR(100),"
+  "  CTA_VERSION                 VARCHAR(100),"
+  "  CURRENT_PRIORITY            INTEGER,"
+  "  CURRENT_ACTIVITY            VARCHAR(100),"
+  "  CURRENT_ACTIVITY_WEIGHT     VARCHAR(100),"
+  "  CURRENT_TAPE_POOL           VARCHAR(100),"
+  "  NEXT_MOUNT_TYPE             INTEGER,"
+  "  NEXT_VID                    VARCHAR(100),"
+  "  NEXT_TAPE_POOL              VARCHAR(100),"
+  "  NEXT_PRIORITY               INTEGER,"
+  "  NEXT_ACTIVITY               VARCHAR(100),"
+  "  NEXT_ACTIVITY_WEIGHT        VARCHAR(100),"
+  "  DEV_FILE_NAME               VARCHAR(100),"
+  "  RAW_LIBRARY_SLOT            VARCHAR(100),"
+  "  CURRENT_VO                  VARCHAR(100),"
+  "  NEXT_VO                     VARCHAR(100),"
+  "  USER_COMMENT                VARCHAR(1000),"
+  "  CREATION_LOG_USER_NAME      VARCHAR(100),"
+  "  CREATION_LOG_HOST_NAME      VARCHAR(100),"
+  "  CREATION_LOG_TIME           INTEGER,"
+  "  LAST_UPDATE_USER_NAME       VARCHAR(100),"
+  "  LAST_UPDATE_HOST_NAME       VARCHAR(100),"
+  "  LAST_UPDATE_TIME            INTEGER,"
+  "  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_STATE_DSN_NN NOT NULL,"
+  "  RESERVED_BYTES              INTEGER         CONSTRAINT DRIVE_STATE_RB_NN  NOT NULL,"
+  "  CONSTRAINT DRIVE_STATE_DN_PK PRIMARY KEY(DRIVE_NAME),"
+  "  CONSTRAINT DRIVE_STATE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),"
+  "  CONSTRAINT DRIVE_STATE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),"
+  "  CONSTRAINT DRIVE_STATE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',"
+  "  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',"
+  "  'UNKNOWN'))"
+  ");"
+  ""
+  "CREATE TABLE DRIVE_STATE ("
+  "  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_DN_NN NOT NULL,"
+  "  HOST                        VARCHAR(100)       CONSTRAINT DRIVE_H_NN  NOT NULL,"
+  "  LOGICAL_LIBRARY             VARCHAR(100)       CONSTRAINT DRIVE_LL_NN NOT NULL,"
+  "  SESSION_ID                  INTEGER,"
+  "  BYTES_TRANSFERED_IN_SESSION INTEGER,"
+  "  FILES_TRANSFERED_IN_SESSION INTEGER,"
+  "  SESSION_START_TIME          INTEGER,"
+  "  SESSION_ELAPSED_TIME        INTEGER,"
+  "  MOUNT_START_TIME            INTEGER,"
+  "  TRANSFER_START_TIME         INTEGER,"
+  "  UNLOAD_START_TIME           INTEGER,"
+  "  UNMOUNT_START_TIME          INTEGER,"
+  "  DRAINING_START_TIME         INTEGER,"
+  "  DOWN_OR_UP_START_TIME       INTEGER,"
+  "  PROBE_START_TIME            INTEGER,"
+  "  CLEANUP_START_TIME          INTEGER,"
+  "  START_START_TIME            INTEGER,"
+  "  SHUTDOWN_TIME               INTEGER,"
+  "  MOUNT_TYPE                  VARCHAR(100)    DEFAULT 'NO_MOUNT' CONSTRAINT DRIVE_MT_NN NOT NULL,"
+  "  DRIVE_STATUS                VARCHAR(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_DS_NN NOT NULL,"
+  "  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_DU_NN  NOT NULL,"
+  "  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_DFD_NN NOT NULL,"
+  "  REASON_UP_DOWN              VARCHAR(1000),"
+  "  CURRENT_VID                 VARCHAR(100),"
+  "  CTA_VERSION                 VARCHAR(100),"
+  "  CURRENT_PRIORITY            INTEGER,"
+  "  CURRENT_ACTIVITY            VARCHAR(100),"
+  "  CURRENT_TAPE_POOL           VARCHAR(100),"
+  "  NEXT_MOUNT_TYPE             VARCHAR(100)    DEFAULT 'NO_MOUNT' CONSTRAINT DRIVE_NMT_NN NOT NULL,"
+  "  NEXT_VID                    VARCHAR(100),"
+  "  NEXT_PRIORITY               INTEGER,"
+  "  NEXT_ACTIVITY               VARCHAR(100),"
+  "  NEXT_TAPE_POOL              VARCHAR(100),"
+  "  DEV_FILE_NAME               VARCHAR(100),"
+  "  RAW_LIBRARY_SLOT            VARCHAR(100),"
+  "  CURRENT_VO                  VARCHAR(100),"
+  "  NEXT_VO                     VARCHAR(100),"
+  "  USER_COMMENT                VARCHAR(1000),"
+  "  CREATION_LOG_USER_NAME      VARCHAR(100),"
+  "  CREATION_LOG_HOST_NAME      VARCHAR(100),"
+  "  CREATION_LOG_TIME           INTEGER,"
+  "  LAST_UPDATE_USER_NAME       VARCHAR(100),"
+  "  LAST_UPDATE_HOST_NAME       VARCHAR(100),"
+  "  LAST_UPDATE_TIME            INTEGER,"
+  "  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_DSN_NN NOT NULL,"
+  "  RESERVED_BYTES              INTEGER         CONSTRAINT DRIVE_RB_NN  NOT NULL,"
+  "  CONSTRAINT DRIVE_DN_PK PRIMARY KEY(DRIVE_NAME),"
+  "  CONSTRAINT DRIVE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),"
+  "  CONSTRAINT DRIVE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),"
+  "  CONSTRAINT DRIVE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',"
+  "  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',"
+  "  'UNKNOWN')),"
+  "  CONSTRAINT DRIVE_MT_STRING_CK CHECK(MOUNT_TYPE IN ('NO_MOUNT', 'ARCHIVE_FOR_USER',"
+  "  'ARCHIVE_FOR_REPACK', 'RETRIEVE', 'LABEL', 'ARCHIVE_ALL_TYPES')),"
+  "  CONSTRAINT DRIVE_NMT_STRING_CK CHECK(NEXT_MOUNT_TYPE IN ('NO_MOUNT', 'ARCHIVE_FOR_USER',"
+  "  'ARCHIVE_FOR_REPACK', 'RETRIEVE', 'LABEL', 'ARCHIVE_ALL_TYPES'))"
+  ");"
+  "INSERT INTO CTA_CATALOGUE("
+  "  SCHEMA_VERSION_MAJOR,"
+  "  SCHEMA_VERSION_MINOR,"
+  "  STATUS)"
+  "VALUES("
+  "  4,"
+  "  5,"
+  "  'PRODUCTION');"
+      },
+  {"postgres",  "CREATE SEQUENCE ARCHIVE_FILE_ID_SEQ"
+  "  INCREMENT BY 1"
+  "  START WITH 1"
+  "  NO MAXVALUE"
+  "  MINVALUE 1"
+  "  NO CYCLE"
+  "  CACHE 20;"
+  "CREATE SEQUENCE LOGICAL_LIBRARY_ID_SEQ"
+  "  INCREMENT BY 1"
+  "  START WITH 1"
+  "  NO MAXVALUE"
+  "  MINVALUE 1"
+  "  NO CYCLE"
+  "  CACHE 20;"
+  "CREATE SEQUENCE MEDIA_TYPE_ID_SEQ"
+  "  INCREMENT BY 1"
+  "  START WITH 1"
+  "  NO MAXVALUE"
+  "  MINVALUE 1"
+  "  NO CYCLE"
+  "  CACHE 20;"
+  "CREATE SEQUENCE STORAGE_CLASS_ID_SEQ"
+  "  INCREMENT BY 1"
+  "  START WITH 1"
+  "  NO MAXVALUE"
+  "  MINVALUE 1"
+  "  NO CYCLE"
+  "  CACHE 20;"
+  "CREATE SEQUENCE TAPE_POOL_ID_SEQ"
+  "  INCREMENT BY 1"
+  "  START WITH 1"
+  "  NO MAXVALUE"
+  "  MINVALUE 1"
+  "  NO CYCLE"
+  "  CACHE 20;"
+  "CREATE SEQUENCE VIRTUAL_ORGANIZATION_ID_SEQ"
+  "  INCREMENT BY 1"
+  "  START WITH 1"
+  "  NO MAXVALUE"
+  "  MINVALUE 1"
+  "  NO CYCLE"
+  "  CACHE 20;"
+  "CREATE SEQUENCE FILE_RECYCLE_LOG_ID_SEQ"
+  "  INCREMENT BY 1"
+  "  START WITH 1"
+  "  NO MAXVALUE"
+  "  MINVALUE 1"
+  "  NO CYCLE"
+  "  CACHE 20;"
+  "CREATE TABLE CTA_CATALOGUE("
+  "  SCHEMA_VERSION_MAJOR    NUMERIC(20, 0)      CONSTRAINT CTA_CATALOGUE_SVM1_NN NOT NULL,"
+  "  SCHEMA_VERSION_MINOR    NUMERIC(20, 0)      CONSTRAINT CTA_CATALOGUE_SVM2_NN NOT NULL,"
+  "  NEXT_SCHEMA_VERSION_MAJOR NUMERIC(20, 0),"
+  "  NEXT_SCHEMA_VERSION_MINOR NUMERIC(20, 0),"
+  "  STATUS                  VARCHAR(100),"
+  "  IS_PRODUCTION           CHAR(1)         DEFAULT '0' CONSTRAINT CTA_CATALOGUE_IP_NN NOT NULL,"
+  "  CONSTRAINT CTA_CATALOGUE_IP_BOOL_CK     CHECK(IS_PRODUCTION IN ('0','1'))"
+  ");"
+  "CREATE TABLE ADMIN_USER("
+  "  ADMIN_USER_NAME         VARCHAR(100)    CONSTRAINT ADMIN_USER_AUN_NN  NOT NULL,"
+  "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT ADMIN_USER_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT ADMIN_USER_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT ADMIN_USER_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT ADMIN_USER_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT ADMIN_USER_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT ADMIN_USER_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT ADMIN_USER_LUT_NN  NOT NULL,"
+  "  CONSTRAINT ADMIN_USER_PK PRIMARY KEY(ADMIN_USER_NAME)"
+  ");"
+  "CREATE TABLE DISK_SYSTEM("
+  "  DISK_SYSTEM_NAME        VARCHAR(100)    CONSTRAINT DISK_SYSTEM_DSNM_NN NOT NULL,"
+  "  FILE_REGEXP             VARCHAR(100)    CONSTRAINT DISK_SYSTEM_FR_NN   NOT NULL,"
+  "  FREE_SPACE_QUERY_URL    VARCHAR(1000)   CONSTRAINT DISK_SYSTEM_FSQU_NN NOT NULL,"
+  "  REFRESH_INTERVAL        NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_RI_NN   NOT NULL,"
+  "  TARGETED_FREE_SPACE     NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_TFS_NN  NOT NULL,"
+  "  SLEEP_TIME              NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_ST_NN   NOT NULL,"
+  "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT DISK_SYSTEM_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT DISK_SYSTEM_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT DISK_SYSTEM_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT DISK_SYSTEM_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT DISK_SYSTEM_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT DISK_SYSTEM_LUT_NN  NOT NULL,"
+  "  CONSTRAINT NAME_PK PRIMARY KEY(DISK_SYSTEM_NAME)"
+  ");"
+  ""
+  "CREATE TABLE DISK_INSTANCE("
+  "  DISK_INSTANCE_NAME      VARCHAR(100)  CONSTRAINT DISK_INSTANCE_DINM_NN NOT NULL,"
+  "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT DISK_INSTANCE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT DISK_INSTANCE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT DISK_INSTANCE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT DISK_INSTANCE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT DISK_INSTANCE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT DISK_INSTANCE_PK PRIMARY KEY(DISK_INSTANCE_NAME)"
+  ");"
+  ""
+  "CREATE TABLE DISK_INSTANCE_SPACE("
+  "  DISK_INSTANCE_NAME        VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_DINM_NN NOT NULL,"
+  "  DISK_INSTANCE_SPACE_NAME  VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_DISNM_NN NOT NULL,"
+  "  FREE_SPACE_QUERY_URL      VARCHAR(1000)   CONSTRAINT DISK_INSTANCE_SPACE_FSQU_NN NOT NULL,"
+  "  REFRESH_INTERVAL          NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_RI_NN   NOT NULL,"
+  "  LAST_REFRESH_TIME         NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_LRT_NN   NOT NULL,"
+  "  FREE_SPACE                NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_TFS_NN  NOT NULL,"
+  "  USER_COMMENT              VARCHAR(1000)   CONSTRAINT DISK_INSTANCE_SPACE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME    VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME    VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME         NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME     VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME     VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME          NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT DISK_INSTANCE_SPACE_PK PRIMARY KEY(DISK_INSTANCE_NAME, DISK_INSTANCE_SPACE_NAME),"
+  "  CONSTRAINT DISK_INSTANCE_SPACE_DIN_FK FOREIGN KEY(DISK_INSTANCE_NAME) REFERENCES DISK_INSTANCE(DISK_INSTANCE_NAME)"
+  ");"
+  ""
+  "CREATE TABLE VIRTUAL_ORGANIZATION("
+  "  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)      CONSTRAINT VIRTUAL_ORGANIZATION_VOI_NN  NOT NULL,"
+  "  VIRTUAL_ORGANIZATION_NAME VARCHAR(100)  CONSTRAINT VIRTUAL_ORGANIZATION_VON_NN  NOT NULL,"
+  "  READ_MAX_DRIVES NUMERIC(20, 0)              CONSTRAINT VIRTUAL_ORGANIZATION_RMD_NN  NOT NULL,"
+  "  WRITE_MAX_DRIVES NUMERIC(20, 0)             CONSTRAINT VIRTUAL_ORGANIZATION_WMD_NN  NOT NULL,"
+  "  MAX_FILE_SIZE NUMERIC(20, 0)                CONSTRAINT VIRTUAL_ORGANIZATION_MFS_NN  NOT NULL,"
+  "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT VIRTUAL_ORGANIZATION_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT VIRTUAL_ORGANIZATION_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT VIRTUAL_ORGANIZATION_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT VIRTUAL_ORGANIZATION_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT VIRTUAL_ORGANIZATION_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT VIRTUAL_ORGANIZATION_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT VIRTUAL_ORGANIZATION_LUT_NN  NOT NULL,"
+  "  CONSTRAINT VIRTUAL_ORGANIZATION_PK PRIMARY KEY(VIRTUAL_ORGANIZATION_ID),"
+  "  CONSTRAINT VIRTUAL_ORGANIZATION_VON_UN UNIQUE(VIRTUAL_ORGANIZATION_NAME)"
+  ");"
+  "CREATE TABLE STORAGE_CLASS("
+  "  STORAGE_CLASS_ID        NUMERIC(20, 0)      CONSTRAINT STORAGE_CLASS_SCI_NN  NOT NULL,"
+  "  STORAGE_CLASS_NAME      VARCHAR(100)    CONSTRAINT STORAGE_CLASS_SCN_NN  NOT NULL,"
+  "  NB_COPIES               NUMERIC(3, 0)       CONSTRAINT STORAGE_CLASS_NC_NN   NOT NULL,"
+  "  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)      CONSTRAINT STORAGE_CLASS_VOI_NN  NOT NULL,"
+  "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT STORAGE_CLASS_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT STORAGE_CLASS_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT STORAGE_CLASS_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT STORAGE_CLASS_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT STORAGE_CLASS_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT STORAGE_CLASS_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT STORAGE_CLASS_LUT_NN  NOT NULL,"
+  "  CONSTRAINT STORAGE_CLASS_PK PRIMARY KEY(STORAGE_CLASS_ID),"
+  "  CONSTRAINT STORAGE_CLASS_SCN_UN UNIQUE(STORAGE_CLASS_NAME),"
+  "  CONSTRAINT STORAGE_CLASS_VOI_FK FOREIGN KEY(VIRTUAL_ORGANIZATION_ID) REFERENCES VIRTUAL_ORGANIZATION(VIRTUAL_ORGANIZATION_ID)"
+  ");"
+  "CREATE TABLE TAPE_POOL("
+  "  TAPE_POOL_ID            NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_TPI_NN  NOT NULL,"
+  "  TAPE_POOL_NAME          VARCHAR(100)    CONSTRAINT TAPE_POOL_TPN_NN  NOT NULL,"
+  "  VIRTUAL_ORGANIZATION_ID NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_VOI_NN  NOT NULL,"
+  "  NB_PARTIAL_TAPES        NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_NPT_NN  NOT NULL,"
+  "  IS_ENCRYPTED            CHAR(1)         CONSTRAINT TAPE_POOL_IE_NN   NOT NULL,"
+  "  SUPPLY                  VARCHAR(100),"
+  "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT TAPE_POOL_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT TAPE_POOL_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT TAPE_POOL_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT TAPE_POOL_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT TAPE_POOL_LUT_NN  NOT NULL,"
+  "  CONSTRAINT TAPE_POOL_PK PRIMARY KEY(TAPE_POOL_ID),"
+  "  CONSTRAINT TAPE_POOL_TPN_UN UNIQUE(TAPE_POOL_NAME),"
+  "  CONSTRAINT TAPE_POOL_IS_ENCRYPTED_BOOL_CK CHECK(IS_ENCRYPTED IN ('0', '1')),"
+  "  CONSTRAINT TAPE_POOL_VO_FK FOREIGN KEY(VIRTUAL_ORGANIZATION_ID) REFERENCES VIRTUAL_ORGANIZATION(VIRTUAL_ORGANIZATION_ID)"
+  ");"
+  "CREATE TABLE ARCHIVE_ROUTE("
+  "  STORAGE_CLASS_ID        NUMERIC(20, 0)      CONSTRAINT ARCHIVE_ROUTE_SCI_NN  NOT NULL,"
+  "  COPY_NB                 NUMERIC(3, 0)       CONSTRAINT ARCHIVE_ROUTE_CN_NN   NOT NULL,"
+  "  TAPE_POOL_ID            NUMERIC(20, 0)      CONSTRAINT ARCHIVE_ROUTE_TPI_NN  NOT NULL,"
+  "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT ARCHIVE_ROUTE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT ARCHIVE_ROUTE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT ARCHIVE_ROUTE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT ARCHIVE_ROUTE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT ARCHIVE_ROUTE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT ARCHIVE_ROUTE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT ARCHIVE_ROUTE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT ARCHIVE_ROUTE_PK PRIMARY KEY(STORAGE_CLASS_ID, COPY_NB),"
+  "  CONSTRAINT ARCHIVE_ROUTE_STORAGE_CLASS_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID),"
+  "  CONSTRAINT ARCHIVE_ROUTE_TAPE_POOL_FK FOREIGN KEY(TAPE_POOL_ID) REFERENCES TAPE_POOL(TAPE_POOL_ID),"
+  "  CONSTRAINT ARCHIVE_ROUTE_COPY_NB_GT_0_CK CHECK(COPY_NB > 0),"
+  "  CONSTRAINT ARCHIVE_ROUTE_SCI_TPI_UN UNIQUE(STORAGE_CLASS_ID, TAPE_POOL_ID)"
+  ");"
+  "CREATE TABLE MEDIA_TYPE("
+  "  MEDIA_TYPE_ID          NUMERIC(20, 0)    CONSTRAINT MEDIA_TYPE_MTI_NN  NOT NULL,"
+  "  MEDIA_TYPE_NAME        VARCHAR(100)  CONSTRAINT MEDIA_TYPE_MTN_NN  NOT NULL,"
+  "  CARTRIDGE              VARCHAR(100)  CONSTRAINT MEDIA_TYPE_C_NN    NOT NULL,"
+  "  CAPACITY_IN_BYTES      NUMERIC(20, 0)    CONSTRAINT MEDIA_TYPE_CIB_NN  NOT NULL,"
+  "  PRIMARY_DENSITY_CODE   NUMERIC(3, 0),"
+  "  SECONDARY_DENSITY_CODE NUMERIC(3, 0),"
+  "  NB_WRAPS               NUMERIC(10, 0),"
+  "  MIN_LPOS               NUMERIC(20, 0),"
+  "  MAX_LPOS               NUMERIC(20, 0),"
+  "  USER_COMMENT           VARCHAR(1000) CONSTRAINT MEDIA_TYPE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME VARCHAR(100)  CONSTRAINT MEDIA_TYPE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME VARCHAR(100)  CONSTRAINT MEDIA_TYPE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME      NUMERIC(20, 0)    CONSTRAINT MEDIA_TYPE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME  VARCHAR(100)  CONSTRAINT MEDIA_TYPE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME  VARCHAR(100)  CONSTRAINT MEDIA_TYPE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME       NUMERIC(20, 0)    CONSTRAINT MEDIA_TYPE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT MEDIA_TYPE_PK PRIMARY KEY(MEDIA_TYPE_ID),"
+  "  CONSTRAINT MEDIA_TYPE_MTN_UN UNIQUE(MEDIA_TYPE_NAME)"
+  ");"
+  "CREATE TABLE LOGICAL_LIBRARY("
+  "  LOGICAL_LIBRARY_ID      NUMERIC(20, 0)      CONSTRAINT LOGICAL_LIBRARY_LLI_NN  NOT NULL,"
+  "  LOGICAL_LIBRARY_NAME    VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_LLN_NN  NOT NULL,"
+  "  IS_DISABLED             CHAR(1)         DEFAULT '0' CONSTRAINT LOGICAL_LIBRARY_ID_NN NOT NULL,"
+  "  USER_COMMENT            VARCHAR(1000)   CONSTRAINT LOGICAL_LIBRARY_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT LOGICAL_LIBRARY_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT LOGICAL_LIBRARY_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT LOGICAL_LIBRARY_LUT_NN  NOT NULL,"
+  "  CONSTRAINT LOGICAL_LIBRARY_PK PRIMARY KEY(LOGICAL_LIBRARY_ID),"
+  "  CONSTRAINT LOGICAL_LIBRARY_LLN_UN UNIQUE(LOGICAL_LIBRARY_NAME),"
+  "  CONSTRAINT LOGICAL_LIBRARY_ID_BOOL_CK CHECK(IS_DISABLED IN ('0', '1'))"
+  ");"
+  "CREATE TABLE TAPE("
+  "  VID                     VARCHAR(100)    CONSTRAINT TAPE_V_NN    NOT NULL,"
+  "  MEDIA_TYPE_ID           NUMERIC(20, 0)      CONSTRAINT TAPE_MTID_NN   NOT NULL,"
+  "  VENDOR                  VARCHAR(100)    CONSTRAINT TAPE_V2_NN   NOT NULL,"
+  "  LOGICAL_LIBRARY_ID      NUMERIC(20, 0)      CONSTRAINT TAPE_LLI_NN  NOT NULL,"
+  "  TAPE_POOL_ID            NUMERIC(20, 0)      CONSTRAINT TAPE_TPI_NN  NOT NULL,"
+  "  ENCRYPTION_KEY_NAME     VARCHAR(100),"
+  "  DATA_IN_BYTES           NUMERIC(20, 0)      CONSTRAINT TAPE_DIB_NN  NOT NULL,"
+  "  LAST_FSEQ               NUMERIC(20, 0)      CONSTRAINT TAPE_LF_NN   NOT NULL,"
+  "  NB_MASTER_FILES         NUMERIC(20, 0)      DEFAULT 0 CONSTRAINT TAPE_NB_MASTER_FILES_NN NOT NULL,"
+  "  MASTER_DATA_IN_BYTES    NUMERIC(20, 0)      DEFAULT 0 CONSTRAINT TAPE_MASTER_DATA_IN_BYTES_NN NOT NULL,"
+  "  IS_FULL                 CHAR(1)         CONSTRAINT TAPE_IF_NN   NOT NULL,"
+  "  IS_FROM_CASTOR          CHAR(1)         CONSTRAINT TAPE_IFC_NN  NOT NULL,"
+  "  DIRTY                   CHAR(1)         DEFAULT '1' CONSTRAINT TAPE_DIRTY_NN NOT NULL,"
+  "  NB_COPY_NB_1            NUMERIC(20, 0)     DEFAULT 0 CONSTRAINT TAPE_NB_COPY_NB_1_NN NOT NULL,"
+  "  COPY_NB_1_IN_BYTES      NUMERIC(20, 0)     DEFAULT 0 CONSTRAINT TAPE_COPY_NB_1_IN_BYTES_NN NOT NULL,"
+  "  NB_COPY_NB_GT_1         NUMERIC(20, 0)     DEFAULT 0 CONSTRAINT TAPE_NB_COPY_NB_GT_1_NN NOT NULL,"
+  "  COPY_NB_GT_1_IN_BYTES   NUMERIC(20, 0)     DEFAULT 0 CONSTRAINT TAPE_COPY_NB_GT_1_IN_BYTES_NN NOT NULL,"
+  "  LABEL_DRIVE             VARCHAR(100),"
+  "  LABEL_TIME              NUMERIC(20, 0)    ,"
+  "  LAST_READ_DRIVE         VARCHAR(100),"
+  "  LAST_READ_TIME          NUMERIC(20, 0)    ,"
+  "  LAST_WRITE_DRIVE        VARCHAR(100),"
+  "  LAST_WRITE_TIME         NUMERIC(20, 0)    ,"
+  "  READ_MOUNT_COUNT        NUMERIC(20, 0)      DEFAULT 0 CONSTRAINT TAPE_RMC_NN NOT NULL,"
+  "  WRITE_MOUNT_COUNT       NUMERIC(20, 0)      DEFAULT 0 CONSTRAINT TAPE_WMC_NN NOT NULL,"
+  "  USER_COMMENT            VARCHAR(1000),"
+  "  TAPE_STATE              VARCHAR(100)    CONSTRAINT TAPE_TS_NN NOT NULL,"
+  "  STATE_REASON            VARCHAR(1000),"
+  "  STATE_UPDATE_TIME       NUMERIC(20, 0)      CONSTRAINT TAPE_SUT_NN NOT NULL,"
+  "  STATE_MODIFIED_BY       VARCHAR(100)    CONSTRAINT TAPE_SMB_NN NOT NULL,"
+  "  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT TAPE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT TAPE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT TAPE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT TAPE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT TAPE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT TAPE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT TAPE_PK PRIMARY KEY(VID),"
+  "  CONSTRAINT TAPE_LOGICAL_LIBRARY_FK FOREIGN KEY(LOGICAL_LIBRARY_ID) REFERENCES LOGICAL_LIBRARY(LOGICAL_LIBRARY_ID),"
+  "  CONSTRAINT TAPE_TAPE_POOL_FK FOREIGN KEY(TAPE_POOL_ID) REFERENCES TAPE_POOL(TAPE_POOL_ID),"
+  "  CONSTRAINT TAPE_IS_FULL_BOOL_CK CHECK(IS_FULL IN ('0', '1')),"
+  "  CONSTRAINT TAPE_IS_FROM_CASTOR_BOOL_CK CHECK(IS_FROM_CASTOR IN ('0', '1')),"
+  "  CONSTRAINT TAPE_DIRTY_BOOL_CK CHECK(DIRTY IN ('0','1')),"
+  "  CONSTRAINT TAPE_STATE_CK CHECK(TAPE_STATE IN ('ACTIVE', 'DISABLED', 'BROKEN')),"
+  "  CONSTRAINT TAPE_MEDIA_TYPE_FK FOREIGN KEY(MEDIA_TYPE_ID) REFERENCES MEDIA_TYPE(MEDIA_TYPE_ID)"
+  ");"
+  "CREATE INDEX TAPE_TAPE_POOL_ID_IDX ON TAPE(TAPE_POOL_ID);"
+  "CREATE INDEX TAPE_STATE_IDX ON TAPE(TAPE_STATE);"
+  "CREATE TABLE MOUNT_POLICY("
+  "  MOUNT_POLICY_NAME          VARCHAR(100)    CONSTRAINT MOUNT_POLICY_MPN_NN  NOT NULL,"
+  "  ARCHIVE_PRIORITY           NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_AP_NN   NOT NULL,"
+  "  ARCHIVE_MIN_REQUEST_AGE    NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_AMRA_NN NOT NULL,"
+  "  RETRIEVE_PRIORITY          NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_RP_NN   NOT NULL,"
+  "  RETRIEVE_MIN_REQUEST_AGE   NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_RMRA_NN NOT NULL,"
+  "  USER_COMMENT               VARCHAR(1000)   CONSTRAINT MOUNT_POLICY_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME     VARCHAR(100)    CONSTRAINT MOUNT_POLICY_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME     VARCHAR(100)    CONSTRAINT MOUNT_POLICY_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME          NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME      VARCHAR(100)    CONSTRAINT MOUNT_POLICY_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME      VARCHAR(100)    CONSTRAINT MOUNT_POLICY_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME           NUMERIC(20, 0)      CONSTRAINT MOUNT_POLICY_LUT_NN  NOT NULL,"
+  "  CONSTRAINT MOUNT_POLICY_PK PRIMARY KEY(MOUNT_POLICY_NAME)"
+  ");"
+  "CREATE TABLE REQUESTER_ACTIVITY_MOUNT_RULE("
+  "  DISK_INSTANCE_NAME     VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_DIN_NN  NOT NULL,"
+  "  REQUESTER_NAME         VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_RN_NN   NOT NULL,"
+  "  ACTIVITY_REGEX         VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_AR_NN   NOT NULL,"
+  "  MOUNT_POLICY_NAME      VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_MPN_NN  NOT NULL,"
+  "  USER_COMMENT           VARCHAR(1000)   CONSTRAINT RQSTER_ACT_RULE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME      NUMERIC(20, 0)      CONSTRAINT RQSTER_ACT_RULE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME  VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME  VARCHAR(100)    CONSTRAINT RQSTER_ACT_RULE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME       NUMERIC(20, 0)      CONSTRAINT RQSTER_ACT_RULE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT RQSTER_ACT_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_NAME, ACTIVITY_REGEX),"
+  "  CONSTRAINT RQSTER_ACT_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)"
+  "    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)"
+  ");"
+  "CREATE TABLE REQUESTER_MOUNT_RULE("
+  "  DISK_INSTANCE_NAME     VARCHAR(100)    CONSTRAINT RQSTER_RULE_DIN_NN  NOT NULL,"
+  "  REQUESTER_NAME         VARCHAR(100)    CONSTRAINT RQSTER_RULE_RN_NN   NOT NULL,"
+  "  MOUNT_POLICY_NAME      VARCHAR(100)    CONSTRAINT RQSTER_RULE_MPN_NN  NOT NULL,"
+  "  USER_COMMENT           VARCHAR(1000)   CONSTRAINT RQSTER_RULE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME VARCHAR(100)    CONSTRAINT RQSTER_RULE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME VARCHAR(100)    CONSTRAINT RQSTER_RULE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME      NUMERIC(20, 0)      CONSTRAINT RQSTER_RULE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME  VARCHAR(100)    CONSTRAINT RQSTER_RULE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME  VARCHAR(100)    CONSTRAINT RQSTER_RULE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME       NUMERIC(20, 0)      CONSTRAINT RQSTER_RULE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT RQSTER_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_NAME),"
+  "  CONSTRAINT RQSTER_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)"
+  "    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)"
+  ");"
+  "CREATE TABLE REQUESTER_GROUP_MOUNT_RULE("
+  "  DISK_INSTANCE_NAME     VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_DIN_NN  NOT NULL,"
+  "  REQUESTER_GROUP_NAME   VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_RGN_NN  NOT NULL,"
+  "  MOUNT_POLICY_NAME      VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_MPN_NN  NOT NULL,"
+  "  USER_COMMENT           VARCHAR(1000)   CONSTRAINT RQSTER_GRP_RULE_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME      NUMERIC(20, 0)      CONSTRAINT RQSTER_GRP_RULE_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME  VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME  VARCHAR(100)    CONSTRAINT RQSTER_GRP_RULE_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME       NUMERIC(20, 0)      CONSTRAINT RQSTER_GRP_RULE_LUT_NN  NOT NULL,"
+  "  CONSTRAINT RQSTER_GRP_RULE_PK PRIMARY KEY(DISK_INSTANCE_NAME, REQUESTER_GROUP_NAME),"
+  "  CONSTRAINT RQSTER_GRP_RULE_MNT_PLC_FK FOREIGN KEY(MOUNT_POLICY_NAME)"
+  "    REFERENCES MOUNT_POLICY(MOUNT_POLICY_NAME)"
+  ");"
+  "CREATE TABLE ARCHIVE_FILE("
+  "  ARCHIVE_FILE_ID         NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_AFI_NN  NOT NULL,"
+  "  DISK_INSTANCE_NAME      VARCHAR(100)    CONSTRAINT ARCHIVE_FILE_DIN_NN  NOT NULL,"
+  "  DISK_FILE_ID            VARCHAR(100)    CONSTRAINT ARCHIVE_FILE_DFI_NN  NOT NULL,"
+  "  DISK_FILE_UID           NUMERIC(10, 0)      CONSTRAINT ARCHIVE_FILE_DFUID_NN  NOT NULL,"
+  "  DISK_FILE_GID           NUMERIC(10, 0)      CONSTRAINT ARCHIVE_FILE_DFGID_NN  NOT NULL,"
+  "  SIZE_IN_BYTES           NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_SIB_NN  NOT NULL,"
+  "  CHECKSUM_BLOB           BYTEA,"
+  "  CHECKSUM_ADLER32        NUMERIC(10, 0)      CONSTRAINT ARCHIVE_FILE_CB2_NN  NOT NULL,"
+  "  STORAGE_CLASS_ID        NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_SCI_NN  NOT NULL,"
+  "  CREATION_TIME           NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_CT2_NN  NOT NULL,"
+  "  RECONCILIATION_TIME     NUMERIC(20, 0)      CONSTRAINT ARCHIVE_FILE_RT_NN   NOT NULL,"
+  "  IS_DELETED              CHAR(1)         DEFAULT '0' CONSTRAINT ARCHIVE_FILE_ID_NN NOT NULL,"
+  "  COLLOCATION_HINT        VARCHAR(100),"
+  "  CONSTRAINT ARCHIVE_FILE_PK PRIMARY KEY(ARCHIVE_FILE_ID),"
+  "  CONSTRAINT ARCHIVE_FILE_STORAGE_CLASS_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID),"
+  "  CONSTRAINT ARCHIVE_FILE_DIN_DFI_UN UNIQUE(DISK_INSTANCE_NAME, DISK_FILE_ID),"
+  "  CONSTRAINT ARCHIVE_FILE_ID_BOOL_CK CHECK(IS_DELETED IN ('0', '1'))"
+  ");"
+  "CREATE INDEX ARCHIVE_FILE_DIN_IDX ON ARCHIVE_FILE(DISK_INSTANCE_NAME);"
+  "CREATE INDEX ARCHIVE_FILE_DFI_IDX ON ARCHIVE_FILE(DISK_FILE_ID);"
+  "CREATE TABLE TAPE_FILE("
+  "  VID                      VARCHAR(100)   CONSTRAINT TAPE_FILE_V_NN    NOT NULL,"
+  "  FSEQ                     NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_F_NN    NOT NULL,"
+  "  BLOCK_ID                 NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_BI_NN   NOT NULL,"
+  "  LOGICAL_SIZE_IN_BYTES    NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_CSIB_NN NOT NULL,"
+  "  COPY_NB                  NUMERIC(3, 0)      CONSTRAINT TAPE_FILE_CN_NN   NOT NULL,"
+  "  CREATION_TIME            NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_CT_NN   NOT NULL,"
+  "  ARCHIVE_FILE_ID          NUMERIC(20, 0)     CONSTRAINT TAPE_FILE_AFI_NN  NOT NULL,"
+  "  CONSTRAINT TAPE_FILE_PK PRIMARY KEY(VID, FSEQ),"
+  "  CONSTRAINT TAPE_FILE_TAPE_FK FOREIGN KEY(VID)"
+  "    REFERENCES TAPE(VID),"
+  "  CONSTRAINT TAPE_FILE_ARCHIVE_FILE_FK FOREIGN KEY(ARCHIVE_FILE_ID)"
+  "    REFERENCES ARCHIVE_FILE(ARCHIVE_FILE_ID),"
+  "  CONSTRAINT TAPE_FILE_VID_BLOCK_ID_UN UNIQUE(VID, BLOCK_ID),"
+  "  CONSTRAINT TAPE_FILE_COPY_NB_GT_0_CK CHECK(COPY_NB > 0)"
+  ");"
+  "CREATE INDEX TAPE_FILE_VID_IDX ON TAPE_FILE(VID);"
+  "CREATE INDEX TAPE_FILE_ARCHIVE_FILE_ID_IDX ON TAPE_FILE(ARCHIVE_FILE_ID);"
+  "CREATE TABLE ACTIVITIES_WEIGHTS ("
+  "  DISK_INSTANCE_NAME       VARCHAR(100),"
+  "  ACTIVITY                 VARCHAR(100),"
+  "  WEIGHT                   VARCHAR(100),"
+  "  USER_COMMENT             VARCHAR(1000)   CONSTRAINT ACTIV_WEIGHTS_UC_NN   NOT NULL,"
+  "  CREATION_LOG_USER_NAME   VARCHAR(100)    CONSTRAINT ACTIV_WEIGHTS_CLUN_NN NOT NULL,"
+  "  CREATION_LOG_HOST_NAME   VARCHAR(100)    CONSTRAINT ACTIV_WEIGHTS_CLHN_NN NOT NULL,"
+  "  CREATION_LOG_TIME        NUMERIC(20, 0)      CONSTRAINT ACTIV_WEIGHTS_CLT_NN  NOT NULL,"
+  "  LAST_UPDATE_USER_NAME    VARCHAR(100)    CONSTRAINT ACTIV_WEIGHTS_LUUN_NN NOT NULL,"
+  "  LAST_UPDATE_HOST_NAME    VARCHAR(100)    CONSTRAINT ACTIV_WEIGHTS_LUHN_NN NOT NULL,"
+  "  LAST_UPDATE_TIME         NUMERIC(20, 0)      CONSTRAINT ACTIV_WEIGHTS_LUT_NN  NOT NULL"
+  ");"
+  "CREATE TABLE FILE_RECYCLE_LOG("
+  "  FILE_RECYCLE_LOG_ID        NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_ID_NN NOT NULL,"
+  "  VID                        VARCHAR(100)        CONSTRAINT FILE_RECYCLE_LOG_VID_NN NOT NULL,"
+  "  FSEQ                       NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_FSEQ_NN NOT NULL,"
+  "  BLOCK_ID                   NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_BID_NN NOT NULL,"
+  "  COPY_NB                    NUMERIC(3, 0)           CONSTRAINT FILE_RECYCLE_LOG_COPY_NB_NN NOT NULL,"
+  "  TAPE_FILE_CREATION_TIME    NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_TFCT_NN NOT NULL,"
+  "  ARCHIVE_FILE_ID            NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_AFI_NN NOT NULL,"
+  "  DISK_INSTANCE_NAME         VARCHAR(100)        CONSTRAINT FILE_RECYCLE_LOG_DIN_NN NOT NULL,"
+  "  DISK_FILE_ID               VARCHAR(100)        CONSTRAINT FILE_RECYCLE_LOG_DFI_NN NOT NULL,"
+  "  DISK_FILE_ID_WHEN_DELETED  VARCHAR(100)        CONSTRAINT FILE_RECYCLE_LOG_DFIWD_NN NOT NULL,"
+  "  DISK_FILE_UID              NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_DFU_NN NOT NULL,"
+  "  DISK_FILE_GID              NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_DFG_NN NOT NULL,"
+  "  SIZE_IN_BYTES              NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_SIB_NN NOT NULL,"
+  "  CHECKSUM_BLOB              BYTEA,"
+  "  CHECKSUM_ADLER32           NUMERIC(10, 0)          CONSTRAINT FILE_RECYCLE_LOG_CA_NN NOT NULL,"
+  "  STORAGE_CLASS_ID           NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_SCI_NN NOT NULL,"
+  "  ARCHIVE_FILE_CREATION_TIME NUMERIC(20, 0)          CONSTRAINT FILE_RECYLE_LOG_CT_NN NOT NULL,"
+  "  RECONCILIATION_TIME        NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_RT_NN NOT NULL,"
+  "  COLLOCATION_HINT           VARCHAR(100),"
+  "  DISK_FILE_PATH             VARCHAR(2000),"
+  "  REASON_LOG                 VARCHAR(1000)       CONSTRAINT FILE_RECYCLE_LOG_RL_NN NOT NULL,"
+  "  RECYCLE_LOG_TIME           NUMERIC(20, 0)          CONSTRAINT FILE_RECYCLE_LOG_RLT_NN NOT NULL,"
+  "  CONSTRAINT FILE_RECYCLE_LOG_PK PRIMARY KEY(FILE_RECYCLE_LOG_ID),"
+  "  CONSTRAINT FILE_RECYCLE_LOG_VID_FK FOREIGN KEY(VID) REFERENCES TAPE(VID),"
+  "  CONSTRAINT FILE_RECYCLE_LOG_SC_FK FOREIGN KEY(STORAGE_CLASS_ID) REFERENCES STORAGE_CLASS(STORAGE_CLASS_ID)"
+  ");"
+  "CREATE INDEX FILE_RECYCLE_LOG_DFI_IDX ON FILE_RECYCLE_LOG(DISK_FILE_ID);"
+  ""
+  "CREATE TABLE DRIVE_CONFIG ("
+  "  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_CONFIG_DN_NN  NOT NULL,"
+  "  CATEGORY                    VARCHAR(100)       CONSTRAINT DRIVE_CONFIG_C_NN   NOT NULL,"
+  "  KEY_NAME                    VARCHAR(100)       CONSTRAINT DRIVE_CONFIG_KN_NN  NOT NULL,"
+  "  VALUE                       VARCHAR(1000)      CONSTRAINT DRIVE_CONFIG_V_NN   NOT NULL,"
+  "  SOURCE                      VARCHAR(100)       CONSTRAINT DRIVE_CONFIG_S_NN   NOT NULL,"
+  "  CONSTRAINT DRIVE_CONFIG_DN_PK PRIMARY KEY(KEY_NAME, DRIVE_NAME)"
+  ");"
+  ""
+  "CREATE TABLE TAPE_DRIVE ("
+  "  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_STATE_DN_NN NOT NULL,"
+  "  HOST                        VARCHAR(100)       CONSTRAINT DRIVE_STATE_H_NN  NOT NULL,"
+  "  LOGICAL_LIBRARY             VARCHAR(100)       CONSTRAINT DRIVE_STATE_LL_NN NOT NULL,"
+  "  SESSION_ID                  NUMERIC(20, 0),"
+  "  BYTES_TRANSFERED_IN_SESSION NUMERIC(20, 0),"
+  "  FILES_TRANSFERED_IN_SESSION NUMERIC(20, 0),"
+  "  LATEST_BANDWIDTH            VARCHAR(100),"
+  "  SESSION_START_TIME          NUMERIC(20, 0),"
+  "  MOUNT_START_TIME            NUMERIC(20, 0),"
+  "  TRANSFER_START_TIME         NUMERIC(20, 0),"
+  "  UNLOAD_START_TIME           NUMERIC(20, 0),"
+  "  UNMOUNT_START_TIME          NUMERIC(20, 0),"
+  "  DRAINING_START_TIME         NUMERIC(20, 0),"
+  "  DOWN_OR_UP_START_TIME       NUMERIC(20, 0),"
+  "  PROBE_START_TIME            NUMERIC(20, 0),"
+  "  CLEANUP_START_TIME          NUMERIC(20, 0),"
+  "  START_START_TIME            NUMERIC(20, 0),"
+  "  SHUTDOWN_TIME               NUMERIC(20, 0),"
+  "  MOUNT_TYPE                  NUMERIC(10, 0)      CONSTRAINT DRIVE_STATE_MT_NN NOT NULL,"
+  "  DRIVE_STATUS                VARCHAR(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_STATE_DS_NN NOT NULL,"
+  "  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DU_NN  NOT NULL,"
+  "  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DFD_NN NOT NULL,"
+  "  REASON_UP_DOWN              VARCHAR(1000),"
+  "  CURRENT_VID                 VARCHAR(100),"
+  "  CTA_VERSION                 VARCHAR(100),"
+  "  CURRENT_PRIORITY            NUMERIC(20, 0),"
+  "  CURRENT_ACTIVITY            VARCHAR(100),"
+  "  CURRENT_ACTIVITY_WEIGHT     VARCHAR(100),"
+  "  CURRENT_TAPE_POOL           VARCHAR(100),"
+  "  NEXT_MOUNT_TYPE             NUMERIC(10, 0),"
+  "  NEXT_VID                    VARCHAR(100),"
+  "  NEXT_TAPE_POOL              VARCHAR(100),"
+  "  NEXT_PRIORITY               NUMERIC(20, 0),"
+  "  NEXT_ACTIVITY               VARCHAR(100),"
+  "  NEXT_ACTIVITY_WEIGHT        VARCHAR(100),"
+  "  DEV_FILE_NAME               VARCHAR(100),"
+  "  RAW_LIBRARY_SLOT            VARCHAR(100),"
+  "  CURRENT_VO                  VARCHAR(100),"
+  "  NEXT_VO                     VARCHAR(100),"
+  "  USER_COMMENT                VARCHAR(1000),"
+  "  CREATION_LOG_USER_NAME      VARCHAR(100),"
+  "  CREATION_LOG_HOST_NAME      VARCHAR(100),"
+  "  CREATION_LOG_TIME           NUMERIC(20, 0),"
+  "  LAST_UPDATE_USER_NAME       VARCHAR(100),"
+  "  LAST_UPDATE_HOST_NAME       VARCHAR(100),"
+  "  LAST_UPDATE_TIME            NUMERIC(20, 0),"
+  "  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_STATE_DSN_NN NOT NULL,"
+  "  RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_STATE_RB_NN  NOT NULL,"
+  "  CONSTRAINT DRIVE_STATE_DN_PK PRIMARY KEY(DRIVE_NAME),"
+  "  CONSTRAINT DRIVE_STATE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),"
+  "  CONSTRAINT DRIVE_STATE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),"
+  "  CONSTRAINT DRIVE_STATE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',"
+  "  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',"
+  "  'UNKNOWN'))"
+  ");"
+  ""
+  "CREATE TABLE DRIVE_STATE ("
+  "  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_DN_NN NOT NULL,"
+  "  HOST                        VARCHAR(100)       CONSTRAINT DRIVE_H_NN  NOT NULL,"
+  "  LOGICAL_LIBRARY             VARCHAR(100)       CONSTRAINT DRIVE_LL_NN NOT NULL,"
+  "  SESSION_ID                  NUMERIC(20, 0),"
+  "  BYTES_TRANSFERED_IN_SESSION NUMERIC(20, 0),"
+  "  FILES_TRANSFERED_IN_SESSION NUMERIC(20, 0),"
+  "  SESSION_START_TIME          NUMERIC(20, 0),"
+  "  SESSION_ELAPSED_TIME        NUMERIC(20, 0),"
+  "  MOUNT_START_TIME            NUMERIC(20, 0),"
+  "  TRANSFER_START_TIME         NUMERIC(20, 0),"
+  "  UNLOAD_START_TIME           NUMERIC(20, 0),"
+  "  UNMOUNT_START_TIME          NUMERIC(20, 0),"
+  "  DRAINING_START_TIME         NUMERIC(20, 0),"
+  "  DOWN_OR_UP_START_TIME       NUMERIC(20, 0),"
+  "  PROBE_START_TIME            NUMERIC(20, 0),"
+  "  CLEANUP_START_TIME          NUMERIC(20, 0),"
+  "  START_START_TIME            NUMERIC(20, 0),"
+  "  SHUTDOWN_TIME               NUMERIC(20, 0),"
+  "  MOUNT_TYPE                  VARCHAR(100)    DEFAULT 'NO_MOUNT' CONSTRAINT DRIVE_MT_NN NOT NULL,"
+  "  DRIVE_STATUS                VARCHAR(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_DS_NN NOT NULL,"
+  "  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_DU_NN  NOT NULL,"
+  "  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_DFD_NN NOT NULL,"
+  "  REASON_UP_DOWN              VARCHAR(1000),"
+  "  CURRENT_VID                 VARCHAR(100),"
+  "  CTA_VERSION                 VARCHAR(100),"
+  "  CURRENT_PRIORITY            NUMERIC(20, 0),"
+  "  CURRENT_ACTIVITY            VARCHAR(100),"
+  "  CURRENT_TAPE_POOL           VARCHAR(100),"
+  "  NEXT_MOUNT_TYPE             VARCHAR(100)    DEFAULT 'NO_MOUNT' CONSTRAINT DRIVE_NMT_NN NOT NULL,"
+  "  NEXT_VID                    VARCHAR(100),"
+  "  NEXT_PRIORITY               NUMERIC(20, 0),"
+  "  NEXT_ACTIVITY               VARCHAR(100),"
+  "  NEXT_TAPE_POOL              VARCHAR(100),"
+  "  DEV_FILE_NAME               VARCHAR(100),"
+  "  RAW_LIBRARY_SLOT            VARCHAR(100),"
+  "  CURRENT_VO                  VARCHAR(100),"
+  "  NEXT_VO                     VARCHAR(100),"
+  "  USER_COMMENT                VARCHAR(1000),"
+  "  CREATION_LOG_USER_NAME      VARCHAR(100),"
+  "  CREATION_LOG_HOST_NAME      VARCHAR(100),"
+  "  CREATION_LOG_TIME           NUMERIC(20, 0),"
+  "  LAST_UPDATE_USER_NAME       VARCHAR(100),"
+  "  LAST_UPDATE_HOST_NAME       VARCHAR(100),"
+  "  LAST_UPDATE_TIME            NUMERIC(20, 0),"
+  "  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_DSN_NN NOT NULL,"
+  "  RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_RB_NN  NOT NULL,"
+  "  CONSTRAINT DRIVE_DN_PK PRIMARY KEY(DRIVE_NAME),"
+  "  CONSTRAINT DRIVE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),"
+  "  CONSTRAINT DRIVE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),"
+  "  CONSTRAINT DRIVE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',"
+  "  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',"
+  "  'UNKNOWN')),"
+  "  CONSTRAINT DRIVE_MT_STRING_CK CHECK(MOUNT_TYPE IN ('NO_MOUNT', 'ARCHIVE_FOR_USER',"
+  "  'ARCHIVE_FOR_REPACK', 'RETRIEVE', 'LABEL', 'ARCHIVE_ALL_TYPES')),"
+  "  CONSTRAINT DRIVE_NMT_STRING_CK CHECK(NEXT_MOUNT_TYPE IN ('NO_MOUNT', 'ARCHIVE_FOR_USER',"
+  "  'ARCHIVE_FOR_REPACK', 'RETRIEVE', 'LABEL', 'ARCHIVE_ALL_TYPES'))"
+  ");"
+  "INSERT INTO CTA_CATALOGUE("
+  "  SCHEMA_VERSION_MAJOR,"
+  "  SCHEMA_VERSION_MINOR,"
+  "  STATUS)"
+  "VALUES("
+  "  4,"
+  "  5,"
+  "  'PRODUCTION');"
+  "ALTER TABLE ARCHIVE_FILE DROP CONSTRAINT"
+  "  ARCHIVE_FILE_DIN_DFI_UN;"
+  "ALTER TABLE ARCHIVE_FILE ADD CONSTRAINT"
+  "  ARCHIVE_FILE_DIN_DFI_UN UNIQUE(DISK_INSTANCE_NAME, DISK_FILE_ID) DEFERRABLE INITIALLY IMMEDIATE;"
+  "ALTER TABLE CTA_CATALOGUE ADD CONSTRAINT"
+  "  CATALOGUE_STATUS_CONTENT_CK CHECK((NEXT_SCHEMA_VERSION_MAJOR IS NULL AND NEXT_SCHEMA_VERSION_MINOR IS NULL AND STATUS='PRODUCTION') OR (STATUS='UPGRADING'));"
+      },
+    }  },
 };
 
 }}
diff --git a/catalogue/Catalogue.hpp b/catalogue/Catalogue.hpp
index 70225de03f93bc838117db1a5815bf5fd7acaca3..e1584a2e4d7dd4f1f1ee26e569e1d13cb76f1cf9 100644
--- a/catalogue/Catalogue.hpp
+++ b/catalogue/Catalogue.hpp
@@ -39,6 +39,8 @@
 #include "common/dataStructures/DiskSpaceReservationRequest.hpp"
 #include "common/dataStructures/DeleteArchiveRequest.hpp"
 #include "common/dataStructures/DiskFileInfo.hpp"
+#include "common/dataStructures/DiskInstance.hpp"
+#include "common/dataStructures/DiskInstanceSpace.hpp"
 #include "common/dataStructures/DriveState.hpp"
 #include "common/dataStructures/FileRecycleLog.hpp"
 #include "common/dataStructures/EntryLog.hpp"
@@ -92,6 +94,10 @@ CTA_GENERATE_EXCEPTION_CLASS(NegativeDiskSpaceReservationReached);
 
 CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedANonExistentDiskSystem);
 CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedANonEmptyDiskSystemAfterDelete);
+CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedANonExistentDiskInstance);
+CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedANonEmptyDiskInstanceAfterDelete);
+CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedANonExistentDiskInstanceSpace);
+CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedANonEmptyDiskInstanceSpaceAfterDelete);
 CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedANonEmptyLogicalLibrary);
 CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedANonEmptyTape);
 CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedANonExistentArchiveRoute);
@@ -108,6 +114,7 @@ CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedAZeroSleepTime);
 CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedAZeroTargetedFreeSpace);
 CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedAnEmptyStringCartridge);
 CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedAnEmptyStringDiskInstanceName);
+CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedAnEmptyStringDiskInstanceSpaceName);
 CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedAnEmptyStringLogicalLibraryName);
 CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedAnEmptyStringMediaType);
 CTA_GENERATE_USER_EXCEPTION_CLASS(UserSpecifiedAnEmptyStringMediaTypeName);
@@ -943,6 +950,79 @@ public:
   virtual void modifyDiskSystemComment(const common::dataStructures::SecurityIdentity &admin,
     const std::string &name, const std::string &comment) = 0;
 
+  /**
+   * Deletes a disk instance space.
+   *
+   * @param name The name of the disk instance.
+   * @param diskInstance The disk instance of the disk instance space.
+   */
+  virtual void deleteDiskInstanceSpace(const std::string &name, const std::string &diskInstance) = 0;
+
+  /**
+   * Creates the specified Disk Instance Space
+   * @param admin The administrator.
+   * @param name the name of the new disk instance space
+   * @param diskInstance the disk instance associated to the disk instance space
+   * @param freeSpaceQueryURL the URL to query to obtain the disk instance space free space
+   * @param refreshInterval the period to query for disk instance space free space
+   * @param comment the comment of the new disk instance space
+   */
+  virtual void createDiskInstanceSpace(const common::dataStructures::SecurityIdentity &admin, 
+    const std::string &name,
+    const std::string &diskInstance,
+    const std::string &freeSpaceQueryURL,
+    const uint64_t refreshInterval,
+    const std::string &comment) = 0;
+
+  /**
+   * Returns all the disk instance spaces within the CTA catalogue.
+   *
+   * @return The disk instance spaces in the CTA catalogue.
+   */
+  virtual std::list<common::dataStructures::DiskInstanceSpace> getAllDiskInstanceSpaces() const = 0;
+
+  /**
+   * Deletes a disk instance.
+   *
+   * @param name The name of the disk instance.
+   */
+  virtual void deleteDiskInstance(const std::string &name) = 0;
+
+  virtual void modifyDiskInstanceSpaceComment(const common::dataStructures::SecurityIdentity &admin, 
+    const std::string &name, const std::string &diskInstance, const std::string &comment) = 0;
+  virtual void modifyDiskInstanceSpaceRefreshInterval(const common::dataStructures::SecurityIdentity &admin, 
+    const std::string &name, const std::string &diskInstance, const uint64_t refreshInterval) = 0;
+  virtual void modifyDiskInstanceSpaceQueryURL(const common::dataStructures::SecurityIdentity &admin, 
+    const std::string &name, const std::string &diskInstance, const std::string &freeSpaceQueryURL) = 0;
+
+
+  /**
+   * Changes the comment of the specified disk instance
+   * @param admin The administrator.
+   * @param name the name of the disk instance
+   * @param comment the new comment of the disk instance
+   */
+  virtual void modifyDiskInstanceComment(const common::dataStructures::SecurityIdentity &admin,
+    const std::string &name, const std::string &comment) = 0;
+
+  /**
+   * Creates the specified Disk Instance
+   * @param admin The administrator.
+   * @param name the name of the new disk instance
+   * @param comment the comment of the new disk instance
+   */
+  virtual void createDiskInstance(const common::dataStructures::SecurityIdentity &admin, 
+    const std::string &name,
+    const std::string &comment) = 0;
+
+  /**
+   * Returns all the disk instances within the CTA catalogue.
+   *
+   * @return The disk instances in the CTA catalogue.
+   */
+  virtual std::list<common::dataStructures::DiskInstance> getAllDiskInstances() const = 0;
+
+
   typedef CatalogueItor<common::dataStructures::ArchiveFile> ArchiveFileItor;
 
   /**
diff --git a/catalogue/CatalogueRetryWrapper.hpp b/catalogue/CatalogueRetryWrapper.hpp
index 814eef158a4406aba0dc08fcc1aa5b7c60dc83d9..c38f60b8d8a649cb39a78139876d71700f12b329 100644
--- a/catalogue/CatalogueRetryWrapper.hpp
+++ b/catalogue/CatalogueRetryWrapper.hpp
@@ -540,6 +540,46 @@ public:
     return retryOnLostConnection(m_log, [&]{return m_catalogue->modifyDiskSystemSleepTime(admin, name, sleepTime);}, m_maxTriesToConnect);
   }
 
+  void createDiskInstance(const common::dataStructures::SecurityIdentity &admin, const std::string &name, const std::string &comment)  override {
+    return retryOnLostConnection(m_log, [&]{return m_catalogue->createDiskInstance(admin, name, comment);}, m_maxTriesToConnect);
+  }
+
+  std::list<common::dataStructures::DiskInstance> getAllDiskInstances() const override {
+    return retryOnLostConnection(m_log, [&]{return m_catalogue->getAllDiskInstances();}, m_maxTriesToConnect);
+  }
+
+  void deleteDiskInstance(const std::string &name) override {
+    return retryOnLostConnection(m_log, [&]{return m_catalogue->deleteDiskInstance(name);}, m_maxTriesToConnect);
+  }
+
+  void modifyDiskInstanceComment(const common::dataStructures::SecurityIdentity &admin, const std::string &name, const std::string &comment) override {
+    return retryOnLostConnection(m_log, [&]{return m_catalogue->modifyDiskInstanceComment(admin, name, comment);}, m_maxTriesToConnect);
+  }
+
+  void createDiskInstanceSpace(const common::dataStructures::SecurityIdentity &admin, const std::string &name, const std::string &diskInstance, const std::string &freeSpaceQueryURL, const uint64_t refreshInterval, const std::string &comment) override{
+    return retryOnLostConnection(m_log, [&]{return m_catalogue->createDiskInstanceSpace(admin, name, diskInstance, freeSpaceQueryURL, refreshInterval, comment);}, m_maxTriesToConnect);
+  }
+
+  std::list<common::dataStructures::DiskInstanceSpace> getAllDiskInstanceSpaces() const override {
+    return retryOnLostConnection(m_log, [&]{return m_catalogue->getAllDiskInstanceSpaces();}, m_maxTriesToConnect);
+  }
+
+  void deleteDiskInstanceSpace(const std::string &name, const std::string &diskInstance) override {
+    return retryOnLostConnection(m_log, [&]{return m_catalogue->deleteDiskInstanceSpace(name, diskInstance);}, m_maxTriesToConnect);
+  }
+
+  void modifyDiskInstanceSpaceComment(const common::dataStructures::SecurityIdentity &admin, const std::string &name, const std::string &diskInstance, const std::string &comment) override {
+    return retryOnLostConnection(m_log, [&]{return m_catalogue->modifyDiskInstanceSpaceComment(admin, name, diskInstance, comment);}, m_maxTriesToConnect);
+  }
+
+  void modifyDiskInstanceSpaceRefreshInterval(const common::dataStructures::SecurityIdentity &admin, const std::string &name, const std::string &diskInstance, const uint64_t refreshInterval) override {
+    return retryOnLostConnection(m_log, [&]{return m_catalogue->modifyDiskInstanceSpaceRefreshInterval(admin, name, diskInstance, refreshInterval);}, m_maxTriesToConnect);
+  }
+
+  void modifyDiskInstanceSpaceQueryURL(const common::dataStructures::SecurityIdentity &admin, const std::string &name, const std::string &diskInstance, const std::string &freeSpaceQueryURL) override {
+    return retryOnLostConnection(m_log, [&]{return m_catalogue->modifyDiskInstanceSpaceQueryURL(admin, name, diskInstance, freeSpaceQueryURL);}, m_maxTriesToConnect);
+  }
+
   ArchiveFileItor getArchiveFilesItor(const TapeFileSearchCriteria &searchCriteria) const override {
     return retryOnLostConnection(m_log, [&]{return m_catalogue->getArchiveFilesItor(searchCriteria);}, m_maxTriesToConnect);
   }
diff --git a/catalogue/CatalogueTest.cpp b/catalogue/CatalogueTest.cpp
index d5d5eb922eff6ba371f3952c220df164071a5778..a8fde678ae328f912e971bc5bd16ee31c72c0e3f 100644
--- a/catalogue/CatalogueTest.cpp
+++ b/catalogue/CatalogueTest.cpp
@@ -419,6 +419,18 @@ void cta_catalogue_CatalogueTest::SetUp() {
         m_catalogue->deleteDiskSystem(ds.name);
       }
     }
+    {
+      const auto diskInstanceSpaces = m_catalogue->getAllDiskInstanceSpaces();
+      for(auto &dis: diskInstanceSpaces) {
+        m_catalogue->deleteDiskInstanceSpace(dis.name, dis.diskInstance);
+      }
+    }
+    {
+      const auto diskInstances = m_catalogue->getAllDiskInstances();
+      for(auto &di: diskInstances) {
+        m_catalogue->deleteDiskInstance(di.name);
+      }
+    }
     {
       const auto virtualOrganizations = m_catalogue->getVirtualOrganizations();
       for(auto &vo: virtualOrganizations) {
@@ -458,6 +470,10 @@ void cta_catalogue_CatalogueTest::SetUp() {
       throw exception::Exception("Found one of more disk systems after emptying the database");
     }
 
+    if (!m_catalogue->getAllDiskInstances().empty()) {
+      throw exception::Exception("Found one of more disk instances after emptying the database");
+    }
+
     if(!m_catalogue->getLogicalLibraries().empty()) {
       throw exception::Exception("Found one of more logical libraries after emptying the database");
     }
@@ -14601,6 +14617,747 @@ TEST_P(cta_catalogue_CatalogueTest, modifyDiskSystemCommentL_emptyStringComment)
     catalogue::UserSpecifiedAnEmptyStringComment);
 }
 
+TEST_P(cta_catalogue_CatalogueTest, getAllDiskInstances_empty) {
+  using namespace cta;
+
+  ASSERT_TRUE(m_catalogue->getAllDiskInstances().empty());
+}
+
+TEST_P(cta_catalogue_CatalogueTest, createDiskInstance) {
+  using namespace cta;
+
+  const std::string name = "disk_instance_name";
+  const std::string comment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, name, comment);
+
+  const auto diskInstanceList = m_catalogue->getAllDiskInstances();
+  ASSERT_EQ(1, diskInstanceList.size());
+
+  const auto &diskInstance = diskInstanceList.front();
+  ASSERT_EQ(diskInstance.name, name);
+  ASSERT_EQ(diskInstance.comment, comment);
+  
+  const auto creationLog = diskInstance.creationLog;
+  ASSERT_EQ(m_admin.username, creationLog.username);
+  ASSERT_EQ(m_admin.host, creationLog.host);
+
+  const auto lastModificationLog = diskInstance.lastModificationLog;
+  ASSERT_EQ(creationLog, lastModificationLog);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, createDiskInstance_twice) {
+  using namespace cta;
+
+  const std::string name = "disk_instance_name";
+  const std::string comment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, name, comment);
+
+  const auto diskInstanceList = m_catalogue->getAllDiskInstances();
+  ASSERT_EQ(1, diskInstanceList.size());
+
+  const auto &diskInstance = diskInstanceList.front();
+  ASSERT_EQ(diskInstance.name, name);
+  ASSERT_EQ(diskInstance.comment, comment);
+  
+  const auto creationLog = diskInstance.creationLog;
+  ASSERT_EQ(m_admin.username, creationLog.username);
+  ASSERT_EQ(m_admin.host, creationLog.host);
+
+  const auto lastModificationLog = diskInstance.lastModificationLog;
+  ASSERT_EQ(creationLog, lastModificationLog);
+
+  ASSERT_THROW(m_catalogue->createDiskInstance(m_admin, name, comment), exception::UserError);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, createDiskInstance_emptyName) {
+  using namespace cta;
+
+  const std::string comment = "disk_instance_comment";
+  ASSERT_THROW(m_catalogue->createDiskInstance(m_admin, "", comment),  catalogue::UserSpecifiedAnEmptyStringDiskInstanceName);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, createDiskInstance_emptyComment) {
+  using namespace cta;
+
+  const std::string name = "disk_instance_name";
+  ASSERT_THROW(m_catalogue->createDiskInstance(m_admin, name, ""),  catalogue::UserSpecifiedAnEmptyStringComment);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, deleteDiskInstance) {
+  using namespace cta;
+
+  const std::string name = "disk_instance_name";
+  const std::string comment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, name, comment);
+
+  const auto diskInstanceList = m_catalogue->getAllDiskInstances();
+  ASSERT_EQ(1, diskInstanceList.size());
+
+  const auto &diskInstance = diskInstanceList.front();
+  ASSERT_EQ(diskInstance.name, name);
+  ASSERT_EQ(diskInstance.comment, comment);
+  
+  const auto creationLog = diskInstance.creationLog;
+  ASSERT_EQ(m_admin.username, creationLog.username);
+  ASSERT_EQ(m_admin.host, creationLog.host);
+
+  const auto lastModificationLog = diskInstance.lastModificationLog;
+  ASSERT_EQ(creationLog, lastModificationLog);
+
+  m_catalogue->deleteDiskInstance(name);
+  ASSERT_TRUE(m_catalogue->getAllDiskInstances().empty());
+}
+
+TEST_P(cta_catalogue_CatalogueTest, deleteDiskInstance_nonExisting) {
+  using namespace cta;
+
+  const std::string name = "disk_instance_name";
+  ASSERT_THROW(m_catalogue->deleteDiskInstance(name), exception::UserError);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, modifyDiskInstanceComment) {
+  using namespace cta;
+
+  const std::string name = "disk_instance_name";
+  const std::string comment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, name, comment);
+  {
+    const auto diskInstanceList = m_catalogue->getAllDiskInstances();
+    ASSERT_EQ(1, diskInstanceList.size());
+
+    const auto &diskInstance = diskInstanceList.front();
+    ASSERT_EQ(diskInstance.name, name);
+    ASSERT_EQ(diskInstance.comment, comment);
+  
+    const auto creationLog = diskInstance.creationLog;
+    ASSERT_EQ(m_admin.username, creationLog.username);
+    ASSERT_EQ(m_admin.host, creationLog.host);
+
+    const auto lastModificationLog = diskInstance.lastModificationLog;
+    ASSERT_EQ(creationLog, lastModificationLog);
+  }
+
+  const std::string modifiedComment = "modified_disk_instance_comment";
+  m_catalogue->modifyDiskInstanceComment(m_admin, name, modifiedComment);
+  
+  {
+    const auto diskInstanceList = m_catalogue->getAllDiskInstances();
+    ASSERT_EQ(1, diskInstanceList.size());
+
+    const auto &diskInstance = diskInstanceList.front();
+    ASSERT_EQ(diskInstance.name, name);
+    ASSERT_EQ(diskInstance.comment, modifiedComment);
+  
+    const auto creationLog = diskInstance.creationLog;
+    ASSERT_EQ(m_admin.username, creationLog.username);
+    ASSERT_EQ(m_admin.host, creationLog.host);
+  }
+}
+
+TEST_P(cta_catalogue_CatalogueTest, modifyDiskInstanceComment_emptyName) {
+  using namespace cta;
+
+  const std::string name = "disk_instance_name";
+  const std::string comment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, name, comment);
+  {
+    const auto diskInstanceList = m_catalogue->getAllDiskInstances();
+    ASSERT_EQ(1, diskInstanceList.size());
+
+    const auto &diskInstance = diskInstanceList.front();
+    ASSERT_EQ(diskInstance.name, name);
+    ASSERT_EQ(diskInstance.comment, comment);
+  
+    const auto creationLog = diskInstance.creationLog;
+    ASSERT_EQ(m_admin.username, creationLog.username);
+    ASSERT_EQ(m_admin.host, creationLog.host);
+
+    const auto lastModificationLog = diskInstance.lastModificationLog;
+    ASSERT_EQ(creationLog, lastModificationLog);
+  }
+
+  ASSERT_THROW(m_catalogue->modifyDiskInstanceComment(m_admin, "", comment), 
+    catalogue::UserSpecifiedAnEmptyStringDiskInstanceName);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, modifyDiskInstanceComment_emptyComment) {
+  using namespace cta;
+
+  const std::string name = "disk_instance_name";
+  const std::string comment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, name, comment);
+  {
+    const auto diskInstanceList = m_catalogue->getAllDiskInstances();
+    ASSERT_EQ(1, diskInstanceList.size());
+
+    const auto &diskInstance = diskInstanceList.front();
+    ASSERT_EQ(diskInstance.name, name);
+    ASSERT_EQ(diskInstance.comment, comment);
+  
+    const auto creationLog = diskInstance.creationLog;
+    ASSERT_EQ(m_admin.username, creationLog.username);
+    ASSERT_EQ(m_admin.host, creationLog.host);
+
+    const auto lastModificationLog = diskInstance.lastModificationLog;
+    ASSERT_EQ(creationLog, lastModificationLog);
+  }
+
+  ASSERT_THROW(m_catalogue->modifyDiskInstanceComment(m_admin, name, ""), 
+    catalogue::UserSpecifiedAnEmptyStringComment);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, modifyDiskInstanceComment_nonExisting) {
+  using namespace cta;
+
+  const std::string name = "disk_instance_name";
+  const std::string comment = "disk_instance_comment";
+
+  ASSERT_THROW(m_catalogue->modifyDiskInstanceComment(m_admin, name, comment), 
+    catalogue::UserSpecifiedANonExistentDiskInstance);
+}
+
+
+TEST_P(cta_catalogue_CatalogueTest, createDiskInstanceSpace) {
+  using namespace cta;
+
+  const std::string diskInstance = "disk_instance_name";
+  const std::string diskInstanceComment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, diskInstance, diskInstanceComment);
+
+  const std::string name = "disk_instance_space_name";
+  const std::string freeSpaceQueryURL = "free_space_query_URL";
+  const uint64_t refreshInterval = 32;
+  const std::string comment = "disk_instance_space_comment";
+
+  m_catalogue->createDiskInstanceSpace(m_admin, name, diskInstance, freeSpaceQueryURL, refreshInterval, comment);
+
+  const auto diskInstanceSpaceList = m_catalogue->getAllDiskInstanceSpaces();
+  ASSERT_EQ(1, diskInstanceSpaceList.size());
+
+  const auto &diskInstanceSpace = diskInstanceSpaceList.front();
+  ASSERT_EQ(diskInstanceSpace.name, name);
+  ASSERT_EQ(diskInstanceSpace.diskInstance, diskInstance);
+  ASSERT_EQ(diskInstanceSpace.freeSpaceQueryURL, freeSpaceQueryURL);
+  ASSERT_EQ(diskInstanceSpace.refreshInterval, refreshInterval);
+  ASSERT_EQ(diskInstanceSpace.lastRefreshTime, 0);
+  ASSERT_EQ(diskInstanceSpace.freeSpace, 0);
+  
+  ASSERT_EQ(diskInstanceSpace.comment, comment);
+  
+  const auto creationLog = diskInstanceSpace.creationLog;
+  ASSERT_EQ(m_admin.username, creationLog.username);
+  ASSERT_EQ(m_admin.host, creationLog.host);
+
+  const auto lastModificationLog = diskInstanceSpace.lastModificationLog;
+  ASSERT_EQ(creationLog, lastModificationLog);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, createDiskInstanceSpace_twice) {
+  using namespace cta;
+
+  const std::string diskInstance = "disk_instance_name";
+  const std::string diskInstanceComment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, diskInstance, diskInstanceComment);
+
+  const std::string name = "disk_instance_space_name";
+  const std::string freeSpaceQueryURL = "free_space_query_URL";
+  const uint64_t refreshInterval = 32;
+  const std::string comment = "disk_instance_space_comment";
+
+  m_catalogue->createDiskInstanceSpace(m_admin, name, diskInstance, freeSpaceQueryURL, refreshInterval, comment);
+
+  const auto diskInstanceSpaceList = m_catalogue->getAllDiskInstanceSpaces();
+  ASSERT_EQ(1, diskInstanceSpaceList.size());
+
+  const auto &diskInstanceSpace = diskInstanceSpaceList.front();
+  ASSERT_EQ(diskInstanceSpace.name, name);
+  ASSERT_EQ(diskInstanceSpace.diskInstance, diskInstance);
+  ASSERT_EQ(diskInstanceSpace.freeSpaceQueryURL, freeSpaceQueryURL);
+  ASSERT_EQ(diskInstanceSpace.refreshInterval, refreshInterval);
+  ASSERT_EQ(diskInstanceSpace.lastRefreshTime, 0);
+  ASSERT_EQ(diskInstanceSpace.freeSpace, 0);
+  
+  ASSERT_EQ(diskInstanceSpace.comment, comment);
+  
+  const auto creationLog = diskInstanceSpace.creationLog;
+  ASSERT_EQ(m_admin.username, creationLog.username);
+  ASSERT_EQ(m_admin.host, creationLog.host);
+
+  const auto lastModificationLog = diskInstanceSpace.lastModificationLog;
+  ASSERT_EQ(creationLog, lastModificationLog);
+
+
+  ASSERT_THROW(m_catalogue->createDiskInstanceSpace(m_admin, name, diskInstance, freeSpaceQueryURL, refreshInterval, comment),
+    exception::UserError);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, createDiskInstanceSpace_nonExistantDiskInstance) {
+  using namespace cta;
+
+  const std::string diskInstance = "disk_instance_name";
+  const std::string name = "disk_instance_space_name";
+  const std::string freeSpaceQueryURL = "free_space_query_URL";
+  const uint64_t refreshInterval = 32;
+  const std::string comment = "disk_instance_space_comment";
+
+  ASSERT_THROW(m_catalogue->createDiskInstanceSpace(m_admin, name, diskInstance, freeSpaceQueryURL, refreshInterval, comment), 
+    exception::UserError);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, createDiskInstanceSpace_emptyName) {
+  using namespace cta;
+
+  const std::string diskInstance = "disk_instance_name";
+  const std::string diskInstanceComment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, diskInstance, diskInstanceComment);
+
+  const std::string freeSpaceQueryURL = "free_space_query_URL";
+  const uint64_t refreshInterval = 32;
+  const std::string comment = "disk_instance_space_comment";
+
+  ASSERT_THROW(m_catalogue->createDiskInstanceSpace(m_admin, "", diskInstance, freeSpaceQueryURL, refreshInterval, comment),
+    catalogue::UserSpecifiedAnEmptyStringDiskInstanceSpaceName);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, createDiskInstanceSpace_emptyComment) {
+  using namespace cta;
+
+  const std::string diskInstance = "disk_instance_name";
+  const std::string diskInstanceComment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, diskInstance, diskInstanceComment);
+  
+  const std::string name = "disk_instance_space_name";
+  const std::string freeSpaceQueryURL = "free_space_query_URL";
+  const uint64_t refreshInterval = 32;
+  const std::string comment = "disk_instance_space_comment";
+
+  ASSERT_THROW(m_catalogue->createDiskInstanceSpace(m_admin, name, diskInstance, freeSpaceQueryURL, refreshInterval, ""),
+    catalogue::UserSpecifiedAnEmptyStringComment);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, createDiskInstanceSpace_emptyFreeSpaceQueryURL) {
+  using namespace cta;
+
+  const std::string diskInstance = "disk_instance_name";
+  const std::string diskInstanceComment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, diskInstance, diskInstanceComment);
+  
+  const std::string name = "disk_instance_space_name";
+  const uint64_t refreshInterval = 32;
+  const std::string comment = "disk_instance_space_comment";
+
+  ASSERT_THROW(m_catalogue->createDiskInstanceSpace(m_admin, name, diskInstance, "", refreshInterval, comment),
+    catalogue::UserSpecifiedAnEmptyStringFreeSpaceQueryURL);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, createDiskInstanceSpace_zeroRefreshInterval) {
+  using namespace cta;
+
+  const std::string diskInstance = "disk_instance_name";
+  const std::string diskInstanceComment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, diskInstance, diskInstanceComment);
+  
+  const std::string name = "disk_instance_space_name";
+  const std::string freeSpaceQueryURL = "free_space_query_URL";
+  const std::string comment = "disk_instance_space_comment";
+
+  ASSERT_THROW(m_catalogue->createDiskInstanceSpace(m_admin, name, diskInstance, freeSpaceQueryURL, 0, comment),
+    catalogue::UserSpecifiedAZeroRefreshInterval);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, modifyDiskInstanceSpaceComment) {
+  using namespace cta;
+
+  const std::string diskInstance = "disk_instance_name";
+  const std::string diskInstanceComment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, diskInstance, diskInstanceComment);
+
+  const std::string name = "disk_instance_space_name";
+  const std::string freeSpaceQueryURL = "free_space_query_URL";
+  const uint64_t refreshInterval = 32;
+  const std::string comment = "disk_instance_space_comment";
+
+  m_catalogue->createDiskInstanceSpace(m_admin, name, diskInstance, freeSpaceQueryURL, refreshInterval, comment);
+
+  {
+    const auto diskInstanceSpaceList = m_catalogue->getAllDiskInstanceSpaces();
+    ASSERT_EQ(1, diskInstanceSpaceList.size());
+
+    const auto &diskInstanceSpace = diskInstanceSpaceList.front();
+    ASSERT_EQ(diskInstanceSpace.name, name);
+    ASSERT_EQ(diskInstanceSpace.diskInstance, diskInstance);
+    ASSERT_EQ(diskInstanceSpace.freeSpaceQueryURL, freeSpaceQueryURL);
+    ASSERT_EQ(diskInstanceSpace.refreshInterval, refreshInterval);
+    ASSERT_EQ(diskInstanceSpace.lastRefreshTime, 0);
+    ASSERT_EQ(diskInstanceSpace.freeSpace, 0);
+    
+    ASSERT_EQ(diskInstanceSpace.comment, comment);
+    
+    const auto creationLog = diskInstanceSpace.creationLog;
+    ASSERT_EQ(m_admin.username, creationLog.username);
+    ASSERT_EQ(m_admin.host, creationLog.host);
+
+    const auto lastModificationLog = diskInstanceSpace.lastModificationLog;
+    ASSERT_EQ(creationLog, lastModificationLog);
+
+  }
+
+  const std::string newDiskInstanceSpaceComment = "disk_instance_comment_2";
+  m_catalogue->modifyDiskInstanceSpaceComment(m_admin, name, diskInstance, newDiskInstanceSpaceComment);
+
+  {
+    const auto diskInstanceSpaceList = m_catalogue->getAllDiskInstanceSpaces();
+    ASSERT_EQ(1, diskInstanceSpaceList.size());
+
+    const auto &diskInstanceSpace = diskInstanceSpaceList.front();
+    ASSERT_EQ(diskInstanceSpace.name, name);
+    ASSERT_EQ(diskInstanceSpace.diskInstance, diskInstance);
+    ASSERT_EQ(diskInstanceSpace.freeSpaceQueryURL, freeSpaceQueryURL);
+    ASSERT_EQ(diskInstanceSpace.refreshInterval, refreshInterval);
+    ASSERT_EQ(diskInstanceSpace.lastRefreshTime, 0);
+    ASSERT_EQ(diskInstanceSpace.freeSpace, 0);
+    
+    ASSERT_EQ(diskInstanceSpace.comment, newDiskInstanceSpaceComment);
+    
+    const auto creationLog = diskInstanceSpace.creationLog;
+    ASSERT_EQ(m_admin.username, creationLog.username);
+    ASSERT_EQ(m_admin.host, creationLog.host);
+  }
+}
+
+TEST_P(cta_catalogue_CatalogueTest, modifyDiskInstanceSpaceComment_empty) {
+  using namespace cta;
+
+  const std::string diskInstance = "disk_instance_name";
+  const std::string diskInstanceComment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, diskInstance, diskInstanceComment);
+
+  const std::string name = "disk_instance_space_name";
+  const std::string freeSpaceQueryURL = "free_space_query_URL";
+  const uint64_t refreshInterval = 32;
+  const std::string comment = "disk_instance_space_comment";
+
+  m_catalogue->createDiskInstanceSpace(m_admin, name, diskInstance, freeSpaceQueryURL, refreshInterval, comment);
+
+  {
+    const auto diskInstanceSpaceList = m_catalogue->getAllDiskInstanceSpaces();
+    ASSERT_EQ(1, diskInstanceSpaceList.size());
+
+    const auto &diskInstanceSpace = diskInstanceSpaceList.front();
+    ASSERT_EQ(diskInstanceSpace.name, name);
+    ASSERT_EQ(diskInstanceSpace.diskInstance, diskInstance);
+    ASSERT_EQ(diskInstanceSpace.freeSpaceQueryURL, freeSpaceQueryURL);
+    ASSERT_EQ(diskInstanceSpace.refreshInterval, refreshInterval);
+    ASSERT_EQ(diskInstanceSpace.lastRefreshTime, 0);
+    ASSERT_EQ(diskInstanceSpace.freeSpace, 0);
+    
+    ASSERT_EQ(diskInstanceSpace.comment, comment);
+    
+    const auto creationLog = diskInstanceSpace.creationLog;
+    ASSERT_EQ(m_admin.username, creationLog.username);
+    ASSERT_EQ(m_admin.host, creationLog.host);
+
+    const auto lastModificationLog = diskInstanceSpace.lastModificationLog;
+    ASSERT_EQ(creationLog, lastModificationLog);
+
+  }
+  ASSERT_THROW(m_catalogue->modifyDiskInstanceSpaceComment(m_admin, name, diskInstance, ""), catalogue::UserSpecifiedAnEmptyStringComment);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, modifyDiskInstanceSpaceComment_nonExistingSpace) {
+  using namespace cta;
+
+  const std::string name = "disk_instance_space_name";
+  const std::string diskInstance = "disk_instance_name";
+  const std::string comment = "disk_instance_space_comment";
+  ASSERT_THROW(m_catalogue->modifyDiskInstanceSpaceComment(m_admin, name, diskInstance, comment), catalogue::UserSpecifiedANonExistentDiskInstanceSpace);
+}
+
+
+TEST_P(cta_catalogue_CatalogueTest, modifyDiskInstanceSpaceQueryURL) {
+  using namespace cta;
+
+  const std::string diskInstance = "disk_instance_name";
+  const std::string diskInstanceComment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, diskInstance, diskInstanceComment);
+
+  const std::string name = "disk_instance_space_name";
+  const std::string freeSpaceQueryURL = "free_space_query_URL";
+  const uint64_t refreshInterval = 32;
+  const std::string comment = "disk_instance_space_comment";
+
+  m_catalogue->createDiskInstanceSpace(m_admin, name, diskInstance, freeSpaceQueryURL, refreshInterval, comment);
+
+  {
+    const auto diskInstanceSpaceList = m_catalogue->getAllDiskInstanceSpaces();
+    ASSERT_EQ(1, diskInstanceSpaceList.size());
+
+    const auto &diskInstanceSpace = diskInstanceSpaceList.front();
+    ASSERT_EQ(diskInstanceSpace.name, name);
+    ASSERT_EQ(diskInstanceSpace.diskInstance, diskInstance);
+    ASSERT_EQ(diskInstanceSpace.freeSpaceQueryURL, freeSpaceQueryURL);
+    ASSERT_EQ(diskInstanceSpace.refreshInterval, refreshInterval);
+    ASSERT_EQ(diskInstanceSpace.lastRefreshTime, 0);
+    ASSERT_EQ(diskInstanceSpace.freeSpace, 0);
+    
+    ASSERT_EQ(diskInstanceSpace.comment, comment);
+    
+    const auto creationLog = diskInstanceSpace.creationLog;
+    ASSERT_EQ(m_admin.username, creationLog.username);
+    ASSERT_EQ(m_admin.host, creationLog.host);
+
+    const auto lastModificationLog = diskInstanceSpace.lastModificationLog;
+    ASSERT_EQ(creationLog, lastModificationLog);
+
+  }
+
+  const std::string newFreeSpaceQueryURL = "new_free_space_query_URL";
+  m_catalogue->modifyDiskInstanceSpaceQueryURL(m_admin, name, diskInstance, newFreeSpaceQueryURL);
+
+  {
+    const auto diskInstanceSpaceList = m_catalogue->getAllDiskInstanceSpaces();
+    ASSERT_EQ(1, diskInstanceSpaceList.size());
+
+    const auto &diskInstanceSpace = diskInstanceSpaceList.front();
+    ASSERT_EQ(diskInstanceSpace.name, name);
+    ASSERT_EQ(diskInstanceSpace.diskInstance, diskInstance);
+    ASSERT_EQ(diskInstanceSpace.freeSpaceQueryURL, newFreeSpaceQueryURL);
+    ASSERT_EQ(diskInstanceSpace.refreshInterval, refreshInterval);
+    ASSERT_EQ(diskInstanceSpace.lastRefreshTime, 0);
+    ASSERT_EQ(diskInstanceSpace.freeSpace, 0);
+    
+    ASSERT_EQ(diskInstanceSpace.comment, comment);
+    
+    const auto creationLog = diskInstanceSpace.creationLog;
+    ASSERT_EQ(m_admin.username, creationLog.username);
+    ASSERT_EQ(m_admin.host, creationLog.host);
+  }
+}
+
+TEST_P(cta_catalogue_CatalogueTest, modifyDiskInstanceSpaceQueryURL_empty) {
+  using namespace cta;
+
+  const std::string diskInstance = "disk_instance_name";
+  const std::string diskInstanceComment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, diskInstance, diskInstanceComment);
+
+  const std::string name = "disk_instance_space_name";
+  const std::string freeSpaceQueryURL = "free_space_query_URL";
+  const uint64_t refreshInterval = 32;
+  const std::string comment = "disk_instance_space_comment";
+
+  m_catalogue->createDiskInstanceSpace(m_admin, name, diskInstance, freeSpaceQueryURL, refreshInterval, comment);
+
+  {
+    const auto diskInstanceSpaceList = m_catalogue->getAllDiskInstanceSpaces();
+    ASSERT_EQ(1, diskInstanceSpaceList.size());
+
+    const auto &diskInstanceSpace = diskInstanceSpaceList.front();
+    ASSERT_EQ(diskInstanceSpace.name, name);
+    ASSERT_EQ(diskInstanceSpace.diskInstance, diskInstance);
+    ASSERT_EQ(diskInstanceSpace.freeSpaceQueryURL, freeSpaceQueryURL);
+    ASSERT_EQ(diskInstanceSpace.refreshInterval, refreshInterval);
+    ASSERT_EQ(diskInstanceSpace.lastRefreshTime, 0);
+    ASSERT_EQ(diskInstanceSpace.freeSpace, 0);
+    
+    ASSERT_EQ(diskInstanceSpace.comment, comment);
+    
+    const auto creationLog = diskInstanceSpace.creationLog;
+    ASSERT_EQ(m_admin.username, creationLog.username);
+    ASSERT_EQ(m_admin.host, creationLog.host);
+
+    const auto lastModificationLog = diskInstanceSpace.lastModificationLog;
+    ASSERT_EQ(creationLog, lastModificationLog);
+
+  }
+  ASSERT_THROW(m_catalogue->modifyDiskInstanceSpaceQueryURL(m_admin, name, diskInstance, ""), catalogue::UserSpecifiedAnEmptyStringFreeSpaceQueryURL);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, modifyDiskInstanceSpaceQueryURL_nonExistingSpace) {
+  using namespace cta;
+
+  const std::string name = "disk_instance_space_name";
+  const std::string diskInstance = "disk_instance_name";
+  const std::string freeSpaceQueryURL = "free_space_query_URL";
+  ASSERT_THROW(m_catalogue->modifyDiskInstanceSpaceQueryURL(m_admin, name, diskInstance, freeSpaceQueryURL), catalogue::UserSpecifiedANonExistentDiskInstanceSpace);
+}
+
+
+TEST_P(cta_catalogue_CatalogueTest, modifyDiskInstanceSpaceRefreshInterval) {
+  using namespace cta;
+
+  const std::string diskInstance = "disk_instance_name";
+  const std::string diskInstanceComment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, diskInstance, diskInstanceComment);
+
+  const std::string name = "disk_instance_space_name";
+  const std::string freeSpaceQueryURL = "free_space_query_URL";
+  const uint64_t refreshInterval = 32;
+  const std::string comment = "disk_instance_space_comment";
+
+  m_catalogue->createDiskInstanceSpace(m_admin, name, diskInstance, freeSpaceQueryURL, refreshInterval, comment);
+
+  {
+    const auto diskInstanceSpaceList = m_catalogue->getAllDiskInstanceSpaces();
+    ASSERT_EQ(1, diskInstanceSpaceList.size());
+
+    const auto &diskInstanceSpace = diskInstanceSpaceList.front();
+    ASSERT_EQ(diskInstanceSpace.name, name);
+    ASSERT_EQ(diskInstanceSpace.diskInstance, diskInstance);
+    ASSERT_EQ(diskInstanceSpace.freeSpaceQueryURL, freeSpaceQueryURL);
+    ASSERT_EQ(diskInstanceSpace.refreshInterval, refreshInterval);
+    ASSERT_EQ(diskInstanceSpace.lastRefreshTime, 0);
+    ASSERT_EQ(diskInstanceSpace.freeSpace, 0);
+    
+    ASSERT_EQ(diskInstanceSpace.comment, comment);
+    
+    const auto creationLog = diskInstanceSpace.creationLog;
+    ASSERT_EQ(m_admin.username, creationLog.username);
+    ASSERT_EQ(m_admin.host, creationLog.host);
+
+    const auto lastModificationLog = diskInstanceSpace.lastModificationLog;
+    ASSERT_EQ(creationLog, lastModificationLog);
+
+  }
+
+  const uint64_t newRefreshInterval = 35;
+  m_catalogue->modifyDiskInstanceSpaceRefreshInterval(m_admin, name, diskInstance, newRefreshInterval);
+
+  {
+    const auto diskInstanceSpaceList = m_catalogue->getAllDiskInstanceSpaces();
+    ASSERT_EQ(1, diskInstanceSpaceList.size());
+
+    const auto &diskInstanceSpace = diskInstanceSpaceList.front();
+    ASSERT_EQ(diskInstanceSpace.name, name);
+    ASSERT_EQ(diskInstanceSpace.diskInstance, diskInstance);
+    ASSERT_EQ(diskInstanceSpace.freeSpaceQueryURL, freeSpaceQueryURL);
+    ASSERT_EQ(diskInstanceSpace.refreshInterval, newRefreshInterval);
+    ASSERT_EQ(diskInstanceSpace.lastRefreshTime, 0);
+    ASSERT_EQ(diskInstanceSpace.freeSpace, 0);
+    
+    ASSERT_EQ(diskInstanceSpace.comment, comment);
+    
+    const auto creationLog = diskInstanceSpace.creationLog;
+    ASSERT_EQ(m_admin.username, creationLog.username);
+    ASSERT_EQ(m_admin.host, creationLog.host);
+  }
+}
+
+TEST_P(cta_catalogue_CatalogueTest, modifyDiskInstanceSpaceRefreshInterval_zeroInterval) {
+  using namespace cta;
+
+  const std::string diskInstance = "disk_instance_name";
+  const std::string diskInstanceComment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, diskInstance, diskInstanceComment);
+
+  const std::string name = "disk_instance_space_name";
+  const std::string freeSpaceQueryURL = "free_space_query_URL";
+  const uint64_t refreshInterval = 32;
+  const std::string comment = "disk_instance_space_comment";
+
+  m_catalogue->createDiskInstanceSpace(m_admin, name, diskInstance, freeSpaceQueryURL, refreshInterval, comment);
+
+  {
+    const auto diskInstanceSpaceList = m_catalogue->getAllDiskInstanceSpaces();
+    ASSERT_EQ(1, diskInstanceSpaceList.size());
+
+    const auto &diskInstanceSpace = diskInstanceSpaceList.front();
+    ASSERT_EQ(diskInstanceSpace.name, name);
+    ASSERT_EQ(diskInstanceSpace.diskInstance, diskInstance);
+    ASSERT_EQ(diskInstanceSpace.freeSpaceQueryURL, freeSpaceQueryURL);
+    ASSERT_EQ(diskInstanceSpace.refreshInterval, refreshInterval);
+    ASSERT_EQ(diskInstanceSpace.lastRefreshTime, 0);
+    ASSERT_EQ(diskInstanceSpace.freeSpace, 0);
+    
+    ASSERT_EQ(diskInstanceSpace.comment, comment);
+    
+    const auto creationLog = diskInstanceSpace.creationLog;
+    ASSERT_EQ(m_admin.username, creationLog.username);
+    ASSERT_EQ(m_admin.host, creationLog.host);
+
+    const auto lastModificationLog = diskInstanceSpace.lastModificationLog;
+    ASSERT_EQ(creationLog, lastModificationLog);
+
+  }
+  ASSERT_THROW(m_catalogue->modifyDiskInstanceSpaceRefreshInterval(m_admin, name, diskInstance, 0), catalogue::UserSpecifiedAZeroRefreshInterval);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, modifyDiskInstanceSpaceRefreshInterval_nonExistingSpace) {
+  using namespace cta;
+
+  const std::string name = "disk_instance_space_name";
+  const std::string diskInstance = "disk_instance_name";
+  const uint64_t refreshInterval = 32;
+  ASSERT_THROW(m_catalogue->modifyDiskInstanceSpaceRefreshInterval(m_admin, name, diskInstance, refreshInterval), catalogue::UserSpecifiedANonExistentDiskInstanceSpace);
+}
+
+TEST_P(cta_catalogue_CatalogueTest, deleteDiskInstanceSpace) {
+  using namespace cta;
+
+  const std::string diskInstance = "disk_instance_name";
+  const std::string diskInstanceComment = "disk_instance_comment";
+
+  m_catalogue->createDiskInstance(m_admin, diskInstance, diskInstanceComment);
+
+  const std::string name = "disk_instance_space_name";
+  const std::string freeSpaceQueryURL = "free_space_query_URL";
+  const uint64_t refreshInterval = 32;
+  const std::string comment = "disk_instance_space_comment";
+
+  m_catalogue->createDiskInstanceSpace(m_admin, name, diskInstance, freeSpaceQueryURL, refreshInterval, comment);
+  {
+    const auto diskInstanceSpaceList = m_catalogue->getAllDiskInstanceSpaces();
+    ASSERT_EQ(1, diskInstanceSpaceList.size());
+
+    const auto &diskInstanceSpace = diskInstanceSpaceList.front();
+    ASSERT_EQ(diskInstanceSpace.name, name);
+    ASSERT_EQ(diskInstanceSpace.diskInstance, diskInstance);
+    ASSERT_EQ(diskInstanceSpace.freeSpaceQueryURL, freeSpaceQueryURL);
+    ASSERT_EQ(diskInstanceSpace.refreshInterval, refreshInterval);
+    ASSERT_EQ(diskInstanceSpace.lastRefreshTime, 0);
+    ASSERT_EQ(diskInstanceSpace.freeSpace, 0);
+    
+    ASSERT_EQ(diskInstanceSpace.comment, comment);
+    
+    const auto creationLog = diskInstanceSpace.creationLog;
+    ASSERT_EQ(m_admin.username, creationLog.username);
+    ASSERT_EQ(m_admin.host, creationLog.host);
+
+    const auto lastModificationLog = diskInstanceSpace.lastModificationLog;
+    ASSERT_EQ(creationLog, lastModificationLog);
+  }
+  m_catalogue->deleteDiskInstanceSpace(name, diskInstance);
+  const auto diskInstanceSpaceList = m_catalogue->getAllDiskInstanceSpaces();
+  ASSERT_EQ(0, diskInstanceSpaceList.size());
+}
+
+TEST_P(cta_catalogue_CatalogueTest, deleteDiskInstanceSpace_notExisting) {
+  using namespace cta;
+
+  const std::string diskInstance = "disk_instance_name";
+  const std::string name = "disk_instance_space_name";
+  
+  ASSERT_THROW(m_catalogue->deleteDiskInstanceSpace(name, diskInstance), catalogue::UserSpecifiedANonExistentDiskInstanceSpace); 
+}
+
 TEST_P(cta_catalogue_CatalogueTest, getNbFilesOnTape_no_tape_files) {
   using namespace cta;
 
diff --git a/catalogue/DummyCatalogue.hpp b/catalogue/DummyCatalogue.hpp
index b752db52981924002de960097f99ee27af950c85..0a4f2ab0ae0c282fdb479bd26d994bb5aaad5a88 100644
--- a/catalogue/DummyCatalogue.hpp
+++ b/catalogue/DummyCatalogue.hpp
@@ -78,6 +78,16 @@ public:
   void modifyDiskSystemTargetedFreeSpace(const common::dataStructures::SecurityIdentity &admin, const std::string &name, const uint64_t targetedFreeSpace) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented");}
   void modifyDiskSystemSleepTime(const common::dataStructures::SecurityIdentity& admin, const std::string& name, const uint64_t sleepTime) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented");}
   void modifyDiskSystemComment(const common::dataStructures::SecurityIdentity &admin, const std::string &name, const std::string &comment) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented");}
+  void createDiskInstance(const common::dataStructures::SecurityIdentity &admin, const std::string &name, const std::string &comment) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented");}
+  std::list<common::dataStructures::DiskInstance> getAllDiskInstances() const override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented");}
+  void deleteDiskInstance(const std::string &name) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
+  void modifyDiskInstanceComment(const common::dataStructures::SecurityIdentity &admin, const std::string &name, const std::string &comment) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented");}  
+  void createDiskInstanceSpace(const common::dataStructures::SecurityIdentity &admin, const std::string &name, const std::string &diskInstance, const std::string &freeSpaceQueryURL, const uint64_t refreshInterval, const std::string &comment) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented");}
+  std::list<common::dataStructures::DiskInstanceSpace> getAllDiskInstanceSpaces() const override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented");}
+  void deleteDiskInstanceSpace(const std::string &name, const std::string &diskInstance) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented");}
+  void modifyDiskInstanceSpaceComment(const common::dataStructures::SecurityIdentity &admin, const std::string &name, const std::string &diskInstance, const std::string &comment) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented");}
+  void modifyDiskInstanceSpaceRefreshInterval(const common::dataStructures::SecurityIdentity &admin, const std::string &name, const std::string &diskInstance, const uint64_t refreshInterval) override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented");}
+  void modifyDiskInstanceSpaceQueryURL(const common::dataStructures::SecurityIdentity &admin, const std::string &name, const std::string &diskInstance, const std::string &freeSpaceQueryURL) override {  throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented");}
   std::list<common::dataStructures::AdminUser> getAdminUsers() const override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
   common::dataStructures::ArchiveFile getArchiveFileById(const uint64_t id) const override { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
   ArchiveFileItor getArchiveFilesItor(const TapeFileSearchCriteria& searchCriteria) const { throw exception::Exception(std::string("In ")+__PRETTY_FUNCTION__+": not implemented"); }
diff --git a/catalogue/RdbmsCatalogue.cpp b/catalogue/RdbmsCatalogue.cpp
index adfda2ac35ff141d819134279f8e9f24b9be53d9..657b057a3c4e027cb12f4df4d9c627f38b16d408 100644
--- a/catalogue/RdbmsCatalogue.cpp
+++ b/catalogue/RdbmsCatalogue.cpp
@@ -3781,6 +3781,59 @@ bool RdbmsCatalogue::diskSystemExists(rdbms::Conn &conn, const std::string &name
   }
 }
 
+//------------------------------------------------------------------------------
+// diskInstanceExists
+//------------------------------------------------------------------------------
+bool RdbmsCatalogue::diskInstanceExists(rdbms::Conn &conn, const std::string &name) const {
+  try {
+    const char *const sql =
+      "SELECT "
+        "DISK_INSTANCE_NAME AS DISK_INSTANCE_NAME "
+      "FROM "
+        "DISK_INSTANCE "
+      "WHERE "
+        "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME";
+    auto stmt = conn.createStmt(sql);
+    stmt.bindString(":DISK_INSTANCE_NAME", name);
+    auto rset = stmt.executeQuery();
+    return rset.next();
+  } catch(exception::UserError &) {
+    throw;
+  } catch(exception::Exception &ex) {
+    ex.getMessage().str(std::string(__FUNCTION__) + ": " + ex.getMessage().str());
+    throw;
+  }
+}
+
+//------------------------------------------------------------------------------
+// diskInstanceSpaceExists
+//------------------------------------------------------------------------------
+bool RdbmsCatalogue::diskInstanceSpaceExists(rdbms::Conn &conn, const std::string &name, const std::string &diskInstance) const {
+  try {
+    const char *const sql =
+      "SELECT "
+        "DISK_INSTANCE_SPACE_NAME AS DISK_INSTANCE_SPACE_NAME "
+      "FROM "
+        "DISK_INSTANCE_SPACE "
+      "WHERE "
+        "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME "
+      " AND "  
+        "DISK_INSTANCE_SPACE_NAME = :DISK_INSTANCE_SPACE_NAME";
+    auto stmt = conn.createStmt(sql);
+    stmt.bindString(":DISK_INSTANCE_NAME", diskInstance);
+    stmt.bindString(":DISK_INSTANCE_SPACE_NAME", name);
+    auto rset = stmt.executeQuery();
+    return rset.next();
+  } catch(exception::UserError &) {
+    throw;
+  } catch(exception::Exception &ex) {
+    ex.getMessage().str(std::string(__FUNCTION__) + ": " + ex.getMessage().str());
+    throw;
+  }
+}
+
+
+
 //------------------------------------------------------------------------------
 // deleteTape
 //------------------------------------------------------------------------------
@@ -7078,6 +7131,517 @@ void RdbmsCatalogue::modifyDiskSystemSleepTime(const common::dataStructures::Sec
   }
 }
 
+//------------------------------------------------------------------------------
+// createDiskInstance
+//------------------------------------------------------------------------------
+void RdbmsCatalogue::createDiskInstance(
+  const common::dataStructures::SecurityIdentity &admin,
+  const std::string &name,
+  const std::string &comment) {
+ try {
+    if(name.empty()) {
+      throw UserSpecifiedAnEmptyStringDiskInstanceName("Cannot create disk system because the name is an empty string");
+    }
+    if(comment.empty()) {
+      throw UserSpecifiedAnEmptyStringComment("Cannot create disk system because the comment is an empty string");
+    }
+
+    auto conn = m_connPool.getConn();
+    if(diskInstanceExists(conn, name)) {
+      throw exception::UserError(std::string("Cannot create disk instance ") + name +
+        " because a disk instance with the same name identifier already exists");
+    }
+
+    const time_t now = time(nullptr);
+    const char *const sql =
+      "INSERT INTO DISK_INSTANCE("
+        "DISK_INSTANCE_NAME,"
+        
+        "USER_COMMENT,"
+
+        "CREATION_LOG_USER_NAME,"
+        "CREATION_LOG_HOST_NAME,"
+        "CREATION_LOG_TIME,"
+
+        "LAST_UPDATE_USER_NAME,"
+        "LAST_UPDATE_HOST_NAME,"
+        "LAST_UPDATE_TIME)"
+      "VALUES("
+        ":DISK_INSTANCE_NAME,"
+
+        ":USER_COMMENT,"
+
+        ":CREATION_LOG_USER_NAME,"
+        ":CREATION_LOG_HOST_NAME,"
+        ":CREATION_LOG_TIME,"
+
+        ":LAST_UPDATE_USER_NAME,"
+        ":LAST_UPDATE_HOST_NAME,"
+        ":LAST_UPDATE_TIME)";
+    auto stmt = conn.createStmt(sql);
+
+   stmt.bindString(":DISK_INSTANCE_NAME", name);
+
+   stmt.bindString(":USER_COMMENT", comment);
+
+   stmt.bindString(":CREATION_LOG_USER_NAME", admin.username);
+   stmt.bindString(":CREATION_LOG_HOST_NAME", admin.host);
+   stmt.bindUint64(":CREATION_LOG_TIME", now);
+
+   stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username);
+   stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host);
+   stmt.bindUint64(":LAST_UPDATE_TIME", now);
+
+    stmt.executeNonQuery();
+  } catch(exception::UserError &) {
+    throw;
+  } catch(exception::Exception &ex) {
+    ex.getMessage().str(std::string(__FUNCTION__) + ": " + ex.getMessage().str());
+    throw;
+  }
+}
+
+//------------------------------------------------------------------------------
+// getAllDiskInstances
+//------------------------------------------------------------------------------
+std::list<common::dataStructures::DiskInstance> RdbmsCatalogue::getAllDiskInstances() const {
+  try {
+    std::list<common::dataStructures::DiskInstance> diskInstanceList;
+    std::string sql =
+      "SELECT "
+        "DISK_INSTANCE.DISK_INSTANCE_NAME AS DISK_INSTANCE_NAME,"
+        
+        "DISK_INSTANCE.USER_COMMENT AS USER_COMMENT,"
+
+        "DISK_INSTANCE.CREATION_LOG_USER_NAME AS CREATION_LOG_USER_NAME,"
+        "DISK_INSTANCE.CREATION_LOG_HOST_NAME AS CREATION_LOG_HOST_NAME,"
+        "DISK_INSTANCE.CREATION_LOG_TIME AS CREATION_LOG_TIME,"
+
+        "DISK_INSTANCE.LAST_UPDATE_USER_NAME AS LAST_UPDATE_USER_NAME,"
+        "DISK_INSTANCE.LAST_UPDATE_HOST_NAME AS LAST_UPDATE_HOST_NAME,"
+        "DISK_INSTANCE.LAST_UPDATE_TIME AS LAST_UPDATE_TIME "
+      "FROM "
+        "DISK_INSTANCE";
+
+    auto conn = m_connPool.getConn();
+    auto stmt = conn.createStmt(sql);
+
+    auto rset = stmt.executeQuery();
+    while (rset.next()) {
+      common::dataStructures::DiskInstance diskInstance;
+      diskInstance.name = rset.columnString("DISK_INSTANCE_NAME");
+      diskInstance.comment = rset.columnString("USER_COMMENT");
+      diskInstance.creationLog.username = rset.columnString("CREATION_LOG_USER_NAME");
+      diskInstance.creationLog.host = rset.columnString("CREATION_LOG_HOST_NAME");
+      diskInstance.creationLog.time = rset.columnUint64("CREATION_LOG_TIME");
+      diskInstance.lastModificationLog.username = rset.columnString("LAST_UPDATE_USER_NAME");
+      diskInstance.lastModificationLog.host = rset.columnString("LAST_UPDATE_HOST_NAME");
+      diskInstance.lastModificationLog.time = rset.columnUint64("LAST_UPDATE_TIME");
+      diskInstanceList.push_back(diskInstance);
+    }
+    return diskInstanceList;
+  } catch(exception::UserError &) {
+    throw;
+  } catch(exception::Exception &ex) {
+    ex.getMessage().str(std::string(__FUNCTION__) + ": " + ex.getMessage().str());
+    throw;
+  }
+}
+
+//------------------------------------------------------------------------------
+// deleteDiskInstance
+//------------------------------------------------------------------------------
+void RdbmsCatalogue::deleteDiskInstance(const std::string &name) {
+    try {
+    const char *const delete_sql =
+      "DELETE "
+      "FROM "
+        "DISK_INSTANCE "
+      "WHERE "
+        "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME";
+    auto conn = m_connPool.getConn();
+    auto stmt = conn.createStmt(delete_sql);
+      stmt.bindString(":DISK_INSTANCE_NAME", name);
+    stmt.executeNonQuery();
+
+    // The delete statement will effect no rows and will not raise an error if
+    // either the tape does not exist or if it still has tape files
+    if(0 == stmt.getNbAffectedRows()) {
+      if(diskInstanceExists(conn, name)) {
+        throw UserSpecifiedANonEmptyDiskInstanceAfterDelete(std::string("Cannot delete disk instance ") + name + " for unknown reason");
+      } else {
+        throw UserSpecifiedANonExistentDiskInstance(std::string("Cannot delete disk instance ") + name + " because it does not exist");
+      }
+    }
+  } catch(exception::UserError &) {
+    throw;
+  } catch(exception::Exception &ex) {
+    ex.getMessage().str(std::string(__FUNCTION__) + ": " + ex.getMessage().str());
+    throw;
+  }
+}
+
+//------------------------------------------------------------------------------
+// modifyDiskInstanceComment
+//------------------------------------------------------------------------------
+void RdbmsCatalogue::modifyDiskInstanceComment(const common::dataStructures::SecurityIdentity &admin,
+  const std::string &name, const std::string &comment) {
+  try {
+    if(name.empty()) {
+      throw UserSpecifiedAnEmptyStringDiskInstanceName("Cannot modify disk instance"
+        " because the disk instance name is an empty string");
+    }
+    if(comment.empty()) {
+      throw UserSpecifiedAnEmptyStringComment("Cannot modify disk instance "
+        "because the new comment is an empty string");
+    }
+
+    const time_t now = time(nullptr);
+    const char *const sql =
+      "UPDATE DISK_INSTANCE SET "
+        "USER_COMMENT = :USER_COMMENT,"
+        "LAST_UPDATE_USER_NAME = :LAST_UPDATE_USER_NAME,"
+        "LAST_UPDATE_HOST_NAME = :LAST_UPDATE_HOST_NAME,"
+        "LAST_UPDATE_TIME = :LAST_UPDATE_TIME "
+      "WHERE "
+        "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME";
+    auto conn = m_connPool.getConn();
+    auto stmt = conn.createStmt(sql);
+    stmt.bindString(":USER_COMMENT", comment);
+    stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username);
+    stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host);
+    stmt.bindUint64(":LAST_UPDATE_TIME", now);
+    stmt.bindString(":DISK_INSTANCE_NAME", name);
+    stmt.executeNonQuery();
+
+    if(0 == stmt.getNbAffectedRows()) {
+      throw UserSpecifiedANonExistentDiskInstance(std::string("Cannot modify disk instance ") + name + " because it does not exist");
+    }
+  } catch(exception::UserError &) {
+    throw;
+  } catch(exception::Exception &ex) {
+    ex.getMessage().str(std::string(__FUNCTION__) + ": " + ex.getMessage().str());
+    throw;
+  }
+}
+//------------------------------------------------------------------------------
+// createDiskInstanceSpace
+//------------------------------------------------------------------------------
+ void RdbmsCatalogue::createDiskInstanceSpace(const common::dataStructures::SecurityIdentity &admin, 
+      const std::string &name, const std::string &diskInstance, const std::string &freeSpaceQueryURL,
+      const uint64_t refreshInterval, const std::string &comment) {
+
+ try {
+    if(name.empty()) {
+      throw UserSpecifiedAnEmptyStringDiskInstanceSpaceName("Cannot create disk instance space because the name is an empty string");
+    }
+    if(freeSpaceQueryURL.empty()) {
+      throw UserSpecifiedAnEmptyStringFreeSpaceQueryURL("Cannot create disk instance space because the free space query URL is an empty string");
+    }
+    if(0 == refreshInterval) {
+      throw UserSpecifiedAZeroRefreshInterval("Cannot create disk instance space because the refresh interval is zero");
+    }
+    if(comment.empty()) {
+      throw UserSpecifiedAnEmptyStringComment("Cannot create disk instance space because the comment is an empty string");
+    }
+
+    auto conn = m_connPool.getConn();
+    if(!diskInstanceExists(conn, diskInstance)) {
+      throw exception::UserError(std::string("Cannot create disk instance space ") + name +
+        " for disk instance " + diskInstance +
+        " because the disk instance does not exist");
+    }
+
+    if (diskInstanceSpaceExists(conn, name, diskInstance)) {
+      throw exception::UserError(std::string("Cannot create disk instance space ") + name +
+        " for disk instance " + diskInstance +
+        " because a disk instance space with the same name and disk instance already exists");
+    }
+
+    const time_t now = time(nullptr);
+    const char *const sql =
+      "INSERT INTO DISK_INSTANCE_SPACE("
+        "DISK_INSTANCE_NAME,"
+        "DISK_INSTANCE_SPACE_NAME,"
+        "FREE_SPACE_QUERY_URL,"
+        "REFRESH_INTERVAL,"
+        "LAST_REFRESH_TIME,"
+        "FREE_SPACE,"
+
+        "USER_COMMENT,"
+
+        "CREATION_LOG_USER_NAME,"
+        "CREATION_LOG_HOST_NAME,"
+        "CREATION_LOG_TIME,"
+
+        "LAST_UPDATE_USER_NAME,"
+        "LAST_UPDATE_HOST_NAME,"
+        "LAST_UPDATE_TIME)"
+      "VALUES("
+        ":DISK_INSTANCE_NAME,"
+        ":DISK_INSTANCE_SPACE_NAME,"
+        ":FREE_SPACE_QUERY_URL,"
+        ":REFRESH_INTERVAL,"
+        ":LAST_REFRESH_TIME,"
+        ":FREE_SPACE,"
+
+        ":USER_COMMENT,"
+
+        ":CREATION_LOG_USER_NAME,"
+        ":CREATION_LOG_HOST_NAME,"
+        ":CREATION_LOG_TIME,"
+
+        ":LAST_UPDATE_USER_NAME,"
+        ":LAST_UPDATE_HOST_NAME,"
+        ":LAST_UPDATE_TIME)";
+    auto stmt = conn.createStmt(sql);
+
+   stmt.bindString(":DISK_INSTANCE_NAME", diskInstance);
+   stmt.bindString(":DISK_INSTANCE_SPACE_NAME", name);
+   stmt.bindString(":FREE_SPACE_QUERY_URL", freeSpaceQueryURL);
+   stmt.bindUint64(":REFRESH_INTERVAL", refreshInterval);
+   stmt.bindUint64(":LAST_REFRESH_TIME", 0);
+   stmt.bindUint64(":FREE_SPACE", 0);
+
+   stmt.bindString(":USER_COMMENT", comment);
+
+   stmt.bindString(":CREATION_LOG_USER_NAME", admin.username);
+   stmt.bindString(":CREATION_LOG_HOST_NAME", admin.host);
+   stmt.bindUint64(":CREATION_LOG_TIME", now);
+
+   stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username);
+   stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host);
+   stmt.bindUint64(":LAST_UPDATE_TIME", now);
+
+    stmt.executeNonQuery();
+  } catch(exception::UserError &) {
+    throw;
+  } catch(exception::Exception &ex) {
+    ex.getMessage().str(std::string(__FUNCTION__) + ": " + ex.getMessage().str());
+    throw;
+  }
+}
+
+//------------------------------------------------------------------------------
+// getAllDiskInstanceSpaces
+//------------------------------------------------------------------------------
+std::list<common::dataStructures::DiskInstanceSpace> RdbmsCatalogue::getAllDiskInstanceSpaces() const {
+  try {
+    std::list<common::dataStructures::DiskInstanceSpace> diskInstanceSpaceList;
+    std::string sql =
+      "SELECT "
+        "DISK_INSTANCE_SPACE.DISK_INSTANCE_NAME AS DISK_INSTANCE_NAME,"
+        "DISK_INSTANCE_SPACE.DISK_INSTANCE_SPACE_NAME AS DISK_INSTANCE_SPACE_NAME,"
+        "DISK_INSTANCE_SPACE.FREE_SPACE_QUERY_URL AS FREE_SPACE_QUERY_URL,"
+        "DISK_INSTANCE_SPACE.REFRESH_INTERVAL AS REFRESH_INTERVAL,"
+        "DISK_INSTANCE_SPACE.LAST_REFRESH_TIME AS LAST_REFRESH_TIME,"
+        "DISK_INSTANCE_SPACE.FREE_SPACE AS FREE_SPACE,"
+
+        "DISK_INSTANCE_SPACE.USER_COMMENT AS USER_COMMENT,"
+
+        "DISK_INSTANCE_SPACE.CREATION_LOG_USER_NAME AS CREATION_LOG_USER_NAME,"
+        "DISK_INSTANCE_SPACE.CREATION_LOG_HOST_NAME AS CREATION_LOG_HOST_NAME,"
+        "DISK_INSTANCE_SPACE.CREATION_LOG_TIME AS CREATION_LOG_TIME,"
+
+        "DISK_INSTANCE_SPACE.LAST_UPDATE_USER_NAME AS LAST_UPDATE_USER_NAME,"
+        "DISK_INSTANCE_SPACE.LAST_UPDATE_HOST_NAME AS LAST_UPDATE_HOST_NAME,"
+        "DISK_INSTANCE_SPACE.LAST_UPDATE_TIME AS LAST_UPDATE_TIME "
+      "FROM "
+        "DISK_INSTANCE_SPACE";
+
+    auto conn = m_connPool.getConn();
+    auto stmt = conn.createStmt(sql);
+
+    auto rset = stmt.executeQuery();
+    while (rset.next()) {
+      common::dataStructures::DiskInstanceSpace diskInstanceSpace;
+      diskInstanceSpace.name = rset.columnString("DISK_INSTANCE_SPACE_NAME");
+      diskInstanceSpace.diskInstance = rset.columnString("DISK_INSTANCE_NAME");
+      diskInstanceSpace.freeSpaceQueryURL = rset.columnString("FREE_SPACE_QUERY_URL");
+      diskInstanceSpace.refreshInterval =  rset.columnUint64("REFRESH_INTERVAL");
+      diskInstanceSpace.freeSpace =  rset.columnUint64("FREE_SPACE");
+      diskInstanceSpace.lastRefreshTime =  rset.columnUint64("LAST_REFRESH_TIME");
+      diskInstanceSpace.comment = rset.columnString("USER_COMMENT");
+      diskInstanceSpace.creationLog.username = rset.columnString("CREATION_LOG_USER_NAME");
+      diskInstanceSpace.creationLog.host = rset.columnString("CREATION_LOG_HOST_NAME");
+      diskInstanceSpace.creationLog.time = rset.columnUint64("CREATION_LOG_TIME");
+      diskInstanceSpace.lastModificationLog.username = rset.columnString("LAST_UPDATE_USER_NAME");
+      diskInstanceSpace.lastModificationLog.host = rset.columnString("LAST_UPDATE_HOST_NAME");
+      diskInstanceSpace.lastModificationLog.time = rset.columnUint64("LAST_UPDATE_TIME");
+      diskInstanceSpaceList.push_back(diskInstanceSpace);
+    }
+    return diskInstanceSpaceList;
+  } catch(exception::UserError &) {
+    throw;
+  } catch(exception::Exception &ex) {
+    ex.getMessage().str(std::string(__FUNCTION__) + ": " + ex.getMessage().str());
+    throw;
+  }
+}
+
+//------------------------------------------------------------------------------
+// deleteDiskInstanceSpace
+//------------------------------------------------------------------------------
+void RdbmsCatalogue::deleteDiskInstanceSpace(const std::string &name, const std::string &diskInstance) {
+    try {
+    const char *const delete_sql =
+      "DELETE "
+      "FROM "
+        "DISK_INSTANCE_SPACE "
+      "WHERE "
+        "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME "
+      "AND "
+        "DISK_INSTANCE_SPACE_NAME = :DISK_INSTANCE_SPACE_NAME";
+    auto conn = m_connPool.getConn();
+    auto stmt = conn.createStmt(delete_sql);
+    stmt.bindString(":DISK_INSTANCE_NAME", diskInstance);
+    stmt.bindString(":DISK_INSTANCE_SPACE_NAME", name);
+    stmt.executeNonQuery();
+
+    // The delete statement will effect no rows and will not raise an error if
+    // either the tape does not exist or if it still has tape files
+    if(0 == stmt.getNbAffectedRows()) {
+      if(diskInstanceSpaceExists(conn, name, diskInstance)) {
+        throw UserSpecifiedANonEmptyDiskInstanceSpaceAfterDelete(std::string("Cannot delete disk instance space") + name + " for unknown reason");
+      } else {
+        throw UserSpecifiedANonExistentDiskInstanceSpace(std::string("Cannot delete disk instance space ") + name + " because it does not exist");
+      }
+    }
+  } catch(exception::UserError &) {
+    throw;
+  } catch(exception::Exception &ex) {
+    ex.getMessage().str(std::string(__FUNCTION__) + ": " + ex.getMessage().str());
+    throw;
+  }
+}
+
+//------------------------------------------------------------------------------
+// modifyDiskInstanceSpaceQueryURL
+//------------------------------------------------------------------------------
+void RdbmsCatalogue::modifyDiskInstanceSpaceQueryURL(const common::dataStructures::SecurityIdentity &admin,
+    const std::string &name, const std::string &diskInstance, const std::string &freeSpaceQueryURL) {
+  try {
+    if(freeSpaceQueryURL.empty()) {
+      throw UserSpecifiedAnEmptyStringFreeSpaceQueryURL("Cannot modify disk instance space "
+        "because the new freeSpaceQueryURL is an empty string");
+    }
+
+    const time_t now = time(nullptr);
+    const char *const sql =
+      "UPDATE DISK_INSTANCE_SPACE SET "
+        "FREE_SPACE_QUERY_URL = :FREE_SPACE_QUERY_URL,"
+        "LAST_UPDATE_USER_NAME = :LAST_UPDATE_USER_NAME,"
+        "LAST_UPDATE_HOST_NAME = :LAST_UPDATE_HOST_NAME,"
+        "LAST_UPDATE_TIME = :LAST_UPDATE_TIME "
+      "WHERE "
+        "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME "
+      "AND "
+        "DISK_INSTANCE_SPACE_NAME = :DISK_INSTANCE_SPACE_NAME";
+    auto conn = m_connPool.getConn();
+    auto stmt = conn.createStmt(sql);
+    stmt.bindString(":FREE_SPACE_QUERY_URL", freeSpaceQueryURL);
+    stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username);
+    stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host);
+    stmt.bindUint64(":LAST_UPDATE_TIME", now);
+    stmt.bindString(":DISK_INSTANCE_NAME", diskInstance);
+    stmt.bindString(":DISK_INSTANCE_SPACE_NAME", name);
+    stmt.executeNonQuery();
+
+    if(0 == stmt.getNbAffectedRows()) {
+      throw UserSpecifiedANonExistentDiskInstanceSpace(std::string("Cannot modify disk system ") + name + " because it does not exist");
+    }
+  } catch(exception::UserError &) {
+    throw;
+  } catch(exception::Exception &ex) {
+    ex.getMessage().str(std::string(__FUNCTION__) + ": " + ex.getMessage().str());
+    throw;
+  }
+}
+
+//------------------------------------------------------------------------------
+// modifyDiskInstanceSpaceComment
+//------------------------------------------------------------------------------
+void RdbmsCatalogue::modifyDiskInstanceSpaceComment(const common::dataStructures::SecurityIdentity &admin,
+    const std::string &name, const std::string &diskInstance, const std::string &comment) {
+  try {
+    if(comment.empty()) {
+      throw UserSpecifiedAnEmptyStringComment("Cannot modify disk instance space "
+        "because the new comment is an empty string");
+    }
+    const time_t now = time(nullptr);
+    const char *const sql =
+      "UPDATE DISK_INSTANCE_SPACE SET "
+        "USER_COMMENT = :USER_COMMENT,"
+        "LAST_UPDATE_USER_NAME = :LAST_UPDATE_USER_NAME,"
+        "LAST_UPDATE_HOST_NAME = :LAST_UPDATE_HOST_NAME,"
+        "LAST_UPDATE_TIME = :LAST_UPDATE_TIME "
+      "WHERE "
+        "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME "
+      "AND "
+        "DISK_INSTANCE_SPACE_NAME = :DISK_INSTANCE_SPACE_NAME";
+    auto conn = m_connPool.getConn();
+    auto stmt = conn.createStmt(sql);
+    stmt.bindString(":USER_COMMENT", comment);
+    stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username);
+    stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host);
+    stmt.bindUint64(":LAST_UPDATE_TIME", now);
+    stmt.bindString(":DISK_INSTANCE_NAME", diskInstance);
+    stmt.bindString(":DISK_INSTANCE_SPACE_NAME", name);
+    stmt.executeNonQuery();
+
+    if(0 == stmt.getNbAffectedRows()) {
+      throw UserSpecifiedANonExistentDiskInstanceSpace(std::string("Cannot modify disk system ") + name + " because it does not exist");
+    }
+  } catch(exception::UserError &) {
+    throw;
+  } catch(exception::Exception &ex) {
+    ex.getMessage().str(std::string(__FUNCTION__) + ": " + ex.getMessage().str());
+    throw;
+  }
+}
+
+//------------------------------------------------------------------------------
+// modifyDiskInstanceSpaceRefreshInterval
+//------------------------------------------------------------------------------
+void RdbmsCatalogue::modifyDiskInstanceSpaceRefreshInterval(const common::dataStructures::SecurityIdentity &admin,
+    const std::string &name, const std::string &diskInstance, const uint64_t refreshInterval) {
+  try {
+    if(0 == refreshInterval) {
+      throw UserSpecifiedAZeroRefreshInterval("Cannot modify disk instance space "
+        "because the new refreshInterval is zero");
+    }
+    const time_t now = time(nullptr);
+    const char *const sql =
+      "UPDATE DISK_INSTANCE_SPACE SET "
+        "REFRESH_INTERVAL = :REFRESH_INTERVAL,"
+        "LAST_UPDATE_USER_NAME = :LAST_UPDATE_USER_NAME,"
+        "LAST_UPDATE_HOST_NAME = :LAST_UPDATE_HOST_NAME,"
+        "LAST_UPDATE_TIME = :LAST_UPDATE_TIME "
+      "WHERE "
+        "DISK_INSTANCE_NAME = :DISK_INSTANCE_NAME "
+      "AND "
+        "DISK_INSTANCE_SPACE_NAME = :DISK_INSTANCE_SPACE_NAME";
+    auto conn = m_connPool.getConn();
+    auto stmt = conn.createStmt(sql);
+    stmt.bindUint64(":REFRESH_INTERVAL", refreshInterval);
+    stmt.bindString(":LAST_UPDATE_USER_NAME", admin.username);
+    stmt.bindString(":LAST_UPDATE_HOST_NAME", admin.host);
+    stmt.bindUint64(":LAST_UPDATE_TIME", now);
+    stmt.bindString(":DISK_INSTANCE_NAME", diskInstance);
+    stmt.bindString(":DISK_INSTANCE_SPACE_NAME", name);
+    stmt.executeNonQuery();
+
+    if(0 == stmt.getNbAffectedRows()) {
+      throw UserSpecifiedANonExistentDiskInstanceSpace(std::string("Cannot modify disk system ") + name + " because it does not exist");
+    }
+  } catch(exception::UserError &) {
+    throw;
+  } catch(exception::Exception &ex) {
+    ex.getMessage().str(std::string(__FUNCTION__) + ": " + ex.getMessage().str());
+    throw;
+  }
+}
+
 //------------------------------------------------------------------------------
 // insertArchiveFile
 //------------------------------------------------------------------------------
diff --git a/catalogue/RdbmsCatalogue.hpp b/catalogue/RdbmsCatalogue.hpp
index b40e52802f171c0f5a723eb956316eea4e63253f..67ff90006394faab4172533c9b97e1fe4795f7f7 100644
--- a/catalogue/RdbmsCatalogue.hpp
+++ b/catalogue/RdbmsCatalogue.hpp
@@ -895,6 +895,77 @@ public:
   void modifyDiskSystemSleepTime(const common::dataStructures::SecurityIdentity& admin,
     const std::string& name, const uint64_t sleepTime) override;
 
+  /**
+   * Creates the specified Disk Instance
+   * @param admin The administrator.
+   * @param name the name of the new disk instance
+   * @param comment the comment of the new disk instance
+   */
+  void createDiskInstance(const common::dataStructures::SecurityIdentity &admin, 
+    const std::string &name,
+    const std::string &comment) override;
+
+  /**
+   * Returns all the disk instances within the CTA catalogue.
+   *
+   * @return The disk instances in the CTA catalogue.
+   */
+  std::list<common::dataStructures::DiskInstance> getAllDiskInstances() const override;
+
+  /**
+   * Deletes a disk instance.
+   *
+   * @param name The name of the disk instance.
+   */
+  void deleteDiskInstance(const std::string &name) override;
+
+  /**
+   * Changes the comment of the specified disk instance
+   * @param admin The administrator.
+   * @param name the name of the disk instance
+   * @param comment the new comment of the disk instance
+   */
+  void modifyDiskInstanceComment(const common::dataStructures::SecurityIdentity &admin,
+    const std::string &name, const std::string &comment) override;
+
+  /**
+   * Deletes a disk instance space.
+   *
+   * @param name The name of the disk instance.
+   * @param diskInstance The disk instance of the disk instance space.
+   */
+  void deleteDiskInstanceSpace(const std::string &name, const std::string &diskInstance) override;
+
+  /**
+   * Creates the specified Disk Instance Space
+   * @param admin The administrator.
+   * @param name the name of the new disk instance space
+   * @param diskInstance the disk instance associated to the disk instance space
+   * @param freeSpaceQueryURL the URL to query to obtain the disk instance space free space
+   * @param refreshInterval the period to query for disk instance space free space
+   * @param comment the comment of the new disk instance space
+   */
+  void createDiskInstanceSpace(const common::dataStructures::SecurityIdentity &admin, 
+    const std::string &name,
+    const std::string &diskInstance,
+    const std::string &freeSpaceQueryURL,
+    const uint64_t refreshInterval,
+    const std::string &comment) override;
+
+  /**
+   * Returns all the disk instance spaces within the CTA catalogue.
+   *
+   * @return The disk instance spaces in the CTA catalogue.
+   */
+  std::list<common::dataStructures::DiskInstanceSpace> getAllDiskInstanceSpaces() const override;
+
+  void modifyDiskInstanceSpaceComment(const common::dataStructures::SecurityIdentity &admin, 
+    const std::string &name, const std::string &diskInstance, const std::string &comment) override;
+  void modifyDiskInstanceSpaceRefreshInterval(const common::dataStructures::SecurityIdentity &admin, 
+    const std::string &name, const std::string &diskInstance, const uint64_t refreshInterval) override;
+  void modifyDiskInstanceSpaceQueryURL(const common::dataStructures::SecurityIdentity &admin, 
+    const std::string &name, const std::string &diskInstance, const std::string &freeSpaceQueryURL) override;
+
 
   /**
    * Throws a UserError exception if the specified searchCriteria is not valid
@@ -1266,6 +1337,26 @@ protected:
    */
   bool diskSystemExists(rdbms::Conn &conn, const std::string &name) const;
 
+  /**
+   * Returns true if the specified disk instance exists.
+   *
+   * @param conn The database connection.
+   * @param name The name identifier of the disk instance.
+   * @return True if the disk instance exists.
+   */
+  bool diskInstanceExists(rdbms::Conn &conn, const std::string &name) const;
+
+  /**
+   * Returns true if the specified disk instance space exists.
+   *
+   * @param conn The database connection.
+   * @param name The name identifier of the disk instance space.
+   * @param diskInstance the disk instance associated to the disk instance space
+   * @return True if the disk instance exists.
+   */
+  bool diskInstanceSpaceExists(rdbms::Conn &conn, const std::string &name, const std::string &diskInstance) const;
+
+
   /**
    * Returns the list of tapes that meet the specified search criteria.
    *
diff --git a/catalogue/common_catalogue_schema.sql b/catalogue/common_catalogue_schema.sql
index 075f42ef7e033fe7813e202f3c67c9557ea84eba..c05888d06dff3a8a5ea701bea1bee8637770ca8b 100644
--- a/catalogue/common_catalogue_schema.sql
+++ b/catalogue/common_catalogue_schema.sql
@@ -34,6 +34,37 @@ CREATE TABLE DISK_SYSTEM(
   LAST_UPDATE_TIME        UINT64TYPE      CONSTRAINT DISK_SYSTEM_LUT_NN  NOT NULL,
   CONSTRAINT NAME_PK PRIMARY KEY(DISK_SYSTEM_NAME)
 );
+
+CREATE TABLE DISK_INSTANCE(
+  DISK_INSTANCE_NAME      VARCHAR(100)  CONSTRAINT DISK_INSTANCE_DINM_NN NOT NULL,
+  USER_COMMENT            VARCHAR(1000)   CONSTRAINT DISK_INSTANCE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR(100)    CONSTRAINT DISK_INSTANCE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR(100)    CONSTRAINT DISK_INSTANCE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       UINT64TYPE      CONSTRAINT DISK_INSTANCE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR(100)    CONSTRAINT DISK_INSTANCE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR(100)    CONSTRAINT DISK_INSTANCE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        UINT64TYPE      CONSTRAINT DISK_INSTANCE_LUT_NN  NOT NULL,
+  CONSTRAINT DISK_INSTANCE_PK PRIMARY KEY(DISK_INSTANCE_NAME)
+);
+
+CREATE TABLE DISK_INSTANCE_SPACE(
+  DISK_INSTANCE_NAME        VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_DINM_NN NOT NULL,
+  DISK_INSTANCE_SPACE_NAME  VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_DISNM_NN NOT NULL,
+  FREE_SPACE_QUERY_URL      VARCHAR(1000)   CONSTRAINT DISK_INSTANCE_SPACE_FSQU_NN NOT NULL,
+  REFRESH_INTERVAL          UINT64TYPE      CONSTRAINT DISK_INSTANCE_SPACE_RI_NN   NOT NULL,
+  LAST_REFRESH_TIME         UINT64TYPE      CONSTRAINT DISK_INSTANCE_SPACE_LRT_NN   NOT NULL,
+  FREE_SPACE                UINT64TYPE      CONSTRAINT DISK_INSTANCE_SPACE_TFS_NN  NOT NULL,
+  USER_COMMENT              VARCHAR(1000)   CONSTRAINT DISK_INSTANCE_SPACE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME    VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME    VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME         UINT64TYPE      CONSTRAINT DISK_INSTANCE_SPACE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME     VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME     VARCHAR(100)    CONSTRAINT DISK_INSTANCE_SPACE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME          UINT64TYPE      CONSTRAINT DISK_INSTANCE_SPACE_LUT_NN  NOT NULL,
+  CONSTRAINT DISK_INSTANCE_SPACE_PK PRIMARY KEY(DISK_INSTANCE_NAME, DISK_INSTANCE_SPACE_NAME),
+  CONSTRAINT DISK_INSTANCE_SPACE_DIN_FK FOREIGN KEY(DISK_INSTANCE_NAME) REFERENCES DISK_INSTANCE(DISK_INSTANCE_NAME)
+);
+
 CREATE TABLE VIRTUAL_ORGANIZATION(
   VIRTUAL_ORGANIZATION_ID UINT64TYPE      CONSTRAINT VIRTUAL_ORGANIZATION_VOI_NN  NOT NULL,
   VIRTUAL_ORGANIZATION_NAME VARCHAR(100)  CONSTRAINT VIRTUAL_ORGANIZATION_VON_NN  NOT NULL,
diff --git a/catalogue/migrations/liquibase/oracle/4.4to4.5.sql b/catalogue/migrations/liquibase/oracle/4.4to4.5.sql
new file mode 100644
index 0000000000000000000000000000000000000000..482ec52920f899021f33b262ff4996b78fc7a997
--- /dev/null
+++ b/catalogue/migrations/liquibase/oracle/4.4to4.5.sql
@@ -0,0 +1,64 @@
+--liquibase formatted sql
+
+--changeset mvelosob:1 failOnError:true dbms:oracle
+--preconditions onFail:HALT onError:HALT
+--precondition-sql-check expectedResult:"4.4" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
+UPDATE CTA_CATALOGUE SET STATUS='UPGRADING';
+UPDATE CTA_CATALOGUE SET NEXT_SCHEMA_VERSION_MAJOR=4;
+UPDATE CTA_CATALOGUE SET NEXT_SCHEMA_VERSION_MINOR=5;
+--rollback UPDATE CTA_CATALOGUE SET NEXT_SCHEMA_VERSION_MAJOR=NULL;
+--rollback UPDATE CTA_CATALOGUE SET NEXT_SCHEMA_VERSION_MINOR=NULL;
+--rollback UPDATE CTA_CATALOGUE SET STATUS='PRODUCTION';
+
+--changeset mvelosob:2 failOnError:true dbms:oracle
+--preconditions onFail:HALT onError:HALT
+--precondition-sql-check expectedResult:"4.4" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
+CREATE TABLE DISK_INSTANCE(
+  DISK_INSTANCE_NAME      VARCHAR2(100)  CONSTRAINT DISK_INSTANCE_DINM_NN NOT NULL,
+  USER_COMMENT            VARCHAR2(1000)   CONSTRAINT DISK_INSTANCE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME  VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME  VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME       NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME   VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME   VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME        NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_LUT_NN  NOT NULL,
+  CONSTRAINT DISK_INSTANCE_PK PRIMARY KEY(DISK_INSTANCE_NAME)
+);
+--rollback DROP DISK_INSTANCE;
+
+--changeset mvelosob:3 failOnError:true dbms:oracle
+--preconditions onFail:HALT onError:HALT
+--precondition-sql-check expectedResult:"4.4" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
+CREATE TABLE DISK_INSTANCE_SPACE(
+  DISK_INSTANCE_NAME        VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_DINM_NN NOT NULL,
+  DISK_INSTANCE_SPACE_NAME  VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_DISNM_NN NOT NULL,
+  FREE_SPACE_QUERY_URL      VARCHAR2(1000)   CONSTRAINT DISK_INSTANCE_SPACE_FSQU_NN NOT NULL,
+  REFRESH_INTERVAL          NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_RI_NN   NOT NULL,
+  LAST_REFRESH_TIME         NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_LRT_NN   NOT NULL,
+  FREE_SPACE                NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_TFS_NN  NOT NULL,
+  USER_COMMENT              VARCHAR2(1000)   CONSTRAINT DISK_INSTANCE_SPACE_UC_NN   NOT NULL,
+  CREATION_LOG_USER_NAME    VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_CLUN_NN NOT NULL,
+  CREATION_LOG_HOST_NAME    VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_CLHN_NN NOT NULL,
+  CREATION_LOG_TIME         NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_CLT_NN  NOT NULL,
+  LAST_UPDATE_USER_NAME     VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_LUUN_NN NOT NULL,
+  LAST_UPDATE_HOST_NAME     VARCHAR2(100)    CONSTRAINT DISK_INSTANCE_SPACE_LUHN_NN NOT NULL,
+  LAST_UPDATE_TIME          NUMERIC(20, 0)      CONSTRAINT DISK_INSTANCE_SPACE_LUT_NN  NOT NULL,
+  CONSTRAINT DISK_INSTANCE_SPACE_PK PRIMARY KEY(DISK_INSTANCE_NAME, DISK_INSTANCE_SPACE_NAME),
+  CONSTRAINT DISK_INSTANCE_SPACE_DIN_FK FOREIGN KEY(DISK_INSTANCE_NAME) REFERENCES DISK_INSTANCE(DISK_INSTANCE_NAME)
+);
+--rollback DROP DISK_INSTANCE_SPACE;
+
+
+--changeset mvelosob:4 failOnError:true dbms:oracle
+--preconditions onFail:HALT onError:HALT
+--precondition-sql-check expectedResult:"4.4" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
+UPDATE CTA_CATALOGUE SET STATUS='PRODUCTION';
+UPDATE CTA_CATALOGUE SET SCHEMA_VERSION_MAJOR=4;
+UPDATE CTA_CATALOGUE SET SCHEMA_VERSION_MINOR=5;
+UPDATE CTA_CATALOGUE SET NEXT_SCHEMA_VERSION_MAJOR=NULL;
+UPDATE CTA_CATALOGUE SET NEXT_SCHEMA_VERSION_MINOR=NULL;
+--rollback UPDATE CTA_CATALOGUE SET STATUS='UPGRADING';
+--rollback UPDATE CTA_CATALOGUE SET SCHEMA_VERSION_MAJOR=4;
+--rollback UPDATE CTA_CATALOGUE SET SCHEMA_VERSION_MINOR=4;
+--rollback UPDATE CTA_CATALOGUE SET NEXT_SCHEMA_VERSION_MAJOR=4;
+--rollback UPDATE CTA_CATALOGUE SET NEXT_SCHEMA_VERSION_MINOR=5;
diff --git a/cmake/CTAVersions.cmake b/cmake/CTAVersions.cmake
index 00de9c87fc7597ee437bf16e27ea7c804268e927..649c04273467a5d68708bea62792ab10ee6789bc 100644
--- a/cmake/CTAVersions.cmake
+++ b/cmake/CTAVersions.cmake
@@ -19,7 +19,7 @@ set(XROOTD_SSI_PROTOBUF_INTERFACE_VERSION "v0.0")
 
 # Catalogue Schema Version
 set(CTA_CATALOGUE_SCHEMA_VERSION_MAJOR 4)
-set(CTA_CATALOGUE_SCHEMA_VERSION_MINOR 4)
+set(CTA_CATALOGUE_SCHEMA_VERSION_MINOR 5)
 
 # Shared object internal version (used in SONAME)
 set(CTA_SOVERSION 0)
diff --git a/cmdline/CtaAdminCmd.cpp b/cmdline/CtaAdminCmd.cpp
index 7d54d7480a0a0a17e564d6ba2c88daaa633f2671..9b976871e2dc387ca451ef50b1c07a1d2adac9ae 100644
--- a/cmdline/CtaAdminCmd.cpp
+++ b/cmdline/CtaAdminCmd.cpp
@@ -104,6 +104,8 @@ void IStreamBuffer<cta::xrd::Data>::DataCallback(cta::xrd::Data record) const
          case Data::kTflsItem:      std::cout << Log::DumpProtobuf(&record.tfls_item());    break;
          case Data::kTplsItem:      std::cout << Log::DumpProtobuf(&record.tpls_item());    break;
          case Data::kDslsItem:      std::cout << Log::DumpProtobuf(&record.dsls_item());    break;
+         case Data::kDilsItem:      std::cout << Log::DumpProtobuf(&record.dils_item());    break;
+         case Data::kDislsItem:     std::cout << Log::DumpProtobuf(&record.disls_item());   break;
          case Data::kVolsItem:      std::cout << Log::DumpProtobuf(&record.vols_item());    break;
          case Data::kVersionItem:   std::cout << Log::DumpProtobuf(&record.version_item()); break;
          case Data::kMtlsItem:      std::cout << Log::DumpProtobuf(&record.mtls_item());    break;
@@ -136,6 +138,8 @@ void IStreamBuffer<cta::xrd::Data>::DataCallback(cta::xrd::Data record) const
          case Data::kTflsItem:      formattedText.print(record.tfls_item());    break;
          case Data::kTplsItem:      formattedText.print(record.tpls_item());    break;
          case Data::kDslsItem:      formattedText.print(record.dsls_item());    break;
+         case Data::kDilsItem:      formattedText.print(record.dils_item());    break;
+         case Data::kDislsItem:     formattedText.print(record.disls_item());   break;
          case Data::kVolsItem:      formattedText.print(record.vols_item());    break;
          case Data::kVersionItem:   formattedText.print(record.version_item()); break;
          case Data::kMtlsItem:      formattedText.print(record.mtls_item());    break;
@@ -298,6 +302,8 @@ void CtaAdminCmd::send() const
             case HeaderType::TAPEFILE_LS:                  formattedText.printTapeFileLsHeader(); break;
             case HeaderType::TAPEPOOL_LS:                  formattedText.printTapePoolLsHeader(); break;
             case HeaderType::DISKSYSTEM_LS:                formattedText.printDiskSystemLsHeader(); break;
+            case HeaderType::DISKINSTANCE_LS:              formattedText.printDiskInstanceLsHeader(); break;
+            case HeaderType::DISKINSTANCESPACE_LS:         formattedText.printDiskInstanceSpaceLsHeader(); break;
             case HeaderType::VIRTUALORGANIZATION_LS:       formattedText.printVirtualOrganizationLsHeader(); break;
             case HeaderType::VERSION_CMD:                  formattedText.printVersionHeader(); break;
             case HeaderType::MEDIATYPE_LS:                 formattedText.printMediaTypeLsHeader(); break;
diff --git a/cmdline/CtaAdminCmdParse.hpp b/cmdline/CtaAdminCmdParse.hpp
index aee76b660db3ce2da2367cd18515704834742685..2a182c8b3b6771c05a3d24013ee1f1ef706586fd 100644
--- a/cmdline/CtaAdminCmdParse.hpp
+++ b/cmdline/CtaAdminCmdParse.hpp
@@ -234,6 +234,11 @@ const cmdLookup_t cmdLookup = {
    { "rtf",                     AdminCmd::CMD_RECYCLETAPEFILE},
    { "activitymountrule",       AdminCmd::CMD_ACTIVITYMOUNTRULE },
    { "amr",                     AdminCmd::CMD_ACTIVITYMOUNTRULE },
+   { "diskinstance",            AdminCmd::CMD_DISKINSTANCE },
+   { "di",                      AdminCmd::CMD_DISKINSTANCE }, 
+   { "diskinstancespace",       AdminCmd::CMD_DISKINSTANCESPACE },
+   { "dis",                     AdminCmd::CMD_DISKINSTANCESPACE }, 
+   
 };
 
 
@@ -338,6 +343,8 @@ const std::map<std::string, OptionString::Key> strOptions = {
    { "--reason",                OptionString::REASON },
    { "--state",                 OptionString::STATE },
    {  "--activityregex",        OptionString::ACTIVITY_REGEX},
+   { "--diskinstance",          OptionString::DISK_INSTANCE },
+   { "--diskinstancespace",     OptionString::DISK_INSTANCE_SPACE },
 };
 
 
@@ -418,6 +425,24 @@ const std::map<AdminCmd::Cmd, CmdHelp> cmdHelp = {
 			    "   If the targeted free space is reach, the queue will sleep during this amount of seconds."
 			    "\n\n"
 					 }},
+   { AdminCmd::CMD_DISKINSTANCE,           { "diskinstance",           "di",  { "add", "ch", "rm", "ls" },
+			  "\n  This command allows to manage disk instances.\n"
+			    "  A disksinstace is an eosctainstance and contains zero or more disk spaces\n\n"
+			    "  Add a diskinstance by using the \"add\" subcommand :\n"
+			    "   * Specify the name (--name) of the disk instance. This name must be unique as it is the identifier of the disk instance and cannot be changed\n"
+			    "\n\n"
+					 }},
+   { AdminCmd::CMD_DISKINSTANCESPACE,      { "diskinstancespace",           "dis",  { "add", "ch", "rm", "ls" },
+			  "\n  This command allows to manage disk instance spaces.\n"
+			    "  A disksinstacespace is a partition of an eosctainstance disk space\n\n"
+			    "  Add a diskinstancespace by using the \"add\" subcommand :\n"
+			    "   * Specify the name (--name) of the disk instance space and the respective disk instance (--diskinstance). This pair must be unique as it is the identifier of the disk instance space and cannot be changed\n"
+             "   * Specify the informations to query the EOS free space by using the --freespacequeryurl\n"
+			    "   It should have the following format : eos:name_of_eos_instance:name_of_eos_space. Example : eos:ctaeos:spinners\n"
+			    "   * The refresh interval (--refreshinterval), in seconds, specify how long the queried free space will be use.\n"
+			    "\n\n"
+					 }},
+   
    { AdminCmd::CMD_VIRTUALORGANIZATION,  { "virtualorganization",   "vo",  { "add", "ch", "rm", "ls" }, 
                                            "\n  This command allows to manage virtual organizations.\n"
                                            "  Add a virtual organization by using the \"add\" subcommand:\n"
@@ -515,6 +540,11 @@ const Option opt_write_max_drives     { Option::OPT_UINT,  "--writemaxdrives",
 
 const Option opt_state                { Option::OPT_STR,  "--state",                 "-s",   std::string(" <\"") + Tape::stateToString(Tape::ACTIVE) +"\"" + " or \"" + Tape::stateToString(Tape::DISABLED) + "\" or \"" + Tape::stateToString(Tape::BROKEN) + "\">" };
 const Option opt_activityregex        { Option::OPT_STR,  "--activityregex",         "--ar", " <activity_regex>"};
+const Option opt_diskinstance         { Option::OPT_STR,  "--diskinstance",         "--di",  " <disk_instance_name>" };
+const Option opt_diskinstance_alias   { Option::OPT_STR,  "--name",                 "-n",    " <disk_instance_name>", "--diskinstance" };
+const Option opt_diskinstancespace    { Option::OPT_STR,  "--diskinstancespace",         "--dis",  " <disk_instance_space_name>" };
+const Option opt_diskinstancespace_alias { Option::OPT_STR,  "--name",                 "-n",    " <disk_instance_space_name>", "--diskinstancespace" };
+
 /*!
  * Map valid options to commands
  */
@@ -633,6 +663,20 @@ const std::map<cmd_key_t, cmd_val_t> cmdOptions = {
         opt_targeted_free_space.optional(), opt_sleep_time.optional(), opt_comment.optional() }},
    {{ AdminCmd::CMD_DISKSYSTEM,           AdminCmd::SUBCMD_RM    }, { opt_disksystem }},
    {{ AdminCmd::CMD_DISKSYSTEM,           AdminCmd::SUBCMD_LS    }, { }},
+   /*----------------------------------------------------------------------------------------------------*/
+   {{ AdminCmd::CMD_DISKINSTANCE,           AdminCmd::SUBCMD_ADD   }, { opt_diskinstance_alias, opt_comment }},
+   {{ AdminCmd::CMD_DISKINSTANCE,           AdminCmd::SUBCMD_CH    }, { opt_diskinstance_alias, opt_comment.optional() }},
+   {{ AdminCmd::CMD_DISKINSTANCE,           AdminCmd::SUBCMD_RM    }, { opt_diskinstance_alias }},
+   {{ AdminCmd::CMD_DISKINSTANCE,           AdminCmd::SUBCMD_LS    }, { }},
+   /*----------------------------------------------------------------------------------------------------*/
+   {{ AdminCmd::CMD_DISKINSTANCESPACE,           AdminCmd::SUBCMD_ADD   }, 
+      { opt_diskinstancespace_alias, opt_diskinstance, opt_free_space_query_url, opt_refresh_interval, opt_comment }},
+   {{ AdminCmd::CMD_DISKINSTANCESPACE,           AdminCmd::SUBCMD_CH    }, 
+      { opt_diskinstancespace_alias, opt_diskinstance, opt_comment.optional(), opt_free_space_query_url.optional(), opt_refresh_interval.optional() }},
+   {{ AdminCmd::CMD_DISKINSTANCESPACE,           AdminCmd::SUBCMD_RM    }, { opt_diskinstancespace_alias, opt_diskinstance }},
+   {{ AdminCmd::CMD_DISKINSTANCESPACE,           AdminCmd::SUBCMD_LS    }, { }},
+   /*----------------------------------------------------------------------------------------------------*/
+   
    {{ AdminCmd::CMD_VIRTUALORGANIZATION,           AdminCmd::SUBCMD_ADD   },
       { opt_vo, opt_read_max_drives, opt_write_max_drives, opt_comment, opt_maxfilesize.optional() }},
    {{ AdminCmd::CMD_VIRTUALORGANIZATION,           AdminCmd::SUBCMD_CH   },
diff --git a/cmdline/CtaAdminTextFormatter.cpp b/cmdline/CtaAdminTextFormatter.cpp
index 2c5f6fc38e8c07e0284f20bf0fe9606b19ab601d..c8bd56d8b3684aedf5a52e961e5275458bfda9b7 100644
--- a/cmdline/CtaAdminTextFormatter.cpp
+++ b/cmdline/CtaAdminTextFormatter.cpp
@@ -1004,6 +1004,72 @@ void TextFormatter::printDiskSystemLsHeader() {
   );
 }
 
+void TextFormatter::printDiskInstanceLsHeader() {
+  push_back("HEADER");
+  push_back(
+    "name",
+    "c.user",
+    "c.host",
+    "c.time",
+    "m.user",
+    "m.host",
+    "m.time",
+    "comment"
+  );
+}
+
+void TextFormatter::printDiskInstanceSpaceLsHeader() {
+  push_back("HEADER");
+  push_back(
+    "name",
+    "instance",
+    "url",
+    "interval",
+    "last refresh",
+    "space",
+    "c.user",
+    "c.host",
+    "c.time",
+    "m.user",
+    "m.host",
+    "m.time",
+    "comment"
+  );
+}
+
+void TextFormatter::print(const DiskInstanceSpaceLsItem &disls_item)
+{
+  push_back(
+    disls_item.name(),
+    disls_item.disk_instance(),
+    disls_item.free_space_query_url(),
+    disls_item.refresh_interval(),
+    disls_item.last_refresh_time(),
+    disls_item.free_space(),
+    disls_item.creation_log().username(),
+    disls_item.creation_log().host(),
+    timeToStr(disls_item.creation_log().time()),
+    disls_item.last_modification_log().username(),
+    disls_item.last_modification_log().host(),
+    timeToStr(disls_item.last_modification_log().time()),
+    disls_item.comment()
+  );
+}
+
+void TextFormatter::print(const DiskInstanceLsItem &dils_item)
+{
+  push_back(
+    dils_item.name(),
+    dils_item.creation_log().username(),
+    dils_item.creation_log().host(),
+    timeToStr(dils_item.creation_log().time()),
+    dils_item.last_modification_log().username(),
+    dils_item.last_modification_log().host(),
+    timeToStr(dils_item.last_modification_log().time()),
+    dils_item.comment()
+  );
+}
+
 void TextFormatter::print(const DiskSystemLsItem &dsls_item)
 {
   push_back(
diff --git a/cmdline/CtaAdminTextFormatter.hpp b/cmdline/CtaAdminTextFormatter.hpp
index 82d7613a8d1cebb45bbe2efe6860abfcfd9414d4..f38431706baabb8964918cdd2ea0953d7563f6c8 100644
--- a/cmdline/CtaAdminTextFormatter.hpp
+++ b/cmdline/CtaAdminTextFormatter.hpp
@@ -64,6 +64,8 @@ public:
   void printTapeFileLsHeader();
   void printTapePoolLsHeader();
   void printDiskSystemLsHeader();
+  void printDiskInstanceLsHeader();
+  void printDiskInstanceSpaceLsHeader();
   void printVirtualOrganizationLsHeader();
   void printVersionHeader();
   void printMediaTypeLsHeader();
@@ -92,6 +94,8 @@ public:
   void print(const TapeFileLsItem &tfls_item);
   void print(const TapePoolLsItem &tpls_item);
   void print(const DiskSystemLsItem &dsls_item);
+  void print(const DiskInstanceLsItem &dils_item);
+  void print(const DiskInstanceSpaceLsItem &disls_item);
   void print(const VirtualOrganizationLsItem &vols_item);
   void print(const VersionItem & version_item);
   void print(const MediaTypeLsItem &mtls_item);
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index 5cf6177350739b1f94c2bca08c3709c51069d531..14d54636a23146642438a7856d182469d779e908 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -51,6 +51,8 @@ set (COMMON_LIB_SRC_FILES
   dataStructures/DeleteArchiveRequest.cpp
   dataStructures/DesiredDriveState.cpp
   dataStructures/DiskFileInfo.cpp
+  dataStructures/DiskInstance.cpp
+  dataStructures/DiskInstanceSpace.cpp
   dataStructures/DriveState.cpp
   dataStructures/DriveStatus.cpp
   dataStructures/EntryLog.cpp
diff --git a/common/dataStructures/DiskInstance.cpp b/common/dataStructures/DiskInstance.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..19f72532c473c5144c8ae90a04cf21e0cc5a6d7e
--- /dev/null
+++ b/common/dataStructures/DiskInstance.cpp
@@ -0,0 +1,18 @@
+/*
+ * @project        The CERN Tape Archive (CTA)
+ * @copyright      Copyright(C) 2015-2021 CERN
+ * @license        This program is free software: you can redistribute it and/or modify
+ *                 it under the terms of the GNU General Public License as published by
+ *                 the Free Software Foundation, either version 3 of the License, or
+ *                 (at your option) any later version.
+ *
+ *                 This program is distributed in the hope that it will be useful,
+ *                 but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *                 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *                 GNU General Public License for more details.
+ *
+ *                 You should have received a copy of the GNU General Public License
+ *                 along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "DiskInstance.hpp"
diff --git a/common/dataStructures/DiskInstance.hpp b/common/dataStructures/DiskInstance.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..ea0400f62e5761d782d9d7d358f4d299d3aa70bd
--- /dev/null
+++ b/common/dataStructures/DiskInstance.hpp
@@ -0,0 +1,54 @@
+/*
+ * @project        The CERN Tape Archive (CTA)
+ * @copyright      Copyright(C) 2015-2021 CERN
+ * @license        This program is free software: you can redistribute it and/or modify
+ *                 it under the terms of the GNU General Public License as published by
+ *                 the Free Software Foundation, either version 3 of the License, or
+ *                 (at your option) any later version.
+ *
+ *                 This program is distributed in the hope that it will be useful,
+ *                 but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *                 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *                 GNU General Public License for more details.
+ *
+ *                 You should have received a copy of the GNU General Public License
+ *                 along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+ 
+#include <string>
+#include "EntryLog.hpp"
+
+namespace cta { 
+namespace common {
+namespace dataStructures {
+
+struct DiskInstance {
+  
+   /**
+   * The name
+   */
+  std::string name;
+
+  /**
+   * The comment.
+   */
+  std::string comment;
+    
+  /**
+   * The creation log.
+   */
+  EntryLog creationLog;
+
+  /**
+   * The last modification log.
+   */
+  EntryLog lastModificationLog;
+
+  bool operator==(const DiskInstance & other) const{
+    return (name == other.name && comment == other.comment);
+  }
+};
+
+}}} //namespace cta::common::dataStructures
\ No newline at end of file
diff --git a/common/dataStructures/DiskInstanceSpace.cpp b/common/dataStructures/DiskInstanceSpace.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..988cbeda7a7b61336a332b8299a4ca33451c261a
--- /dev/null
+++ b/common/dataStructures/DiskInstanceSpace.cpp
@@ -0,0 +1,18 @@
+/*
+ * @project        The CERN Tape Archive (CTA)
+ * @copyright      Copyright(C) 2015-2021 CERN
+ * @license        This program is free software: you can redistribute it and/or modify
+ *                 it under the terms of the GNU General Public License as published by
+ *                 the Free Software Foundation, either version 3 of the License, or
+ *                 (at your option) any later version.
+ *
+ *                 This program is distributed in the hope that it will be useful,
+ *                 but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *                 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *                 GNU General Public License for more details.
+ *
+ *                 You should have received a copy of the GNU General Public License
+ *                 along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "DiskInstanceSpace.hpp"
diff --git a/common/dataStructures/DiskInstanceSpace.hpp b/common/dataStructures/DiskInstanceSpace.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..4d1a6f788aa5554c73a84482c5021b7deea36935
--- /dev/null
+++ b/common/dataStructures/DiskInstanceSpace.hpp
@@ -0,0 +1,79 @@
+/*
+ * @project        The CERN Tape Archive (CTA)
+ * @copyright      Copyright(C) 2015-2021 CERN
+ * @license        This program is free software: you can redistribute it and/or modify
+ *                 it under the terms of the GNU General Public License as published by
+ *                 the Free Software Foundation, either version 3 of the License, or
+ *                 (at your option) any later version.
+ *
+ *                 This program is distributed in the hope that it will be useful,
+ *                 but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *                 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *                 GNU General Public License for more details.
+ *
+ *                 You should have received a copy of the GNU General Public License
+ *                 along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+ 
+#include <string>
+#include "EntryLog.hpp"
+
+namespace cta { 
+namespace common {
+namespace dataStructures {
+
+struct DiskInstanceSpace {
+  
+   /**
+   * The name
+   */
+  std::string name;
+
+   /**
+   * The disk instance
+   */
+  std::string diskInstance;
+
+  /**
+   * The URL to query to obtain the free space.
+   */
+  std::string freeSpaceQueryURL;
+
+  /**
+   * The free space query period
+   */
+  uint64_t refreshInterval;
+
+  /**
+   * The current free space associated to the disk system
+   */
+  uint64_t freeSpace;
+
+  /**
+   * The timestamp of the last free space query
+   */
+  uint64_t lastRefreshTime;
+
+  /**
+   * The comment.
+   */
+  std::string comment;
+    
+  /**
+   * The creation log.
+   */
+  EntryLog creationLog;
+
+  /**
+   * The last modification log.
+   */
+  EntryLog lastModificationLog;
+
+  bool operator==(const DiskInstanceSpace & other) const{
+    return (name == other.name && diskInstance == other.diskInstance && comment == other.comment);
+  }
+};
+
+}}} //namespace cta::common::dataStructures
\ No newline at end of file
diff --git a/xroot_plugins/XrdCtaDiskInstanceLs.hpp b/xroot_plugins/XrdCtaDiskInstanceLs.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..fe9c1d896caa212273417144f4025084dafe33c4
--- /dev/null
+++ b/xroot_plugins/XrdCtaDiskInstanceLs.hpp
@@ -0,0 +1,91 @@
+/*
+ * @project        The CERN Tape Archive (CTA)
+ * @copyright      Copyright(C) 2015-2021 CERN
+ * @license        This program is free software: you can redistribute it and/or modify
+ *                 it under the terms of the GNU General Public License as published by
+ *                 the Free Software Foundation, either version 3 of the License, or
+ *                 (at your option) any later version.
+ *
+ *                 This program is distributed in the hope that it will be useful,
+ *                 but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *                 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *                 GNU General Public License for more details.
+ *
+ *                 You should have received a copy of the GNU General Public License
+ *                 along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <xroot_plugins/XrdCtaStream.hpp>
+#include <xroot_plugins/XrdSsiCtaRequestMessage.hpp>
+
+#include "common/dataStructures/DiskInstance.hpp"
+
+
+namespace cta { namespace xrd {
+
+/*!
+ * Stream object which implements "disksystem ls" command
+ */
+class DiskInstanceLsStream: public XrdCtaStream{
+public:
+  /*!
+   * Constructor
+   *
+   * @param[in]    requestMsg    RequestMessage containing command-line arguments
+   * @param[in]    catalogue     CTA Catalogue
+   * @param[in]    scheduler     CTA Scheduler
+   */
+  DiskInstanceLsStream(const RequestMessage &requestMsg, cta::catalogue::Catalogue &catalogue, cta::Scheduler &scheduler);
+
+private:
+  /*!
+   * Can we close the stream?
+   */
+  virtual bool isDone() const {
+    return m_diskInstanceList.empty();
+  }
+
+  /*!
+   * Fill the buffer
+   */
+  virtual int fillBuffer(XrdSsiPb::OStreamBuffer<Data> *streambuf);
+
+  std::list<common::dataStructures::DiskInstance> m_diskInstanceList;             //!< List of disk instances from the catalogue
+
+  static constexpr const char* const LOG_SUFFIX  = "DiskInstanceLsStream";    //!< Identifier for log messages
+};
+
+
+DiskInstanceLsStream::DiskInstanceLsStream(const RequestMessage &requestMsg, cta::catalogue::Catalogue &catalogue, cta::Scheduler &scheduler) :
+  XrdCtaStream(catalogue, scheduler),
+  m_diskInstanceList(catalogue.getAllDiskInstances())
+{
+  using namespace cta::admin;
+
+  XrdSsiPb::Log::Msg(XrdSsiPb::Log::DEBUG, LOG_SUFFIX, "DiskInstanceLsStream() constructor");
+}
+
+int DiskInstanceLsStream::fillBuffer(XrdSsiPb::OStreamBuffer<Data> *streambuf) {
+  for(bool is_buffer_full = false; !m_diskInstanceList.empty() && !is_buffer_full; m_diskInstanceList.pop_front()) {
+    Data record;
+
+    auto &di      = m_diskInstanceList.front();
+    auto  di_item = record.mutable_dils_item();
+
+    di_item->set_name(di.name);
+    di_item->mutable_creation_log()->set_username(di.creationLog.username);
+    di_item->mutable_creation_log()->set_host(di.creationLog.host);
+    di_item->mutable_creation_log()->set_time(di.creationLog.time);
+    di_item->mutable_last_modification_log()->set_username(di.lastModificationLog.username);
+    di_item->mutable_last_modification_log()->set_host(di.lastModificationLog.host);
+    di_item->mutable_last_modification_log()->set_time(di.lastModificationLog.time);
+    di_item->set_comment(di.comment);
+
+    is_buffer_full = streambuf->Push(record);
+  }
+  return streambuf->Size();
+}
+
+}} // namespace cta::xrd
diff --git a/xroot_plugins/XrdCtaDiskInstanceSpaceLs.hpp b/xroot_plugins/XrdCtaDiskInstanceSpaceLs.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..6f9d2010be6101c361cd1271623e6b1d2cc9db7e
--- /dev/null
+++ b/xroot_plugins/XrdCtaDiskInstanceSpaceLs.hpp
@@ -0,0 +1,95 @@
+/*
+ * @project        The CERN Tape Archive (CTA)
+ * @copyright      Copyright(C) 2015-2021 CERN
+ * @license        This program is free software: you can redistribute it and/or modify
+ *                 it under the terms of the GNU General Public License as published by
+ *                 the Free Software Foundation, either version 3 of the License, or
+ *                 (at your option) any later version.
+ *
+ *                 This program is distributed in the hope that it will be useful,
+ *                 but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *                 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *                 GNU General Public License for more details.
+ *
+ *                 You should have received a copy of the GNU General Public License
+ *                 along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <xroot_plugins/XrdCtaStream.hpp>
+#include <xroot_plugins/XrdSsiCtaRequestMessage.hpp>
+
+#include "common/dataStructures/DiskInstanceSpace.hpp"
+
+
+namespace cta { namespace xrd {
+
+/*!
+ * Stream object which implements "diskinstancespace ls" command
+ */
+class DiskInstanceSpaceLsStream: public XrdCtaStream{
+public:
+  /*!
+   * Constructor
+   *
+   * @param[in]    requestMsg    RequestMessage containing command-line arguments
+   * @param[in]    catalogue     CTA Catalogue
+   * @param[in]    scheduler     CTA Scheduler
+   */
+  DiskInstanceSpaceLsStream(const RequestMessage &requestMsg, cta::catalogue::Catalogue &catalogue, cta::Scheduler &scheduler);
+
+private:
+  /*!
+   * Can we close the stream?
+   */
+  virtual bool isDone() const {
+    return m_diskInstanceSpaceList.empty();
+  }
+
+  /*!
+   * Fill the buffer
+   */
+  virtual int fillBuffer(XrdSsiPb::OStreamBuffer<Data> *streambuf);
+
+  std::list<common::dataStructures::DiskInstanceSpace> m_diskInstanceSpaceList;             //!< List of disk instance spaces from the catalogue
+
+  static constexpr const char* const LOG_SUFFIX  = "DiskInstanceSpaceLsStream";    //!< Identifier for log messages
+};
+
+
+DiskInstanceSpaceLsStream::DiskInstanceSpaceLsStream(const RequestMessage &requestMsg, cta::catalogue::Catalogue &catalogue, cta::Scheduler &scheduler) :
+  XrdCtaStream(catalogue, scheduler),
+  m_diskInstanceSpaceList(catalogue.getAllDiskInstanceSpaces())
+{
+  using namespace cta::admin;
+
+  XrdSsiPb::Log::Msg(XrdSsiPb::Log::DEBUG, LOG_SUFFIX, "DiskInstanceSpaceLsStream() constructor");
+}
+
+int DiskInstanceSpaceLsStream::fillBuffer(XrdSsiPb::OStreamBuffer<Data> *streambuf) {
+  for(bool is_buffer_full = false; !m_diskInstanceSpaceList.empty() && !is_buffer_full; m_diskInstanceSpaceList.pop_front()) {
+    Data record;
+
+    auto &dis      = m_diskInstanceSpaceList.front();
+    auto  dis_item = record.mutable_disls_item();
+
+    dis_item->set_name(dis.name);
+    dis_item->set_disk_instance(dis.diskInstance);
+    dis_item->set_refresh_interval(dis.refreshInterval);
+    dis_item->set_free_space_query_url(dis.freeSpaceQueryURL);
+    dis_item->set_free_space(dis.freeSpace);
+    dis_item->mutable_creation_log()->set_username(dis.creationLog.username);
+    dis_item->mutable_creation_log()->set_host(dis.creationLog.host);
+    dis_item->mutable_creation_log()->set_time(dis.creationLog.time);
+    dis_item->mutable_last_modification_log()->set_username(dis.lastModificationLog.username);
+    dis_item->mutable_last_modification_log()->set_host(dis.lastModificationLog.host);
+    dis_item->mutable_last_modification_log()->set_time(dis.lastModificationLog.time);
+    dis_item->set_comment(dis.comment);
+
+    is_buffer_full = streambuf->Push(record);
+  }
+  return streambuf->Size();
+}
+
+}} // namespace cta::xrd
diff --git a/xroot_plugins/XrdSsiCtaRequestMessage.cpp b/xroot_plugins/XrdSsiCtaRequestMessage.cpp
index ed9c91112cf1e7359c377c1da6a7a341ea8a859f..cc4bdf8a56ce25fb68ad4820c80757894d053d58 100644
--- a/xroot_plugins/XrdSsiCtaRequestMessage.cpp
+++ b/xroot_plugins/XrdSsiCtaRequestMessage.cpp
@@ -38,6 +38,8 @@ using XrdSsiPb::PbException;
 #include "XrdCtaStorageClassLs.hpp"
 #include "XrdCtaTapePoolLs.hpp"
 #include "XrdCtaDiskSystemLs.hpp"
+#include "XrdCtaDiskInstanceLs.hpp"
+#include "XrdCtaDiskInstanceSpaceLs.hpp"
 #include "XrdCtaVirtualOrganizationLs.hpp"
 #include "XrdCtaVersion.hpp"
 #include "XrdCtaSchedulingInfosLs.hpp"
@@ -276,6 +278,30 @@ void RequestMessage::process(const cta::xrd::Request &request, cta::xrd::Respons
                case cmd_pair(AdminCmd::CMD_DISKSYSTEM, AdminCmd::SUBCMD_CH):
                   processDiskSystem_Ch(response);
                   break;
+               case cmd_pair(AdminCmd::CMD_DISKINSTANCE, AdminCmd::SUBCMD_LS):
+                  processDiskInstance_Ls(response, stream);
+                  break;
+               case cmd_pair(AdminCmd::CMD_DISKINSTANCE, AdminCmd::SUBCMD_ADD):
+                  processDiskInstance_Add(response);
+                  break;
+               case cmd_pair(AdminCmd::CMD_DISKINSTANCE, AdminCmd::SUBCMD_RM):
+                  processDiskInstance_Rm(response);
+                  break;
+               case cmd_pair(AdminCmd::CMD_DISKINSTANCE, AdminCmd::SUBCMD_CH):
+                  processDiskInstance_Ch(response);
+                  break;
+                case cmd_pair(AdminCmd::CMD_DISKINSTANCESPACE, AdminCmd::SUBCMD_LS):
+                  processDiskInstanceSpace_Ls(response, stream);
+                  break;
+               case cmd_pair(AdminCmd::CMD_DISKINSTANCESPACE, AdminCmd::SUBCMD_ADD):
+                  processDiskInstanceSpace_Add(response);
+                  break;
+               case cmd_pair(AdminCmd::CMD_DISKINSTANCESPACE, AdminCmd::SUBCMD_RM):
+                  processDiskInstanceSpace_Rm(response);
+                  break;
+               case cmd_pair(AdminCmd::CMD_DISKINSTANCESPACE, AdminCmd::SUBCMD_CH):
+                  processDiskInstanceSpace_Ch(response);
+                  break;
                case cmd_pair(AdminCmd::CMD_VIRTUALORGANIZATION, AdminCmd::SUBCMD_ADD):
                   processVirtualOrganization_Add(response);
                   break;
@@ -2189,6 +2215,115 @@ void RequestMessage::processDiskSystem_Rm(cta::xrd::Response &response)
   response.set_type(cta::xrd::Response::RSP_SUCCESS);
 }
 
+void RequestMessage::processDiskInstance_Ls(cta::xrd::Response &response, XrdSsiStream* &stream)
+{
+  using namespace cta::admin;
+
+  // Create a XrdSsi stream object to return the results
+  stream = new DiskInstanceLsStream(*this, m_catalogue, m_scheduler);
+
+  response.set_show_header(HeaderType::DISKINSTANCE_LS);
+  response.set_type(cta::xrd::Response::RSP_SUCCESS);
+}
+
+void RequestMessage::processDiskInstance_Add(cta::xrd::Response &response)
+{
+  using namespace cta::admin;
+
+  const auto &name              = getRequired(OptionString::DISK_INSTANCE);
+  const auto &comment           = getRequired(OptionString::COMMENT);
+
+  m_catalogue.createDiskInstance(m_cliIdentity, name, comment);
+
+  response.set_type(cta::xrd::Response::RSP_SUCCESS);
+}
+
+void RequestMessage::processDiskInstance_Ch(cta::xrd::Response &response)
+{
+   using namespace cta::admin;
+
+   const auto &name              = getRequired(OptionString::DISK_INSTANCE);
+   const auto comment            = getOptional(OptionString::COMMENT);
+
+   if(comment) {
+      m_catalogue.modifyDiskInstanceComment(m_cliIdentity, name, comment.value());
+   }
+
+   response.set_type(cta::xrd::Response::RSP_SUCCESS);
+}
+
+void RequestMessage::processDiskInstance_Rm(cta::xrd::Response &response)
+{
+  using namespace cta::admin;
+
+  const auto &name = getRequired(OptionString::DISK_INSTANCE);
+
+  m_catalogue.deleteDiskInstance(name);
+
+  response.set_type(cta::xrd::Response::RSP_SUCCESS);
+}
+
+void RequestMessage::processDiskInstanceSpace_Ls(cta::xrd::Response &response, XrdSsiStream* &stream)
+{
+  using namespace cta::admin;
+
+  // Create a XrdSsi stream object to return the results
+  stream = new DiskInstanceSpaceLsStream(*this, m_catalogue, m_scheduler);
+
+  response.set_show_header(HeaderType::DISKINSTANCESPACE_LS);
+  response.set_type(cta::xrd::Response::RSP_SUCCESS);
+}
+
+void RequestMessage::processDiskInstanceSpace_Add(cta::xrd::Response &response)
+{
+  using namespace cta::admin;
+
+  const auto &name              = getRequired(OptionString::DISK_INSTANCE_SPACE);
+  const auto &diskInstance      = getRequired(OptionString::DISK_INSTANCE);
+  const auto &comment           = getRequired(OptionString::COMMENT);
+  const auto &freeSpaceQueryURL = getRequired(OptionString::FREE_SPACE_QUERY_URL);
+  const auto refreshInterval    = getRequired(OptionUInt64::REFRESH_INTERVAL);
+   
+  m_catalogue.createDiskInstanceSpace(m_cliIdentity, name, diskInstance, freeSpaceQueryURL, refreshInterval, comment);
+
+  response.set_type(cta::xrd::Response::RSP_SUCCESS);
+}
+
+void RequestMessage::processDiskInstanceSpace_Ch(cta::xrd::Response &response)
+{
+   using namespace cta::admin;
+
+   const auto &name              = getRequired(OptionString::DISK_INSTANCE_SPACE);
+   const auto &diskInstance      = getRequired(OptionString::DISK_INSTANCE);
+   const auto comment            = getOptional(OptionString::COMMENT);
+   const auto &freeSpaceQueryURL = getOptional(OptionString::FREE_SPACE_QUERY_URL);
+   const auto refreshInterval    = getOptional(OptionUInt64::REFRESH_INTERVAL);
+   
+   if(comment) {
+      m_catalogue.modifyDiskInstanceSpaceComment(m_cliIdentity, name, diskInstance, comment.value());
+   }
+   if(freeSpaceQueryURL) {
+      m_catalogue.modifyDiskInstanceSpaceQueryURL(m_cliIdentity, name, diskInstance, freeSpaceQueryURL.value());
+   }
+   if(refreshInterval) {
+      m_catalogue.modifyDiskInstanceSpaceRefreshInterval(m_cliIdentity, name, diskInstance, refreshInterval.value());
+   }
+   
+   response.set_type(cta::xrd::Response::RSP_SUCCESS);
+}
+
+void RequestMessage::processDiskInstanceSpace_Rm(cta::xrd::Response &response)
+{
+  using namespace cta::admin;
+
+  const auto &name         = getRequired(OptionString::DISK_INSTANCE_SPACE);
+  const auto &diskInstance = getRequired(OptionString::DISK_INSTANCE);
+
+  m_catalogue.deleteDiskInstanceSpace(name, diskInstance);
+
+  response.set_type(cta::xrd::Response::RSP_SUCCESS);
+}
+
 void RequestMessage::processVirtualOrganization_Add(cta::xrd::Response &response){
   using namespace cta::admin;
 
diff --git a/xroot_plugins/XrdSsiCtaRequestMessage.hpp b/xroot_plugins/XrdSsiCtaRequestMessage.hpp
index 57fe962683e461811a0198900a042704af875377..fef4f3dc2a1e352a0fcc949dfa538facde5b7bf9 100644
--- a/xroot_plugins/XrdSsiCtaRequestMessage.hpp
+++ b/xroot_plugins/XrdSsiCtaRequestMessage.hpp
@@ -212,6 +212,12 @@ private:
   void processDiskSystem_Add        (cta::xrd::Response &response);
   void processDiskSystem_Ch         (cta::xrd::Response &response);
   void processDiskSystem_Rm         (cta::xrd::Response &response);
+  void processDiskInstance_Add      (cta::xrd::Response &response);
+  void processDiskInstance_Ch       (cta::xrd::Response &response);
+  void processDiskInstance_Rm       (cta::xrd::Response &response);
+  void processDiskInstanceSpace_Add (cta::xrd::Response &response);
+  void processDiskInstanceSpace_Ch  (cta::xrd::Response &response);
+  void processDiskInstanceSpace_Rm  (cta::xrd::Response &response);
   void processVirtualOrganization_Add(cta::xrd::Response &response);
   void processVirtualOrganization_Ch(cta::xrd::Response &response);
   void processVirtualOrganization_Rm(cta::xrd::Response &response);
@@ -243,6 +249,8 @@ private:
   admincmdstream_t processTapeFile_Ls;
   admincmdstream_t processRepack_Ls;
   admincmdstream_t processDiskSystem_Ls;
+  admincmdstream_t processDiskInstance_Ls;
+  admincmdstream_t processDiskInstanceSpace_Ls;
   admincmdstream_t processVirtualOrganization_Ls;
   admincmdstream_t processVersion;
   admincmdstream_t processSchedulingInfos_Ls;
diff --git a/xrootd-ssi-protobuf-interface b/xrootd-ssi-protobuf-interface
index 6b3ffe5a8e358e1bff044aba877c4610867ff54f..ce876d5ef34445deeab59a4f24c93538eec9d41e 160000
--- a/xrootd-ssi-protobuf-interface
+++ b/xrootd-ssi-protobuf-interface
@@ -1 +1 @@
-Subproject commit 6b3ffe5a8e358e1bff044aba877c4610867ff54f
+Subproject commit ce876d5ef34445deeab59a4f24c93538eec9d41e