HOW TO

Erstellen eines Berichts mit Statistiken zur Geodatabase-Versionierung in einer SQL Server-Geodatabase

Last Published: October 11, 2024

Zusammenfassung

In den nachfolgenden Anweisungen wird beschrieben, wie sich ein Bericht mit Statistiken zur Geodatabase-Versionierung in einer SQL Server-Geodatabase erstellen lässt. Das folgende SQL-Skript enthält Informationen über eine versionierte Geodatabase in SQL Server. In der Ausgabe wird Folgendes aufgeführt: die Anzahl der Versionen, die das Komprimieren der Default-Version auf State 0 blockieren, die Namen der Besitzer der ersten fünf blockierenden Versionen, die Anzahl der States, die Anzahl der Einträge in der Tabelle "state_lineages" sowie die Anzahl der Zeilen in der versionierten Tabelle und den Delta-Tabellen.

  • Dieses Skript ist mit dem Skript für Oracle-Geodatabases vergleichbar (KB 000010358).
  • Dieses Skript funktioniert optimal in SQL Server-Geodatabases mit normalem SDE- und DBO-Schema.
  • Ändern Sie gegebenenfalls das SDE-Schema manuell in DBO. (CTRL-H, "sde.", "dbo.")
  • Die Ausgabe wird an die Registerkarte "Meldungen" in SQL Server Management Studio gesendet.

Vorgehensweise

Gehen Sie folgendermaßen vor:

  1. Kopieren Sie das nachfolgende Skript in einen SQL-Editor oder in SQL Server Management Studio.
  2. Ändern Sie gegebenenfalls das Tabellenschema von SDE in DBO (CTRL-H, "sde.", "dbo.").
  3. Führen Sie das Skript aus.
SET NOCOUNT ON

--Heben Sie die Kommentierung der CREATE TABLE- und der INSERT INTO-Anweisung
--in Zeile 150 und 151 auf, um eine permanente Tabelle mit der Anzahl der Hinzufügungen und Löschungen zu generieren.
/* create table delta_info
(
    id int identity(1,1),
    table_name nvarchar(100),
    registration_id int,
    adds int,
    deletes int
) */

DECLARE @versions_info_tab TABLE
(
    ver_info_state_id int,
    source_lin int,
    com_anc_id int,
    lin_name int,
    state_id int
)

DECLARE @blocking_list TABLE
(
    state_id int,
    name varchar(100)
)

DECLARE @delta_table_info TABLE
(
    a_table_name nvarchar(50),
    d_table_name nvarchar(50),
    a_table_count int,
    d_table_count int
)

DECLARE @ver_count int = (SELECT COUNT(*) FROM sde.SDE_versions)
DECLARE @state_count int = (SELECT COUNT(*) FROM sde.sde_states)
DECLARE @state_lineages_count int = (SELECT COUNT(*) cnt FROM sde.SDE_state_lineages)

-- Falls die Geodatabase zuvor noch nie komprimiert wurde, ist die Tabelle "SDE_compress_log" nicht vorhanden.
DECLARE @last_compress varchar(15)
IF EXISTS (SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema IN ('SDE', 'DBO') AND table_name = 'SDE_compress_log')
BEGIN
       SET @last_compress = CONVERT(varchar(15), (SELECT MAX(compress_end) FROM sde.SDE_compress_log), 1)
END
ELSE
       BEGIN
       SET @last_compress = 'No compress log table';
END

DECLARE @ver_info_state_id int, @message varchar(100) = '', @source_lin int, 
        @com_anc_id int, @lin_name int, @state_id int, @ver_blocking int = 0,
        @cur_max_state int, @pos int, @idx int, @s1 int = 0, @s2 int = 0, @s3 
        int = 0, @s4 int = 0, @s5 int = 0, @blocking_ver_name nvarchar(100), 
        @blocking_ver_count int, @table_info_name varchar(100), @table_info_reg_id int,
        @table_info_owner varchar(100), @p_stmt nvarchar(200),@a_stmt nvarchar(max), 
        @d_stmt nvarchar(max), @row_count int

DECLARE table_info_cur CURSOR FOR
    SELECT owner, table_name, registration_id
    FROM sde.sde_table_registry
    WHERE sde.sde_table_registry.object_flags&8 = 8
        
DECLARE ver_list_cur CURSOR FOR
    SELECT DISTINCT state_id
      FROM sde.sde_versions
      WHERE name = 'DEFAULT' and owner IN ('SDE', 'DBO')
      ORDER BY state_id;

SELECT @state_id=state_id, @lin_name = lineage_name FROM sde.sde_states
WHERE state_id = (SELECT state_id FROM sde.sde_versions WHERE name = 'DEFAULT' and owner IN ('SDE', 'DBO'));

SET @cur_max_state = @state_id
PRINT '========== Versioning Statistics ================='
PRINT ''
PRINT 'Number of versions: ' + CONVERT(varchar, @ver_count)
PRINT '=============='
OPEN ver_list_cur
FETCH NEXT FROM ver_list_cur INTO @ver_info_state_id
    WHILE @@FETCH_STATUS = 0
    BEGIN
        SELECT @row_count = COUNT(*) FROM sde.sde_state_lineages WHERE lineage_name = @lin_name AND lineage_id 

Ausgabebeispiel:
==========Versioning Statistics=================
 
Number of versions: 2   ==============
Number of versions blocking DEFAULT: 1
Blocking Versions: 
    dbo.QA
 
Number of states: 3577
Number of state lineages: 100015
Last Compress: 2018-01-09
 
Table:  DBO.CONTROLCORNER (45)
Adds Count:    124
Deletes Count: 124
 
Table:  DBO.PLSSBOUNDARY (46)
Adds Count:    8
Deletes Count: 8

Artikel-ID: 000017513

Holen Sie sich Unterstützung mit KI

Lösen Sie Ihr Problem schnell mit dem Esri Support AI Chatbot.

Beginnen Sie jetzt mit dem Chatten

Zugehörige Informationen

Weitere Informationen zu diesem Thema erkunden

Unterstützung durch ArcGIS-Experten anfordern

An den technischen Support wenden

Beginnen Sie jetzt mit dem Chatten

Zu Download-Optionen wechseln