Sincronización de Réplicas en Python - En Segundo Plano o Tarea Programable

426
0
11-13-2023 02:29 PM
DylanContreras
New Contributor

 

El código para llevar a cabo la sincronización de réplicas puede ser encontrado en los recursos oficiales de ESRI, específicamente para la creación de réplicas en Python. Este código puede ser implementado directamente en el IDE de ArcGIS Pro u otras derivadas.

Es importante destacar que el código, sin la debida validación a la base de datos, no funcionará correctamente, ya que requiere el envío de parámetros de credenciales para llevar a cabo el proceso de réplica de manera segura.

Este enfoque permite la ejecución o configuración del código como un servicio en el servidor correspondiente o como una tarea programable. No obstante, es posible también crear un código adicional para evitar que la contraseña se establezca directamente en el código, en caso de considerarse necesario por motivos de seguridad y buenas prácticas.

import arcpy
import os

# Definir las credenciales para la conexión a SQL Server
user_name = "dcontreras"
password = "dcontreras"

# Ruta del archivo de conexión
connection_file = r"C:/Users/dmurillo/Documents/ArcGIS/Projects/CRBD09/CRBD09dcontreras.sde"

# Comprobar si el archivo de conexión ya existe y eliminarlo si es así
if arcpy.Exists(connection_file):
    arcpy.Delete_management(connection_file)

# Parámetros para CreateDatabaseConnection
out_folder_path = r"C:/ruta/ruta/Documents/ArcGIS/Projects/CRBD09"
out_name = "CRBD09dcontreras.sde"
database_platform = "SQL_SERVER"
instance = "CRBD09"
account_authentication = "DATABASE_AUTH"

# Crear la conexión de base de datos
try:
    arcpy.management.CreateDatabaseConnection(
        out_folder_path, out_name, database_platform, instance,
        account_authentication, user_name, password, "SAVE_USERNAME"
    )

    print(f"Archivo de conexión creado en: {connection_file}")

    # Set local variables para la sincronización
    replica_gdb1 = connection_file
    replica_gdb2 = r"C:/ruta/ruta/ReplicaCNFL.gdb"
    replica_name = "ReplicaCNFL01"
    sync_direction = "FROM_GEODATABASE1_TO_2"
    conflict_policy = "IN_FAVOR_OF_GDB1"
    conflict_detection = "BY_OBJECT"
    reconcile = "DO_NOT_RECONCILE"

    # Execute SynchronizeChanges
    arcpy.SynchronizeChanges_management(replica_gdb1, replica_name, replica_gdb2, 
                                        sync_direction, conflict_policy, 
                                        conflict_detection, reconcile)
    print("Sincronización exitosa.")

except arcpy.ExecuteError:
    print("Error de ejecución de arcpy.")
    arcpy.AddError(arcpy.GetMessages(2))

except Exception as e:
    print(f"Otro error inesperado: {str(e)}")

 

Tags (1)
0 Replies