Skip to main content
Skip table of contents

Riverbird Cleanup Skript für eine c-entron Datenbank

(Stand: 04/2026)

Betrifft:

  • ⚙️ Administration

Hinweis: Dies ist nur zutreffend, wenn Sie Kunde von dem Drittanbieter Riverbird RMM sind oder waren.

Zweck des Skripts

Dieses Skript leert (TRUNCATE) alle Riverbird-/RMM-bezogenen Tabellen anhand ihrer Namens-Präfixe. Die Tabellen selbst bleiben erhalten.

Ausnahme: diese Tabelle wird nicht geleert, da sie die RMM-Referenzen für die Vertragsabrechnung enthält.

CODE
AssetManagementArticleAssignment

Voraussetzungen

  • Aktuelles Backup der c-entron-Datenbank ist vorhanden.

  • Riverbird- und c-entron-Datenbank sind bereits getrennt (siehe Datenbanken trennen).

  • Ausführung mit ausreichenden Rechten (mindestens db_owner auf der c-entron-Datenbank).

Testlauf vs. Echtlauf

Das Skript läuft standardmäßig als Testlauf in einer Transaktion und führt am Ende ein ROLLBACK aus – es werden also keine Änderungen geschrieben. Im SQL Server Management Studio können Sie die PRINT-Ausgaben im Reiter „Meldungen" prüfen, um zu sehen, welche Tabellen und Foreign Keys betroffen wären.

Für den Echtlauf die letzten beiden Zeilen am Ende des Skripts tauschen:

SQL
COMMIT TRANSACTION;
-- ROLLBACK TRANSACTION;

Skript

SQL
/*  ═══════════════════════════════════════════════════════════════════════
    Riverbird Cleanup-Skript für eine c-entron Datenbank
    ───────────────────────────────────────────────────────────────────────
    Leert (TRUNCATE) alle Riverbird/RMM-bezogenen Tabellen anhand ihrer
    Namens-Präfixe. Die Tabellen selbst bleiben erhalten.

    AUSNAHME (wird NICHT geleert):
      AssetManagementArticleAssignment
        → enthält RMM-Referenzen für die Vertragsabrechnung.

    VORAUSSETZUNG:
      • Backup der c-entron-Datenbank vorhanden
      • Riverbird- und c-entron-Datenbank sind bereits getrennt

    TESTLAUF / ECHTLAUF:
      Standardmäßig läuft das Skript als TESTLAUF (ROLLBACK am Ende).
      Für den ECHTLAUF die letzten beiden Zeilen tauschen:
          COMMIT TRANSACTION;
          -- ROLLBACK TRANSACTION;
    ═══════════════════════════════════════════════════════════════════════ */

SET NOCOUNT ON;
SET XACT_ABORT ON;

BEGIN TRANSACTION;

BEGIN TRY

    DECLARE @table          NVARCHAR(256);
    DECLARE @schema         NVARCHAR(128);
    DECLARE @parentTable    NVARCHAR(256);
    DECLARE @parentSchema   NVARCHAR(128);
    DECLARE @foreignKey     NVARCHAR(256);
    DECLARE @sql            NVARCHAR(MAX);

    /* -------------------------------------------------------------------
       Phase 1: Relevante Tabellen anhand der Präfixe ermitteln
       ------------------------------------------------------------------- */
    PRINT 'Phase 1: Suche nach Tabellen mit den definierten Präfixen ...';

    DECLARE @tableList TABLE
    (
        schemaName  NVARCHAR(128),
        tableName   NVARCHAR(256)
    );

    INSERT INTO @tableList (schemaName, tableName)
    SELECT  s.name, t.name
    FROM    sys.tables  AS t
    JOIN    sys.schemas AS s ON s.schema_id = t.schema_id
    WHERE
    (
            t.name LIKE 'AssetManagement%'
        OR  t.name LIKE 'DocumentationWizard%'
        OR  t.name LIKE 'DocuWizard%'
        OR  t.name LIKE 'Mon%'
        OR  t.name LIKE 'Deployable%'
        OR  t.name LIKE 'Remote%'
        OR  t.name LIKE 'RBSync%'
        OR  t.name  =  'DocumentationPageOldVersions'
        OR  t.name LIKE 'PatchManagementDeployable%'
        OR  t.name LIKE 'RiverbirdAgentDeployment%'
    )
    AND     t.name <> 'AssetManagementArticleAssignment';

    /* -------------------------------------------------------------------
       Phase 2: Foreign Keys löschen
       Es werden BEIDE Richtungen berücksichtigt:
         a) FKs, die VON den Tabellen ausgehen
         b) FKs anderer Tabellen, die AUF die Tabellen verweisen
            (sonst schlägt TRUNCATE mit Fehler 4712 fehl)
       ------------------------------------------------------------------- */
    PRINT 'Phase 2: Lösche Foreign Keys (eingehend und ausgehend) ...';

    DECLARE table_cursor CURSOR LOCAL FAST_FORWARD FOR
        SELECT schemaName, tableName FROM @tableList;

    OPEN table_cursor;
    FETCH NEXT FROM table_cursor INTO @schema, @table;

    WHILE @@FETCH_STATUS = 0
    BEGIN
        DECLARE foreignKey_cursor CURSOR LOCAL FAST_FORWARD FOR
            SELECT
                fk.name,
                OBJECT_SCHEMA_NAME(fk.parent_object_id),
                OBJECT_NAME(fk.parent_object_id)
            FROM sys.foreign_keys AS fk
            WHERE   OBJECT_NAME(fk.parent_object_id)     = @table   -- ausgehend
                OR  OBJECT_NAME(fk.referenced_object_id) = @table;  -- eingehend

        OPEN foreignKey_cursor;
        FETCH NEXT FROM foreignKey_cursor
            INTO @foreignKey, @parentSchema, @parentTable;

        WHILE @@FETCH_STATUS = 0
        BEGIN
            SET @sql =
                N'ALTER TABLE '   + QUOTENAME(@parentSchema)
                + N'.'            + QUOTENAME(@parentTable)
                + N' DROP CONSTRAINT ' + QUOTENAME(@foreignKey) + N';';

            PRINT 'Executing: ' + @sql;
            EXEC sp_executesql @sql;

            FETCH NEXT FROM foreignKey_cursor
                INTO @foreignKey, @parentSchema, @parentTable;
        END;

        CLOSE foreignKey_cursor;
        DEALLOCATE foreignKey_cursor;

        FETCH NEXT FROM table_cursor INTO @schema, @table;
    END;

    CLOSE table_cursor;
    DEALLOCATE table_cursor;

    /* -------------------------------------------------------------------
       Phase 3: Tabellen leeren (TRUNCATE TABLE)
       ------------------------------------------------------------------- */
    PRINT 'Phase 3: Leere Tabellen ...';

    DECLARE truncate_cursor CURSOR LOCAL FAST_FORWARD FOR
        SELECT schemaName, tableName
        FROM   @tableList
        ORDER BY tableName;

    OPEN truncate_cursor;
    FETCH NEXT FROM truncate_cursor INTO @schema, @table;

    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @sql =
            N'TRUNCATE TABLE ' + QUOTENAME(@schema)
            + N'.' + QUOTENAME(@table) + N';';

        PRINT 'Executing: ' + @sql;
        EXEC sp_executesql @sql;

        FETCH NEXT FROM truncate_cursor INTO @schema, @table;
    END;

    CLOSE truncate_cursor;
    DEALLOCATE truncate_cursor;

    PRINT 'Operation erfolgreich abgeschlossen.';

END TRY
BEGIN CATCH
    PRINT 'FEHLER aufgetreten – Transaktion wird zurückgerollt.';
    PRINT ERROR_MESSAGE();

    IF CURSOR_STATUS('local','foreignKey_cursor') >= 0
    BEGIN
        CLOSE foreignKey_cursor;
        DEALLOCATE foreignKey_cursor;
    END;
    IF CURSOR_STATUS('local','table_cursor') >= 0
    BEGIN
        CLOSE table_cursor;
        DEALLOCATE table_cursor;
    END;
    IF CURSOR_STATUS('local','truncate_cursor') >= 0
    BEGIN
        CLOSE truncate_cursor;
        DEALLOCATE truncate_cursor;
    END;

    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
    RETURN;
END CATCH;

/*  ═══════════════════════════════════════════════════════════════════════
    Für den ECHTLAUF die nächsten beiden Zeilen tauschen
    (COMMIT aktiv, ROLLBACK auskommentiert):
    ═══════════════════════════════════════════════════════════════════════ */

-- COMMIT TRANSACTION;
ROLLBACK TRANSACTION;

Stichwörter (intern): Datenbankbereinigung, Bereinigung, Datenbanktrennung, Datenbank trennen

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.