Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

I would like to make an exact copy (domains, feature datasets, feature classes, etc.) of an SDE database to a file geodatabase.

I have tried several possibilities, including:

  1. using the Copy (Data Management) process
  2. creating a new GDB and manually copying each feature dataset from the SDE
  3. exporting an xml workspace document from the SDE and importing it into the GDB

The Copy_management process does not seem like it would work for copying an SDE to a GDB, since the input and output data types must match.

The process of importing each feature dataset into a new GDB could probably be automated using Copy_management as well by iterating through each feature dataset, though it seems this could cause problems of an incomplete copy if there was an error with one of the processes.

Exporting and importing xml workspaces seems to work, though this process creates incredibly large files when the process is used on large geodatabases.

Is there a more straightforward way to copy the contents and schema of an SDE to a GDB than the ways mentioned, in a way that can be automated?

If not, are there any reasons that the above possibilities should not be used in this process?

share|improve this question
Related: gis.stackexchange.com/q/63368/753 –  blah238 Jul 31 '13 at 17:39

3 Answers 3

up vote 3 down vote accepted

The only way you can get a true copy of the data (domains, datasets, relationships, etc) is to use the manual copy and paste method inside catalog. ESRI has not yet given us the ability to transfer this data over any other way with a single operation that can be scripted easily.

I have a nightly process that copies my two primary SDE Databases to file geodatabases for Continuity of Operations. This is so that in the event of an emergency my staff has some data to work with until my IT shop can rebuild my SDE from backup. After much trial and error I have decided we can live with the limitations of using FeatureClassToFeatureClass_conversion and TableToTable_conversion to transfer our data over every night.

Yes, we lose some of the functionality of the geodatabase but it will now run unattended at night and is ready to go as soon as I get it. In my case the only functionality that we are truly missing (assuming operating under an emergency mode) is that my relationship classes are broken because the conversion resets the ObjectIDs that link the two tables.

Until ESRI gives us more options you will have to look at what are you willing to sacrifice at the moment; time and effort or functionality?

share|improve this answer

If you have admin privileges you can use simple copy and paste commands to export or import sde to file geo-database vise versa and Have a look at here for more details.

Hope this helpful.!

share|improve this answer
Thanks Ganeshnarim - I would like to automate the process using Python, so any manual copy/paste process in ArcCatalog would not fit my needs. I have also had limited success with this method, as it seems (in ArcMap 10.1) copying an SDE simply creates another link to the same database (whereas if this same technique were used on a file or personal geodatabase, a copy would be made) –  Krausers Aug 8 '13 at 12:02

I know this post is a little old but I though I would share my answer since I was faced with the same issue. The following script SHOULD copy all tables, feature classes and relationships not in a dataset and also will copy over all datasets including the feature classes, topology, etc withing the dataset.

import arcpy, os

def replicateDatabase(dbConnection, targetGDB):
    arcpy.env.workspace = dbConnection

    dsList = [arcpy.Describe(a).name for a in arcpy.ListDatasets()]
    fcList = [arcpy.Describe(a).name for a in arcpy.ListFeatureClasses()]
    tblList = [arcpy.Describe(a).name for a in arcpy.ListTables()]

    #Compiles a list of the previous three lists to iterate over
    allDbData = dsList + fcList + tblList

    for sourcePath in allDbData:
        targetName = sourcePath.split('.')[-1]
        targetPath = os.path.join(targetGDB, targetName)
        if arcpy.Exists(targetPath)==False:
            arcpy.Copy_management(sourcePath, targetPath)
            print "Finished copying %s to %s" %(targetName, targetPath)
            print "%s already exists....skipping....." %(targetName)
    print "Completed replication of %s" %(dbConnection)

if __name__== "__main__":
    databaseConnection = "Your_Database_Connection_Path"
    targetGDB = "Your_Target_GDB"

    replicateDatabase(databaseConnection, targetGDB)

I had really good luck with this. I was replicating an SDE database to a file geodatabase. I haven't done too extensive of testing on this script though since it fulfilled all my needs. I tested it using ArcGIS 10.3.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.