Для администрирования баз геоданных и управления данными, которые вы выполняли командами администрирования ArcSDE, используйте инструменты геообработки, скрипты Python или инструменты администрирования баз геоданных в ArcGIS Desktop.
В следующих разделах описывается, как выполнять обычные операции администрирования баз геоданных и управления данными для многопользовательских баз геоданных.
Администрирование базы геоданных
Некоторые задачи администрирования требуют подключения из-под администратора баз геоданных; некоторые – подключения из-под администратора баз данных. Во многих случаях, если вы будете записывать в скрипте задачи администрирования, потребуется создать файл подключения к базе данных (.sde), который создает подключение как для обязательного пользователя. Чтобы создать файл, используйте инструмент геообработки Создать Подключение базы данных или диалоговое окно Подключение к базе данных в ArcGIS Desktop.
Создание базы геоданных | Инструмент |
---|---|
Создание базы геоданных в Microsoft SQL Server, Oracle или PostgreSQL | Инструмент геообработки Создать многопользовательскую базу геоданных или Включить многопользовательскую базу геоданных |
Создание базы геоданных в IBM DB2 или IBM Informix | Инструмент геообработки Включить многопользовательскую базу геоданных |
Контроль конфигурации базы геоданных | Инструмент |
---|---|
Добавление ключевых слов и редактирование параметров в DBTUNE | Инструменты геообработки Экспортировать ключевые слова конфигурации баз геоданных и Импортировать ключевые слова конфигурации баз геоданных |
Измените конфигурацию таблицы файла журнала в DB2, Informix или Oracle. | Инструмент геообработки Настроить таблицы файлов журнала базы геоданных |
Удаление схемы базы геоданных из Oracle | Инструмент геообработки Удалить схему базы геоданных |
Обновление базы геоданных | Инструмент геообработки Обновить базу геоданных |
Управление версионными базами геоданных | Инструмент |
---|---|
Создание версии базы геоданных | Инструмент геообработки Создать версию или диалоговое окно Менеджер версий в ArcGIS Desktop |
Согласование версии | Инструмент геообработки Согласовать версии или с помощью функции Согласовать в ArcMap |
Закрепление изменений в родительской версии | Инструмент геообработки Закрепить версию или с помощью функции Закрепить в ArcMap |
Сжатие версионной базы геоданных | Инструмент геообработки Сжатие или функция Сжать базу данных в ArcGIS Desktop |
Удаление версии базы геоданных | Инструмент геообработки Удалить версию или диалоговое окно Менеджер версий в ArcGIS Desktop |
Диагностика и восстановление версии таблиц метаданных и системных таблиц | Инструменты геообработки Диагностировать метаданные версии, Восстановить метаданные версии, Диагностировать таблицы версии и Восстановить таблицы версии |
Обновление индексов для версии системных таблиц | Откройте инструмент геообработки Перестроить индексы |
Обновление статистики для версии системных таблицах |
Управление подключениями | Инструмент |
---|---|
Получение списка текущих подключений баз геоданных | На вкладке Подключения в диалоговом окне Администрирование базы геоданных в ArcGIS DesktopListUsers или с помощью функции Python Можно просмотреть все блокировки для подключений на вкладке Блокировки диалогового окна Администрирование базы геоданных. |
Сброс подключений из базы геоданных | На вкладке Подключения в диалоговом окне Администрирование базы геоданных в ArcGIS Desktop или DisconnectUserс помощью функции Python |
Временная блокировка подключений к базе геоданных и повторное включение подключений | На вкладке Подключения в диалоговом окне Свойства базы данных в ArcGIS Desktop или AcceptConnectionsс помощью функции Python |
Управление данными
При загрузке данных в много пользовательскую базу геоданных пользователь, из-под которого вы подключаетесь, будет владельцем данных в базе геоданных. Некоторые задачи управления базой геоданных, например, назначение прав доступа или перестроение индексов, можно выполнять, только являясь владельцем данных. До выполнения этих задач убедитесь, что был создан файл подключения к базе данных (.sde), который подключается с под правильным пользователем.
В большинстве случаев для загрузки данных или управления использовались скрипты, содержащие команды администрирования ArcSDE; поэтому для задач управления данными, перечисленных в следующих разделах, приведены примеры скриптов.
Если вы желаете чтобы создание файла подключения к базе данных было частью каждого скрипта, используйте CreateDatabaseConnection_management.
Экспорт ресурсов базы геоданных в переносимом файле.
Описание: Экспорт схемы базы геоданных, отношений, поведения и данных в XML-документы рабочей области для общего доступа к ним. Вы можете также экспортировать поднабор ресурсов базы геоданных в XML-документ рабочей области.
Используемый инструмент: Экспорт в XML-документ рабочей области
Пример скрипта:
""" Export geodatabase contents to a portable file """
import arcpy
import sys
def ExportXMLWorkspaceDocument(in_data, out_file, export_type=None, storage_type=None, export_metadata=None):
""" Export geodatabase contents to a portable file """
try:
arcpy.ExportXMLWorkspaceDocument_management(in_data,
out_file,
export_type,
storage_type,
export_metadata)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
ExportXMLWorkspaceDocument(*arguments)
Импорт новых ресурсов в базу геоданных
Описание: XML-документы рабочей области, включающие схему базы геоданных, отношения, поведение, а также данные. Вы можете импортировать XML-документ рабочей области, который содержит только схему базы геоданных, а затем загрузить ваши собственные данные в эту схему. Или вы можете создать шаблонную базу геоданных, экспортировать схему и отношения из базы геоданных в XML-документ рабочей области, и затем выполнить импорт этого документа в новую базу геоданных.
Используемый инструмент: Импорт в XML-документ рабочей области
Пример скрипта:
""" Import new gdb contents """
import arcpy
import sys
def ImportXMLWorkspaceDocument(target_geodatabase, in_file, import_type=None, config_keywords=None):
""" Import new gdb contents """
try:
arcpy.ImportXMLWorkspaceDocument_management(target_geodatabase,
in_file,
import_type,
config_keywords)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
ImportXMLWorkspaceDocument(*arguments)
Импорт ресурсов с перезаписью старых
Описание: XML-документы рабочей области, включающие схему базы геоданных, отношения, поведение, а также данные. Описание: XML-документы рабочей области, включающие схему базы геоданных, отношения, поведение, а также данные. Выполняется, если вы получили обновленные данные проекта из другого источника и хотите внести самые свежие данные и определения.
Используемые инструменты Удалить вместе с Импорт XML-документа рабочей области
Пример скрипта:
""" Imports contents to overwrite old contents """
import arcpy
import sys
from xml.etree import ElementTree
import re
def FindDatasets(xml_file):
""" Open xml file and identify datasets """
xmldoc = ElementTree.ElementTree()
xmldoc.parse(xml_file)
root = xmldoc.getroot()
contents = []
for i in root.findall('WorkspaceDefinition/DatasetDefinitions/DataElement'):
contents.append(i.findtext('Name'))
for j in i.findall('./Children/DataElement/CatalogPath'):
contents.append('/'.join(re.split(r'/[a-z|A-Z]*=', j.text)[1:]))
contents.reverse()
return contents
def DeleteDatasets(database, datasets):
""" Delete dataset in database """
for ds in datasets:
try:
arcpy.Delete_management(os.path.join(database, datasets))
except:
print('Unable to delete {}'.format(ds))
def ImportXML(database, xml_file):
""" Import XML workspace document """
arcpy.ImportXMLWorkspaceDocument_management(database, xml_file)
if __name__ == "__main__":
xml_file = sys.argv[1]
database = sys.argv[2]
datasets = FindDatasets(xml_file)
DeleteDatasets(database, datasets)
ImportXML(database, xml_file)
arcpy.ImportXMLWorkspaceDocument_management(database, xml_file)
Импорт одного шейп-файла или покрытия и полей карты
Описание: Укажите, какие поля из импортируемого шейп-файла или покрытия соответствуют каким полям в выходном классе пространственных объектов базы геоданных.
Используемые инструменты: ListFields вместе с FeatureClassToFeatureClass_conversion вместе с FieldMappings
Пример скрипта:
import arcpy
import os
arcpy.env.overwriteOutput = True
input_features = r'C:\Users\davi4075\Documents\ArcGIS\lakes.shp'
out_fc = r'C:\Users\davi4075\Documents\ArcGIS\mexico.gdb\out_lakes'
fms = arcpy.FieldMappings()
fms.fieldValidationWorkspace = os.path.dirname(out_fc)
# Cycle through input field to transfer
for field in arcpy.ListFields(input_features):
# Exclude geometry and objectid fields
if field.type not in ['Geometry', 'OID']:
fm = arcpy.FieldMap()
fm.addInputField(input_features, field.name)
# if altering field properties, need to push updated field back
# to FieldMap
field.name = field.name.upper()
fm.outputField = field
# Insert FieldMap into FieldMappings
fms.addFieldMap(fm)
arcpy.FeatureClassToFeatureClass_conversion(
input_features, os.path.dirname(out_fc), os.path.basename(out_fc),
field_mapping=fms)
Импорт множества шейп-файлов или покрытий сразу
Описание: Импорт множества шейп-файлов или покрытий одновременно
Используемые инструменты: Класс объектов в базу геоданных
Пример скрипта:
""" Import multiple shapefiles or coverages at one time """
import arcpy
import sys
def ImportMultiple(input_features, output_database):
"""
Import multiple shapefiles or coverages at one time
input_features -- semi-colon delimited string of shapefiles and/or coverages
"""
try:
arcpy.FeatureClassToGeodatabase_conversion(input_features, output_database)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
ImportMultiple(*arguments)
Импорт множества шейп-файлов или покрытий и назначение прав доступа к новым классам пространственных объектов для существующих групп баз данных
Описание: Импорт множества шейп-файлов или покрытий и назначение прав доступа к выходным классам пространственных объектов для существующих групп баз данных так, чтобы участники групп обладали правами доступа к новым классам.
Используемые инструменты: Класс объектов в базу геоданных вместе с Изменить права доступа
Пример скрипта:
"""
Import multiple shapefiles or coverages and grant privileges on new feature
classes to existing groups or users
"""
import arcpy
import sys
def ImportMultipleAndGrantPrivileges(input_features, output_database, user, view=None, edit=None):
"""
Import multiple shapefiles or coverages and grant privileges on new feature
classes to existing groups or users
"""
try:
feature_classes = input_features.split(';')
for fc in feature_classes:
out_fc = arcpy.CreateUniqueName(fc, output_database)
arcpy.FeatureClassToFeatureClass_conversion(fc, out_fc)
arcpy.ChangePrivileges_management(out_fc, user, view, edit)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
ImportMultipleAndGrantPrivileges(*arguments)
Комбинирования множества шейп-файлов в один класс пространственных объектов
Описание: Применяется, если у вас есть шейп-файлы с одним и тем же типом данных, и вы хотите скомбинировать их в один класс объектов в вашей базе геоданных. Например, у вас есть шейп-файлы точек, местоположений школ по различным округам, вы можете импортировать эти шейп-файлы в один класс пространственных объектов Школы в вашу базу геоданных.
Используемые инструменты: Геометрическое соединение вместе с Слияние
Пример скрипта:
""" Combine multiple shapefiles into one feature class """
import arcpy
import sys
def CombineMultipleFeatureClasses(input_features, output_or_target):
""" Combine multiple shapefiles into one feature class """
try:
feature_classes = input_features.split(';')
if arcpy.Exists(output_or_target):
arcpy.Append_management(feature_classes, output_or_target)
else:
arcpy.Merge_management(feature_classes, output_or_target)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
CombineMultipleFeatureClasses(*arguments)
Импорт множества таблиц
Описание: Импорт множества таблиц dBASE, INFO, VPF, OLE DB или таблиц базы геоданных в вашу многопользовательскую базу геоданных одновременно
Используемые инструменты: Таблица в базу геоданных
Пример скрипта:
""" Import multiple nonspatial tables """
import arcpy
import sys
def ImportTables(in_tables, target_database):
"""
Export data to a shapefile
in_tables -- semi-colon delimited string of tables
target_database -- the database were tables will be added
"""
try:
tables = in_tables.split(";")
arcpy.TableToGeodatabase_conversion(tables, target_database)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
ImportTables(*arguments)
Сокращение таблицы или класса объектов и присоединение полей
Описание: Если вы получили обновленные данные из стороннего источника, вы можете защитить свою существующую таблицу и права доступа, указанные для неё, с помощью сокращения таблицы и присоединения обновленных данных.
Используемые инструменты: Сократить таблицу вместе с Геометрическое соединение
Пример скрипта:
""" Truncate table or feature class and append records """
import arcpy
import sys
def TruncateTableOrFeatureClass(in_table, target_table):
""" Truncate table or feature class and append records """
try:
arcpy.TruncateTable_management(target_table)
arcpy.Append_management(in_table, target_table, schema_type="NO_TEST")
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
TruncateTableOrFeatureClass(*arguments)
Сокращение таблицы или класса объектов, присоединение записей и обновление статистики базы данных
Описание: Если вы получили обновленные данные из стороннего источника, вы можете защитить свою существующую таблицу и права доступа, указанные для нее, с помощью сокращения таблицы и присоединения обновленных данных. Если таблица содержит большое число записей, вам может потребоваться обновить статистику базы данных, чтобы она включала обновления в таблице.
Используемые инструменты: Сократить таблицу вместе с Геометрическое соединение, вместе с Анализировать наборы данных
Пример скрипта:
"""
Truncate table or feature class, append records, and update
database statistics
"""
import arcpy
import sys
import os
def TruncateTableOrFeatureClass(in_table, target_table):
"""
Truncate table or feature class, append records, and update
database statistics
"""
try:
arcpy.TruncateTable_management(target_table)
arcpy.Append_management(in_table, target_table)
descr = arcpy.Describe(os.path.dirname(target_table))
if getattr(descr, 'connectionProperties', None):
conn = os.path.dirname(target_table)
else:
conn = os.path.dirname(os.path.dirname(target_table))
arcpy.AnalyzeDatasets_management(conn)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
TruncateTableOrFeatureClass(*arguments)
Создание непространственного представления базы данных
Описание: Представление базы данных, которое может комбинировать данные из множества таблиц и ограничивать атрибуты, получаемые из исходных таблиц.
Используемые инструменты: Создать представление базы данных
Пример скрипта:
""" Create nonspatial view """
import arcpy
import sys
def CreateNonspatialView(input_database, view_name, view_definition):
""" Create nonspatial view """
try:
arcpy.CreateDatabaseView_management(input_database, view_name, view_definition)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
CreateNonspatialView(*arguments)
Создание представления базы данных, которое содержит столбец типа геометрии SQL
Описание: Представление базы данных, которое может комбинировать данные из множества таблиц и ограничивать атрибуты, получаемые из исходных таблиц. Вы можете включать один столбец типа геометрии SQL в представление, пространственные данные могут отображаться в ArcGIS.
Используемые инструменты: Создать представление базы данных
Пример скрипта:
""" Create view containing SQL geometry type column """
import arcpy
import sys
def CreateSpatialView(input_database, view_name, view_definition):
""" Create view containing SQL geometry type column """
try:
arcpy.CreateDatabaseView_management(input_database, view_name, view_definition)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
CreateSpatialView(*arguments)
Создание представления, которое содержит столбец типа геометрии SQL и регистрация представления с базой геоданных
Описание: регистрация пространственного представления с базой геоданных позволяет хранить информацию об экстенте пространственных данных, типе геометрии и пространственной привязке. Если эта информация хранится в системных таблицах базы геоданных, это позволит сократить время на отрисовку объектов, когда они добавляются для просмотра на карте. Добавьте один столбец типа геометрия SQL и один столбец ObjectID.
Используемые инструменты: Создать представление базы данных и Зарегистрировать в базе данных
Пример скрипта:
""" Create view containing SQL geometry type column """
""" Register view with the geodatabase """
import arcpy
import sys
def CreateSpatialViewAndRegisterWithGeodatabase(input_database, view_name, view_definition):
""" Create view containing SQL geometry type column and then register with the geodatabase """
try:
arcpy.CreateDatabaseView_management(input_database, view_name, view_definition)
arcpy.RegisterWithGeodatabase_management(view_name)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
CreateSpatialViewAndRegisterWithGeodatabase(*arguments)
Удалить таблицы
Описание: Вы можете удалять несколько таблиц из базы геоданных одновременно. Это можно использовать при работе с временными файлами, например, специфичными для проекта, или при размещении данных, полученных от стороннего источника.
Используемые инструменты: Удалить
Пример скрипта:
""" Delete nonspatial tables """
import arcpy
import sys
def DeleteNonspatialTables(in_data):
"""
Delete nonspatial tables
in_data -- semi-colon delimited string of tables
"""
try:
tables = in_data.split(';')
for table in tables:
arcpy.Delete_management(table)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
DeleteNonspatialTables(sys.argv[1])
Удаление класса пространственных объектов
Описание: Вы можете удалять несколько классов пространственных объектов из базы геоданных одновременно. Это можно использовать при работе с временными файлами, например, специфичными для проекта, или при размещении данных, полученных от стороннего источника.
Используемые инструменты: Удалить
Пример скрипта:
""" Delete feature classes """
import arcpy
import sys
def DeleteFeatureClasses(in_data):
"""
Delete feature classes
in_data -- semi-colon delimited string of feature classes
"""
try:
feature_classes = in_data.split(';')
for fc in feature_classes:
arcpy.Delete_management(fc)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
DeleteFeatureClasses(sys.argv[1])
Экспорт данных в шейп-файл
Описание: Экспорт класса объектов в шейп-файл.
Используемые инструменты: Класс объектов в шейп-файл
Пример скрипта:
""" Export data to a shapefile """
import arcpy
import sys
def ExportToAShapefile(in_table, target_shp):
""" Export data to a shapefile """
try:
if arcpy.Exists(target_shp):
arcpy.Append_management(in_table, target_shp, schema_type="NO_TEST")
else:
arcpy.CopyRows_management(in_table, target_shp)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
ExportToAShapefile(*arguments)
Согласование, закрепление и сжатие версионной базы геоданных
Описание: Создается версия данных и вашей базы геоданных для рабочих процессов редактирования, которые включают одновременную правку на нескольких рабочих местах в течение длительного временного периода. Для выполнения требуется определенная поддержка базы геоданных. Она включает согласование версионных данных с родительской версией, чтобы вносить изменения, закрепление изменений из дочерней версии в родительской версии и сжатие базы геоданных, чтобы удалить нетребуемые статусы версий.
Используемые инструменты: Согласовать версии вместе с Сжать
Пример скрипта:
""" Reconcile, post, and compress versioned geodatabase """
import arcpy
import sys
def ReconcilePostAndCompress(input_database, reconcile_mode):
"""
Reconcile, post, and compress versioned geodatabase
"""
try:
arcpy.ReconcileVersions_management(input_database, reconcile_mode)
arcpy.Compress_management(input_database)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
ReconcilePostAndCompress(*arguments)
См. также Использование скриптов Python для пакетного согласования и закрепления версий
Весионные таблицы или классы объектов, добавление к ним global ID и создание реплик
Описание: Таблицы или классы объектов должны быть зарегистрированы как версионные и содержать столбец global ID, чтобы участвовать в репликации.
Используемые инструменты: Зарегистрировать как версионные вместе с Добавить GlobalID вместе с Создать реплику
Пример скрипта:
""" Version tables, add global IDs to tables, and create a replica """
import arcpy
import sys
def VersionTablesEtc(in_tables, in_type=None, out_geodatabase=None, out_name=None):
""" Version tables, add global IDs to tables, and create a replica """
try:
tables = in_tables.split(';')
for table in tables:
arcpy.RegisterAsVersioned_management(table)
arcpy.AddGlobalIDs_management(tables)
if 'CreateReplica' in dir(arcpy.management):
arcpy.CreateReplica_management(tables, in_type, out_geodatabase, out_name)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
arguments = sys.argv[1:]
VersionTablesEtc(*arguments)
Регистрация сторонней таблицы в базе геоданных
Описание: Если вы используете сторонние приложения или SQL для создания таблиц (и пространственных, и не пространственных) в базе данных, где хранится ваша база геоданных, то вы можете зарегистрировать эти таблицы в базе геоданных. При этом в системные таблицы базы геоданных добавляется информация о данных таблицах, и они могут затем участвовать в функциональности базы геоданных.
Используемые инструменты: Зарегистрировать в базе геоданных
Пример скрипта:
""" Register third-party tables with the geodatabase """
import arcpy
import sys
def RegisterThirdPartyTables(in_tables):
"""
Register third-party tables with the geodatabase
in_tables -- semi-colon delimited string of tables
"""
try:
tables = in_tables.split(';')
for table in tables:
arcpy.RegisterWithGeodatabase_management(table)
except arcpy.ExecuteError:
print(arcpy.GetMessages(2))
if __name__ == "__main__":
RegisterThirdPartyTables(sys.argv[1])