Как правильно создать резервную копию файловой базы геоданных ESRI, опубликованной на ArcGIS Server?

11

У меня есть файловая база геоданных ESRI (v10), которая опубликована в картографическом сервисе arcgis server. Когда служба работает, fGDB заблокирован. Нужно ли останавливать службу, чтобы получить чистую резервную копию? Или есть способ выполнить резервное копирование через скрипт arcpy или через каталог? В настоящее время я использую Windows robocopy для переноса fGDB на резервный диск. Вот вывод, показывающий заблокированные файлы:

 New File           0 Bikepaths.CFP0026.4968.5140.sr.lock
 New File           0 BuildingFootprints.CFP0026.4968.5140.sr.lock

и т. д.

mogollon22
источник

Ответы:

4

Любой сервер должен иметь теневой диск. Вы можете использовать «теневой диск» , чтобы уплотнить файл базы геоданных и удалит .lock файлы и изменить порядок файлов в наиболее эффективным способом. Затем вы можете создать резервную копию этого файла. Вот хорошая пара хороших отправных точек:

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/File_geodatabases_compressing_vs_compacting/003n0000007r000000/

Примечание: у теневого диска есть другое имя зеркалирования диска

http://en.wikipedia.org/wiki/Disk_mirroring

Mapperz
источник
Ах, я всегда предполагал, что сжатие было для баз геоданных sde. Благодаря!
mogollon22
Я управляю несколькими серверами, и ни один из них не имеет теневых или зеркальных дисков, хотя они имеют избыточные диски (RAID5, Drobo) и могут пережить сбой одного или нескольких дисков без потери данных. Как бы то ни было, кроме этого возражения, я копирую fgdb с помощью xcopy(или xxcopy ), пропускаю сбои, а затем уплотняю результат. Это не лучшее решение, поскольку класс пространственных объектов заблокирован из-за того, что сеанс редактирования может быть поврежден, но это ничем не отличается от теневого / зеркального диска.
Мэтт Уилки
2

У нас есть несколько высокопроизводительных рабочих веб-приложений, которые работают на FGDB на внутреннем сервере. FGDB уничтожаются и перестраиваются со свежими данными каждую ночь. Я написал консольное приложение .NET, основанное на AGSSOM, которое останавливает службы во время процесса обновления. Проверьте AGSSOM, это довольно гладко. Вот некоторые из C #, которые я использую, чтобы сделать резервную копию текущей FGDB, прежде чем я ее уничтожу:

// Only archive it FGDB already exists, if this is first run, then nothing to archive
            if (Directory.Exists(String.Concat(c.fgdbDir, @"\", kvp.Key[0], ".gdb")))
            {
                c.msg = String.Concat(Environment.NewLine, "Archiving data for ", kvp.Key[0], " - ",
                                      DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss tt"));
                Messaging.Log(c.msg, c.lw);
                // Create the FGDB folder in archive dir if not already there
                if (!Directory.Exists(String.Concat(c.fgdbArchiveDir, @"\", kvp.Key[0], ".gdb")))
                {
                    Directory.CreateDirectory(String.Concat(c.fgdbArchiveDir, @"\", kvp.Key[0], ".gdb"));
                    // Now copy from clips to archive
                    foreach (FileInfo fi in source.GetFiles())
                    {
                        fi.CopyTo(System.IO.Path.Combine(target.ToString(), fi.Name), true);
                    }
                }
            }

Он просто использует Directory.CreateDirectory и FileInfo.CopyTo для копирования FGDB - Windows видит FGDB просто как другую папку. Работает как чемпион. Затем, после завершения процесса обновления, мы снова запускаем службы с помощью приложения на основе AGSSOM.

Чед Купер
источник
Это было чрезвычайно ценно!
mogollon22