使用arcpy将arcgis的SDE数据库备份到GDB中

使用场景:1.工作中经常需要将SDE库中的数据备份到GDB中,2.基于数据安全要时常手动去备份SDE数据库。
整个自动备份分为两个脚本:sde_bak.bat与sde_to_gdb.py。其中sde_to_gdb.py是进行数据备份的脚本。sde_bak.bat是执行sde_to_gdb.py脚本的定时任务。
创建sde_to_gdb.py脚本:

# -*- coding: utf-8 -*-
# Import arcpy module
import os
import arcpy
from arcpy import env
import time
import sys
if sys.getdefaultencoding() != 'gbk':
    reload(sys)
    sys.setdefaultencoding('gbk')

################################################################
#需要备份的空间库的用户名(只需将其中的TEST替换成对应的用户名,需要保留**    。*的格式
sdeuser='**TEST.*'
#备份生成gdb的名称
out_GDB_Name ='TEST'
#sde库的物理路径  arcgis中sde的连接地址
env.workspace = 'F:\\sde_copy\\Connection to localhost.sde'
################################################################
#如果要素重复直接覆盖
env.overwriteOutput = True
################################################################
#获取系统的年月日
yyMMdd = time.strftime('%Y%m%d', time.localtime(time.time()))
#获取系统的当前时间
hhmmss = time.strftime('%H%M%S', time.localtime(time.time()))
#构建gdb的绝对路径
out_GDB_Folder_Path = "F:\\sde_copy\\" + yyMMdd
out_GDB_Name = out_GDB_Name+'_'+hhmmss
#创建gdb目录
if not os.path.exists(out_GDB_Folder_Path):
    os.mkdir(out_GDB_Folder_Path)
    print('Directory Created')
#GDB文件路径
out_GDB_Path = out_GDB_Folder_Path + '\\' + out_GDB_Name + '.gdb'
print('GDB_Path:'+out_GDB_Path)
#################################################################################
#创建GDB文件
arcpy.CreateFileGDB_management(out_GDB_Folder_Path, out_GDB_Name, "CURRENT")
print('GDB Created')
#################################################################################
print("SDE_To_GDB Starting")
#################################################################################
#遍历要素类数据并进行拷贝
fclist = arcpy.ListFeatureClasses(sdeuser)
for fc in fclist:
    print(fc)
    basename = arcpy.Describe(fc).basename
    outname =os.path.join(out_GDB_Path,basename.split('.')[1])
    # outname = os.path.join(out_GDB_Path, basename)
    str = basename.split('.')[1]
    print(str + "_FeatureClass Copy Done")
    arcpy.CopyFeatures_management(fc, outname)

#################################################################################
#遍历要素集及要素集中要素类并进行拷贝
dslist = arcpy.ListDatasets(sdeuser)
for ds in dslist:
    dsname = arcpy.Describe(ds).basename
    outdsname = os.path.join(out_GDB_Path, dsname.split('.')[1])
    sr = arcpy.Describe(ds).SpatialReference
    # outdsname = os.path.join(out_GDB_Path, dsname)
    print(outdsname)
    arcpy.CreateFeatureDataset_management(out_GDB_Path, dsname.split('.')[1],sr)
    fclist = arcpy.ListFeatureClasses('','',dsname)
    for fc in fclist:
        basename = arcpy.Describe(fc).basename
        outname = os.path.join(outdsname, basename.split('.')[1])
        str = basename.split('.')[1]
        print(str + "_FeatureClass Copy Done")
        arcpy.CopyFeatures_management(fc, outname)

print('SDE_TO_GDB  Done')

创建sde_bak.bat脚本

@echo off
:这里使用arcgis自带的python编辑器。
C:
cd C:\Python27\ArcGIS10.2
python F:\sde_copy\sde_to_gdb.py

sde_to_gdb.py脚本创建之后可以进行测试,cmd到arcgis自带的python安装目录文件夹下。

你可能感兴趣的:(使用arcpy将arcgis的SDE数据库备份到GDB中)