опять unable to save edits!!!

0 голосов
спросил 07 Июнь, 05 от Гость (210,080 баллов) в категории Программные продукты Esri

Уважаемый Григорий!
вы очень подробно попытались изложить "нормальный процесс многопользовательского редактирования без

сохранения истории изменений".
И, чесно говоря, это на много приятнее чем когда Вы даете просто ссылки на различные источники. Но все же у

меня много вопросов к Вам (или другим модераторам), потому как я хочу добится нормальной работы в ArcGis 8.2

через ArcSDE 8.2.
в теме ERROR!!!!!!!!!!!!!!!!!!!!!!!!help! Вы постарались широко и полно изложить одну из причин по которой может

появится сообщение "unable to save edits", но многое мне до сих пор пор осталось не понятным и поэтому, если это

Вас сильно не затруднит, то, пожалуйста, дайте ответы на мои вопросы.
Вы пишите:" не давай те права dbo sde-пользователям, чтобы SQL-сервер не создавал все объекты в базе с

префиксом dbo."
это мне понятно если не стоит значит не стоит. я захожу на сервер в раздел  Security выбираю logins правой

кнопкой на логине и выбираюnew login. Хоть это и не рекомендуется (потому как данные передаются в открытом

виде)но я всеже использую SQL server autentification и задаю имя пользователя и пароль. на закладке server roles

я естественно ничего не ставлю так как не хочу чтобы пользователь обладал админскими привелегиями. На

закладке database access выбираю доступ только к одной базе, где находятся данные  (БД SDE) и создаю

пользователя подтвердив пароль.
после этого я правой кнопкой на базе SDE и на закладке permission добавленому пользователю ставлю галочки

под разделами create table, createview, createSP, create function
и после этого пользователю который по дефолту обладает правами public я еще ему присваиваю права dbo_owner,

потому как другие варианты
 (если не считать присвоение прав админа) не дают возможность редактировать слои.
пожалуйста подскажите что я делал не так???
Вы говорите:" Для каждого login SDE создает свой отдельный лог файл, в котором хранятся выборки объектов из

SDE. Если два пользователя входят под одним login, то могут проблемы."
Проверяю таблицы: Захожу в базу через ЕМ  захожу в tables и нахожу  SDE logfile_data и SDE_logfiles в колонке

owner стоит имя пользователя. Для каждого заведенного пользователя есть по 2 файла (SDE logfile_data и

SDE_logfiles) можно сделать вывод что у меня на каждого пользователя свой лог файл, но читаем дальше. Вы

говорите:"Когда вы регистрируете данные как версионные, то для каждого слоя в базе создается 2 таблицы Аххх и

 Dххх."
проверяю действительно есть у меня таблички а34, а37, а38 и с такими же номерами только буквой d но есть одна

проблема, напротив этих таблиц стоит владелец dbo и нет других таких таблиц где владельцем бы был

пользователь. так ли это должно быть??? или это уже связано с тем что я каждому пользователю присвоил права

dbo и "создает все объекты в базе с префиксом dbo". пожалуйста объясните...
читаю дальше...
Вы говорите:"Все изменения, выполненные пользователями для данного слоя попадают  в эти две таблицы (Ахх и

Dхх). Туда же и записывается состояние STATE_ID, которое связано с версией".
эта фраза меня сильно заинтересовала потому как я получаю сообщение "unable to save edits" следующим

сообщением может быть что то на подобии ошибка STATE_ID=21769 (например). тогда у меня вопрос что такое это

STATE_ID??? и может если я перелопачу все таблицы Ахх и Dхх и тупо поудаляю все строки где STATE_ID=21769 то

может я смогу сохранится в таком случае.... ведь легче потом дорисовать эти объекты чем не сохранить целую

пачку данных??? Хотя может это не правильно может удалив строку из таблицы я тем самым нарушу целостность

всей базы???? опять посоветуйте как правильно поступить????
и на последок что значит "выполянть компрессию данных" пожалуйста расскажите что это такое, и как это делать.
пожалуйста, если Вас не затруднит, постарайтесь ответить на мои вопросы подробнее, потому как все мы учимся...

3 Ответы

0 голосов
ответил 08 Июнь, 05 от Grigoriy (127,020 баллов)

Ошибка Ваша вот в этой строке - "и после этого пользователю который по дефолту обладает правами public я еще ему присваиваю права dbo_owner".

В SDE три типа пользователей:

1. user SDE - владелец репозитория, т.е. служебных таблиц SDE.

2. пользователь-владелец данных (owner) - это пользователь, который загружал данные в SDE. Все загруженные слои и таблицы будут принадлежать ему. Этот пользователь может выдавать права остальным пользователям на чтение или запись своих данных.

3. Остальные пользователи. Если им дали права могут или просто просматривать, или редактировать данные.

Для SDE 8.2+MSSQL репозиторий хранится в отдельной базе SDE. Т.е. все пользователи SDE должны иметь доступ к этой базе на чтение (только роль public). Сами данные могут находиться в других базах. Следовательно user SDE должен иметь доступ на чтение к тем базам, в которых будут создаваться данные. User SDE должен иметь права create table, create view, createSP, create function только в базе SDE. Владельцу данных достаточно create table, createSP в базе SDE, и в той базе, где будут лежать данные. Остальным пользователям достаточно только роли public на базу SDE и базу с данными. Права на просмотр и редактирование выдаёт владелец данных через ArcCatalog или командой SDE c командной строки. НЕЛЬЗЯ давать роль dbo пользователям, которые загружают или редактируют данные. Т.к. SQL при запросах об имени пользователя возвращает в этом случае - dbo. И sde считает, что редактирование производил пользователь dbo.

Самый надёжный путь сейчас для Вас - выгрузить данные в персональную базу и проверить, что они все на месте. Потом удалить данные из SDE с помощью ArcCatalog. Аккуратно выдать права пользователю sde и владельцу-данных. Загрузить данные назад под логином владельца данных. Проверить, что пользователи-редакторы не имеют роли dbo. В ArcCatalog'е правой кнопкой на наборе данных раздать права на редактирование-чтение. ДЛЯ ВСЕХ классов объектов, находящихся в одном НАБОРЕ ДАННЫХ пользователь должен иметь ОДИНАКОВЫЕ ПРАВА - нельзя дать права на редактирование только одного класса в наборе данных, т.к. они могут быть включены в топологические отношения. Сделать данные версионными. Каждый редактор данных должен иметь свой собственный логин к серверу и соответсвенно этому логину должны быть заведены пользователи в базе SDE и в базе с данными. Имя пользователя в базе в отличии от логина должно быть коротким и не содержать служебных символов. Пример: логин - DATA\grigory, user - grigory.

Теперь о компрессии. Если кратко, то эта команда выполняет очистку таблиц состояний и физически переносит изменения из таблиц Axxx и Dxxx в основную таблицу класса объектов, очищая таблицы Axxx и Dxxx. Если редактирование идёт интенсивно, то эту команду необходимо выполнять почаще - не реже раза в неделю. Иначе снижается производительность работы SDE. Команда выполняется с помощью ArcCatalog только пользователем SDE. Компрессия для 8.2 выполняется целиком на всю базу при отключенных от SDE пользователях. В коннекте должна быть указана нужная база данных, в которой лежат данные. Команда по умолчанию отсутствует в интерфейсе ArcCatalog. Её нужно добавить - в ArcCataloge Tools->Customize-Закладка Commands->Geodatabase Tools->Compress Database.

Читайте внимательно config_tuning_guide, editing in ArcMap->working with versioning geodatabase.

И переходите на новые версии ArcGIS и ArcSDE.

 

0 голосов
ответил 09 Июнь, 05 от Гость (210,080 баллов)

Уважаемый Григорий!
Большое спасибо за Ваш ответ.

Все данные я с помощью Arcatalog перегнал в шейп-файлы и проверил все ли объекты сохранены (слава Богу, все в порядке).

Теперь необходимо правильно раздать права. Раньше я служебные и рабочие таблицы хранил в одной базе SDE но, прочитав Ваше письмо, принял решение разделить данные на 2 базы SDE и SDEDATA.

Всем создаваемым мною аккаунтам я присваивал только права public как к базе SDE, так и к базе SDEDATA. С помощью команды privilege я давал права каждому пользователю на выборку или редактирования набора данных. Ко всему я каждому пользователю создавал свои версии.

Но все же мне не все осталось понятным:

Во-первых мне пришлось дать каждому создаваемому пользователю create table чтобы в базе SDE создался его лог-файл. (следует ли мне после создания лога забрать у пользователя это право???

Во вторых при создании объектов в слое каким либо пользователем в таблицах базы SDEDATA создались таблицы АХХХ и ДХХХ но владельцем этих таблиц все же остался DBO а не пользователь который редактировал слой. может так и должно быть хотя мне кажется что нет. Да и Вы в своем письме не говорите что все таблицы должны принадлежать dbo а все загруженные слои и таблицы будут принадлежать dbo. Хотя с другой стороны если простому пользователю я не присовоил право create table то как может создатся таблица от его имени…

С нетерпением жду вашего ответа…

0 голосов
ответил 09 Июнь, 05 от Grigoriy (127,020 баллов)

Сергей, почитайте всё-таки config_tuning_guide для SQL-Server. Раздел называется Logins and users: The rules for ArcSDE.

1. The sdeuser must have create table, create view, and create procedure within thesdedatabase. The sde user must be able to create the metadata tables and storedprocedures that manage an ArcSDE instance. If you are using SQL Server 2000, the sdeuser must also have create functionpermission. 2. The sdelogin must be granted access to any other database in which you will storespatial data. 3. You must add all logins that will access spatial data as users to the sde database and grant them create table permission. These users must be able to write their logfiles into the sde database and select against the sde metadata. NOTE: The first time a user accesses spatial data managed by ArcSDE, they create two logfile tables in the sdedatabase. As long as these tables are not deleted, it is permissible to revoke their create table permission because they have created their logfile tables. Т.е. после первого логина у пользователя можно забрать права на create table в базе SDE. 4. Any user that will own (create) data in any database through the ArcSDE applicationmust have create table and create procedure in that database. They must have create table to create the tables comprising an ArcSDE feature class and create procedure to create objectid generation stored procedures that accompany a feature class. 5. You must explicitly connect to a database to create data in it, drop a table from it, or alter a table within it. In other words, DDL statements can only be issued on data if you have explicitly connected to the database storing that data. If you dont specify a database name in your connection string, you connect, by default, to the sde database.We ignore a logins default database! Т.е. в коннекте нужно явно указать в какой базе будут храниться данные, или где они уже находятся 6. You can connect to any database and edit data to which you have permissions in any other database. 7. You should have a separate account for all your application users to reduce contention against the logfile tables in the sde database. The logfile tables are used to store selection IDs in programs such as ArcGIS or ArcView® DBAccess. If you have multiple users logging into ArcSDE as the same account and then selecting features in their client programs, theymay see unpredictable results or experience performance problems due to their sharing of a single logfile table. Желательно даже пользователей читающих данные подключать под своим логином 8. You cannot use a SQL Server reserved word for a login or user name. Examples of reserved words are Max, National, and Count. See the SQL Server books online (BOL)for a complete listing. Для того, чтобы убить уже созданные таблицы, у которых владелец dbo - подключитесь к SDE под логином sa. Тогда SDE будет считать, что всё в порядке. Там же где лежит команда Compress DataBase, есть команда "Deregister Data as Version". Она тупо убивает все таблицы АХХХ и ДХХХ. С этой командой в нормальной работе нужно быть очень осторожным - она убивает все изменения, которые остались после последнего Compress, т.е. не перенесены в основные таблицы. Но в Вашем случае я рекомендовал бы убить вообще все данные и загрузить их заново. Просто чтобы быть уверенным что всё нормально. При этом Вы можете загрузить сначала один из шейпов и потренироваться. А ещё лучше, пока не началась массовая работа, рекомендую подумать о переходе на 9-ю версию.  
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...