4 votos

Eliminar un conjunto de datos de características en SDE 10 mediante programación

¿Existe una forma de eliminar un conjunto de datos de características y todas sus clases de características mediante programación, ya sea utilizando código personalizado o herramientas de línea de comandos preexistentes?

Existe una herramienta proporcionada por SDE llamada sdetable.exe pero no estoy seguro de que esto sirva.

Mis conjuntos de datos de características se configuran en ArcSDE mediante scripts que llaman a un ejecutable personalizado que importa espacios de trabajo XML . Me gustaría tener una forma de eliminar los conjuntos de datos de características que importan los espacios de trabajo XML porque cuando vuelvo a ejecutar los scripts obtengo cosas como esta:

Error del SGBD subyacente [ORA-00972: el identificador es demasiado largo

(VITD.Surface_Drainage_Channel_Area_1)]

El '_1' se añade porque ya existe una clase de rasgo llamada Superficie_Drenaje_Canal_Area. Por lo tanto, me gustaría que mis scripts primero dejaran caer el conjunto de datos de características VITD y todas sus clases de características antes de importar mi documento XML del espacio de trabajo que lo crea.

43voto

Daniel Broekman Puntos 1951

Sdetable (como todas las herramientas de línea de comandos de SDE) no reconoce/comprende la Geodatabse. Dado que un conjunto de datos de características es un objeto de la geodatabase, no se puede utilizar sdetable para eliminarlo.

Tendrá que seguir con un cliente basado en ArcObjects para hacer una eliminación limpia. La forma más fácil sería utilizar el eliminar la herramienta de geoprocesamiento .

10voto

Arda Xi Puntos 1099

Tendrá que eliminar primero las featureclasses y luego el contenedor featuredataset. El conjunto de datos destacados tendrá que estar vacío antes de poder eliminarlo. Es posible que quieras mirar el IDataset.Delete método

3voto

tghw Puntos 14244

Gracias por indicarme la dirección correcta. Aquí está el script de ArcPy que escribí y que me funcionó:

#-------------------------------------------------------------------------------
# Name:        RemoveSdeObjects.py
# Purpose:     Removes all feature datasets, classes and tables for a given user
#              
# Author:      Andy Arismendi
# Created:     23/06/2011
#-------------------------------------------------------------------------------
#!/usr/bin/env python

from optparse import OptionParser
import sys
import os.path
import arcpy
from arcpy import env

def RemoveAllSdeObjects (workspace, user):
    import arcpy
    from arcpy import env

    env.overwriteOutput = True
    env.workspace = workspace

    try:
        datasetList = arcpy.ListDatasets((user + ".*"), "All")

        # Check if the connection failed.
        # Look for message: 'WARNING 000565: Could not connect to server.'
        connMsg = arcpy.GetMessage(2)
        if ('WARNING 000565:' in connMsg):
            raise Exception(connMsg)

        for dataset in datasetList:
            arcpy.Delete_management(dataset)

        featureClassList = arcpy.ListFeatureClasses((user + ".*"), "All")
        for featureClass in featureClassList:
            arcpy.Delete_management(featureClass)

        tableList = arcpy.ListTables((user + ".*"), "All")
        for table in tableList:
            arcpy.Delete_management(table)
    except:
        raise Exception(arcpy.GetMessages() + "\n")
    finally:
        env.workspace = ""

def main():
    # Process parameters.
    try:
        usage = "usage: %prog [options]"
        parser = OptionParser(usage=usage)

        parser.add_option(
            "-s", action="store", type="string", dest="server",
                help="The SDE server name or IP address.")

        parser.add_option(
            "-i", action="store", type="int", dest="port",
                help="The SDE instance port number.")

        parser.add_option(
            "-u", action="store", type="string", dest="username",
                help="The schema owner username.")

        parser.add_option(
            "-p", action="store", type="string", dest="password",
                help="The schema owner password.")

        (options, args) = parser.parse_args()

        # All parameters are required.
        if options.server == None:
            parser.error("Missing required parameter: '-s SDE_SERVER'.")
        if options.port == None:
            parser.error("Missing required parameter: '-i SDE_PORT'.")
        if options.username == None:
            parser.error("Missing required parameter: '-u SCHEMA_OWNER_USERNAME'.")
        if options.password == None:
            parser.error("Missing required parameter: '-p SCHEMA_OWNER_PASSWORD'.")
    except:
        parser.print_help()
        sys.exit(1)

    try:
        sdeConnectionFileDir = os.environ.get("TEMP")
        if sdeConnectionFileDir == None:
            raise Exception("Required environment variable is not defined: 'TEMP'.")

        databaseName = ""
        fileName = options.username + " to " + options.server + ".sde"

        # Delete any pre-existing SDE connection file.
        fullPath = sdeConnectionFileDir + '\\' + fileName
        if os.path.exists(fullPath):
            os.remove(fullPath)

        # Create temporary SDE connection file.
        try:
            arcpy.CreateArcSDEConnectionFile_management (
                sdeConnectionFileDir, fileName,
                options.server, options.port, options.server,
                "DATABASE_AUTH", options.username, options.password,
                "SAVE_USERNAME",
                "SDE.DEFAULT", "SAVE_VERSION"
                )
        except:
            raise Exception(arcpy.GetMessages() + "\n")

        # Remove all SDE objects owned by this user.
        RemoveAllSdeObjects(fullPath, options.username)

        # Remove temporary SDE connection file.
        os.remove(fullPath)
    except Exception as e:
        print "Failed to remove SDE objects.", e
        sys.exit(1)

if __name__ == '__main__':
    main()

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X