Блокировка недоступна для MYLIB.SASMACR.CATALOG - PullRequest
0 голосов
/ 05 июня 2018

У меня есть библиотека сохраненных скомпилированных макросов, то есть макросов, которые я определяю так:

options mstored sasmstore=MYLIB;

%macro say_something(txt) / STORE SOURCE;
%put &txt;
%mend;

Я часто получаю это сообщение об ошибке:

ПРИМЕЧАНИЕ.Системе SAS не удалось открыть библиотеку макросов, на которую ссылается SASMSTORE = libref MYLIB.

ОШИБКА: блокировка недоступна для MYLIB.SASMACR.CATALOG.

ОШИБКА: блокировка удерживается процессом 4653302.

ОШИБКА: будет скомпилирован фиктивный макрос.

Это происходит, когда я пытаюсь определить макрос (например, выполнить код выше), и я считаю, что это происходит в 2 обстоятельствах:

  1. Открыт другой сеанс, где макрос уже определен.

  2. Открыт другой сеанс, где в данный момент выполняется процесс, используя макрос измоя библиотека

(мне все еще не ясно)

Могу ли я избежать этого?

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

Во втором случае я не оченьпонять, почему произойдет блокировка, так как я едва использую макрос, ничего не записывая в библиотеку.Поскольку моей библиотекой будет пользоваться все больше людей, мне нужно будет найти «правильное время» для фиксации, что на самом деле не является чистым рабочим процессом, который я ищу.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

В некоторых случаях это может потребовать другого рабочего процесса, но, вероятно, это «правильный» рабочий процесс.

Особенно (2).Вы не должны писать в каталог макросов, из которого читают ваши коллеги.Скорее, вы должны писать в локальный каталог макросов, который вы затем периодически фиксируете в системе контроля версий (или, если вы делаете «ручную» систему контроля версий, которую вы периодически копируете в производственную папку).Это также позволяет провести надлежащее тестирование перед развертыванием.Здесь, вероятно, периодически означает «один раз в день» или меньше, в зависимости от вашего цикла разработки.

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

Это также в значительной степени предотвратит (1);если каждый сеанс SAS выполняет запись только в локальную копию (в этот сеанс или для пользователя), у вас не должно быть слишком много случаев, когда вы конфликтуете.Конечно, у вас может быть два экземпляра SAS, которые сами пишут в один и тот же файл, но вам следует просто этого избегать.

0 голосов
/ 05 июня 2018

Мое предложение было бы прекратить использовать сохраненные скомпилированные макросы и использовать вместо этого папку макроса autocall, используя опцию sasautos.Затем вы можете вносить изменения в любое время, не беспокоясь о блокировках.Любые сеансы, которые уже запущены, должны будут повторно загрузить макрос, чтобы выбрать новое определение.

...